diff options
author | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-22 16:30:45 +0000 |
---|---|---|
committer | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-22 16:30:45 +0000 |
commit | 8e368b67de60442c483bd9def7036e52562ccc81 (patch) | |
tree | 947d775285ad2df464177df8ec9e1d63e99cae0d /src/Compiler/Translator.java | |
parent | ab5584190b83a8cda9cbb3469ce841dbaa3aa38a (diff) | |
download | esotericFORTRAN-8e368b67de60442c483bd9def7036e52562ccc81.tar.gz esotericFORTRAN-8e368b67de60442c483bd9def7036e52562ccc81.zip |
Improved error handing and added logical statements
Diffstat (limited to 'src/Compiler/Translator.java')
-rw-r--r-- | src/Compiler/Translator.java | 49 |
1 files changed, 36 insertions, 13 deletions
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)+";"); } } |