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.java147
1 files changed, 0 insertions, 147 deletions
diff --git a/src/com/craftinginterpreters/lox/AstPrinter.java b/src/com/craftinginterpreters/lox/AstPrinter.java
deleted file mode 100644
index 4c120d3..0000000
--- a/src/com/craftinginterpreters/lox/AstPrinter.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.craftinginterpreters.lox;
-
-import java.util.List;
-
-/**
- * AstPrinter
- */
-class AstPrinter implements Expr.Visitor<String>, Stmt.Visitor<String> {
- String print(Expr expr) {
- return expr.accept(this);
- }
-
- @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 parenthesizeExpr(expr.operator.lexeme, expr.left, expr.right);
- }
-
- @Override
- public String visitGroupingExpr(Expr.Grouping expr) {
- return parenthesizeExpr("group", expr.expression);
- }
-
- @Override
- public String visitLiteralExpr(Expr.Literal expr) {
- if (expr.value == null)
- return "nil";
- return expr.value.toString();
- }
-
- @Override
- public String visitLogicalExpr(Expr.Logical expr) {
- return parenthesizeExpr(expr.operator.type.toString(), expr.left, expr.right);
- }
-
- @Override
- public String visitUnaryExpr(Expr.Unary expr) {
- return parenthesizeExpr(expr.operator.lexeme, expr.right);
- }
-
- @Override
- public String visitVariableExpr(Expr.Variable expr) {
- return expr.name.lexeme;
- }
-
- @Override
- public String visitAssignExpr(Expr.Assign expression) {
- return parenthesizeExpr(expression.name.lexeme + " = ", expression.value);
- }
-
- @Override
- public String visitVarStmt(Stmt.Var statement) {
- return parenthesizeExpr("define " + statement.name.lexeme + " = ", statement.initializer);
- }
-
- @Override
- public String visitWhileStmt(Stmt.While statement) {
- StringBuilder builder = new StringBuilder();
-
- builder.append('(');
- builder.append(parenthesizeExpr("while", statement.condition));
- builder.append(parenthesizeStmt("do", statement.body));
- builder.append(')');
-
- return builder.toString();
- }
-
- @Override
- public String visitPrintStmt(Stmt.Print statement) {
- return parenthesizeExpr("print", statement.expression);
- }
-
- @Override
- public String visitExpressionStmt(Stmt.Expression expression) {
- return expression.expression.accept(this);
- }
-
- @Override
- public String visitIfStmt(Stmt.If stmt) {
- StringBuilder builder = new StringBuilder();
-
- builder.append("(");
- builder.append(parenthesizeExpr("if", stmt.condition));
- builder.append(parenthesizeStmt("then", stmt.thenBranch));
-
- if (stmt.elseBranch != null) {
- builder.append(parenthesizeStmt("else", stmt.elseBranch));
- }
- return builder.toString();
- }
-
- @Override
- public String visitBlockStmt(Stmt.Block block) {
- return parenthesizeStmt("", block.statements);
- }
-
- private String parenthesizeExpr(String name, Expr... exprs) {
- return parenthesizeExpr(name, exprs);
- }
-
- private String parenthesizeExpr(String name, List<Expr> exprs) {
- StringBuilder builder = new StringBuilder();
-
- builder.append("(").append(name);
- for (Expr expr : exprs) {
- builder.append(" ");
- builder.append(expr.accept(this));
- }
- builder.append(")");
-
- return builder.toString();
- }
-
- private String parenthesizeStmt(String name, List<Stmt> 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();
- }
-
- private String parenthesizeStmt(String name, Stmt... statements) {
- return parenthesizeStmt(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)),
- new Token(TokenType.STAR, "*", null, 1), new Expr.Grouping(new Expr.Literal(45.67)));
-
- System.out.println(new AstPrinter().print(expression));
- }
-}