FSM之SMC使用总结
Part1: Smc.jar state machine compiler usage
Reference:
http://smc.sourceforge.net/
(Updated February 16, 2015)
Downloads:
http://sourceforge.net/projects/smc/files/
1) show help:
$ java -jar ./Smc.jar -help
2) generate java (c, cpp, js, python, object-c ...) classes from user_defined.sm file:
$ java -jar Smc.jar -c++ user_defined.sm$ java -jar Smc.jar -graph -glevel 1 user_defined.sm
A Filename.dot file also generated (Filename should replaced by actural dot filename).
$ java -jar ./Smc.jar -java7 user_defined.sm
3) generate a workflow map
You need graphviz installed first, and add path to .../bin/dot.exe into system environments. in my pc, that is:
C:\DEVPACK\graphviz-2.38\release\bin
Now enter folder of Filename.dot generated in step 2), and type:
$ dot Filename.dot -Tpng -o Filename.png
Enjoy it!
Part2: Example
1) user_defined.sm. The only file we should created by hands
/////////////////////////////////////////////////////////////////////// // ColorTable.sm // -- ColorTable State Map for C++ classes auto-generation // // 1) generate c++ classes: // $ java -jar Smc.jar -c++ ColorTable.sm // // 2) generate graphviz dot graph: // $ java -jar Smc.jar -graph -glevel 1 ColorTable.sm // // see also: // http://graphviz.org/ // // Author: cheungmine // Copyright 2015-?, All rights reserved. // /////////////////////////////////////////////////////////////////////// %class ColorTable %header ColorTable.h %start ColorTableMap::Shuffle %map ColorTableMap %% /** * State { * Transition [Guard Condition] * EndState { * Action(s) * } * * Transition [context.getOwner().is_valid()] * EndState { * Action(s) * } * ... * } */ Shuffle Entry { enterShuffle(); } Exit { leaveShuffle(); } { Next [ context.getOwner().shuffleDone() ] Swappable { //=>user swap actions } } Swappable Entry { enterSwappable(); } Exit { leaveSwappable(); } { Next [context.getOwner().swapDone() && context.getOwner().canErase()] Erasable { } Next [context.getOwner().swapDone()] Shuffle { } } Erasable Entry { enterErasable(); } Exit { leaveErasable(); } { Next [ context.getOwner().eraseDone() ] Collapse { } } Collapse Entry { enterCollapse(); } Exit { leaveCollapse(); } { Next [context.getOwner().collapseDone() && context.getOwner().canErase()] Erasable { } Next [context.getOwner().collapseDone()] Crash { } } Crash Entry { enterCrash(); } Exit { leaveCrash(); } { Next [ context.getOwner().crashDone() && context.getOwner().canErase() ] Erasable { } Next [ context.getOwner().crashDone() ] Swappable { //=>user swap actions } } %%
2) generate all derived files(default is c++):
$ java -jar Smc.jar -graph -glevel 1 ColorTable.sm
3) generate flow map using graphviz:
$ dot ColorTable.dot -Tpng -o ColorTable.png
没图你说个毛! 以下上图:
Game Over!
时间: 2024-11-25 09:36:50