From 68a2ebd34fc94488e89ffb82b359ec6e7e152ae9 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Thu, 8 Jul 2021 00:14:31 -0700 Subject: Restructure project to make room for clox --- src/com/craftinginterpreters/lox/AstPrinter.java | 147 ----------------------- 1 file changed, 147 deletions(-) delete mode 100644 src/com/craftinginterpreters/lox/AstPrinter.java (limited to 'src/com/craftinginterpreters/lox/AstPrinter.java') 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, Stmt.Visitor { - 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 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 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)); - } -} -- cgit v1.2.3-54-g00ecf