C ++中的布尔表达式解析器

时间:2013-08-03 17:52:07

标签: c++ parsing boost expression

我需要一个简单的布尔表达式解析器,用于我正在研究的一个小C ++模板引擎,我正在寻找一些可以为我做这个的库。不幸的是,我没有找到任何易于集成的东西。我发现这种精神基于solution,这似乎是一个很好的起点,但它并不具备我需要的所有功能。我知道精灵迷你c的例子,但它似乎太复杂了,它可能会永远以某种方式剥夺我需要的东西。基本上,我需要的是以下内容:

  • 变量类型的变量:integer,double,string,array
  • 运算符“和”,“或”,“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

我对语法细节有点灵活,所以有谁知道一个可以做到这一点并且易于集成的开源库?或者我怎么可能扩展一些基于精神的例子?

例如,在这个boolean expression example中我不太明白在解析它们之前如何将变量设置为某些值。但即使我这样做,它也不足以支持我所需要的东西。

任何帮助/指针都表示赞赏!我花了很多时间试图理解精神,但我想我仍然不能很好地理解除了非常简单的解析之外的任何事情。

1 个答案:

答案 0 :(得分:0)

可能最好的方法是阅读Stroustrup的“The C ++ Programming Language”第6章,该语言详细讨论了桌面计算器的源代码(可在此处获取:http://www.stroustrup.com/3rd_code.html)。

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