summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Translator.java
diff options
context:
space:
mode:
authorAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-07 01:23:19 +0000
committerAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-07 01:23:19 +0000
commitf8b888716211b78900db62ede497fa4ac2100c00 (patch)
tree3ea66c732de6abb95b10e708d0ab33651cb6b327 /src/Compiler/Translator.java
parentd3046e3b1481cf6d190b8fcb814985e29852b5eb (diff)
downloadesotericFORTRAN-f8b888716211b78900db62ede497fa4ac2100c00.tar.gz
esotericFORTRAN-f8b888716211b78900db62ede497fa4ac2100c00.zip
Basic floating point support and small improvements to error handing
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{
}
+
}