UML活动图作为DSL;转换为c++
UML activity diagram as DSL; converting to C++
我要写一个事件相关器。系统的一个基本部分将是一个巨大的决策树,它根据记录的状态和日志文件识别故障的根源,主要关注的问题之一是保持该树的可维护性——以程序员易于理解和编辑的格式编写。
由于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
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++