예제 #1
0
        public static double EvaluateInfix(string infixString)
        {
            var resultStack  = new Stack <double>();
            var postfixQueue = ShuntingYard.GetPostfixQueue(infixString);

            while (postfixQueue.Any())
            {
                var currentToken = postfixQueue.Dequeue();

                if (Token.IsNumber(currentToken))
                {
                    resultStack.Push(double.Parse(currentToken));
                    continue;
                }

                if (Token.IsOperator(currentToken))
                {
                    var val1   = resultStack.Pop();
                    var val2   = resultStack.Pop();
                    var output = Token.Evaluate(val2, val1, currentToken);
                    resultStack.Push(output);
                    continue;
                }

                if (Token.IsFunction(currentToken))
                {
                    var value  = resultStack.Pop();
                    var result = Token.Evaluate(value, currentToken);
                    resultStack.Push(result);
                }
            }

            return(resultStack.Pop());
        }