diff options
author | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-07 01:23:19 +0000 |
---|---|---|
committer | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-07 01:23:19 +0000 |
commit | f8b888716211b78900db62ede497fa4ac2100c00 (patch) | |
tree | 3ea66c732de6abb95b10e708d0ab33651cb6b327 /src/Compiler/Translator.java | |
parent | d3046e3b1481cf6d190b8fcb814985e29852b5eb (diff) | |
download | esotericFORTRAN-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.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{ } + } |