diff options
author | 2020-11-25 22:06:42 -0800 | |
---|---|---|
committer | 2020-11-25 22:06:42 -0800 | |
commit | 57e87978ef416ce2898a65a9b67e37be91263e67 (patch) | |
tree | ca08d1a2773986f96522bdcb22819755a14e3c9f /src/com/craftinginterpreters/lox/Parser.java | |
parent | ae33509615c4088ab50d7c76f9b1881d10f8354c (diff) | |
download | crafting-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.java | 20 |
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(); |