提升精神和相关部分

时间:2014-02-13 14:50:12

标签: c++ boost boost-spirit boost-spirit-qi

我需要通过提升精神创建一个规则,以匹配

等情况
return foo;

return (foo);

我试过像这样的人:

start %= "return" >> -boost::spirit::qi::char_('(') >> identifier >> -boost::spirit::qi::char_(')') >> ';';

但即使在像

这样的情况下,这也会成功
return (foo;

return foo);

我该如何解决?

1 个答案:

答案 0 :(得分:4)

您的示例只是看起来很病态,因为您使用的是一个过于具体的示例。

实际上,你没有"return" >> identifier;。通常,返回的东西只是一个表达式。所以,你会说

expr = literal | variable | function_call;

现在,一举提供括号表达式的一般方法就是:

expr = literal | variable | function_call
     | ('(' >> expr >> ')')
     ;

的Bam。完成。它处理平衡。它处理嵌套的括号。它甚至处理(((foo)))。那天没有给出口哨

我认为根本没有/任何/错误。我在本网站的答案中发布了超过20个递归的不同表达式语法。他们应该提供激励性的例子(显示运算符优先级并用这些括号覆盖它们)。