aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/Parser.java
diff options
context:
space:
mode:
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();