Я работаю с Ragel для оценки FSA, и я хочу внедрить действие пользователя, которое запускается всякий раз, когда моя машина завершает тестирование ввода. Мне нужно, чтобы это действие выполнялось независимо от того, закончилась ли машина в принимающем состоянии или нет. У меня есть этот модифицированный пример, взятый из руководства Ragel, который иллюстрирует то, что я иду:Как получить действия Ragel EOF, работающие
#include <string.h>
#include <stdio.h>
%%{
machine foo;
main := ('foo' | 'bar') 0 @{ res = 1; } $/{ finished = 1; };
}%%
%% write data;
int main(int argc, char **argv) {
int cs, res = 0, finished = 0;
if (argc > 1) {
char *p = argv[1];
char *pe = p + strlen(p) + 1;
char* eof = pe;
%% write init;
%% write exec;
}
printf("result = %i\n", res);
printf("finished = %i\n", finished);
return 0;
}
Моя цель для этого примера для разрешения быть 1, когда вход либо «Foo» или «бар», в то время как завершено - 1 независимо от ввода. Я не могу заставить это работать, хотя - закончено, кажется, 1, когда res равно 1, и 0, когда res равно 0.
Любая помощь была бы потрясающей.