Передача парсера правилу во время выполнения в X3
В spirit::qi
можно передать парсер правилу как унаследованный атрибут, а затем использовать его напрямую:
... >> lazy(_r1) >> ...
Есть ли обходной путь для этого в X3?
Я могу "внедрить" парсер в нужный контекст правила, используя with<state_tag>(std::ref(my_parser))[destination_rule]
и позже я могу получить его в рамках некоторого семантического действия - но я не понимаю, как его потом "вызвать".
1 ответ
Я не думаю, что это там.
Я должен признать, что я просто взламываю большинство вещей с помощью некоторых лямбда-выражений, возвращающих парсеры, но если вам действительно нужно сделать что-то, что реагирует на поток ввода, соответственно изменив состояние, вы, вероятно, захотите написать собственный тип парсера X3.
Обратите внимание, что создание пользовательских типов анализатора на удивление просто в X3. Баптист с Агустином "K-balloon" Берге имеет несколько примеров, и я думаю, что они должны быть и здесь. Позвольте мне найти некоторые ссылки