diff options
author | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-06 16:40:12 +0000 |
---|---|---|
committer | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-06 16:40:12 +0000 |
commit | d3046e3b1481cf6d190b8fcb814985e29852b5eb (patch) | |
tree | 0f0f966c017a09c74f032253bb6c4df400ee50df /src/Compiler/Translator.java | |
parent | 0c54d7f8cb4b17d80ed21f7a9916ad27a13e34ed (diff) | |
download | esotericFORTRAN-d3046e3b1481cf6d190b8fcb814985e29852b5eb.tar.gz esotericFORTRAN-d3046e3b1481cf6d190b8fcb814985e29852b5eb.zip |
Working if/else statements (very basic and unstable)
Diffstat (limited to 'src/Compiler/Translator.java')
-rw-r--r-- | src/Compiler/Translator.java | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Compiler/Translator.java b/src/Compiler/Translator.java index b62df63..5848389 100644 --- a/src/Compiler/Translator.java +++ b/src/Compiler/Translator.java @@ -43,6 +43,9 @@ public class Translator{ case "print": evalPrintStatement((PrintStatement)statement); break; + case "ifStmt": + evalIfStatement((IfStatement)statement); + break; } } private void evalExpressionStatement(ExpressionStatement stmt){ @@ -58,6 +61,22 @@ public class Translator{ CCode.add("printf(\"%d\","+evaluateExpression(print.expr)+");"); } + private void evalIfStatement(IfStatement ifstatement){ + + CCode.add("if("+evaluateExpression(ifstatement.condition)+"){"); + for(Statement s:ifstatement.statements) { + evaluateStatement(s); + } + if(ifstatement.elseStatements.size()>0){ + CCode.add("}"); + CCode.add("else {"); + for(Statement s:ifstatement.elseStatements) { + evaluateStatement(s); + } + } + CCode.add("}"); + } + private String evaluateExpression(Expression expression){ switch(expression.getExpressionType()){ case "binary": |