From 8e368b67de60442c483bd9def7036e52562ccc81 Mon Sep 17 00:00:00 2001 From: AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:30:45 +0000 Subject: Improved error handing and added logical statements --- src/Compiler/Translator.java | 49 ++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-) (limited to 'src/Compiler/Translator.java') diff --git a/src/Compiler/Translator.java b/src/Compiler/Translator.java index 50430f2..e259c70 100644 --- a/src/Compiler/Translator.java +++ b/src/Compiler/Translator.java @@ -26,10 +26,9 @@ public class Translator{ } CCode.add("}"); - for(String t:CCode){ - System.out.println(t); - } - System.out.println(""); + //for(String t:CCode){ + // System.out.println(t); + //} return CCode; } @@ -102,7 +101,7 @@ public class Translator{ exprType=((Expression.Literal)expr).type; } else if (expr instanceof Expression.Variable){ - exprType=(String)environment.getVariable((((Expression.Variable)expr).name).text); + exprType=(String)environment.getVariable((((Expression.Variable)expr).name)); } if (exprType.equals("int")){ types+="%d"; @@ -151,6 +150,8 @@ public class Translator{ switch(expression.getExpressionType()){ case "binary": return evaluateBinaryExpression((Binary)expression); + case "singular": + return evaluateSingularExpression((Singular)expression); case "literal": return evaluateLiteralExpression((Literal)expression); case "bracket": @@ -180,8 +181,27 @@ public class Translator{ return evaluateExpression(expr.left)+">"+evaluateExpression(expr.right); case LESS: return evaluateExpression(expr.left)+"<"+evaluateExpression(expr.right); + case GREATER_EQUAL: + return evaluateExpression(expr.left)+">="+evaluateExpression(expr.right); + case LESS_EQUAL: + return evaluateExpression(expr.left)+"<="+evaluateExpression(expr.right); case EQUALITY: return evaluateExpression(expr.left)+"=="+evaluateExpression(expr.right); + case AND: + return evaluateExpression(expr.left)+"&&"+evaluateExpression(expr.right); + case OR: + return evaluateExpression(expr.left)+"||"+evaluateExpression(expr.right); + + default: + break; + } + return null; + } + + private String evaluateSingularExpression(Singular expr){ + switch (expr.op.type){ + case NOT: + return "!"+evaluateExpression(expr.right); default: break; } @@ -193,18 +213,21 @@ public class Translator{ } private String evaluateBracketedExpression(BracketedExpression expr){ - return evaluateExpression(expr.expr); + return "("+evaluateExpression(expr.expr)+")"; } private void evaluateAssignmentExpression(AssignmentExpression expr){ - if(expr.value instanceof Expression.Literal){ - if(((Expression.Literal)expr.value).type.equals("string")){ - CCode.add("strcpy("+expr.name.text+","+evaluateExpression(expr.value)+");"); + if(environment.checkVariable(expr.name)){ + if(expr.value instanceof Expression.Literal){ + if(((Expression.Literal)expr.value).type.equals("string")){ + CCode.add("strcpy("+expr.name.text+","+evaluateExpression(expr.value)+");"); + }else{ + CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); + } + } + else{ + CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); } - CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); - } - else{ - CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); } } -- cgit v1.2.3