C ++业务规则表达式解析器/评估

时间:2013-10-06 22:59:08

标签: c++ performance c++11 rule-engine mathematical-expressions

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

基本要求如下:

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

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

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

我已经google了,但我能找到的大多数“库”都是分流码算法的简单例子,大多数表达式解析器,在同一步骤中执行解析和评估,使它们不适合连续重新评估,以及大多数只支持数字。

我在寻找:

  
      
  1. 用C ++编写的库(C ++ 03或C ++ 11)
  2.   
  3. 稳定/生产值得
  4.   
  5. 快速评估
  6.   
  7. Portable(win32 / linux)
  8.   
  9. 有关构建高性能业务规则引擎的任何建议。
  10.   

业务规则示例:

'rule_result =(remaining_items< min_items)和(item ==“沙滩球”)'

2 个答案:

答案 0 :(得分:13)

请参阅C++ Mathematical Expression Library中列出的this answer

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

答案 1 :(得分:1)

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