diff options
author | Tom Willemse | 2021-01-14 23:53:47 -0800 |
---|---|---|
committer | Tom Willemse | 2021-01-14 23:53:47 -0800 |
commit | c62b73a2477b9fa625285e9c2ca1e51c2bcb8024 (patch) | |
tree | d8ea9b22fcdc28d34a1aec9f40a87ddd2dfd9660 /src/com/craftinginterpreters/lox/AstPrinter.java | |
parent | ca9fd3ae3a1ef5ca1fbe33a83abb12e656a2556f (diff) | |
download | crafting-interpreters-c62b73a2477b9fa625285e9c2ca1e51c2bcb8024.tar.gz crafting-interpreters-c62b73a2477b9fa625285e9c2ca1e51c2bcb8024.zip |
Add branching primitives
Diffstat (limited to 'src/com/craftinginterpreters/lox/AstPrinter.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/AstPrinter.java | 23 |
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)), |