cobalt-lang/cobalt/lang/Stmt.java

60 lines
1.5 KiB
Java

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