Здравствуйте, _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.
Трудоёмко и код превратиться в кашу. Хотелось бы штатного средства.
Думал переехать с флекса и бизона на спирит, да, видно, не судьба.