您的位置:首页 > 其它

状态机的一种实现方法

2014-02-18 13:44 239 查看
看到wiki上关于自动机编程的文章, 其中自动化技术和自动机一节只有伪码, 俺写了个C版本的, 如下

#include <stdio.h>
typedef struct
{
int state;
int changed;
int c;
} state_mach;
enum states {
before, inside, after
} e_states;
int hop2state(state_fsm *fsm, int state)
{
fsm->state = state;
fsm->changed = 1;
return 1;
}
int setState(state_mach *fsm)
{
if (fsm->c == '\n')
return hop2state(fsm, before);

switch(fsm->state) {
case before:
if (fsm->c!=' ')
return hop2state(fsm, inside);
break;
case inside:
if (fsm->c == ' ')
return hop2state(fsm, after);
else
return hop2state(fsm, inside);
break;
case after:
break;
}
return 0;
}
int doAction(state_mach *fsm)
{
switch (fsm->state) {
case before:
putchar('\n');
break;
case inside:
putchar(fsm->c);
break;
}
return 0;
}

int main()
{
state_mach fsm = {before, 0, 0};
while((fsm.c = getchar())!= EOF) {
if (setState(&fsm)) {
fsm.changed = 0;
doAction(&fsm);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