// Syntax.java
// created by dataGen
abstract class Stm {
public abstract A accept (StmVisitor v);
}
class CompoundStm extends Stm {
public Stm stm1;
public Stm stm2;
public CompoundStm (Stm stm1, Stm stm2) {
this.stm1 = stm1;
this.stm2 = stm2;
}
public A accept (StmVisitor v) {
return v.visit (this);
}
}
class AssignStm extends Stm {
public String id;
public Exp exp;
public AssignStm (String id, Exp exp) {
this.id = id;
this.exp = exp;
}
public A accept (StmVisitor v) {
return v.visit (this);
}
}
class PrintStm extends Stm {
public ExpList exps;
public PrintStm (ExpList exps) {
this.exps = exps;
}
public A accept (StmVisitor v) {
return v.visit (this);
}
}
interface StmVisitor {
public A visit (CompoundStm s);
public A visit (AssignStm s);
public A visit (PrintStm s);
}
abstract class Exp {
public abstract A accept (ExpVisitor v);
}
class IdExp extends Exp {
public String id;
public IdExp (String id) {
this.id = id;
}
public A accept (ExpVisitor v) {
return v.visit (this);
}
}
class NumExp extends Exp {
public int num;
public NumExp (int num) {
this.num = num;
}
public A accept (ExpVisitor v) {
return v.visit (this);
}
}
class OpExp extends Exp {
public Exp left;
public int op;
public Exp right;
public OpExp (Exp left, int op, Exp right) {
this.left = left;
this.op = op;
this.right = right;
}
public A accept (ExpVisitor v) {
return v.visit (this);
}
}
class EseqExp extends Exp {
public Stm stm;
public Exp exp;
public EseqExp (Stm stm, Exp exp) {
this.stm = stm;
this.exp = exp;
}
public A accept (ExpVisitor v) {
return v.visit (this);
}
}
interface ExpVisitor {
public A visit (IdExp e);
public A visit (NumExp e);
public A visit (OpExp e);
public A visit (EseqExp e);
}
abstract class ExpList {
public abstract A accept (ExpListVisitor v);
}
class PairExpList extends ExpList {
public Exp head;
public ExpList tail;
public PairExpList (Exp head, ExpList tail) {
this.head = head;
this.tail = tail;
}
public A accept (ExpListVisitor v) {
return v.visit (this);
}
}
class LastExpList extends ExpList {
public Exp head;
public LastExpList (Exp head) {
this.head = head;
}
public A accept (ExpListVisitor v) {
return v.visit (this);
}
}
interface ExpListVisitor {
public A visit (PairExpList e);
public A visit (LastExpList e);
}