// 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); }