Re[2]: Диагностика ошибок в boost::spirit
От: Grigory Россия  
Дата: 06.03.06 16:24
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Здравствуйте, Grigory, Вы писали:


G>>Имеются в виду ошибки во входных данных.


G>>info.stop.get_position() после вызова parse с невалидным буфером на ходится на начале самой верхней из вложенных рул. Хотелось бы получить позицию конкретного слова, вызвавшего неприятие.


_W>Можно попробовать сделать что-то вроде


_W>
_W>    (TYPE >> (
_W>        IDENTIFIER | 
_W>        BRACE | 
_W>        eps_p[error("жду скобку или идентификатор")])) | 
_W>    CLASS_SPECIFIER | 
_W>    EOF | 
_W>    eps_p[error("жду функцию, переменную, класс или конец файла")]))
_W>


_W>внутри функтора error — бросать исключение с описанием ошибки при вызове.

_W>имхо, самое простое и понятное. Ну и eps_p[error("...")] можно для удобства сделать макросом.
_W>к сожалению, используются исключения.
Исключения не проблема. Проблема — количество правил. Одних только терминальных символов 50.
Трудоёмко и код превратиться в кашу. Хотелось бы штатного средства.
Думал переехать с флекса и бизона на спирит, да, видно, не судьба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.