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;
 }
예제 #5
0
 public Multiply(RPNExpression lhs, RPNExpression rhs)
 {
     _lhs = lhs;
     _rhs = rhs;
 }