diff options
author | jwansek <eddie.atten.ea29@gmail.com> | 2021-11-22 18:46:42 +0000 |
---|---|---|
committer | jwansek <eddie.atten.ea29@gmail.com> | 2021-11-22 18:46:42 +0000 |
commit | de5022e778c12a8b91b905473f2f74bf7172eac3 (patch) | |
tree | 4f16f1cb0b6b75c0e8975bb77f432071684e57ed /src/Compiler/Translator.java | |
parent | 6557b7b080abab676cc15774bb4b4428e776cd03 (diff) | |
parent | 424ac34886895756525fbf5ddd704976e2e7d7dc (diff) | |
download | esotericFORTRAN-de5022e778c12a8b91b905473f2f74bf7172eac3.tar.gz esotericFORTRAN-de5022e778c12a8b91b905473f2f74bf7172eac3.zip |
Merge branch 'main' of https://github.com/AlfieEagleton/EsotericProject into argparse
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)+";"); } } |