public RPNExpression Parse(string text) { Stack <RPNExpression> stack = new Stack <RPNExpression>(); string[] words = text.Split(' '); foreach (string word in words) { RPNExpression lhs = null, rhs = null; switch (word) { case "+": rhs = stack.Pop(); lhs = stack.Pop(); stack.Push(new Add(lhs, rhs)); break; case "-": rhs = stack.Pop(); lhs = stack.Pop(); stack.Push(new Subtract(lhs, rhs)); break; case "*": rhs = stack.Pop(); lhs = stack.Pop(); stack.Push(new Multiply(lhs, rhs)); break; case "/": rhs = stack.Pop(); lhs = stack.Pop(); stack.Push(new Multiply(lhs, rhs)); break; default: int number = int.Parse(word); stack.Push(new Number(number)); break; } } return(stack.Pop()); }
public Divide(RPNExpression lhs, RPNExpression rhs) { _lhs = lhs; _rhs = rhs; }
public Add(RPNExpression lhs, RPNExpression rhs) { _lhs = lhs; _rhs = rhs; }
public Subtract(RPNExpression lhs, RPNExpression rhs) { _lhs = lhs; _rhs = rhs; }
public Multiply(RPNExpression lhs, RPNExpression rhs) { _lhs = lhs; _rhs = rhs; }