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 c427bc4..528326c 100644
--- a/src/com/craftinginterpreters/lox/Parser.java
+++ b/src/com/craftinginterpreters/lox/Parser.java
@@ -52,6 +52,8 @@ class Parser {
return ifStatement();
if (match(PRINT))
return printStatement();
+ if (match(RETURN))
+ return returnStatement();
if (match(WHILE))
return whileStatement();
if (match(LEFT_BRACE))
@@ -120,6 +122,17 @@ class Parser {
return new Stmt.Print(value);
}
+ private Stmt returnStatement() {
+ Token keyword = previous();
+ Expr value = null;
+ if (!check(SEMICOLON)) {
+ value = expression();
+ }
+
+ consume(SEMICOLON, "Expect ';' after return value.");
+ return new Stmt.Return(keyword, value);
+ }
+
private Stmt varDeclaration() {
Token name = consume(IDENTIFIER, "Expect variable name.");