From ca9fd3ae3a1ef5ca1fbe33a83abb12e656a2556f Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Wed, 25 Nov 2020 23:10:58 -0800 Subject: Chapter 8: Add blocks and scopes --- src/com/craftinginterpreters/lox/AstPrinter.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/com/craftinginterpreters/lox/AstPrinter.java') 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, Stmt.Visitor { 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, Stmt.Visitor { return builder.toString(); } + private String parenthesize(String name, List 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)), -- cgit v1.2.3-54-g00ecf