您是否了解任何开源状态机c ++代码生成器(可在Linux上运行)?理想情况下,该工具将输出所有状态机逻辑和存根。它也会接受UML或人类可读的清单文件作为输入。
答案 0 :(得分:5)
你应该看看Yakindu:http://statecharts.org/
答案 1 :(得分:4)
Ragel有很好的声誉。
(我没有具体经验)。
答案 2 :(得分:1)
您可能会发现我的STTCL框架很有趣。它不是生成器,但可用(基础)类很好地映射到UML状态图定义 http://makulik.github.com/sttcl/
答案 3 :(得分:1)
看看Thingml。它为类似UML的状态机提供了一个文本语法(独立于C)。类似的东西:
import "../hardware/bricks/led.thingml"
thing Blink includes LedMsgs, TimerMsgs
{
required port HW
{
sends led_toggle, timer_start
receives timer_timeout
}
statechart BlinkImpl init Blinking
{
state Blinking
{
on entry HW!timer_start (1000)
transition -> Blinking
event HW?timer_timeout
action HW!led_toggle ()
}
}
}
ThingML可以生成可以轻松嵌入到C ++程序中的C代码。它实际上可以生成多个存根。我们确实可以生成完全的操作代码。当然,在涉及低级实现细节时,我们提供了将ThingML代码与C代码混合的方法。
请注意,我们还定位Java和JavaScript
答案 4 :(得分:0)
我见过的最接近你的可能是StateProto。但它输出C#代码。
您应该查看StateProto和QHSM。开源项目在这里:http://code.google.com/p/gqhsm/
StateProto是开源的,可以修改输出函数以输出c ++代码。但它使用代表。
我建议您使用数据驱动设计。 StateProto将输出XML状态机,并且有C#代码来加载XML并从数据中驱动状态机。
您可以在c ++中找到大量QHSM实现。我不知道是否有可用的XML加载器。
答案 5 :(得分:0)
看一下开源的QP / C ++状态机框架和免费的QM建模工具(参见http://www.state-machine.com)。 QP / C ++框架支持分层状态机(UML状态图),并允许您同时执行多个此类状态机。 QP / C ++已移植到Linux(参见http://www.state-machine.com/linux)。
现在,关于代码生成器,免费的QM建模工具(参见http://www.state-machine.com/qm)允许您绘制状态机图并为QP / C ++框架生成C ++代码。 QM本身是跨平台的,可以在Linux,Windows和Mac OS X上运行。