diff options
author | Tom Willemse | 2020-11-18 23:30:46 -0800 |
---|---|---|
committer | Tom Willemse | 2020-11-18 23:30:46 -0800 |
commit | 899ecea236288b5ebc7795c204fdad59b3276002 (patch) | |
tree | 00d8cdfa98f265455060279e9c98c10279baf9a6 /src/com/craftinginterpreters/lox/AstPrinter.java | |
parent | 8019f6aa414f5126ebbcd3afc44bcebc16855d5f (diff) | |
download | crafting-interpreters-899ecea236288b5ebc7795c204fdad59b3276002.tar.gz crafting-interpreters-899ecea236288b5ebc7795c204fdad59b3276002.zip |
Chapter 8: Add variable declarations
Diffstat (limited to 'src/com/craftinginterpreters/lox/AstPrinter.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/AstPrinter.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/com/craftinginterpreters/lox/AstPrinter.java b/src/com/craftinginterpreters/lox/AstPrinter.java index cb494f0..82294c6 100644 --- a/src/com/craftinginterpreters/lox/AstPrinter.java +++ b/src/com/craftinginterpreters/lox/AstPrinter.java @@ -3,7 +3,7 @@ package com.craftinginterpreters.lox; /** * AstPrinter */ -class AstPrinter implements Expr.Visitor<String> { +class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { String print(Expr expr) { return expr.accept(this); } @@ -30,6 +30,26 @@ class AstPrinter implements Expr.Visitor<String> { return parenthesize(expr.operator.lexeme, expr.right); } + @Override + public String visitVariableExpr(Expr.Variable expr) { + return expr.name.lexeme; + } + + @Override + public String visitVarStmt(Stmt.Var statement) { + return parenthesize("define " + statement.name.lexeme + " = ", statement.initializer); + } + + @Override + public String visitPrintStmt(Stmt.Print statement) { + return parenthesize("print", statement.expression); + } + + @Override + public String visitExpressionStmt(Stmt.Expression expression) { + return expression.expression.accept(this); + } + private String parenthesize(String name, Expr... exprs) { StringBuilder builder = new StringBuilder(); |