summaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/AstPrinter.java
diff options
context:
space:
mode:
authorGravatar Tom Willemse2020-11-18 23:30:46 -0800
committerGravatar Tom Willemse2020-11-18 23:30:46 -0800
commit899ecea236288b5ebc7795c204fdad59b3276002 (patch)
tree00d8cdfa98f265455060279e9c98c10279baf9a6 /src/com/craftinginterpreters/lox/AstPrinter.java
parent8019f6aa414f5126ebbcd3afc44bcebc16855d5f (diff)
downloadcrafting-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.java22
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();