Пример #1
0
        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());
        }
Пример #2
0
 public Multiply(RpnExpression leftHandSubexpression, RpnExpression rightHandSubexpression)
 {
     this.leftHandSubexpression  = leftHandSubexpression;
     this.rightHandSubexpression = rightHandSubexpression;
 }
Пример #3
0
 public Divide(RpnExpression leftHandSubexpression, RpnExpression rightHandSubexpression)
 {
     this.leftHandSubexpression  = leftHandSubexpression;
     this.rightHandSubexpression = rightHandSubexpression;
 }
Пример #4
0
 public Substract(RpnExpression leftHandSubexpression, RpnExpression rightHandSubexpression)
 {
     this.leftHandSubexpression  = leftHandSubexpression;
     this.rightHandSubexpression = rightHandSubexpression;
 }