Exemplo n.º 1
0
        private static void BuildFormulaExpression(string input)
        {
            FormulaExpressionBuilder builder = new FormulaExpressionBuilder();

            try
            {
                FormulaExpression formula = builder.Build(input);
                Console.WriteLine("Expression: " + formula.GetExpression().ToString());

                Console.WriteLine();
                Console.WriteLine("f(x, y, z, a) = " + input);

                FormulaFunc f = formula.Compile();
                double      x = 1, y = 2, z = 3, t = 4;
                double      result = f(x, y, z, t);

                Console.WriteLine();
                Console.WriteLine(string.Format("f({0}, {1}, {2}, {3}) = {4}", x, y, z, t, result));
            }
            catch (SyntaxException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Internal parser error: " + ex.Message);
            }

            Console.WriteLine();
            Console.WriteLine();
        }
Exemplo n.º 2
0
        /// <summary> 解析公式 </summary>
        /// <param name="str">公式字符串</param>
        /// <param name="cs">分割符</param>
        /// <param name="oparator">运算符</param>
        /// <param name="func">解析方法</param>
        /// <returns>解析后的字符串</returns>
        public string Format(string str, char[] cs, string[] oparator, FormulaFunc <string, object[], string> func, object[] objs)
        {
            var str1 = str.Split(cs
                                 , StringSplitOptions.RemoveEmptyEntries);

            StringBuilder strFind =
                new StringBuilder();

            foreach (string s in str1)
            {
                //不是运算符
                if (Array.Exists(oparator, l => s.Contains(l)))
                {
                    strFind.Append(s);
                }
                else
                {
                    //计算参数
                    strFind.Append(func(s, objs));
                }
            }
            string ssss = strFind.ToString();

            return(strFind.ToString());
        }
Exemplo n.º 3
0
        /// <summary> 解析公式 </summary>
        public string Format(string str, FormulaFunc <string, object[], string> func, object[] objs)
        {
            char[] cs =
                new char[] { '[', ']' };

            string[] strPara =
                new string[] { "+", "-", "*", "/", "(", ")" };

            return(Format(str, cs, strPara, func, objs));
        }