我有一个更复杂的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 不匹配。为什么?我希望它能匹配这三个。
答案 0 :(得分:2)
PEG解析器匹配贪婪,从左到右。这应该足以解释了。
但是让我们看一下connection.query("UPDATE visentry SET flag = :flag", { flag: flag });
:它匹配&#34; 1或更多foo123
,因此第一个分支被采用。第二个分支未被采用,因此数字+alpha
仍然未被解析。
没有&#34;固有&#34;回溯kleen运营商。如果你知道,你/可以/采用回溯你需要解析完整的输入:
123