C ++业务规则表达式解析器/评估[关闭]

Posted

技术标签:

【中文标题】C ++业务规则表达式解析器/评估[关闭]【英文标题】:C++ Business rule expression parser/evaluation [closed] 【发布时间】:2013-10-13 10:36:27 【问题描述】:

我正在寻找以C++ 编写的可移植轻量级库的建议,这些库支持数学和业务规则表达式和评估。我了解C++STL 中不提供此类功能。

基本要求如下:

要评估的表达式将由数字和字符串以及表示数字或字符串的变量组成。

预计某些表达式每秒会被计算多次(1000-2000 次),因此需要对表达式进行高性能计算。

最初是我公司的项目,我们将所有业务规则编码为派生自基本表达式类的类。问题是随着表达式数量的增加,这种方法不能很好地扩展。

我用谷歌搜索过,但我能找到的大多数“库”都是调车场算法的简单示例,大多数表达式解析器在同一步骤中执行解析和评估,这使得它们不适合连续重新评估,并且大多数只支持数字。

我在寻找什么:

    用 C++(C++03 或 C++11)编写的库 稳定/值得生产 快速评估 便携(win32/linux) 关于构建高性能业务规则引擎的任何建议。

示例业务规则:

'rule_result = (remaining_items

【问题讨论】:

见schematron(反思一下,我怀疑它能否处理这些速度,除非,也许规则是一起批处理的) 看起来很有趣,但我更关注规则会发生什么,而不一定是如何存储或表示。我肯定会研究 schematron,因为它似乎还有其他一些巧妙的想法。 我一直在寻找基于 RETE 算法的库,但从未完全找到我需要的东西。我可能有一些建议,但我没有机会面对他们。 Is there any kind of "expression class" (C++)的可能重复 只是出于好奇,为什么不使用可嵌入的脚本语言,例如 [Lua]lua.org?这将为您提供最大的灵活性,而无需太多开销 【参考方案1】:

请参阅this answer 中概述的C++ Mathematical Expression Library。

但是,如果您真的想要速度,请考虑将表达式直接编译为 C/C++,然后动态加载它们(共享对象/DLL)。

【讨论】:

我们尝试了 exprtk 库,它非常适合表达式 eval 感谢您的建议。 wrt “编译表达式”这就是我们现在正在做的,问题是这种方法不会随着表达式数量的增加而扩展,并且客户希望能够添加新的表达式或修改当前表达式。因此,您建议的动态表达式库似乎是最好的平衡。 @ZamfirKerlukson:我说的是让您的框架/应用程序根据客户输入动态生成和编译 DLL。尽管加载文本比二进制文件更容易,但可以肯定的是,这会更好地扩展。 ;)【参考方案2】:

您是否考虑过使用Bison + Flex 生成自己的解析器?它使用基于 FSM 的 LALR 解析器实现,速度快且易于编写,并支持在解析表达式时对表达式求值,以及为重复求值生成 AST。

【讨论】:

以上是关于C ++业务规则表达式解析器/评估[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

BPM产品解读之规则设计器

BPM产品解读之规则设计器

自己动手写符合自己业务需求的eslint规则

关于规则引擎的神话是啥? [关闭]

如何快速学习 Drools 或其他规则引擎 [关闭]

JavaScript中的规则引擎[关闭]