3

我需要一个简单的布尔表达式解析器,用于我正在开发的一个小型 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

我在语法细节上有些灵活,所以有人知道可以做到这一点并且易于集成的开源库吗?或者我可以如何扩展一些基于精神的例子?

例如,在这个布尔表达式示例中,我不太明白如何在解析变量之前将它们设置为某些值。但即使我这样做了,它也不能完全支持我需要的东西。

任何帮助/指针表示赞赏!我花了相当长的时间试图理解精神,但我想我仍然没有很好地理解它,无法完成除了非常简单的解析之外的任何事情。

4

1 回答 1

0

了解这一点的最佳方法可能是阅读 Stroustrup 的“C++ 编程语言”的第 6 章,其中详细讨论了桌面计算器的源代码(可在此处获得:http: //www.stroustrup.com/3rd_code.html)。

它是基本的(因为它是一种教学工具),但很容易修改以满足您的需求。

于 2014-02-14T12:02:58.923 回答