【发布时间】:2014-02-13 14:50:12
【问题描述】:
我需要通过增强精神创建一个规则,以匹配诸如
之类的情况return foo;
和
return (foo);
我是这样尝试的:
start %= "return" >> -boost::spirit::qi::char_('(') >> identifier >> -boost::spirit::qi::char_(')') >> ';';
但即使在这种情况下也会成功
return (foo;
和
return foo);
我该如何解决?
【问题讨论】:
-
statement = ("return" >> identifier >> ';') | ("return" >> '(' >> identifier >> ')' >> ';')呢? -
@faranwath 是的,我已经考虑过了,但它看起来很糟糕,尤其是当我有很多具有相似结构的规则时
-
可怕吗?我想我们在使生产规则看起来不错的原因上有所不同,但这是你的工作,很公平。
-
由于您似乎有许多这些规则,您可以使用相关的解析器(此处为标识符)作为处理括号的解析器的参数。但是,解析器作为解析器的参数存在一些问题,sehe 在 SO 上有一篇不错的帖子,但我无法立即找到它。
-
另外我需要有相同数量的开括号和右括号,我什至可以在一个表达式中有两个或更多括号对
标签: c++ boost boost-spirit boost-spirit-qi