我需要一个简单的布尔表达式解析器,用于我正在开发的一个小型 C++ 模板引擎,并且我正在寻找一些可以为我做这件事的库。不幸的是,我并没有真正找到任何容易集成的东西。我找到了这个基于精神的解决方案,这似乎是一个很好的起点,但它并不完全具备我需要的所有功能。我知道精神 mini-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
我在语法细节上有些灵活,所以有人知道可以做到这一点并且易于集成的开源库吗?或者我可以如何扩展一些基于精神的例子?
例如,在这个布尔表达式示例中,我不太明白如何在解析变量之前将它们设置为某些值。但即使我这样做了,它也不能完全支持我需要的东西。
任何帮助/指针表示赞赏!我花了相当长的时间试图理解精神,但我想我仍然没有很好地理解它,无法完成除了非常简单的解析之外的任何事情。