私は Ragel と協力して FSA を評価しており、マシンが入力のテストを終了するたびに実行されるユーザー アクションを埋め込みたいと考えています。マシンが受け入れ状態で終了するかどうかに関係なく、このアクションを実行する必要があります。私が何をしようとしているのかを説明する Ragel ガイドから取られたこの変更された例があります。
#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;
}
この例の私の目標は、入力が 'foo' または 'bar' の場合に res が 1 になるようにすることです。一方、finished は入力に関係なく 1 になります。ただし、これを機能させることはできません-resが1の場合は1、resが0の場合は0のようです。
どんな助けでも素晴らしいでしょう。