我如何获得 boost::spirit 停止解析关键字

How do I get boost::spirit to stop parsing at keyword?

本文关键字:关键字 spirit 何获得 boost      更新时间:2023-10-16

我想解析像"start abc end"这样的输入来提取"abc"。

这是我的测试代码:

#include <boost/spirit/include/qi.hpp>
#include <ostream>
namespace qi = boost::spirit::qi;
int main(int argc, char* argv[])
{
    typedef std::string::const_iterator iterator;
    qi::rule<iterator, std::string(), qi::space_type> rule =
        "start" >>
        qi::lexeme[+qi::char_] >>
        "end";
    std::string input("start  abc end");
    auto iter = input.begin();
    std::string result;
    qi::phrase_parse(iter, input.end(), rule, qi::space, result);
    std::cout << "Result:   " << result   << std::endl;
}

输出为"结果:abc 结束"。

问题是

,您希望解析器在空格或关键字"end"处停止。但是您的解析器基本上接受"start"关键字之后的任何字符。

+char_

上面的解析器意味着:任何长度大于 1 的字符序列(包括空格)。

不知何故,你必须告诉你的解析器停止在空格或"结束"关键字。例如,下面的解析器将接受字符直到"结束"关键字

+(char_ - lit("end"))

我建议你看看精神文档中的解析器列表。 http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/qi/quick_reference/qi_parsers.html