Я использую Ragel для оценки FSA, и мне нужно, чтобы сегмент кода запускался после каждой оценки символа на входе. Ragel имеет операторы, которые позволяют встраивать пользовательские действия в переходы и состояния; однако после некоторого тестирования кажется, что эти действия пользователя выполняются только при первом запуске машины в заданное состояние. Таким образом, если машина остается в одном состоянии по нескольким символам, никакие действия пользователя не будут выполняться. Есть ли способ запуска действия пользователя каждый раз, когда ragel обрабатывает входной символ?Вставить действие пользователя после обработки каждого символа в Ragel
0
A
ответ
0
Похоже, что «Все действия перехода» (раздел 3.1.3 руководства) - это то, что вам нужно.
main := (your machine) $YourAction;
Например
main := (any* ('foo'|'bar') any*) ${printf ("char: %c\n", *p);};