diff options
author | Tom Willemse | 2021-01-16 22:16:31 -0800 |
---|---|---|
committer | Tom Willemse | 2021-01-16 22:16:31 -0800 |
commit | 3b9c44434e8bc395068eb8c3e319e384b66ed72e (patch) | |
tree | 929dd1c6151a606397a92836e01fb9f8e4bd715b /src/com/craftinginterpreters/lox/Parser.java | |
parent | c62b73a2477b9fa625285e9c2ca1e51c2bcb8024 (diff) | |
download | crafting-interpreters-3b9c44434e8bc395068eb8c3e319e384b66ed72e.tar.gz crafting-interpreters-3b9c44434e8bc395068eb8c3e319e384b66ed72e.zip |
Add while statement
Diffstat (limited to 'src/com/craftinginterpreters/lox/Parser.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/Parser.java | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/com/craftinginterpreters/lox/Parser.java b/src/com/craftinginterpreters/lox/Parser.java index 1643129..a85d70f 100644 --- a/src/com/craftinginterpreters/lox/Parser.java +++ b/src/com/craftinginterpreters/lox/Parser.java @@ -47,6 +47,8 @@ class Parser { return ifStatement(); if (match(PRINT)) return printStatement(); + if (match(WHILE)) + return whileStatement(); if (match(LEFT_BRACE)) return new Stmt.Block(block()); @@ -85,6 +87,15 @@ class Parser { return new Stmt.Var(name, initializer); } + private Stmt whileStatement() { + consume(LEFT_PAREN, "Expect '(' after 'while'."); + Expr condition = expression(); + consume(RIGHT_PAREN, "Expect ')' after condition."); + Stmt body = statement(); + + return new Stmt.While(condition, body); + } + private Stmt expressionStatement() { Expr expr = expression(); consume(SEMICOLON, "Expect ';' after expression."); |