1

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

由于 7 层深嵌套的 if()s 不是我的“可维护和易于理解”的想法,我询问了如何以一种介于机器友好、用户友好和成本效益。显而易见的答案是使用可编译为 C++ 的特定领域语言,其中将编写实际的事件相关器。显而易见的问题是 DSL 应该是什么样子。

我最喜欢的建议是使用 UML 活动图,并将其编译为 C++。该图可能几乎完全由决策组成,活动仅在树的叶子上,作为决策过程得出的结论。本质上,该图是我的图形 DSL,然后应该在 C++ 中编译成一大堆 if()。虽然我仍然需要手工制作所有条件函数,但至少条件之间的互连应该由系统处理。

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

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

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

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

或者,如果失败了 - 哪些可以将该图表保存为我可以用自制的“编译器”解析的形式,以及如何创建该编译器。

当然也欢迎其他建议 - 也许是可以生成此类代码的老式流程图的工具?也许已经存在专门的 DSL 来创建我需要的东西?

4

2 回答 2

1

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

如果您可以在状态图中实现您的逻辑,则可以使用免费的QM Modeler。它生成 C++ 代码。它旨在与QP 活动对象框架一起使用,但您可以在不依赖 QP 的情况下使用 QM。(您也可以使用 Enterprise Architect 从状态图中生成代码。)

于 2013-01-11T15:31:20.513 回答
1

这个 URL 指出 UML 被表示为“一种 XMI 格式”——一种基于 XML 的标准,用于表示 UML。

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

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

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

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

于 2013-01-11T17:19:48.623 回答