summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Parser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compiler/Parser.java')
-rw-r--r--src/Compiler/Parser.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Compiler/Parser.java b/src/Compiler/Parser.java
index 4339fd4..412289a 100644
--- a/src/Compiler/Parser.java
+++ b/src/Compiler/Parser.java
@@ -41,11 +41,39 @@ public class Parser {
if (matchAndAdvance(TokenType.PRINT)){
Expression expression = expression();
return new Statement.PrintStatement(expression);
+ }else if (matchAndAdvance(TokenType.IF)){
+ Statement statement = ifStatement();
+ return statement;
}
return expressionStatement();
}
+ //Could be cleaned up to handle else statements better
+ private Statement ifStatement(){
+ Expression condition = expression();
+ if(matchOrError(TokenType.THEN, "then expected after if statement")){
+ List<Statement> statements = new ArrayList<>();
+ List<Statement> elseStatements = new ArrayList<>();
+ while(!matchAndAdvance(TokenType.ENDIF)&&!checkToken(TokenType.ELSE)){
+ if(matchAndAdvance(TokenType.EOF)){
+ throw error("endif missing");
+ }
+ statements.add(declaration());
+ }
+ if(matchAndAdvance(TokenType.ELSE)){
+ while(!matchAndAdvance(TokenType.ENDIF)){
+ if(matchAndAdvance(TokenType.EOF)){
+ throw error("endif missing");
+ }
+ elseStatements.add(declaration());
+ }
+ }
+ Statement ifstatement = new Statement.IfStatement(condition, statements,elseStatements);
+ return ifstatement;
+ }
+ return null;
+ }
private Statement expressionStatement(){
Expression expression = assignment();