Boost.Spirit.Qi: Как сообщить о предупреждениях парсера? - PullRequest
4 голосов
/ 26 мая 2011

Как сообщить о предупреждениях парсера?Аналогично сообщению об ошибке, но анализатор не должен останавливаться.Только предупреждение журнала и подвыражение вызвало предупреждение.

Пример ввода:

 select * from table where row>='' && row<>'hello'

Ожидаемый вывод:

 Warning: expression is always true: row>=''
 Warning: && is deprecated, use AND: row>='' && row<>'hello'
 Warning: <> is deprecated, use !=: row<>'hello'

1 Ответ

4 голосов
/ 26 мая 2011

Если вы хотите продолжить синтаксический анализ, вы можете зарегистрировать обработчик ошибок, как и раньше, за исключением того, что вы должны указать accept в качестве политики обработчиков:

rule<Iterator> r = ... > !eps;
on_error<accept>(r, handler);

Добавленный > !eps вызывает ошибку в любом случае и вызывает handler как обычно, но он примет совпадение после «ошибки», продолжая, как будто ничего не произошло.

...