我最近一直在玩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,我将如何跳过下一节?
答案 0 :(得分:3)
可以使用Epsilon Parser编写解析器中的条件。这将调用您提供给它的函数,如果该函数返回false将失败该特定检查并继续下一个或。
例如:
qi::rule<Iterator, std::string(), ascii::space_type> rool;
rool = a | b | eps(f) | d