diff options
Diffstat (limited to 'src/Compiler/Translator.java')
-rw-r--r-- | src/Compiler/Translator.java | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/Compiler/Translator.java b/src/Compiler/Translator.java index 5848389..716bafd 100644 --- a/src/Compiler/Translator.java +++ b/src/Compiler/Translator.java @@ -53,12 +53,30 @@ public class Translator{ } private void evalVariableDeclaration(VariableDeclaration vardec){ - environment.defineVariable(vardec.name.text, null); - CCode.add("int "+vardec.name.text+";"); + environment.defineVariable(vardec.name.text, vardec.type); + if(vardec.type.equals("int")){ + CCode.add("int "+vardec.name.text+";"); + } else if(vardec.type.equals("real")){ + CCode.add("float "+vardec.name.text+";"); + } } private void evalPrintStatement(PrintStatement print){ - CCode.add("printf(\"%d\","+evaluateExpression(print.expr)+");"); + if(print.expr instanceof Expression.Literal){ + if (((Expression.Literal)print.expr).type.equals("int")){ + CCode.add("printf(\"%d\","+evaluateExpression(print.expr)+");"); + } else if (((Expression.Literal)print.expr).type.equals("double")){ + CCode.add("printf(\"%f\","+evaluateExpression(print.expr)+");"); + } + } else if (print.expr instanceof Expression.Variable){ + Object varValue = environment.getVariable((((Expression.Variable)print.expr).name).text); + if (varValue.equals("int")){ + CCode.add("printf(\"%d\","+evaluateExpression(print.expr)+");"); + } else if (varValue.equals("real")){ + CCode.add("printf(\"%f\","+evaluateExpression(print.expr)+");"); + } + } + } private void evalIfStatement(IfStatement ifstatement){ @@ -127,8 +145,6 @@ public class Translator{ } private void evaluateAssignmentExpression(AssignmentExpression expr){ - Object assignedValue = evaluateExpression(expr.value); - environment.assignVariable(expr.name.text, assignedValue); CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); } @@ -137,6 +153,7 @@ public class Translator{ } + } |