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