/* Expression tree, second version will make more aggressive use of inheritance. That is, it tries to make maximum use of oop. */ using System; public interface expr // abstract interface for the expression class { int eval(); void print(); } class intnode : expr // integer expreesion { int val; public intnode(int v) {val = v; } public int eval() { return val; } public void print() { Console.Write(val); } } // intnode class plusnode : expr // + operator expression { expr left, right; // type of subtrees is "expr", not "node"! public plusnode(expr l, expr r) { left=l; right=r; } public int eval() { return left.eval() + right.eval(); } public void print() { Console.Write("(+ "); left.print(); Console.Write(" "); right.print(); Console.Write(")"); } } // plusnode class timesnode : expr // * operator expression { expr left, right; // type of subtrees is "expr", not "node"! public timesnode(expr l, expr r) { left=l; right=r; } public int eval() { return left.eval() * right.eval(); } public void print() { Console.Write("(* "); left.print(); Console.Write(" "); right.print(); Console.Write(")"); } } // timesnode