你知道任何开源状态机c + +代码生成器(这将在Linux上工作)?理想情况下,该工具将输出所有状态机逻辑和存根。它也会接受UML或人类可读清单文件作为输入。C++状态机生成器
回答
我见过的最接近的东西可能适合你,是StateProto。但它输出C#代码。
你应该看看StateProto和QHSM。开源项目在这里:http://code.google.com/p/gqhsm/
StateProto是开源的,输出函数可以修改为输出C++代码给你。但它使用代表。
我会建议您改用数据驱动设计。 StateProto将输出XML状态机,并且有C#代码来加载XML并从数据驱动状态机。
你可以在C++中找到大量的QHSM实现。我不知道是否有XML加载器可用。
您可能会发现我的STTCL框架很有趣。它不是一个生成器,但可用的(基本)类很好地映射到UML状态图定义。
http://makulik.github.com/sttcl/
看看开源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上。
看看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
你应该Yakindu看一看:http://statecharts.org/
- 1. 保存随机数生成器状态C++ 11
- 2. 不使用iostream保存C++ 11随机生成器的状态
- 3. 如何获取c#中随机数生成器的状态?
- 4. 状态图生成器
- 5. 基于增强状态机生成类
- 6. 可执行状态机代码生成
- 7. 从VHDL代码生成状态机图?
- 8. Silverlight项目容器生成器状态?
- 9. 随机生成器Objective-C
- 10. 从状态机模型生成C++代码yakindu
- 11. 在haskell中保存随机数生成器的状态
- 12. 设计一个简单的状态机生成器
- 13. 通过引用传递CUDA随机生成器状态
- 14. 在C++中保存并加载随机数生成器状态11
- 15. 随机数生成器帮助不生成随机数 - C
- 16. C++中的C++随机数生成器
- 17. 动态使用.Net框架生成状态机
- 18. 生成状态图拖/放
- 19. VHDL“生成” FSM状态
- 20. 机器人,setonclicklistner动态生成textviews
- 21. 静态伪随机字段生成器
- 22. C中的状态机#
- 23. 在有限状态机中,状态是否可以生成一个事件?
- 24. OpenMP C正态随机发生器
- 25. 真正的随机c#生成器
- 26. C++随机图生成器库
- 27. 从C生成机器代码
- 28. C中的独立随机生成器
- 29. c中的随机数生成器#
- 30. 动态生成C#
你看着[Boost.MSM](http://www.boost.org/libs/ MSM /)?它有一个EDSL意味着模仿UML并具有极好的运行时性能。 – ildjarn 2012-03-15 22:25:51
lex和yacc肯定会生成状态机,而g ++ :) – perreal 2012-03-15 22:26:36
我会建议[SMC](http://smc.sourceforge.net/),但它不支持UML。 – tinman 2012-03-15 22:43:39