我需要通过提升精神创建一个规则,以匹配
等情况return foo;
和
return (foo);
我试过像这样的人:
start %= "return" >> -boost::spirit::qi::char_('(') >> identifier >> -boost::spirit::qi::char_(')') >> ';';
但即使在像
这样的情况下,这也会成功return (foo;
和
return foo);
我该如何解决?
答案 0 :(得分:4)
您的示例只是看起来很病态,因为您使用的是一个过于具体的示例。
实际上,你没有"return" >> identifier;
。通常,返回的东西只是一个表达式。所以,你会说
expr = literal | variable | function_call;
现在,一举提供括号表达式的一般方法就是:
expr = literal | variable | function_call
| ('(' >> expr >> ')')
;
的Bam。完成。它处理平衡。它处理嵌套的括号。它甚至处理(((foo)))
。那天没有给出口哨。
我认为根本没有/任何/错误。我在本网站的答案中发布了超过20个递归的不同表达式语法。他们应该提供激励性的例子(显示运算符优先级并用这些括号覆盖它们)。