summaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/AstPrinter.java
diff options
context:
space:
mode:
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();