C# Dynamic Expression Evaluator
This is a simple expression evaluation library targeting .NET
Usage of this library is fairly simple.
Step 1: Create and Initialize an Evaluation Context
Context context = new Context();
context.DeclareVariable("var1", typeof(int));
context.DeclareVariable("var2", typeof(string));
context.ExportType(typeof(Math));
content.ExportType(typeof(DateTime));
Step 2: Compile an expression for evaluation
CompiledExpression compiledExpr = new ExpressionCompiler(context).Compile("var1+=3");
Step 3: Set variables values to be used during evaluation at runtime
ExpressionEvaluator evaluator = new ExpressionEvaluator(compiledExpr);
evaluator.SetVariable("var1", 5);
Step 4: Evaluate the expression
Func<int> func = evaluator.Evaluate<int>();
func();
"a". //return value of variable 'a'
"a+1" //return value of variable 'a' + 1 - add
"a-1" //return value of variable 'a' - 1 - subtract
"a*2" //return value of variable 'a' * 2 - multiply
"a/2" //return value of variable 'a' / 2 - divide
"a % 2" //return value of variable 'a' % 2 - modulo
"a << 1" //return value of variable 'a' << 1 - left-shift
"a >> 1" //return value of variable 'a' >> 1 - right-shift
"a & 7" //return value of variable 'a' & 1 - bitwise-and
"a | 2" //return value of variable 'a' | 2 - bitwise-or
"a ^ a" //return value of variable 'a' & 'a' - bitwise-xor
"a++" //Assign value of variable 'a' with post increment expression
"a--" //Assign value of variable 'a' with post decrement expression
"--a" //Assign value of variable 'a' with pre decrement expression
"++a" //Assign value of variable 'a' with pre increment expression
"a+=1" //Assign value of variable 'a' with add expression
"a-=1" //Assign value of variable 'a' with substract expression
"a*=2" //Assign value of variable 'a' with multiply expression
"a/=2" //Assign value of variable 'a' with divide expression
"a%=2" //Assign value of variable 'a' with modulo expression
"a<<=1" //Assign value of variable 'a' with left-shift expression
"a>>=1" //Assign value of variable 'a' with right-shift expression
"a&=7" //Assign value of variable 'a' with bitwise-and expression
"a|=7" //Assign value of variable 'a' with bitwise-or expression
"a^=7" //Assign value of variable 'a' with bitwise-xor expression
"a=(a+7)". //Assign value of variable 'a' with a simple expression
"a=(a+(Int16)7)" //Assign value of variable 'a' with a complex expression
"a=Int32.MaxValue" //Assign a constant value to variable 'a'. Is also an example of Field or property access on exported type. Requires Int32 to be added to exported type
"a < 7" //Compare < between variable 'a' and int constant
"a <= 7" //Compare <= between variable 'a' and int constant
"a == 6" //Compare for equality between variable 'a' and int constant
"a != 6" //Compare for not equal between variable 'a' and int constant
"a > 7" //Compare > between variable 'a' and int constant
"a >= 7" //Compare >= between variable 'a' and int constant
"a && 7" //Logical and between variable 'a' and int constant
"a || 0" //Logical or between variable 'a' and int constant
"true && true". //Logical and between boolean constants
"true || false". //Logical or between boolean constants
"a >= 7000000000" //Compare variable 'a' (int) with long constant
"new DateTime(50000000000)" //Create a new instance of DateTime based on Ticks (long). Requires DateTime to be added to ExportedTypes in Context
"a=new DateTime(50000000000)" //Create a new instance of DateTime and assign to variable 'a'. Requires DateTime to be added to ExportedTypes in Context
"a.AddTicks((Int64)100)". //Invokes method of variable (or on Exported Type)
"a=a.AddTicks((Int64)100)" //Invokes method of variable and assign value to variable 'a'
"Int32.Parse(\"100\")". //Invokes method on exported type. Requires Int32 to be added to ExportedTypes in Context
"String.Concat(obj[\"channel\"][\"item\"][0][\"title\"].ToString().Substring(0,8), suffix)" //Operates on variable 'obj' of type JObject and 'suffix' of type String
"Int32.Parse(((Int32)Math.Sqrt(a * a * 1.0)).ToString()) == 5" //Operates on variable 'a' of type int