【问题标题】:c++ state machine generator [closed]c ++状态机生成器[关闭]
【发布时间】:2012-04-01 12:18:10
【问题描述】:

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

【问题讨论】:

  • 你看过Boost.MSM吗?它具有旨在模仿 UML 的 EDSL,并具有出色的运行时性能。
  • lex 和 yacc 肯定会生成状态机,而 g++ :)
  • 我建议SMC,但它不支持UML。
  • @perreal:这也是我的第一个想法。这个问题太宽泛了。
  • 我发现这篇文章在security.hsr.ch/mse/projects/…987654323@这个话题上相当不错

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


【解决方案1】:

Ragel 口碑不错。

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

【讨论】:

  • 在 Ragel 上的 +1 - 通过 KISS 实现获得不错的运行时性能。
【解决方案2】:

你应该看看雅金杜:http://statecharts.org/

【讨论】:

    【解决方案3】:

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

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

      【讨论】:

        【解决方案5】:

        我见过的最接近你的可能是 StateProto。但它会输出 C# 代码。

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

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2020-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-26
            • 2011-08-25
            相关资源
            最近更新 更多