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); }
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; }
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; } }