当前位置: 首页 > 专利查询>清华大学专利>正文

基于多模型的C语言程序代码规范构造方法技术

技术编号:17779400 阅读:39 留言:0更新日期:2018-04-22 07:45
本发明专利技术首先针对源代码进行了五种代码特征定义模型的抽象化封装,并且通过程序元素间的属性关联实现了这五种代码特征定义模型的融合,为用户提供了一种融合的多维代码查询特征定义模型。使用文本式的查询语言PRDL,在解析PRDL的语义和执行其语法动作的同时,实现了对于目标程序源代码的对应分析和检查。通过使用本发明专利技术,用户能高效快捷的对编码规范规则进行形式化定义,并对代码进行自主检查,从而达到提高代码整合质量、提高编程效率的技术效果。

【技术实现步骤摘要】
基于多模型的C语言程序代码规范构造方法
本专利技术属于程序分析领域,特别涉及基于多模型的C语言程序代码规范描述。
技术介绍
随着软件系统日益复杂,编程语言自身强大的功能为程序员提供编程自由的同时也引入了麻烦。软件系统的开发一般是团队协作完成的,不同人的编程习惯和风格各异,对规范的忽视使得代码在整合和维护时安全隐患增多。在如今的软件开发过程中,人们越来越意识到规范化编码的重要性,特别是在对安全性要求极高的领域,如航空航天和汽车行业,针对编码规范问题制定了C编程规范集MISRA-C和航天型号软件C语言安全子集GJB-5369。目前已有的相关工具中主要提供三种编码规范的定义方式:一是通过配置检查项描述编码规范规则的语义,二是提供特定形式化语言的定义方法,第三种是提供开发接口供用户编程实现描述。在用户体验上,配置检查项和编程实现的方式在使用上对用户要求较高,且不适用于批量描述规则的情况,不及形式化语言让人容易接受。已有的形式化语言,如C++test提供的RuleWizard,虽然具有很强的通用性,且已对多个编码规范集合进行定义,但其描述的编码规范规则逻辑结构比较复杂,不易理解,在易用性上表现不佳。除此之外,部分编码规范检查工具并不能检查与控制流和数据流相关的编码规范规则。
技术实现思路
本专利技术的目的是实现一种构造C语言程序代码规范的方法,并且在这个方法的基础上提出了构造C语言程序代码规范的一般化方法。本方法首先针对源代码进行了五种代码特征定义模型的抽象化封装,并且通过程序元素间的属性关联实现了这五种代码特征定义模型的融合,为用户提供了一种融合的多维代码查询特征定义模型。该模型允许用户从多个维度来分析和查询代码元素。随后,本方法中还定义了一种文本式的查询语言——PRDL。用户可以使用这种语言来在上述的融合特征定义模型中进行查询。融合的代码特征定义模型与领域特定语言PRDL共同构成了一种代码分析的形式化查询模型。本方法中实现的这种形式化查询模型允许用户快速的构造代码规范的形式化语义:融合的特征定义模型使得用户能自由灵活的选择分析角度,PRDL具有简洁灵活的符号化语法,两者的结合使得代码规范的构造简介高效。最后,本方法在解析PRDL的语义和执行其语法动作的同时,实现了对于目标程序源代码的对应分析和检查。通过使用本专利技术设计的代码规范构造方法,用户能高效快捷的对编码规范规则进行形式化定义,并对代码进行自主检查,从而达到提高代码整合质量、提高编程效率的技术效果。本专利技术提出的基于定制化的领域特定语言实现将C语言程序代码规范由自然语言定义形式,构造成形式化语言描述的形式的方法,其特征在于,包括以下步骤:1)基于程序的源代码分析,建立行模型、分词流模型、抽象语法树模型、控制流图模型、函数调用图模型,共五种基本的程序语言结构特征定义模型,不同结构特征定义模型中的基本元素间存在一定的转换关系,五种模型和其基本元素间转化方法共同构造成融合的多模型的源代码结构特征定义模型;2)基于步骤1)所定义的源代码结构特征定义模型,定义领域特定语言PRDL,并确定该语言的语法、语义定义;所述领域特定语言PRDL是一种文本化的结构式查询语言,能将源代码结构特征定义模型中的关键元素组织成对程序源代码的语义约束,基于PRDL的语义,对程序源代码的诸多语法结构进行过滤,从而查询并且筛选出满足特定要求的代码结构或片段;3)根据步骤2)中定义的PRDL语言特有语法、语义结构,在使用PRDL语言形式化描述代码规范过程中,实现针对PRDL的集成编辑环境,提供包含代码高亮、轮廓展示、语法补全等编辑工具支持。4)根据步骤1)-3)实现的支撑环境,将C语言程序代码转化为形式化语言文本:①分析代码规范的精确含义,分析并形成代码规范的“正例程序样例”与“反例程序样例”;②分析涉及到的程序语法元素,并使用PRDL语言将查询过程书写成文本;③对“正例程序样例”与“正例程序样例”进行人工检查,并重复步骤②直至所有“正例程序样例”被判定为符合规则,所有“反例”被判定为违反规则。进一步地,所述步骤1)中,对于行模型的构建与转化,通过基本的文本分析,从字符串的角度来解析程序源代码的结构,构建源代码的行模型;通过查找行结束符对源代码内容进行直接分割,将程序逐行分解;对于分词流模型的构建与转化,采用基本的分词分析,从文本的角度解析程序源代码的结构,将空格、换行符作为分隔标识,将编程语言中预设的操作符、符号与保留关键字作为独立分词单元,从而把源代码拆解成为单个的分词,分解所得的每一个分词将构成分词流模型中的基本元素,并且被实例化,构建分词流模型中的基本对象;对于抽象语法树模型的构建与转化,根据目标源程序使用的语言特性,从语法分析的角度,对程序源代码进行解析,建立源代码的抽象语法树,抽象语法树上的每一个结点,都构成了抽象语法树模型中的系一个基本对象;对于控制流图模型的构建与转化,对程序源代码进行语句分析,将每一条语句作为一个结点,语句的执行顺序作为有向边,得出程序执行的路径图,即程序的控制流图,控制流图中的每一个结点都对应控制流图模型中的一个基本对象;对于函数调用图模型的构建与转化,对程序的源代码中所有函数的定义进行分析,解析函数定义中各个函数的调用关系,将每一个函数作为一个结点,函数间的调用关系构成一个有向边,从而建立起源代码的函数调用图,其中,函数调用图的每一个节点对应函数调用模型的一个基本对象。进一步地,所述步骤2)中实现的领域特定语言PRDL,PRDL是一种自定义的基于文本的声明式描述语言,其基本结构包括查询、过滤和计算表达式,PRDL能够使用步骤1)中的5种基础查询模型以及它们融合模型,进行查找和筛选,从而获取具有某种特定结构的代码片段。进一步地,基于所述步骤3)中说明的领域特定语言PRDL的集成编译环境,其包括PRDL的编辑界面,保存与读取,文本解析和语义动作处理。还包括语法高亮,轮廓展示,错误提示,自动补全等编辑工具支持。进一步地,通过抽象语法树模型的基本对象所存储的结点位置属性,获取结点在源代码中的起始行号,建立抽象语法树模型的基本对象与行模型的基本对象的映射关系,实现两者的互相转换;通过抽象语法树的基本对象所存储的结点内容,直接调用分词方法,获取结点内容的分词列表,从而建立抽象语法树模型的基本对象与分词流模型的基本对象的映射关系,实现两者的互相转换;通过抽象语法树模型的基本对象所存储的结点内容与上下文关系,可以建立抽象语法树结点与控制流图结点的对应关系,从而建立抽象语法树模型的基本对象与控制流图模型的基本对象的映射关系,实现两者之间的相互转换;通过抽象语法树模型的基本对象所存储的结点类型和内容信息,判断结点是否是函数相关结点,并且根据函数名的匹配关系,建立起部分抽象语法树结点与函数调用图结点的对应关系,建立抽象语法树模型的基本对象与函数调用图模型的基本对象的映射关系,实现两者之间的相互转换;通过行模型中存储的本行的文本内容,对其进行进一步的分词处理,可以得到这个行模型中的每一个分词流模型的基本元素,从而建立起分词流模型的基本对象与行模型中基本对象的映射关系,实现两者之间的相互转换。本专利技术的有益效果:本专利技术的方法是通过实现了一种基于多模型的C语言程序代码规范构造方法,并本文档来自技高网...
基于多模型的C语言程序代码规范构造方法

