public static void Main(string[] args) { var expr = new AddExpression { Left = new ValueExpression { Value = 3 }, Right = new MultiplyExpression { Left = new ValueExpression { Value = 2 }, Right = new ValueExpression { Value = 7 } } }; var printer = new Printer(); printer.Visit(expr); Console.WriteLine(); var evaluator = new Evaluator(); evaluator.Visit(expr); Console.WriteLine(evaluator.Result); }
protected override void Visit(AddExpression expr) { Console.Write("("); Visit(expr.Left); Console.Write(" + "); Visit(expr.Right); Console.Write(")"); }
protected override void Visit(AddExpression expr) { Visit(expr.Left); Visit(expr.Right); var right = Stack.Pop(); var left = Stack.Pop(); Stack.Push(left + right); }
protected abstract void Visit(AddExpression expr);