Re: Диагностика ошибок в boost::spirit
От: _Winnie Россия C++.freerun
Дата: 06.03.06 14:50
Оценка:
Здравствуйте, Grigory, Вы писали:

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


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


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

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


внутри функтора error — бросать исключение с описанием ошибки при вызове.
имхо, самое простое и понятное. Ну и eps_p[error("...")] можно для удобства сделать макросом.
к сожалению, используются исключения.
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.