gpt4 book ai didi

c++ - 如何让 boost::spirit 停止解析关键字?

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:14 26 4
gpt4 key购买 nike

我想解析像“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 的字符序列(包括空格)。

您必须以某种方式告诉您的解析器在空格或“end”关键字处停止。例如下面的解析器将接受字符直到“结束”关键字

+(char_ - lit("end"))

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

关于c++ - 如何让 boost::spirit 停止解析关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com