diff options
author | Tom Willemse | 2020-11-18 18:18:25 -0800 |
---|---|---|
committer | Tom Willemse | 2020-11-18 18:18:25 -0800 |
commit | 8019f6aa414f5126ebbcd3afc44bcebc16855d5f (patch) | |
tree | 10e76f1ddcf8013f243f249fdbdf47c9568f4558 /src/com/craftinginterpreters/lox/Parser.java | |
parent | 055b5257fb6df2a0893c43ed342befd83d20af94 (diff) | |
download | crafting-interpreters-8019f6aa414f5126ebbcd3afc44bcebc16855d5f.tar.gz crafting-interpreters-8019f6aa414f5126ebbcd3afc44bcebc16855d5f.zip |
Chapter 8: Add expression and print statements
Diffstat (limited to 'src/com/craftinginterpreters/lox/Parser.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/Parser.java | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/com/craftinginterpreters/lox/Parser.java b/src/com/craftinginterpreters/lox/Parser.java index c5e50e0..c68316f 100644 --- a/src/com/craftinginterpreters/lox/Parser.java +++ b/src/com/craftinginterpreters/lox/Parser.java @@ -2,6 +2,7 @@ package com.craftinginterpreters.lox; import static com.craftinginterpreters.lox.TokenType.*; +import java.util.ArrayList; import java.util.List; class Parser { @@ -15,18 +16,39 @@ class Parser { this.tokens = tokens; } - public Expr parse() { - try { - return expression(); - } catch (ParseError error) { - return null; + public List<Stmt> parse() { + List<Stmt> statements = new ArrayList<>(); + + while (!isAtEnd()) { + statements.add(statement()); } + + return statements; } private Expr expression() { return equality(); } + private Stmt statement() { + if (match(PRINT)) + return printStatement(); + + return expressionStatement(); + } + + private Stmt printStatement() { + Expr value = expression(); + consume(SEMICOLON, "Expect ';' after value."); + return new Stmt.Print(value); + } + + private Stmt expressionStatement() { + Expr expr = expression(); + consume(SEMICOLON, "Expect ';' after expression."); + return new Stmt.Expression(expr); + } + private Expr equality() { Expr expr = comparison(); |