aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/Parser.java
diff options
context:
space:
mode:
authorGravatar Tom Willemse2021-02-08 17:42:18 -0800
committerGravatar Tom Willemse2021-02-08 17:42:18 -0800
commit0dbf155da52c5db1cab2688b04c87386a55c5d5b (patch)
treec76c0bc5b4364b7740ae071ee4c1ee7ad9c196e8 /src/com/craftinginterpreters/lox/Parser.java
parent4a71c219b5fa8e9e28af43925284f429092ba68e (diff)
downloadcrafting-interpreters-0dbf155da52c5db1cab2688b04c87386a55c5d5b.tar.gz
crafting-interpreters-0dbf155da52c5db1cab2688b04c87386a55c5d5b.zip
Add return statement
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.");