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.java11
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.");