为什么用#+ alpha | + alnum语法来提升::精神匹配foo123?

时间:2015-05-04 09:14:32

标签: c++ boost boost-spirit

我有一个更复杂的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;

它匹配 foobar 123foo 但与 foo123 不匹配。为什么?我希望它能匹配这三个。

1 个答案:

答案 0 :(得分:2)

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

但是让我们看一下connection.query("UPDATE visentry SET flag = :flag", { flag: flag }); :它匹配&#34; 1或更多foo123,因此第一个分支被采用。第二个分支未被采用,因此数字+alpha仍然未被解析。

没有&#34;固有&#34;回溯kleen运营商。如果你知道,你/可以/采用回溯你需要解析完整的输入:

123