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;