【技术保护点】
一种基于定制化的领域特定语言实现将C语言程序代码规范由自然语言定义形式,构造成形式化语言描述的形式的方法,其特征在于其特征在于,包括以下步骤:步骤1)、基于程序的源代码分析,建立行模型、分词流模型、抽象语法树模型、控制流图模型、函数调用图模型,共五种基本的程序语言结构特征定义模型,不同结构特征定义模型中的基本元素间存在一定的转换关系,五种模型和其基本元素间转化方法共同构造成融合的多模型的源代码结构特征定义模型;步骤2)、基于步骤1)所定义的源代码结构特征定义模型,定义领域特定语言PRDL,并确定该语言的语法、语义定义;所述领域特定语言PRDL是一种文本化的结构式查询语言,能将源代码结构特征定义模型中的关键元素组织成对程序源代码的语义约束,基于PRDL的语义,对程序源代码的诸多语法结构进行过滤,从而查询并且筛选出满足特定要求的代码结构或片段;步骤3)、根据步骤2)中定义的PRDL语言特有语法、语义结构,在使用PRDL语言形式化描述代码规范过程中,实现针对PRDL的集成编辑环境,提供包含代码高亮、轮廓展示、语法补全等编辑工具支持。步骤4)、根据步骤1)-3)实现的支撑环境,将C语言程序代码转化为形式化语言文本:①分析代码规范的精确含义,分析并形成代码规范的“正例程序样例”与“反例程序样例”;②分析涉及到的程序语法元素,并使用PRDL语言将查询过程书写成文本;③对“正例程序样例”与“正例程序样例”进行人工检查,并重复步骤②直至所有“正例程序样例”被判定为符合规则,所有“反例”被判定为违反规则。...

