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