Beispiel #1
0
        private string[] ToPolish()
        {
            var output = new string[_parsed.Length];
            int i = 0;
            var stack = new Stack<string>();
            foreach (var str in _parsed)
            {
                if (str == null)
                    break;
                double x;
                //почему-то дробные числа записанные через точку - не парсит
                //если писать через запятую - все в порядке
                if (double.TryParse(str, out x))
                {
                    output[i++] = str;
                }
                else
                {
                    if (str == "(")
                    {
                        stack.Push(str);
                    }
                    else
                        if (str == ")")
                        {
                            while (stack.Top() != "(")
                                output[i++] = stack.Pop();
                            stack.Pop();
                        }
                        else
                            if (str == "*" || str == "/" || str == "+" || str == "-" || str == "^")
                            {
                                while (!stack.Empty() && GetPriority(str) <= GetPriority(stack.Top()))
                                {
                                    output[i++] = stack.Pop();
                                }
                                stack.Push(str);
                            }
                }
            }
            while (!stack.Empty())
            {
                output[i++] = stack.Pop();
            }

            return output;
        }