diff options
author | Tom Willemse | 2021-01-18 17:42:02 -0800 |
---|---|---|
committer | Tom Willemse | 2021-01-18 17:42:02 -0800 |
commit | 80394e184274eb8ec3ce03cd901e5c817ec82e2a (patch) | |
tree | 67c0b023af49684ef79c1428c1b6fc9618f159c4 /src/com/craftinginterpreters/lox/Parser.java | |
parent | 613c2388bedd7a9ad98587877d9f15c7dc99bc84 (diff) | |
download | crafting-interpreters-80394e184274eb8ec3ce03cd901e5c817ec82e2a.tar.gz crafting-interpreters-80394e184274eb8ec3ce03cd901e5c817ec82e2a.zip |
Add break statementchapter-9-challenges
Diffstat (limited to 'src/com/craftinginterpreters/lox/Parser.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/Parser.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/com/craftinginterpreters/lox/Parser.java b/src/com/craftinginterpreters/lox/Parser.java index 7d7b27a..786d317 100644 --- a/src/com/craftinginterpreters/lox/Parser.java +++ b/src/com/craftinginterpreters/lox/Parser.java @@ -44,6 +44,8 @@ class Parser { } private Stmt statement() { + if (match(BREAK)) + return breakStatement(); if (match(FOR)) return forStatement(); if (match(IF)) @@ -84,13 +86,11 @@ class Parser { Stmt body = statement(); if (increment != null) { - body = new Stmt.Block( - Arrays.asList( - body, - new Stmt.Expression(increment))); + body = new Stmt.Block(Arrays.asList(body, new Stmt.Expression(increment))); } - if (condition == null) condition = new Expr.Literal(true); + if (condition == null) + condition = new Expr.Literal(true); body = new Stmt.While(condition, body); if (initializer != null) { @@ -100,6 +100,11 @@ class Parser { return body; } + private Stmt breakStatement() { + consume(SEMICOLON, "Expect ';' after break statement."); + return new Stmt.Break(); + } + private Stmt ifStatement() { consume(LEFT_PAREN, "Expect '(' after 'if'."); Expr condition = expression(); |