summaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/Parser.java
diff options
context:
space:
mode:
authorGravatar Tom Willemse2021-01-18 17:42:02 -0800
committerGravatar Tom Willemse2021-01-18 17:42:02 -0800
commit80394e184274eb8ec3ce03cd901e5c817ec82e2a (patch)
tree67c0b023af49684ef79c1428c1b6fc9618f159c4 /src/com/craftinginterpreters/lox/Parser.java
parent613c2388bedd7a9ad98587877d9f15c7dc99bc84 (diff)
downloadcrafting-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.java15
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();