/* Abstract syntax trees for online calculator For the online calculator program, writing a tree structure may be redundant, but it illustrates the general technique */ interface Exp // interface for all expressions { public double eval(); } class dlit implements Exp // class for simple double expressions { double value; public dlit(double x) {value=x;} public double eval() { return value; } } class opexp // superclass for all binary operator expressions { Exp left, right; // left and right subtrees public opexp(Exp l, Exp r) {left=l; right=r;} } class plusexp extends opexp implements Exp { public plusexp(Exp l, Exp r) { super(l,r); } public double eval() { return left.eval() + right.eval(); } } class minusexp extends opexp implements Exp { public minusexp(Exp l, Exp r) { super(l,r); } public double eval() { return left.eval() - right.eval(); } } class multexp extends opexp implements Exp { public multexp(Exp l, Exp r) { super(l,r); } public double eval() { return left.eval() * right.eval(); } } class divexp extends opexp implements Exp { public divexp(Exp l, Exp r) { super(l,r); } public double eval() { return left.eval() / right.eval(); } } class negexp implements Exp // negative values { Exp sub; // subexpression public negexp(Exp s) { sub=s; } public double eval() { return -1 * sub.eval(); } }