diff options
author | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-17 03:03:00 +0000 |
---|---|---|
committer | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-11-17 03:03:00 +0000 |
commit | 286e177e603d57d445393a0f4899bf7a17a4c31d (patch) | |
tree | f140d65931ee648a77c806380be1e39e27440caf /src/Compiler/Translator.java | |
parent | b51dfd0763e27b01e73803b07c7994a6fd835bef (diff) | |
download | esotericFORTRAN-286e177e603d57d445393a0f4899bf7a17a4c31d.tar.gz esotericFORTRAN-286e177e603d57d445393a0f4899bf7a17a4c31d.zip |
Added Do statements and code blocks
Diffstat (limited to 'src/Compiler/Translator.java')
-rw-r--r-- | src/Compiler/Translator.java | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/Compiler/Translator.java b/src/Compiler/Translator.java index d343b80..4c5da89 100644 --- a/src/Compiler/Translator.java +++ b/src/Compiler/Translator.java @@ -44,12 +44,18 @@ public class Translator{ case "stringDec": evalStringDeclaration((StringDeclaration)statement); break; + case "block": + evalBlockStatement((BlockStatement)statement); + break; case "print": evalPrintStatement((PrintStatement)statement); break; case "ifStmt": evalIfStatement((IfStatement)statement); break; + case "doStmt": + evalDoStatement((DoStatement)statement); + break; } } private void evalExpressionStatement(ExpressionStatement stmt){ @@ -72,6 +78,12 @@ public class Translator{ } } + private void evalBlockStatement(BlockStatement block){ + for(Statement stmt:block.statements){ + evaluateStatement(stmt); + } + } + private void evalPrintStatement(PrintStatement print){ String types=""; String values=""; @@ -104,16 +116,24 @@ public class Translator{ private void evalIfStatement(IfStatement ifstatement){ CCode.add("if("+evaluateExpression(ifstatement.condition)+"){"); - for(Statement s:ifstatement.statements) { - evaluateStatement(s); - } - if(ifstatement.elseStatements.size()>0){ + evaluateStatement(ifstatement.ifBlock); + if(!(ifstatement.elseBlock==null)){ CCode.add("}"); CCode.add("else {"); - for(Statement s:ifstatement.elseStatements) { - evaluateStatement(s); - } + evaluateStatement(ifstatement.elseBlock); + } + CCode.add("}"); + } + + private void evalDoStatement(DoStatement dostatement){ + String start = evaluateExpression(dostatement.variable)+"="+evaluateExpression(dostatement.start); + String stop = evaluateExpression(dostatement.variable)+"<="+evaluateExpression(dostatement.stop); + String step = evaluateExpression(dostatement.variable)+"++"; + if(!(dostatement.step==null)){ + step = evaluateExpression(dostatement.variable)+"+="+evaluateExpression(dostatement.step); } + CCode.add("for("+start+";"+stop+";"+step+"){"); + evaluateStatement(dostatement.codeBlock); CCode.add("}"); } @@ -171,6 +191,7 @@ public class Translator{ if(((Expression.Literal)expr.value).type.equals("string")){ CCode.add("strcpy("+expr.name.text+","+evaluateExpression(expr.value)+");"); } + CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); } else{ CCode.add(expr.name.text+"="+evaluateExpression(expr.value)+";"); |