爲什麼此解析器在屬性中保留'b'
?即使選項不匹配?Boost Spirit可選解析器和回溯
using namespace boost::spirit::qi;
std::string str = "abc";
auto a = char_("a");
auto b = char_("b");
qi::rule<std::string::iterator, std::string()> expr;
expr = +a >> -(b >> +a);
std::string res;
bool r = qi::parse(
str.begin(),
str.end(),
expr >> lit("bc"),
res
);
它解析成功,但資源是"ab"
。
如果僅用expr解析"abac"
,則選項匹配且屬性爲"aba"
。
與"aac"
相同,選項不會開始匹配,屬性爲"aa"
。
但與"ab"
,屬性是"ab"
,即使b回溯,並且,例如,與下一個分析器匹配。
UPD
隨着expr.name("expr");
和debug(expr);
我
<expr>
<try>abc</try>
<success>bc</success>
<attributes>[[a, b]]</attributes>
</expr>
嗯,我已經取代'auto's與規則。 – 2014-10-03 20:27:34
但是,我不明白,你使用二進制減號?那是不同的語言,不是嗎? – 2014-10-03 20:28:35
@MikhailCheshkov我只是注意到這個錯字。 **更新了答案。請原諒我的錯誤:/ – sehe 2014-10-03 20:34:12