c ++状态机生成器

时间:2012-03-15 22:23:20

标签: c++ code-generation state-machine

您是否了解任何开源状态机c ++代码生成器(可在Linux上运行)?理想情况下,该工具将输出所有状态机逻辑和存根。它也会接受UML或人类可读的清单文件作为输入。

6 个答案:

答案 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上运行。