Я просматривал документацию Boost.Spirit X3, которую мне удалось найти --- чего не так много --- и я думаю, что хотел бы использовать ее для своего следующего проекта синтаксического анализа. Примечательно, что я никогда не использовал Boost.Spirit Classic или V2, но использовал flex/bison и ANTLR.
Формат, который я ищу для анализа, в самом простом смысле выглядит так:
unimportant
foo
bar
# BEGIN
parse this
...
# END
ignore this
Где анализируется только текст между "# BEGIN" и "# END", а все остальное полностью игнорируется. Я пытаюсь найти эффективный способ сделать это в парсере X3. Некоторые идеи, которые у меня были:
- Используйте базовые функции поиска строк, чтобы ограничить диапазон синтаксического анализа. Это кажется худшим вариантом, так как текст будет обрабатываться несколько раз, а не за один проход.
- Загляните в Spirit.Lex. Опять же, я столкнулся с трудностями при поиске подходящего материала для чтения на Spirit.Lex, но похоже, что Lex предоставляет начальные состояния лексера, которые были бы традиционным способом обработки этой работы. Кроме того, поскольку X3 основан на C++14, а Spirit.Lex построен на основе lexertl, есть ли вариант конфигурации или способ использования Spirit.Lex с модернизированным lexertl14?
- Возможно, есть какой-то значимый способ справиться с этим в X3? Поскольку грамматика на самом деле чрезвычайно проста, я думаю, что наличие отдельного лексера — это излишество.