状态机的一种实现方法
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); } } }
相关文章推荐
- c#实现程序启动唯一实例的一种方法
- 一种分割与组合文件的方法-Java实现
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- ASP.NET 2.0 实现无刷新页面的一种方法(转)
- 教你一种实现嵌入式Linux系统新方法
- c#实现程序启动唯一实例的一种方法
- 用C语言模仿Python函数的一种简单实现方法
- 二叉树的几种遍历的方法(后序遍历的另外一种递归实现还需要思考)
- EasyDarwin开源流媒体服务器中一种实现对作用域内new对象自动释放的方法(值得借鉴)
- 用javascript结合struts2实现国际化的一种比较戳的方法
- 什么是最久未使用淘汰算法,试举出一种实现方法?
- silverlight 国际化的一种实现方法
- Laravel 5.3 使用内置的 Auth 组件实现多用户认证功能以及登陆才能访问后台的功能的一种实现方法
- 一种快速的未登陆词识别方法(原理和实现)
- PHP 实现了一种代码复用的方法,称为 trait
- MVC中实现订单表和订单详细表联动新增的一种方法
- 一种真正实现RMI无状态化的方法续:JVM源码修改步骤
- Javascript实现继承的一种方法
- 一种实现数据库连接池的方法(JAVA)
- 安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。