From 8019f6aa414f5126ebbcd3afc44bcebc16855d5f Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Wed, 18 Nov 2020 18:18:25 -0800 Subject: Chapter 8: Add expression and print statements --- src/com/craftinginterpreters/lox/Parser.java | 32 +++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/com/craftinginterpreters/lox/Parser.java') 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 parse() { + List 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(); -- cgit v1.2.3-54-g00ecf