public Evaluator(String expression) { Stack<Expression> expressionStack = new Stack<Expression>(); foreach (String token in expression.Split(new string[] {" "}, StringSplitOptions.None)) { if (token.Equals("+")) { Expression subExpression = new Plus(expressionStack.Pop(), expressionStack.Pop()); expressionStack.Push( subExpression ); } else if (token.Equals("-")) { // it's necessary remove first the right operand from the stack Expression right = expressionStack.Pop(); // ..and after the left one Expression left = expressionStack.Pop(); Expression subExpression = new Minus(left, right); expressionStack.Push(subExpression); } else expressionStack.Push(new Variable(token)); } syntaxTree = expressionStack.Pop(); }
public Minus(Expression left, Expression right) { leftOperand = left; rightOperand = right; }