如果函数调用返回true,则跳过boost :: spirit :: qi中输入的部分

时间:2011-12-20 02:35:23

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

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

例如,我将令牌定义为接受变量名称(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

如果函数比较返回true,我将如何跳过下一节?

1 个答案:

答案 0 :(得分:3)

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

例如:

qi::rule<Iterator, std::string(), ascii::space_type> rool;
rool = a | b | eps(f) | d