[发明专利]一种基于Clang程序结构的控制流程图自动生成方法有效

专利信息
申请号: 202010428445.5 申请日: 2020-05-20
公开(公告)号: CN111708572B 公开(公告)日: 2022-11-25
发明(设计)人: 王周恺;马维纲;王锋;黑新宏;陈浩;张毅坤 申请(专利权)人: 西安理工大学
主分类号: G06F8/75 分类号: G06F8/75
代理公司: 西安弘理专利事务所 61214 代理人: 弓长
地址: 710048 陕*** 国省代码: 陕西;61
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 clang 程序结构 控制 流程图 自动 生成 方法
【权利要求书】:

1.一种基于Clang程序结构的控制流程图自动生成方法,其特征在于,具体按照以下步骤实施:

步骤1,逐行读入数据库中的Clang程序结构分析器的分析结果;

分析结果包括程序编码块,本行程序代码所在的行数,本行代码相对于程序起始的偏移量,本行代码所占字节数,本行代码中的关键字相对于程序起始的偏移量以及本行中的关键字信息所占字节数;

步骤2,程序块编码分析;具体为:

步骤2.1,根据程序编码块判断基本显示结构,基本显示结构分别有For循环结构、While循环结构、Do-while循环结构、Switch-Case结构、If判断结构和Sequence结构,在此基础上,创建6张线性表,用于存储上述6种基本显示结构;

步骤2.2,记录、存储读入的基本显示结构,并分析它们之间的关联关系;

基本显示结构和程序编码块的第三和第四位之间的对应关系分别为:

For循环开始:30,For循环结束:32;While循环开始:40;While循环结束:42;Do-while循环开始:50;Do-while循环结束:54;Switch选择开始:20,有default时,Switch选择结束:24,无default时,Switch选择结束:25;Case结构开始:21;If判断开始:10,If判断结束:14;Else结构开始:12;

当读入的分析结果中第三位为3,则该结果所对应的显示图元为For循环结构,此时,创建一个For循环结构,并将该结构存入存放For结构的线性表中,再将该结果的第三和第四位综合在一起,如果第三四位结果为30,那么该分析结果所对应的是For循环的开始,此时,结合本行程序代码所在的行数,本行代码相对于程序起始的偏移量,本行代码所占字节数,通过计算字段偏移量的方法,得出相应For循环结构的开始条件、结构变量以及循环结束条件,将这些信息一一存入当前For结构中;而若第三四位结果为32,那么该分析结果所对应的是For循环的结束;当多个基本显示结构同时存在于同一个控制流程图时,对于顺序关系的处理方法为,当读入某个图元的开始,在创建图元的数据的结构时,为该图元赋一个全局编号,通过编号能确定不同结构之间的先后次序;对于嵌套关系,首先,判断是否还有未处理的、从数据库读入内存的程序编码块,如果有,则将该程序编码块从数据库中读入,开始处理,对该编码块的内容进行判断,判断所显示的基本显示结构和程序编码块之间的对应关系,如果当前程序编码块的第三四位为任意图元的开始,则创建相应的图元结构,读入并存储绘制该图元结构所需的基本信息,最后为该图元结构赋予全局编号,之后利用辅助栈结构判断不同图元间的嵌套关系,即对栈顶进行判断,如果栈顶有元素,则将当前图元的编号赋给栈顶元素的Children,再将当前图元压入栈内,并使得当前全局编号自增,如果栈顶没有元素,直接使当前图元进栈,同时全局编号自增;在该过程结束后,回到开始位置继续判断是否还有未处理的编码块,重复该步骤,直至处理完所有的编码块;

在处理过程中,若发现当前编码块不属于任何图元的开始部分,则开始判断当前编码块是否为任意图元的结束部分,如果发现当前编码块也不是任意图元的结束部分,则继续回到开始位置中判断是否还有未处理完的编码块,而如果当前编码块是任意图元的结束部分,那么则将相对应的栈顶元素出栈,并根据当前栈顶元素所表示的图元不同,将栈顶元素存入相应的6张线性表其中之一,在完成上述步骤后,回到开始位置继续处理后续编码块,直至所有在内存中的编码块被处理完为止,记录存储基本显示结构并分析其之间的关联关系;

