我需要找到一个快速,轻量级的表达式解析器.
理想情况下,我想传递一个名称/值对列表(例如变量)和一个包含要评估的表达式的字符串.我需要的只是一个真/假值.
表达式的类型应该是:
varA == "xyz" and varB==123
Run Code Online (Sandbox Code Playgroud)
基本上,只是一个简单的逻辑引擎,其表达式在运行时提供.
更新
至少需要支持==,!=,>,> =,<,<=
关于速度,我希望每个请求大约执行5个表达式.我们会看到附近的某个地方/请求一秒钟.我们当前的页面往往在50ms以内执行.通常,任何表达式中只涉及2或3个变量.但是,我需要在执行之前将大约30加载到解析器中.
更新2012/11/5
有关性能的更新.我们近2年前实施了nCalc.从那以后,我们扩大了它的使用范围,使得我们在帖子背面平均覆盖300多个变量的40多个表达式.现在每秒发生数千次回发,性能严重下降.
我们还扩展了它,包括一些额外的功能,同样没有性能损失.简而言之,nCalc满足了我们的所有需求并超出了我们的预期.
Gre*_*oud 33
你见过https://ncalc.codeplex.com/和https://github.com/sheetsync/NCalc吗?
它的可扩展性,快速性(例如,具有自己的缓存)使您能够通过处理EvaluateFunction/EvaluateParameter事件在运行时提供自定义函数和变量.它可以解析的示例表达式:
Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)");
e.Parameters["Pi2"] = new Expression("Pi * Pi");
e.Parameters["X"] = 10;
e.EvaluateParameter += delegate(string name, ParameterArgs args)
{
if (name == "Pi")
args.Result = 3.14;
};
Debug.Assert(117.07 == e.Evaluate());
Run Code Online (Sandbox Code Playgroud)
它还可以本地处理unicode和许多数据类型.如果你想改变语法,它会附带一个鹿茸文件.还有一个支持MEF加载新功能的fork.
它还支持逻辑运算符,日期/时间的字符串和if语句.
小智 6
Hisystems的Interpreter支持自定义函数,运算符和文字,是轻量级的纯c#可移植代码.目前通过MonoTouch在iOS上运行,并且应该在任何其他Mono环境以及Windows上运行.免费用于商业用途.可在GitHub上获得,网址为https://github.com/hisystems/Interpreter.
| 归档时间: |
|
| 查看次数: |
28534 次 |
| 最近记录: |