Beispiel #1
0
        public void Serialize_Deserialize_Evaluate_38()
        {
            ExpressionParser parser = new ExpressionParser();

            string func = "x+y+z";
            double expected = 38;

            // Values
            parser.Values.Add("x", 5);
            parser.Values.Add("y", 10);
            parser.Values.Add("z", 23);

            // Parse
            double value = parser.Parse(func);
            Assert.AreEqual(expected, value);

            // Get expression
            Expression expression = parser.Expressions[func];

            MemoryStream stream = new MemoryStream();

            // Serialize
            expression.Save(stream);

            stream.Flush();
            stream.Position = 0;

            // Deserialize
            expression = new Expression();
            expression.Load(stream);

            value = parser.EvalExpression(expression);
            Assert.AreEqual(expected, value);
        }
Beispiel #2
0
        private void btnExecute_Click(object sender, EventArgs e)
        {
            // get Numbers collection
            List<double[]> collectSet = collectNumbers();
            // Parse Expression
            ExpressionParser parser = new ExpressionParser();
            parser.Values.Add("a", 1);
            parser.Values.Add("b", 1);
            parser.Values.Add("c", 1);
            string func = tbFormula.Text;
            parser.Parse(func);
            Expression expression = parser.Expressions[func];

            // Reset
            if (statisticTable.Rows.Count > 0)
                statisticTable.Rows.Clear();
            dataView.RowFilter = "1=1";

            foreach (double[] arr in collectSet)
            {
                parser.Values["a"].SetValue(arr[0]);
                parser.Values["b"].SetValue(arr[1]);
                parser.Values["c"].SetValue(arr[2]);
                double result = parser.EvalExpression(expression);

                DataRow row = statisticTable.NewRow();
                row["NumberA"] = arr[0];
                row["NumberB"] = arr[1];
                row["NumberC"] = arr[2];
                row["Result"] = Math.Round(result, 4);
                statisticTable.Rows.Add(row);
            }

            // Fetch to DataGridView
            //dataGridView.DataSource = statisticTable;
        }
Beispiel #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            ExpressionParser oParser = new ExpressionParser();

            oParser.RequireParentheses = chkParant.Checked;
            oParser.ImplicitMultiplication = chkImplicit.Checked;

            int iIterations = 1000;

            try
            {
                iIterations = Int32.Parse(textBox4.Text.Trim());
            }
            catch
            {
                textBox4.Text = iIterations.ToString();
            }

            foreach (Control c in valuePanel.Controls)
            {
                VariableValue varVal = c as VariableValue;

                if (varVal == null) continue;
                if (String.IsNullOrEmpty(varVal.Variable)
                    || String.IsNullOrEmpty(varVal.Value)) continue;

                double val = 0;
                if (Double.TryParse(varVal.Value, out val))
                {
                    oParser.Values.Add(varVal.Variable, val);
                }
                else
                {
                    oParser.Values.Add(varVal.Variable, varVal.Value);
                }
            }

            string sFunction = textBox1.Text.Trim();
            double fResult = 0f;

            try
            {
                Cursor = Cursors.WaitCursor;
                Stopwatch watch = new Stopwatch();
                watch.Start();

                // Parse expression once
                fResult = oParser.Parse(sFunction);

                // Fetch parsed tree
                Expression expression = oParser.Expressions[sFunction];

                // Iterate and evaluate tree
                for (int i = 0; i < iIterations; i++)
                {
                    fResult = oParser.EvalExpression(expression);
                }

                watch.Stop();

                textBox2.Text = "Result: " + fResult + "\r\n";
                textBox2.Text += "Iterations: " + iIterations + "\r\n";
                textBox2.Text += "Time consumed: " + watch.ElapsedMilliseconds + " milliseconds.\r\n\r\n";

                try
                {
                    Assembly oAssembly = Assembly.LoadFrom("info.lundin.math.dll");
                    textBox2.Text += String.Format("Assembly: {0}\r\n.NET Runtime: {1}", oAssembly.FullName, oAssembly.ImageRuntimeVersion);
                }
                catch { }

            }
            catch (Exception ex)
            {
                textBox2.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }