summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Translator.java
diff options
context:
space:
mode:
authorAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-17 03:03:00 +0000
committerAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-17 03:03:00 +0000
commit286e177e603d57d445393a0f4899bf7a17a4c31d (patch)
treef140d65931ee648a77c806380be1e39e27440caf /src/Compiler/Translator.java
parentb51dfd0763e27b01e73803b07c7994a6fd835bef (diff)
downloadesotericFORTRAN-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.java35
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)+";");