aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/Parser.java
diff options
context:
space:
mode:
authorGravatar Tom Willemse2020-11-25 22:06:42 -0800
committerGravatar Tom Willemse2020-11-25 22:06:42 -0800
commit57e87978ef416ce2898a65a9b67e37be91263e67 (patch)
treeca08d1a2773986f96522bdcb22819755a14e3c9f /src/com/craftinginterpreters/lox/Parser.java
parentae33509615c4088ab50d7c76f9b1881d10f8354c (diff)
downloadcrafting-interpreters-57e87978ef416ce2898a65a9b67e37be91263e67.tar.gz
crafting-interpreters-57e87978ef416ce2898a65a9b67e37be91263e67.zip
Chapter 8: Add assignment
Diffstat (limited to 'src/com/craftinginterpreters/lox/Parser.java')
-rw-r--r--src/com/craftinginterpreters/lox/Parser.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/com/craftinginterpreters/lox/Parser.java b/src/com/craftinginterpreters/lox/Parser.java
index 9a9c0e6..9e76a54 100644
--- a/src/com/craftinginterpreters/lox/Parser.java
+++ b/src/com/craftinginterpreters/lox/Parser.java
@@ -27,7 +27,7 @@ class Parser {
}
private Expr expression() {
- return equality();
+ return assignment();
}
private Stmt declaration() {
@@ -73,6 +73,24 @@ class Parser {
return new Stmt.Expression(expr);
}
+ private Expr assignment() {
+ Expr expr = equality();
+
+ if (match(EQUAL)) {
+ Token equals = previous();
+ Expr value = assignment();
+
+ if (expr instanceof Expr.Variable) {
+ Token name = ((Expr.Variable) expr).name;
+ return new Expr.Assign(name, value);
+ }
+
+ error(equals, "Invalid assignment target.");
+ }
+
+ return expr;
+ }
+
private Expr equality() {
Expr expr = comparison();