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.java27
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{
}
+
}