2
我有一個boost ::精神::齊規則:Boost.Spirit不解析整個輸入
auto dquote = qi::char_('\"');
auto comma = qi::char_(',');
auto newline = qi::char_('\n');
auto nonEscaped = *(qi::char_ - newline - comma - dquote);
auto escaped = *qi::blank >> dquote >> *((qi::char_ - dquote) | (dquote >> dquote)) >> dquote >> *qi::blank;
auto field = nonEscaped | escaped;
當我嘗試解析輸入:
string input(" \"e\"\"e\" ");
qi::phrase_parse(begin(input), end(input), field, qi::char_('\r'));
輸入不完全由escaped
規則匹配,但只應用nonEscaped
規則。所以只有第一個空間是匹配的。我如何說服精神分析整個輸入或儘可能地解析?
當我將field
規則中變體的順序更改爲以下規則時,它就起作用了。但是,這是正確的解決方案嗎?
auto field = escaped | nonEscaped;