c++状态机生成器

c++ state machine generator

本文关键字:状态机 c++      更新时间:2023-10-16

您知道有任何开源状态机c++代码生成器(可以在linux上工作)吗?理想情况下,该工具将输出所有状态机逻辑和存根。它还将接受UML或人类可读的清单文件作为输入。

Ragel有着不错的声誉。

(我没有具体的经验)。

您应该看看Yakindu:http://statecharts.org/

看看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

您可能会发现我的STTCL框架很有趣。它不是生成器,但可用的(基类)可以很好地映射到UML状态图定义
http://makulik.github.com/sttcl/

我见过的最适合您的东西是StateProto。但它输出C#代码。

您应该查看StateProto和QHSM。开源项目在这里:http://code.google.com/p/gqhsm/

StateProto是开源的,可以修改输出函数为您输出c++代码。但它使用代理。

我建议您使用数据驱动的设计。StateProto将输出XML状态机,并且有C#代码来加载XML并从数据中驱动状态机。

您可以在c++中找到大量的QHSM实现。我不知道是否有可用的XML加载程序。

看看开源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上运行。