步骤2.3,对跳转语句进行处理;

若当前程序编码块第三和第四位的值为21时,代表该程序编码块对应某case语句,此时,结合本行程序代码所在的行数,本行代码相对于程序起始的偏移量,本行代码所占字节数,通过计算字段偏移量的方法,获取该case语句的执行内容,即解析编码中的内容并存入caseterm[casenumber]中;将casejmp[casenumber]设置为0,表示尚无法确定当前case执行结束后如何跳转,此时,再将统计case个数的casenumber自增,为记录switch中下一个case做准备,完成上述流程后,记录case的执行体工作结束,然后,继续判断程序编码块第五位,若当前程序编码块第五位为2时,将casejmp[casenumber]设置为2;若当前程序编码块第五位为3时,将casejmp[casenumber]设置为3;若当前程序编码块第五位为4时,将casejmp[casenumber]设置为4;若当前程序编码块第五位为5时,将casejmp[casenumber]设置为5;即表示该case执行完后会进行break/continue/return/exit跳转;否则该case不含跳转,即执行完该case之后会执行下一个case;否则,即当前程序编码块第三和第四位的值不为21时,将当前程序编码块第五位的数字赋给栈顶元素的jmpflag[],表示该栈顶元素所表示的显示图元中,包含某种类型的跳转语句;若当前程序编码块第五位为2,将表示break跳转的2赋给当前栈顶元素的jmpflag[];若当前程序编码块第五位为3,将表示continue跳转的3赋给当前栈顶元素的jmpflag[];若当前程序编码块第五位为4,将表示return跳转的4赋给当前栈顶元素的jmpflag[];若当前程序编码块第五位为5,将表示exit跳转的5赋给当前栈顶元素的jmpflag[];

对else-if语句进行处理,若读入程序编码块的三、四位字段为12,则能确定当前行为else语句,此时判断klen字段,若klen字段为0,则表示else后不含任何内容,若后续的程序编码块为10,则当前的If结构一定是else-if结构;否则,在确定为else语句结构之后,其klen字段不为0,则表示else的执行体中有内容,则后续程序编码块若为10,表示当前的If结构与上一个If结构呈并列关系;

步骤2.4,组装分析结果,以配置文件的形式传递给Java程序;

在经历上述分析后,其结果呈现为6张线性表的形式,在生成xml文件时,需要遍历6张线性表,按照全局变量由小到大的顺序,开始进行信息的拼接;

For表中的每一个For元素,首先为其创建一个For,然后将该For元素在线性表中的名称赋给该For的name属性,使用Number全局变量/Number的方式记录该For元素的全局变量值,读取For元素中的内容,包括开始条件、结束条件、循环变化条件、以及该For元素包含哪些其他的显示结构图元、该For元素所包含的跳转,用java中的setfilter方法,替换上述读取内容中的关键字,规则如下:小于替换为lt;大于替换为gt;和号替换为amp;'

单引号替换为apos;引号替换为quot;使用forstart开始条件/forstart的格式记录该For元素的开始条件,使用forend结束条件/forend的格式记录该For元素的结束条件,使用forchange循环变化条件/forchange的格式记录该For元素的循环变化条件,使用children code=“x”children[x]/children的格式记录该For元素所包含的其他显示结构,使用mcjumpflag code=“x”mcjumpflag[x]/mcjumpflag的方式确定该For元素所包含的跳转,上述过程完成之后,创建/For,完成for元素的记录;对While、do-while、sequence、If、swtich的处理与For相同;

步骤3,控制流程图绘制,输出svg文件;具体为:

步骤3.1,根据程序块编码分析的结果,调用Java程序解析XML文件,生成Jgraph的图形创建代码;

首先java端程序接收由步骤2发来的转化完成信号,并读入已经生成的XML文件,在此基础上,利用JNI与Java端实现互操作;

步骤3.2,调用Jgraph绘制流程图,输出svg文件;

paintFlow方法:用于建立控制流程图,并以svg格式输出;setStyles方法:自定义图的样式,其中lx是菱形,ty是椭圆,jx是矩形,group是组;buildGraph方法:将图元组建成图,绘图语句按照“创建图元——创建边关系——创建组关系”的顺序进行生成。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安理工大学,未经西安理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202010428445.5/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top