我一直在寻找一个好的状态机编译器,以便测试一些自定义网络协议。我查看了一些工具,如Yakindu,Ragel(编译器),SCXML(语言),但我不确定是否有任何工具可用于网络协议。
SCXML(语言)看起来不错,但我找不到任何专门用于C的编译器(scxmlcc用于C ++)。有没有人知道基于SCXML的C编译器? Yakindu工具看起来很有前景,但我不确定是否可以测试像BGP / OSPF这样的网络协议。任何人都可以对此提出任何指示吗? Ragel看起来也不错,但我不确定是否可以使用此编译器生成复杂的网络协议客户端。
我特别提到网络协议的原因是我还希望能够在“事件”发生后执行自定义例程,例如packet_create / packet_send(具有自定义数据包大小)等,作为“操作”的一部分。
我是否需要始终从状态图生成代码,或者有没有办法直接与状态交互? 我是FSM的新手,非常感谢任何帮助/建议/建议/链接。
答案 0 :(得分:5)
默认的Yakindu SCT C代码生成器生成与具体执行环境无关的纯C代码。这意味着您可以获得一块标准C代码,您可以手动将其集成到您自己的应用程序中。此手动集成意味着在应用程序和状态机之间映射事件,操作和变量。此外,您必须正确触发状态机执行。
您可以在user guide中找到有关该信息的一些信息。您还可以自定义代码生成器以满足您的需求,但只有在与应用程序的集成始终相同并且您希望集成多个或两个状态机时,这才有意义。
因此,如果您提供有关应用程序端API的更多信息,我可以提供一些提示如何与状态机集成。
答案 1 :(得分:2)
LOKI是一个新的应用程序,旨在为程序员和系统管理员提供一种与BGP网络交互的简便方法。用它来测试你的OSPF / BGP连接
答案 2 :(得分:2)
我们刚刚完成了我们的SCXML - > ANSI C转换。目前,除了调用之外,它可以完成所有操作。 Here是生成的ANSI C代码的示例,包含用户提供的回调和通用支架here。 2015年末MacBook Pro@3.1GHz上单个微步的性能测量值为here。
请注意,脚手架在C ++ 98中,因为我们必须连接到数据模型实现以传递SCXML IRP测试。生成的源代码是ANSI C。如果要转换SCXML状态图,可以使用uscxml-transform作为:
$ uscxml-transform -tc -i FILE_OR_URL -o GENERATED_HERE
例如,要在STDOUT上从SCXML IRP套件打印生成的test144 C代码:
$ uscxml-transform -tc -i https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/ecma/test144.scxml
生成的ANSI-C代码传递所有SCXML IRP测试,但是传递调用和自定义I / O处理器。