60 lines
1.5 KiB
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);
|
|
} |