Я использую Boost Spirit v1.67.
Я хочу, чтобы синтаксический анализатор предоставлял точные коды ошибок, то есть контекстные сообщения об ошибках относительно того, где произошла ошибка.
Например,
- InvalidNumber - число больше 2 147 483 647 для int_
- InvalidSequence - недопустимая последовательность символов AB, ожидающая BA.
Опции, я думаю, будут работать, но нужно будет посоветовать, как это сделать-
- генерирует пользовательские исключения из on_error и перехватывает их после метода разбора
- используйте on_error для отслеживания точного сбоя, а затем сохраните код ошибки в некоторой переменной, которая будет доступна позже.
- принимает бит недопустимых данных в анализаторе только для того, чтобы пометить его после запуска анализатора при проверках после обработки. (например, принять длинное int вместо int и пометить как ошибку при пост-обработке, если число больше max_int).