summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Translator.java
diff options
context:
space:
mode:
authorAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-06 16:40:12 +0000
committerAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-06 16:40:12 +0000
commitd3046e3b1481cf6d190b8fcb814985e29852b5eb (patch)
tree0f0f966c017a09c74f032253bb6c4df400ee50df /src/Compiler/Translator.java
parent0c54d7f8cb4b17d80ed21f7a9916ad27a13e34ed (diff)
downloadesotericFORTRAN-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.java19
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":