【发布时间】:2016-03-29 03:04:38
【问题描述】:
大家!
我想使用 boost::spirit 来解析文本文件中的一些字符串。
这是文本文件中的示例:
IF([banana] and [apple] and [yellow] or [green] or [red] and [!white])
THEN
do sth...;
ELSE
do sth...;
当我解析“if”括号中的字符串时,我遇到了麻烦。
这是我的代码:
if_rule=str_p(IF)>>ch_p("(")>>if_mem>>*("and"|"or">>if_mem)>>ch_p(")");
if_mem=ch_p("[")>>*~ch_p("]")>>ch_p("]");
它不起作用。它只是解析开头的两个“and”并忽略“or”。
我尝试了几种不同的语法,但仍然没有奏效。
感谢您的帮助!
【问题讨论】:
-
@jv_ 谢谢!在 boost::spirit 中,按位“或”表示逻辑“或”。可能会创建一些位图来检查语法是否发生。
-
("and"|"or")无法编译。我遇到了新的麻烦。ruleA=!ruleB&&!ruleC,我怎么能用 boost::spirit 来表达 -
您似乎在使用过时的“经典”精神。考虑更新到 Spirit v2(已有十年历史)。
-
@sehe 如何将成员函数绑定到已解析的字符串?或者将类实例传递给解析语法结构。谢谢!
标签: c++ boost grammar boost-spirit