我需要一个简单的布尔表达式解析器,用于我正在开发的一个小型C++模板引擎,并且我正在寻找一些可以为我完成此任务的库。不幸的是,我没有真正找到任何易于集成的东西。我发现了基于Spirit的solution,它似乎是一个很好的起点,但它并没有我需要的所有功能。我知道Spirit迷你C示例,但它似乎过于复杂,而且我可能需要很长时间才能剥离出我所需的部分。基本上,我需要以下内容:
- 具有变量类型的变量:整数、双精度浮点数、字符串、数组
- 运算符"and"、"or"、"xor"、"not"和正确/预期的优先级
- 比较运算符"=="、"!="、"<"、"<="、">"、">="
- 算术运算符,如"+"、"-"、"/"、"*"及其预期的优先级
- 可选:返回值的C样式函数调用,例如somefunc(12,"abc"),我可以在评估期间将其映射到C++函数中
我需要能够向解析器提供所有变量及其值,包括数组。目的是为了能够计算表达式,例如:
或者另外选择
我需要能够向解析器提供所有变量及其值,包括数组。目的是为了能够计算表达式,例如:
var == 2 + 3
var != 2.32
var == "foo"
somearr[var][2] == "bar"
(var == 2) or (var > 100)
对于函数来说,如果能像这样做就很好了:
var.length() == 3
"bla".length() == 3
或者另外选择
length(var) == 3
length("bla") == 3
我在语法细节上有些灵活,是否有人知道一个能够做到这一点并且易于集成的开源库?或者我如何扩展一些基于Spirit的示例?
例如,在这个boolean expression example中,我不太明白如何在解析之前设置变量的值。但即使我理解了,它也不能完全支持我所需的所有内容。
任何帮助/指针都将不胜感激!我花了很多时间试图理解Spirit,但我想我还没有足够的理解力来完成除了非常简单的解析之外的任何事情。