Ejemplo n.º 1
0
        /// <summary>
        /// К
        /// </summary>
        /// <param name="source">строка для апрсинга</param>
        public Expression(string source)
        {
            //Исходная запись в польской нотации
            List <string> tokens = Parser.StringToTokens(source);
            List <string> polska = Parser.TokensToPolskaInvers(tokens);

            expression = polska;
            arguments  = new Dictionary <string, double>();
            variables  = new Dictionary <string, string>();
            double value = 0.0;
            string name  = "";

            foreach (string str in polska)
            {
                //одна из констант
                if (Parser.IsConstant(str))
                {
                    if (str.Equals("Pi"))
                    {
                        name  = str;
                        value = Math.PI;
                    }
                    else
                    {
                        name  = str;
                        value = Math.E;
                    }
                }
                //число и не функция
                else if (!Parser.IsOperator(str) && !Parser.IsFunction(str))
                {
                    try
                    {
                        value = Double.Parse(str);
                        name  = str;
                    }
                    catch (FormatException)
                    {
                        value = 0;
                        name  = str;
                        if (!variables.ContainsKey(str))
                        {
                            variables.Add(str, str);
                        }
                    }
                }
                if (!arguments.ContainsKey(name))
                {
                    arguments.Add(name, value);
                }
            }
            VariablesCount = variables.Count;
        }