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.java48
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) {