using System.Collections.Generic;
using org.mariuszgromada.math.mxparser;
public static void Main()
DateTime localDate = DateTime.Now;
var argList = new List<Argument>();
var ExpressionVariableArgs = new Dictionary<string, double>();
ExpressionVariableArgs.Add("x", 1);
ExpressionVariableArgs.Add("y", 2);
ExpressionVariableArgs.Add("z", 10);
var InlineExpressionVariableArgs = new List<string>();
InlineExpressionVariableArgs.Add("x1=10");
InlineExpressionVariableArgs.Add("y1=20");
foreach (var eArg in ExpressionVariableArgs)
argList.Add(new Argument(eArg.Key + "=" + eArg.Value));
foreach(var eArg in InlineExpressionVariableArgs){
argList.Add(new Argument(eArg));
var exp = new Expression(codeLine);
foreach (Argument arg in argList){
Console.WriteLine(@"#004 :: {0}:{1}:{2} - Expression String: {3}", localDate.Hour, localDate.Minute, localDate.Second, exp.getExpressionString());
if (exp.getSyntaxStatus()){
Console.WriteLine(@"#005 :: {0}:{1}:{2} - Syntax check found no errors", localDate.Hour, localDate.Minute, localDate.Second);
var syntaxResult = exp.getErrorMessage();
Console.WriteLine(@"#006 :: {0}:{1}:{2} - Syntax check found error(s): {3}{4}", localDate.Hour, localDate.Minute, localDate.Second, System.Environment.NewLine, syntaxResult);
var calculationResult = exp.calculate();
exp.setExpressionString(codeline2);
calculationResult = exp.calculate();
if (!Double.IsNaN(calculationResult)){
Console.WriteLine(@"#007 :: {0}:{1}:{2} - Calculation Success!!! Result: {3}", localDate.Hour, localDate.Minute, localDate.Second, calculationResult);
var err =exp.getErrorMessage();
Console.WriteLine(@"#008 :: {0}:{1}:{2} - Calculation Failed!!! Message: {3}{4}", localDate.Hour, localDate.Minute, localDate.Second, System.Environment.NewLine, err);
var err =exp.getErrorMessage();
Console.WriteLine(@"#999 :: {0}:{1}:{2} - Exception on calculation: {3}", localDate.Hour, localDate.Minute, localDate.Second, ex.Message);