aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/Parser.java
diff options
context:
space:
mode:
authorGravatar Tom Willemse2020-11-25 23:10:58 -0800
committerGravatar Tom Willemse2020-11-25 23:10:58 -0800
commitca9fd3ae3a1ef5ca1fbe33a83abb12e656a2556f (patch)
tree77d16c7e6b87ed0f4472f6a421eeb9496d6f33bc /src/com/craftinginterpreters/lox/Parser.java
parent57e87978ef416ce2898a65a9b67e37be91263e67 (diff)
downloadcrafting-interpreters-ca9fd3ae3a1ef5ca1fbe33a83abb12e656a2556f.tar.gz
crafting-interpreters-ca9fd3ae3a1ef5ca1fbe33a83abb12e656a2556f.zip
Chapter 8: Add blocks and scopes
Diffstat (limited to 'src/com/craftinginterpreters/lox/Parser.java')
-rw-r--r--src/com/craftinginterpreters/lox/Parser.java13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/com/craftinginterpreters/lox/Parser.java b/src/com/craftinginterpreters/lox/Parser.java
index 9e76a54..f044feb 100644
--- a/src/com/craftinginterpreters/lox/Parser.java
+++ b/src/com/craftinginterpreters/lox/Parser.java
@@ -45,6 +45,8 @@ class Parser {
private Stmt statement() {
if (match(PRINT))
return printStatement();
+ if (match(LEFT_BRACE))
+ return new Stmt.Block(block());
return expressionStatement();
}
@@ -73,6 +75,17 @@ class Parser {
return new Stmt.Expression(expr);
}
+ private List<Stmt> block() {
+ List<Stmt> statements = new ArrayList<>();
+
+ while (!check(RIGHT_BRACE) && !isAtEnd()) {
+ statements.add(declaration());
+ }
+
+ consume(RIGHT_BRACE, "Expect '}' after block.");
+ return statements;
+ }
+
private Expr assignment() {
Expr expr = equality();