发布状态机代码生成工具

sjjf 2012-09-05 03:19:22
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
...全文
545 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
corn8888 2012-09-07
  • 打赏
  • 举报
回复
值得支持一把
sjjf 2012-09-07
  • 打赏
  • 举报
回复
哈哈,这语法好,直接改造成 graphviz
corn8888 2012-09-06
  • 打赏
  • 举报
回复
值得支持一把
Leaveye 2012-09-06
  • 打赏
  • 举报
回复
MOORE FSM Door "blah blah"

START="开着"
END="离开"

"开着" -> "关着" [ "关上" ]
"关着" -> "开着" [ "打开" ]
"关着" -> "锁着" [ "锁上" ]
"锁着" -> "关着" [ "开锁" ]
"开着" -> "锁着" [ "关门锁上" ]
"锁着" -> "开着" [ "一并打开" ]
"锁着" -> "离开" [ "离开" ]


稍微亮一点。
sjjf 2012-09-06
  • 打赏
  • 举报
回复
good, 这是一个很好的建议 ,我会在下一版本加入这个特性的支持. 并再提供一个严格和宽松的编译选项.
Leaveye 2012-09-06
  • 打赏
  • 举报
回复
为什么不能像 graphviz 一样直接把字符串用来当作 identifier 呢?比如:
"开着" -> "关着" [ "关上" ];
_0筱筱0_ 2012-09-05
  • 打赏
  • 举报
回复
我的回复呢? 支持也会被删吗?
_0筱筱0_ 2012-09-05
  • 打赏
  • 举报
回复
这个必须支持下......
sjjf 2012-09-05
  • 打赏
  • 举报
回复
语法文件

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] [时间描述]\]
蓝蜘蛛 2012-09-05
  • 打赏
  • 举报
回复
支持楼主~
di_wq 2012-09-05
  • 打赏
  • 举报
回复
支持楼主一把,厉害啊,期待正式版的文档
MiceRice 2012-09-05
  • 打赏
  • 举报
回复
值得支持一把

62,614

社区成员

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

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