Я пишу синтаксический анализатор для довольно сложных файлов конфигурации, которые используют отступы и т.д. Я решил использовать Лекс, чтобы сломать входные данные в токены, поскольку это, по-видимому, облегчает жизнь. Проблема заключается в том, что я не могу найти примеры использования QI-инструментов отчетности ошибок (on_error
) с синтаксическими анализаторами, которые работают с потоком токенов вместо символов.
Обработчик ошибок, который будет использоваться в on_error
, позволяет некоторым образом указать, где именно ошибка во входном потоке. Все примеры просто конструируют std::string
из пары итераторов и печатают их. Но если использовать Lex, эти итераторы являются итераторами последовательности токенов, а не символов. В моей программе это привело к зависанию в конструкторе std::string
, прежде чем я заметил недопустимый тип итератора.
Как я понимаю, токен может содержать пару итераторов во входном потоке в качестве значения. Это тип атрибута по умолчанию (если тип похож на lex::lexertl::token<>
). Но если я хочу, чтобы мой токен содержал что-то более полезное для синтаксического анализа (int
, std::string
и т.д.), Эти итераторы теряются.
Как я могу создавать дружественные человечеству сообщения об ошибках, указывающие положение во входном потоке при использовании Lex с Qi? Есть ли примеры такого использования?
Спасибо.