我需要找到一个快速、轻量级的表达式解析器。
理想情况下,我想向它传递一个名称/值对列表(例如变量)和一个包含要评估的表达式的字符串。我需要从中返回的只是一个真/假值。
表达式的类型应遵循以下原则:
varA == "xyz" and varB==123
基本上,只是一个简单的逻辑引擎,其表达式是在运行时提供的。
UPDATE
至少需要支持 ==、!=、>、>=、
关于速度,我预计每个请求大约执行 5 个表达式。我们会看到每秒大约有 100 个请求。我们当前的页面往往在 50 毫秒内执行。通常任何表达式中只涉及 2 或 3 个变量。但是,在执行之前我需要将大约 30 个加载到解析器中。
更新2012/11/5
关于性能的更新。我们大约 2 年前实施了 nCalc。从那时起,我们扩展了它的用途,以便在回发时平均使用 40 多个表达式,覆盖 300 多个变量。现在每秒发生数千次回发,性能下降绝对为零。
我们还对其进行了扩展,添加了一些附加功能,同样没有性能损失。简而言之,nCalc满足了我们所有的需求并超出了我们的期望。
你见过吗https://ncalc.codeplex.com/ and 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());
它还可以本地处理 unicode 和许多数据类型。如果您想更改语法,它会附带一个鹿角文件。还有一个支持 MEF 加载新功能的 fork。
它还支持逻辑运算符、日期/时间字符串和 if 语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)