diff options
Diffstat (limited to 'src/Compiler/Translator.java')
-rw-r--r-- | src/Compiler/Translator.java | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/src/Compiler/Translator.java b/src/Compiler/Translator.java index ee43905..c40c6b5 100644 --- a/src/Compiler/Translator.java +++ b/src/Compiler/Translator.java @@ -104,7 +104,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"; @@ -153,6 +153,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": @@ -182,8 +184,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; } @@ -195,18 +216,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)+";"); } } |