gpt4 book ai didi

c++ - 为什么 boost::spirit 将 foo123 与 (+alpha | +alnum) 语法匹配?

转载 作者:太空狗 更新时间:2023-10-29 21:40:58 24 4
gpt4 key购买 nike

我有一个更复杂的 boost::spirit 语法,它与我预期的不匹配。我能够将其分解为这个最小的示例:http://ideone.com/oPu2e7 (不在那里编译,但用 VS2010 编译)

基本上这是我的语法:

my_grammar() : my_grammar::base_type(start)
{
start %=
(+alpha | +alnum)
;
}
qi::rule<Iterator, std::string(), ascii::space_type> start;

它匹配 foobar123foo 但不匹配 foo123。为什么?我希望它能匹配所有三个。

最佳答案

PEG 解析器匹配贪婪,从左到右。这应该足以解释。

但让我们看一下 foo123:它匹配“1 个或多个 +alpha,所以第一个分支被采用。第二个分支没有被采用,所以数字 123 保持未解析状态。

kleen 运算符没有“固有”回溯。如果您知道例如,您/可以/使用回溯你需要解析完整的输入:

 (+alpha >> eoi | +alnum >> eoi)

关于c++ - 为什么 boost::spirit 将 foo123 与 (+alpha | +alnum) 语法匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026470/

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