diff options
Diffstat (limited to 'src/com/craftinginterpreters/lox/AstPrinter.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/AstPrinter.java | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/src/com/craftinginterpreters/lox/AstPrinter.java b/src/com/craftinginterpreters/lox/AstPrinter.java index 65f1916..4c120d3 100644 --- a/src/com/craftinginterpreters/lox/AstPrinter.java +++ b/src/com/craftinginterpreters/lox/AstPrinter.java @@ -11,13 +11,23 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { } @Override + public String visitCallExpr(Expr.Call expr) { + StringBuilder builder = new StringBuilder(); + + builder.append(print(expr.callee)); + builder.append(parenthesizeExpr("", expr.arguments)); + + return builder.toString(); + } + + @Override public String visitBinaryExpr(Expr.Binary expr) { - return parenthesize(expr.operator.lexeme, expr.left, expr.right); + return parenthesizeExpr(expr.operator.lexeme, expr.left, expr.right); } @Override public String visitGroupingExpr(Expr.Grouping expr) { - return parenthesize("group", expr.expression); + return parenthesizeExpr("group", expr.expression); } @Override @@ -29,12 +39,12 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { @Override public String visitLogicalExpr(Expr.Logical expr) { - return parenthesize(expr.operator.type.toString(), expr.left, expr.right); + return parenthesizeExpr(expr.operator.type.toString(), expr.left, expr.right); } @Override public String visitUnaryExpr(Expr.Unary expr) { - return parenthesize(expr.operator.lexeme, expr.right); + return parenthesizeExpr(expr.operator.lexeme, expr.right); } @Override @@ -44,12 +54,12 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { @Override public String visitAssignExpr(Expr.Assign expression) { - return parenthesize(expression.name.lexeme + " = ", expression.value); + return parenthesizeExpr(expression.name.lexeme + " = ", expression.value); } @Override public String visitVarStmt(Stmt.Var statement) { - return parenthesize("define " + statement.name.lexeme + " = ", statement.initializer); + return parenthesizeExpr("define " + statement.name.lexeme + " = ", statement.initializer); } @Override @@ -57,8 +67,8 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { StringBuilder builder = new StringBuilder(); builder.append('('); - builder.append(parenthesize("while", statement.condition)); - builder.append(parenthesize("do", statement.body)); + builder.append(parenthesizeExpr("while", statement.condition)); + builder.append(parenthesizeStmt("do", statement.body)); builder.append(')'); return builder.toString(); @@ -66,7 +76,7 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { @Override public String visitPrintStmt(Stmt.Print statement) { - return parenthesize("print", statement.expression); + return parenthesizeExpr("print", statement.expression); } @Override @@ -79,21 +89,25 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { StringBuilder builder = new StringBuilder(); builder.append("("); - builder.append(parenthesize("if", stmt.condition)); - builder.append(parenthesize("then", stmt.thenBranch)); + builder.append(parenthesizeExpr("if", stmt.condition)); + builder.append(parenthesizeStmt("then", stmt.thenBranch)); if (stmt.elseBranch != null) { - builder.append(parenthesize("else", stmt.elseBranch)); + builder.append(parenthesizeStmt("else", stmt.elseBranch)); } return builder.toString(); } @Override public String visitBlockStmt(Stmt.Block block) { - return parenthesize("", block.statements); + return parenthesizeStmt("", block.statements); + } + + private String parenthesizeExpr(String name, Expr... exprs) { + return parenthesizeExpr(name, exprs); } - private String parenthesize(String name, Expr... exprs) { + private String parenthesizeExpr(String name, List<Expr> exprs) { StringBuilder builder = new StringBuilder(); builder.append("(").append(name); @@ -106,7 +120,7 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { return builder.toString(); } - private String parenthesize(String name, List<Stmt> statements) { + private String parenthesizeStmt(String name, List<Stmt> statements) { StringBuilder builder = new StringBuilder(); builder.append("(").append(name); @@ -119,8 +133,8 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> { return builder.toString(); } - private String parenthesize(String name, Stmt... statements) { - return parenthesize(name, statements); + private String parenthesizeStmt(String name, Stmt... statements) { + return parenthesizeStmt(name, statements); } public static void main(String[] args) { |