Esempio n. 1
0
        private List <PolishNotationToken> ReversePolishNotation(string s)
        {
            var result         = new List <PolishNotationToken>();
            var operatorsStack = new Stack <PolishNotationTokenOperator>();
            int i = 0;

            while (i < s.Length)
            {
                if (IsDigit(s[i]))
                {
                    int d = 0;
                    while (i < s.Length && IsDigit(s[i]))
                    {
                        d = d * 10 + CharToInt(s[i]);
                        i++;
                    }
                    result.Add(new PolishNotationTokenNumber(d));
                }
                else if (s[i] == ' ')
                {
                    while (i < s.Length && s[i] == ' ')
                    {
                        i++;
                    }
                }
                else if (PolishNotationTokenOperator.IsOperator(s[i]))
                {
                    var newOperator = new PolishNotationTokenOperator(s[i]);
                    while (operatorsStack.Count != 0 &&
                           operatorsStack.Peek().OperatorPrecedence >= newOperator.OperatorPrecedence)
                    {
                        result.Add(operatorsStack.Pop());
                    }
                    operatorsStack.Push(newOperator);
                    i++;
                }
            }
            while (operatorsStack.Count != 0)
            {
                result.Add(operatorsStack.Pop());
            }

            return(result);
        }
Esempio n. 2
0
        private int PerformOperation(int left, int right, PolishNotationTokenOperator op)
        {
            switch (op.Operator)
            {
            case '+':
                return(left + right);

            case '*':
                return(left * right);

            case '-':
                return(left - right);

            case '/':
                return(left / right);

            default:
                throw new NotImplementedException();
            }
        }