aboutsummaryrefslogtreecommitdiffstats
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.java20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/com/craftinginterpreters/lox/AstPrinter.java b/src/com/craftinginterpreters/lox/AstPrinter.java
index 58376cb..d5163df 100644
--- a/src/com/craftinginterpreters/lox/AstPrinter.java
+++ b/src/com/craftinginterpreters/lox/AstPrinter.java
@@ -1,5 +1,7 @@
package com.craftinginterpreters.lox;
+import java.util.List;
+
/**
* AstPrinter
*/
@@ -55,6 +57,11 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> {
return expression.expression.accept(this);
}
+ @Override
+ public String visitBlockStmt(Stmt.Block block) {
+ return parenthesize("", block.statements);
+ }
+
private String parenthesize(String name, Expr... exprs) {
StringBuilder builder = new StringBuilder();
@@ -68,6 +75,19 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> {
return builder.toString();
}
+ private String parenthesize(String name, List<Stmt> statements) {
+ StringBuilder builder = new StringBuilder();
+
+ builder.append("(").append(name);
+ for (Stmt statement : statements) {
+ builder.append(" ");
+ builder.append(statement.accept(this));
+ }
+ builder.append(")");
+
+ return builder.toString();
+ }
+
public static void main(String[] args) {
Expr expression = new Expr.Binary(
new Expr.Unary(new Token(TokenType.MINUS, "-", null, 1), new Expr.Literal(123)),