聊聊自己的毕设--C代码生成工具
代码自动生成,即自动地生成可用目标语言代码,可以将开发人员从繁琐的代码编写工作中解放出来,是实现软件自动化的重要手段之一。代码自动生成的主要优势在于:降低了重复编码工作、提了升软件质量、形成了良好的代码规范、易于修改和维护,改变了传统的手工编码的方式,提高软件的开发效率。围绕代码自动生成这一问题,国内外研究学者从不同的角度出发,开展了众多工作,并积累了宝贵的研究经验。
一、模型建模模块:
基于开源开发平台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语言)的映射规则;
- 解析XML格式存储的模型,将得到的信息以直观的数据结构进行存储;
- 设计代码生成算法;
- 代码进行规范化,输出完整的.h和.c文件;
方法1:基于模型重构的代码生成
根据提取的信息将模型转成有向图,设计算法识别出各个循环结构、分支结构、同步结构的开始和结束,划定结构作用域,同时设计了结构线性化算法将含有循环结构、分支结构、同步结构的有向图线性化,最后使用递归的方法从开始节点顺序进行代码生成。
参考论文:
王黎明, 王帼钕, 周明媛, 等. 程序流程图到代码的自动生成算法[J]. 西安电子科技大学学报, 2012, 39(06):70-77.
李文鑫. 基于模型的代码生成技术及软件可靠性分析的研究[D].哈尔滨工业大学,2019.
方法2:基于语法树结构的代码生成
语法树可以保存模型元素、元素之间的顺序结构、分支结构、循环结构、同步结构及各种嵌套组合关系,这是因为模型解析后生成的代码的整体结构是顺序结构,其中某些节点包含一些嵌套结构,嵌套关系是一种包含关系,例如 while 循环结构包含 if判断;根据提取的信息将模型转成语法树结构定义语法树中某一节点的左孩子节点保存顺序结构,右孩子节点保存嵌套结构。转成语法树结构,可以抽象的理解为将模型中的环全部消除,同时把循环、分支、同步转成了接近顺序的一种结构。考虑到结构的嵌套,使用递归的方法从根结点顺序进行代码生成。
参考论文:
秦超. 流程图代码自动生成算法的研究与实现[D].西安电子科技大学,2014.
四、demo
多与导师交流讨论,多向师兄师姐请教;多看论文,做研究可以多看一些英文顶刊顶会、中文核心,做工程可以多看一下知网国内知名高校的硕士博士毕业论文;自己是专硕,所以毕设主要还是以工具为主,当然前期主要是借鉴知网上的研究生论文,后面由于可能会被抽到盲审之类的,自己又加了自己的一些想法进去;总之,做的领域肯定是已经有人做的了,要思考的就是如何和别人做的不一样,最好的方法就是应用到具体的场景中;