Передача парсера правилу во время выполнения в X3

В spirit::qi можно было передать парсер правилу как унаследованный атрибут, а затем использовать его напрямую:

... >> lazy(_r1) >> ...

Есть ли обходной путь для этого в X3?

Я могу «внедрить» анализатор в нужный контекст правила, используя with<state_tag>(std::ref(my_parser))[destination_rule], и я могу получить его в рамках некоторого семантического действия позже, но я не понимаю, как его «вызывать» тогда.


person Igor R.    schedule 06.02.2017    source источник


Ответы (1)


Я не думаю, что это там.

Я должен признать, что я просто взламываю большинство вещей с помощью некоторых лямбда-выражений, возвращающих парсеры, но если вам действительно нужно сделать что-то, что реагирует на входной поток и соответствующим образом меняет состояние, вы, вероятно, захотите написать собственный тип парсера X3.

Обратите внимание, что создание пользовательских типов парсеров в X3 на удивление просто. Baptiste WichtУ Агустина "K-ballo" Берже есть несколько примеров, и я думаю, что они должны быть и здесь. Позвольте мне найти некоторые ссылки

person sehe    schedule 06.02.2017
comment
Действительно, неправильно запомнил автора. Нашел снова! - person sehe; 07.02.2017