【发布时间】:2013-04-29 07:21:30
【问题描述】:
我正在与 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 时,finished 似乎为 1,当 res 为 0 时,finished 似乎为 0。
任何帮助都会很棒。
【问题讨论】:
标签: c finite-automata state-machine ragel