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