// expr-eval-tree.java: java code for abstract parse // tree with evaluation // Modern Compiler Implementation in Java, p. 92 public abstract class Exp { public abstract int eval(); } public class PlusExp extends Exp { private Exp e1, e2; public PlusExp(Exp a1, Exp a2) { e1 = a1; e2 = a2; } public int eval() { return e1.eval() + e2.eval(); } } public class MinusExp extends Exp { private Exp e1, e2; public MinusExp(Exp a1, Exp a2) { e1 = a1; e2 = a2; } public int eval() { return e1.eval() - e2.eval(); } } public class TimesExp extends Exp { private Exp e1, e2; public TimesExp(Exp a1, Exp a2) { e1 = a1; e2 = a2; } public int eval() { return e1.eval() * e2.eval(); } } public class DivideExp extends Exp { private Exp e1, e2; public DivideExp(Exp a1, Exp a2) { e1 = a1; e2 = a2; } public int eval() { return e1.eval() / e2.eval(); } } public class Identifier extends Exp { private String name; public Identifier(String n) { name = n; } public int eval() { return lookup(name); } } public class IntegerLiteral extends Exp { private String val; public IntegerLiteral(String v) { val = v; } public int eval() { return Integer.parseInt(val); } }