[发明专利]基于全局分析的并行错误模式匹配方法在审
申请号: | 201710442497.6 | 申请日: | 2017-06-13 |
公开(公告)号: | CN107273289A | 公开(公告)日: | 2017-10-20 |
发明(设计)人: | 郑炜;蔺军;胡圣佑;黄月明;冯晨;刘文兴 | 申请(专利权)人: | 西北工业大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西北工业大学专利中心61204 | 代理人: | 王鲜凯 |
地址: | 710072 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于全局分析的并行错误模式匹配方法,用于解决现有并行错误模式匹配方法实用性差的技术问题。技术方案是首先将源程序分解成单词符号串,形成相应的符号表,提供所需的符号节点。接着将输入字符串识别为单词符号流,生成具有中间节点的抽象语法树。再对变量名字和操作符进行处理生成标准形式的抽象语法树。之后,根据生成的抽象语法树对单个过程代码对象构造控制流图。在此基础上,为整个程序代码构建函数调用图,对图中每一个节点的控制流图进行遍历,利用已总结的错误模式与源程序进行匹配得出具体错误的位置。本发明使用并行错误模式与程序当中可能会出现错误的代码进行匹配得出错误定位的结果,实用性好。 | ||
搜索关键词: | 基于 全局 分析 并行 错误 模式 匹配 方法 | ||
【主权项】:
一种基于全局分析的并行错误模式匹配方法,其特征在于包括以下步骤:步骤一、创建抽象语法树;词法分析器逐行对源代码进行自左向右的扫描,将源代码分解成编程语言中一个个字符串形式的基本单词符号;与此同时,词法分析器将这些分解出来的基本单词符号Token化,标记基本单词符号所在的行,利用Lexer类中的lex方法对Token进行访问与查找;将源代码分解成字符串形式的单词符号,并返回一个用来保存词法分析器分解出的所有基本单词符号的TokenCollection类型对象;定义一个四元组(Vn,Vt,P,S),其中Vn为非终结符集,Vt为终结符集,且P是形如U:=u的规则集合,满足U∈Vn,u∈(Vn∪Vt);S是开始符,且S∈Vt,Vn,Vt,P均为有穷非空集;集合P详细地反映了对应编程语言的语法规则和结构,根据集合P反映的规则,编写语法分析程序,将产生的TokenCollection类型对象作为语法分析程序的输入,经过分析之后产生单词符号流,生成具有中间节点的抽象语法树;通过对名字和操作符的处理将具有中间节点的语法树转变为一种标准形式,标准形式中包括表示类型信息的对象和符号表;构建成功的抽象语法树包括多种类型的节点,通过按类型分层的策略来组织各种节点,按照某类节点对应的语义规则设定相应的方法来处理,对同一类型层次上的一系列节点采取同一种语义动作处理;步骤二、根据已生成的抽象语法树,构建控制流图;使用一个栈跟踪控制流图的生成过程;通过遍历语法树上的每一个节点,根据相应的类型,做出不同的处理:a)对于表达式节点,首先,构造AST节点所对应的表达式语句的CFG节点;之后,进行栈顶元素的处理,生成之前分析过的节点对应的语句和本表达式语句之间的控制流边,由栈顶的状态和类型,改变或出栈栈顶元素;最后,将表达式语句的CFG节点信息压栈;b)对于if语句节点,首先,生成if语句的条件语句的CFG节点;处理栈顶元素,生成之前AST节点对应语句和if条件语句之间的控制流边,由栈顶元素的状态和类型,改变或出栈栈顶元素;将if条件语句的CFG节点压栈;之后,递归分析if语句的then部分,生成对应的控制流图;最后,将if语句else部分的边终点语句未处理的控制流边存储到if的条件语句所对应的栈元素的未完成链中,以后处理,栈顶元素出栈;c)对于while语句,生成while的条件语句的CFG节点;处理栈顶元素,生成之前AST节点对应语句和while条件语句之间的控制流边,由栈顶元素的状态和类型,改变或出栈栈顶元素;将while语句的条件语句的控制流图节点压栈;递归分析while的循环体,生成控制流图;生成栈顶元素对应语句到while条件语句的控制流边,处理一些边终点为while语句的条件语句的控制流边,将其生成,栈顶出栈;d)对于break语句,生成break语句所对应的CFG节点;处理栈顶元素,生成之前AST节点对应语句和break条件语句之间的控制流边,由栈顶元素的状态和类型,改变或出栈栈顶元素;将break语句的CFG信息压栈;e)对于continue语句,生成continue语句所对应的CFG节点;处理栈顶元素,生成之前AST节点对应语句和continue条件语句之间的控制流边,由栈顶元素的状态和类型,改变或出栈栈顶元素,将continue语句的CFG信息压栈;f)对于for语句和do语句,使用while语句的方式进行转换;对于switch语句使用if语句的方式进行转换;最终将抽象语法树转换为对应的控制流图;步骤三、构造函数调用图;给定一个程序P,将程序p划分为函数p1,p2,…,pn的形式;之后将函数组成相应的集合形式{p1,p2,...,pn},并用N表示,使用S表示调用地点集合,用E表示边的集合且边e=<pi,sk,pj>表示pi中的调用地点sk调用了函数pj;那么P的调用图最后表示为G=<N,S,E>;步骤四、对函数调用图中节点的控制流图进行遍历同时进行错误模式匹配得出错误定位结果;为了衡量错误定位的效果,定义相应的指标:a)误报率DR:误报率是指已检测出来的匹配点中,被错误匹配的点的个数IPN(M,A,P)与程序中包含的匹配点数目IP(M,A,P)的比例;P为待测程序,M为缺陷模式,A表示使用的匹配算法;DistortRatio=IPN(M,A,P)IP(M,A,P)---(1)]]>b)缺陷检测率DDR:缺陷检测率是指正确匹配的点的个数IPY(M,A,P)与程序中包含的匹配点数目IP(M,A,P)的比例;P为待测程序,M为缺陷模式,A表示使用的匹配算法;DefectDetectingRatio=IPY(M,A,P)IP(M,A,P)---(2)]]>c)准确率CR:准确率是指已正确匹配的点的个数IPY(M,A,P)与匹配结果不确定的点的个数IPU(M,A,P)之和与程序中包含的总匹配点数目IP(M,A,P)的比例;P为待测程序,M为缺陷模式,A表示使用的匹配算法;CorrecrtRatio=IPY(M,A,P)+IPU(M,A,P)IP(M,A,P)---(3)]]>至此,基于全局分析的并行错误模式匹配完成。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西北工业大学,未经西北工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201710442497.6/,转载请声明来源钻瓜专利网。