diff options
Diffstat (limited to 'src/Compiler/Parser.java')
-rw-r--r-- | src/Compiler/Parser.java | 28 |
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(); |