发布状态机代码生成工具

sjjf 2012-09-06 09:57:21
hi,我发布了一款小软件,
该软件提供了一套描述状态机的语言,并能根据描述生成 状态机的源代码, 状态机图, 以及完备的状态跃迁路径的测试用例.
此外,还做了一些增强的检查,
1、一个状态机必须有且仅有一个开始状态。(在语法检查时候排除)
2、一个状态机至少要有一个结束状态。 在状态机的定义里面,这个终结符集合可以允许为空,但是为了不让程序陷入无休止的运行中,强制规定了必须要有一个结束。 (在语法检查时排除)
3、开始状态不能是结束状态。 (在语法检查时排除)
4、任意两个状态之间,只允许一条转移,而不允许多条转移。(语义检查时实现)
5、不存在孤立的状态,或者孤立的状态网络.(对状态图做了连通性检测) (语义检查是实现)
6、确保每一个状态的可到达性,避免死状态,(出度入度的限制+连通性+关节点的判定)

由于时间比较紧,还没有来得及整理出文档和代码结构,待整理好代码后再行开源,以免贻笑大方。
至于文档方面,我相信这个软件提供的描述语言是足够简单的,不需要文档也应该能用。
如果需要文档,请等正式版发布。


下载
http://code.google.com/p/makefsm/downloads/list

使用方法
http://code.google.com/p/makefsm/wiki/how_to_use



语法文件

MOORE FSM Door "关于门的状态机生成 详细见 http://www.ibm.com/developerworks/cn/linux/l-fsmachine/index.html ";
STATUS: opened DESC "打开状态", closed DESC "关闭状态" ,locked "锁定状态" ,unlocked "非锁定状态", end "自定义的结束状态";
START=opened;
END=end;

//为了保证状态机可以退出,避免陷入死循环,增加了个自定义的结束状态,并规定,门在关闭后锁定了才允许离开。


opened->closed[closeDoor DESC "关门"];
closed->opened[openDoor DESC "开门"];
closed->locked[lockDoor DESC "锁门"];
locked->unlocked[unLockDoor DESC "不锁门"];
unlocked->locked[lockDoor2 DESC "锁门"];
unlocked->opened[openDoor2 DESC "解锁后开门"];
locked->end[finish DESC "完结"];

==================================================================
语法说明:
MOORE //moore型的状态机,两种状态机 ,一种是 moore型的,一种是mealy型的,目前只支持moore型的

FSM //状态机
Door // 状态机名字
"关于门的状态机生成 详细见 http://www.ibm.com/developerworks/cn/linux/l-fsmachine/index.html "; //说明,你懂得

STATUS: opened DESC "打开状态", closed DESC "关闭状态" ,locked "锁定状态" ,unlocked "非锁定状态", end "自定义的结束状态"; //定义状态,语法是 STATUS: 状态名字[DESC][描述],状态名字[DESC][描述]...; 正式文档会一个bnf规范的描述
START=opened; //指定开始状态
END=end; //指定结束状态集

//为了保证状态机可以退出,避免陷入死循环,增加了个自定义的结束状态,并规定,门在关闭后锁定了才允许离开。

opened->closed[closeDoor DESC "关门"]; //定义一个事件,语法 跃迁前状态->跃迁后状态\[事件名字 [DESC] [时间描述]\]



生成的代码和测试用例,以及生成的状态图,请看文件包的内容。
...全文
207 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
朗晴 2012-09-06
  • 打赏
  • 举报
回复
顶一下
sjjf 2012-09-06
  • 打赏
  • 举报
回复
哈,是啊,扩散一下吧,我希望能够在这里推行使用状态机的思维进行设计的方法.
MiceRice 2012-09-06
  • 打赏
  • 举报
回复
咦?又发新贴了?继续支持一把。
-AJ- 2012-09-06
  • 打赏
  • 举报
回复
顶一下

23,409

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