Да. Вы можете. Просто начните с урока:
https://www.boost.org/doc/libs/1_68_0/libs/spirit/doc/html/spirit/qi/tutorials.html
Важно помнить, что семантические действия не предпочтительный метод для создания ваших узлов AST. Это, кажется, повторяющийся паттерн, исходящий от инструментов стиля Flex / Bison.
Вместо этого предпочитайте использовать автоматический синтез и распространение атрибутов . Таким образом вы получите встроенный DSL-дух , как и было задумано. Это то, что уменьшает объем работы и место для ручной ошибки. См. Также Повышение духа: «Семантические действия - это зло»?
Если вы
- нужен уровень контроля, или вам
- абсолютно необходимо оптимизировать фазы парсера
- или по другой причине (например, семантический анализ необходим для устранения неоднозначности сканирования токена)
тогда я бы предложил пойти с более традиционным генератором парсера, который обычно требует больше работы вне ворот.
> Кроме того, я прочитал, что «boost phoenix» - хорошая библиотека для использования для семантических действий.
Ну, это "хорошо", если вы увлечены и нуждаетесь в мощности, чтобы быстро заставить вещи работать, но имейте в виду, что это не поддержка основного языка, так что это облагает налогом ваш компилятор, и имеет ограничения.
Я бы сказал, что Семантические действия Spirit X3 - гораздо более тонкий подход, когда в вашем распоряжении весь язык C ++ 14 без библиотечной героики. Это уменьшает кривую обучения и позволяет использовать существующий код без, например, упаковка в полиморфные вызовы, адаптация с BOOST_PHOENIX_ADAPT_ * и т. д.
Просто для удовольствия, вот парсер X3, где я реализовал базовое подмножество Phoenix для X3 в одном заголовочном файле: https://github.com/sehe/expression-parsers/tree/x3-c++17
> Но, не нашел обширных примеров его использования с наддувами.
Полагаю, если вы будете искать (мои) ответы на этом сайте, это шведский стол "все, что вы можете съесть". Конечно, вы всегда можете опубликовать конкретные вопросы, которые у вас есть.