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