Ich arbeite mit Ragel, um FSAs zu bewerten, und ich möchte eine Benutzeraktion einbetten, die ausgeführt wird, wenn mein Computer die Eingabe beendet. Ich muss diese Aktion ausführen, unabhängig davon, ob die Maschine in einem akzeptierenden Zustand endet oder nicht. Ich habe dieses modifizierten Beispiel von der Führungs Ragel genommen, die zeigt, was ich für:Wie man Ragel EOF Aktionen funktioniert
#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;
}
Mein Ziel für dieses Beispiel ist für res 1 zu sein, wenn der Eingang entweder ‚foo‘ oder ‚bar‘ ist, während fertig ist 1 unabhängig von der Eingabe. Ich kann das nicht zur Arbeit bekommen - fertig scheint 1 zu sein, wenn res 1 ist, und 0 wenn res 0 ist.
Jede Hilfe wäre toll.