2

我最近一直在玩 boost::spirit::qi 并且一直在尝试编写我自己的(非常非常简单的)脚本语言来解析它。当我处理脚本中的 if 语句时,我遇到了麻烦。如果函数调用返回真,我需要解析器跳过部分输入。

例如,我将标记定义为接受变量名 (a-zA-Z_),并将比较设置为接受“>”或“<”。代码示例如下。

comparison_statement = token >> comparison >> token;
statement            = lit("if ") >> comparison_statement[&compare] >> "then";

qi::phrase_parse(first, last, script, space);  // This call the parser

如果函数 compare 返回 true,我将如何跳过下一部分?

4

1 回答 1

3

可以使用Epsilon Parser编写解析器中的条件。这将调用您提供给它的函数,如果该函数返回 false,则该特定检查将失败并继续下一个或。

例如:

qi::rule<Iterator, std::string(), ascii::space_type> rool;
rool = a | b | eps(f) | d
于 2011-12-20T04:22:12.770 回答