UML活动图作为DSL;转换为c++

UML activity diagram as DSL; converting to C++

本文关键字:转换 c++ DSL UML 活动      更新时间:2023-10-16

我要写一个事件相关器。系统的一个基本部分将是一个巨大的决策树,它根据记录的状态和日志文件识别故障的根源,主要关注的问题之一是保持该树的可维护性——以程序员易于理解和编辑的格式编写。

由于7层深度嵌套的if()s不是我的"可维护和易于理解"的想法,我询问了如何以一种介于机器友好,用户友好和成本效率之间的良好中间地带的形式表示它的想法。显而易见的答案是使用一种特定于领域的语言,这种语言可以编译为c++,在c++中编写实际的事件相关器。显而易见的问题是DSL应该是什么样的。

我最喜欢的建议是使用UML活动图,并将其编译为c++。图表可能几乎严格地由决策组成,活动仅在树的叶子上,作为决策过程得出的结论。从本质上讲,这个图就是我的图形化DSL,它应该在c++中被编译成一大堆if()。虽然我仍然需要手工编写所有的条件函数,但至少条件之间的相互联系应该由系统来处理。

现在,我应该使用什么工具来创建这个图呢?

由于"滚动你自己的"不是我的成本效益的想法,考虑到它最终是为一个设备创建一个单一的图表(即使它可能永远被编辑,因为发现了新的故障模式),我看了一下统一建模语言工具列表。

其中不少,包括那些在"生成的语言"中列出的"c++",但我知道现实从来没有那么好-我对根据类图预先填充类定义的一堆头文件不感兴趣。我需要一个包含决策树的文件;一堆条件语句,条件预先填充了决策函数调用,我将手工编写,结果作为特定的结论函数调用。

现在我的问题是,哪些工具可以做到这一点,使用起来不太难,也不贵——首选免费工具,但价格合理的商业工具也可以。

或者,失败-哪一个可以保存图表的形式,我可以用一个自制的"编译器"解析,以及如何接近创建编译器。

当然,其他的建议也是最受欢迎的——也许一个老式的流程图工具可以生成这样的代码?也许已经存在一个专门的DSL来创建我需要的东西?

Enterprise Architect可以从行为图生成c++代码,包括活动图。它有几个版本;支持行为代码生成的最低版本售价599美元。以下是用户指南的部分:从行为模型生成。除了代码生成之外,EA还提供了模拟、可追溯性和许多其他细节。

如果您可以在Statechart中实现您的逻辑,那么您可以使用免费的QM Modeler。它生成c++代码。它被设计为与QP活动对象框架一起工作,但是您可以使用QM而不依赖于QP。(您也可以使用Enterprise Architect从Statecharts生成代码。)

这个URL声明UML被表示为"一种XML格式"——一种基于XML的格式表示UML的标准。

http://documentation.softwareag.com/webmethods/tamino/ins441/advconc/FromUMLtoXML.htm

如果您使用此标准,您的数据可能与其他CASE工具:

大多数UML工具提供了将模型序列化为xml格式的功能。xml是一种基于xml的行业标准,用于在CASE工具之间交换元数据。因为它是基于XML的,所以可以在XSLT样式表的帮助下将XML转换为其他格式,如XML Schema。可以在http://www.aomodeling.org/上找到这样一个样式表的示例。

我猜这个XML可以用普通的c++ XML解析器解析,例如Xerces或(Windows) MSXML/XML DOM