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.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/com/craftinginterpreters/lox/AstPrinter.java b/src/com/craftinginterpreters/lox/AstPrinter.java
index d5163df..8f7be78 100644
--- a/src/com/craftinginterpreters/lox/AstPrinter.java
+++ b/src/com/craftinginterpreters/lox/AstPrinter.java
@@ -28,6 +28,11 @@ 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);
+ }
+
+ @Override
public String visitUnaryExpr(Expr.Unary expr) {
return parenthesize(expr.operator.lexeme, expr.right);
}
@@ -58,6 +63,20 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> {
}
@Override
+ public String visitIfStmt(Stmt.If stmt) {
+ StringBuilder builder = new StringBuilder();
+
+ builder.append("(");
+ builder.append(parenthesize("if", stmt.condition));
+ builder.append(parenthesize("then", stmt.thenBranch));
+
+ if (stmt.elseBranch != null) {
+ builder.append(parenthesize("else", stmt.elseBranch));
+ }
+ return builder.toString();
+ }
+
+ @Override
public String visitBlockStmt(Stmt.Block block) {
return parenthesize("", block.statements);
}
@@ -88,6 +107,10 @@ class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> {
return builder.toString();
}
+ private String parenthesize(String name, Stmt... statements) {
+ return parenthesize(name, statements);
+ }
+
public static void main(String[] args) {
Expr expression = new Expr.Binary(
new Expr.Unary(new Token(TokenType.MINUS, "-", null, 1), new Expr.Literal(123)),