summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Translator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compiler/Translator.java')
-rw-r--r--src/Compiler/Translator.java42
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)+";");
}
}