package cobalt.lang; import java.util.List; abstract class Stmt { interface Visitor { //R visitBlockStmt(Block stmt); R visitExpressionStmt(Expression stmt); R visitPrintStmt(Print stmt); //R visitVarStmt(Var stmt); } // static class Block extends Stmt { // Block(List statements) { // this.statements = statements; // } // R accept(Visitor visitor) { // return visitor.visitBlockStmt(this); // } // final List statements; // } static class Expression extends Stmt { Expression(Expr expression) { this.expression = expression; } R accept(Visitor visitor) { return visitor.visitExpressionStmt(this); } final Expr expression; } static class Print extends Stmt { Print(Expr expression) { this.expression = expression; } R accept(Visitor visitor) { return visitor.visitPrintStmt(this); } final Expr expression; } // static class Var extends Stmt { // Var(Token name, Expr initializer) { // this.name = name; // this.initializer = initializer; // } // R accept(Visitor visitor) { // return visitor.visitVarStmt(this); // } // final Token name; // final Expr initializer; // } abstract R accept(Visitor visitor); }