У меня есть импульс :: дух :: правила ци:
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;