-
一、模型建模模块:
基于开源开发平台Eclipse,以图形方式创建和编辑模型元素,模型元素如下:
- 活动:初始活动、简单活动、复杂活动、结束活动;
- 状态:初始状态、状态、结束状态;
- 变迁:活动变迁、状态转移;
- XorSplit和XorJoin:条件分支和合并;
- AndSplit和AndJoin:同步并发分支和合并;
支持文本和form两种方式对模型进行数据定义,同时支持顺序、循环、条件分支和同步并发四种控制模式。建模结束后,可以将模型图以XML文件的形式保存并导出,XML文件中包括模型元素信息以及对应的矢量信息;
二、模型验证模块
(1)可达性验证:除开始和结束活动/状态外,其他节点既要有入度也要有出度;
(2)元素完整性验证:满足建模规范
(3)死锁性验证:
- 不允许出现循环交叉的情况;
- 不允许出现循环重复出现的情况;
(4)分支条件完整性验证:
- 每个XorSplit对应的分支路径,guard条件不能有交集
- 每个XorSplit对应的分支路径,guard条件取并集应该为1
针对分支进行检测:if(g1==true) else if(g2==ture) else if(g3==true)
三、代码生成模块:
将从图形化建模模块获取到的模型信息,转换为高质量的C语言代码,这些代码在经过相应的编译和链接之后可以在指定的目标平台上运行;
支持顺序结构、条件分支结构、循环结构、同步并发结构及其相互嵌套;
- 定义模型到目标语言(C语言)的映射规则;
- 解析XML格式存储的模型,将得到的信息以直观的数据结构进行存储;
- 设计代码生成算法;
- 代码进行规范化,输出完整的.h和.c文件;
方法1:基于模型重构的代码生成
根据提取的信息将模型转成有向图,设计算法识别出各个循环结构、分支结构、同步结构的开始和结束,划定结构作用域,同时设计了结构线性化算法将含有循环结构、分支结构、同步结构的有向图线性化,最后使用递归的方法从开始节点顺序进行代码生成。
参考论文:
王黎明, 王帼钕, 周明媛, 等. 程序流程图到代码的自动生成算法[J]. 西安电子科技大学学报, 2012, 39(06):70-77.
李文鑫. 基于模型的代码生成技术及软件可靠性分析的研究[D].哈尔滨工业大学,2019.
方法2:基于语法树结构的代码生成
语法树可以保存模型元素、元素之间的顺序结构、分支结构、循环结构、同步结构及各种嵌套组合关系,这是因为模型解析后生成的代码的整体结构是顺序结构,其中某些节点包含一些嵌套结构,嵌套关系是一种包含关系,例如 while 循环结构包含 if判断;根据提取的信息将模型转成语法树结构定义语法树中某一节点的左孩子节点保存顺序结构,右孩子节点保存嵌套结构。转成语法树结构,可以抽象的理解为将模型中的环全部消除,同时把循环、分支、同步转成了接近顺序的一种结构。考虑到结构的嵌套,使用递归的方法从根结点顺序进行代码生成。
参考论文:
秦超. 流程图代码自动生成算法的研究与实现[D].西安电子科技大学,2014.
更多推荐
C语言代码自动生成工具
发布评论