【技术特征摘要】
1.一种基于定制化的领域特定语言实现将C语言程序代码规范由自然语言定义形式,构造成形式化语言描述的形式的方法,其特征在于其特征在于,包括以下步骤:步骤1)、基于程序的源代码分析,建立行模型、分词流模型、抽象语法树模型、控制流图模型、函数调用图模型,共五种基本的程序语言结构特征定义模型,不同结构特征定义模型中的基本元素间存在一定的转换关系,五种模型和其基本元素间转化方法共同构造成融合的多模型的源代码结构特征定义模型;步骤2)、基于步骤1)所定义的源代码结构特征定义模型,定义领域特定语言PRDL,并确定该语言的语法、语义定义;所述领域特定语言PRDL是一种文本化的结构式查询语言,能将源代码结构特征定义模型中的关键元素组织成对程序源代码的语义约束,基于PRDL的语义,对程序源代码的诸多语法结构进行过滤,从而查询并且筛选出满足特定要求的代码结构或片段;步骤3)、根据步骤2)中定义的PRDL语言特有语法、语义结构,在使用PRDL语言形式化描述代码规范过程中,实现针对PRDL的集成编辑环境,提供包含代码高亮、轮廓展示、语法补全等编辑工具支持。步骤4)、根据步骤1)-3)实现的支撑环境,将C语言程序代码转化为形式化语言文本:①分析代码规范的精确含义,分析并形成代码规范的“正例程序样例”与“反例程序样例”;②分析涉及到的程序语法元素,并使用PRDL语言将查询过程书写成文本;③对“正例程序样例”与“正例程序样例”进行人工检查,并重复步骤②直至所有“正例程序样例”被判定为符合规则,所有“反例”被判定为违反规则。2.如权利要求1所述的方法,其特征在于,所述步骤1)中,对于行模型的构建与转化,通过基本的文本分析,从字符串的角度来解析程序源代码的结构,构建源代码的行模型;通过查找行结束符对源代码内容进行直接分割,将程序逐行分解;对于分词流模型的构建与转化,采用基本的分词分析,从文本的角度解析程序源代码的结构,将空格、换行符作为分隔标识,将编程语言中预设的操作符、符号与保留关键字作为独立分词单元,从而把源代码拆解成为单个的分词,分解所得的每一个分词将构成分词流模型中的基本元素,并且被实例化,构建分词流模型中的基本对象;对于抽象语法树模型的构建与转化,根据目标源程序使用的语言特性,从语法分析的角度,对程序源代码进行解析,建立源代码的抽象语法树,抽象语法树上的每一个结点,都构成了抽象语法树模型...

【专利技术属性】
技术研发人员:周旻顾明孙家广徐宝新
申请(专利权)人:清华大学北京东方通科技股份有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1