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

c++;状态机生成器 你知道有什么开源状态机C++代码生成器(在Linux上工作吗?)理想情况下,该工具将输出所有状态机逻辑和存根。它还将接受UML或人类可读的清单文件作为输入,c++,code-generation,state-machine,C++,Code Generation,State Machine,有很好的声誉 (我没有这方面的具体经验)。我见过的最适合你的东西是StateProto。但它输出C#代码 您应该查看StateProto和QHSM。开源项目在这里: StestEndoto是开源的,可以修改输出函数,为您输出C++代码。但它使用代理 我建议您改用数据驱动的设计。StateProto将输出XML状态机,并且有C#代码来加载XML并从数据驱动状态机 你可以在C++中找到大量的QHSM实现。我不知道是否有XML加载器可用。您可能会发现我的STTCL框架很有趣。它不是一个生成器,但可用

有很好的声誉


(我没有这方面的具体经验)。

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

您应该查看StateProto和QHSM。开源项目在这里:

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

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


<>你可以在C++中找到大量的QHSM实现。我不知道是否有XML加载器可用。

您可能会发现我的STTCL框架很有趣。它不是一个生成器,但可用的(基本)类非常好地映射到UML状态图定义。

看看开源的QP/C++状态机框架和免费的QM建模工具(请参阅)。QP/C++框架支持分层状态机(UML状态图),并允许您同时执行多个这样的状态机。QP/C++已经移植到Linux(请参阅)

现在,关于代码生成器,自由QM建模工具(见)允许您绘制状态机图并生成QP/C++框架的C++代码。QM本身是跨平台的,运行在Linux、Windows和Mac OS X上。

请看一看。它为类似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 () 
        }
    }
}

THIGML可以生成C代码,可以很容易地嵌入到C++程序中。它实际上可以生成多个存根。我们确实可以生成完全可操作的代码。当然,当涉及到底层实现细节时,我们提供了将ThingML代码与C代码混合的方法


请注意,我们还针对Java和JavaScript

您应该看看Yakindu:

您看过吗?它有一个模拟UML的EDSL,运行时性能极佳。lex和yacc肯定会生成状态机,g++:)我建议,但它不支持UML。@perreal:这也是我的第一个想法。问题太宽泛了,我发现这篇文章在Ragel上的主题+1上做得相当不错,这是一个KISS实现的体面的运行时性能。