【技术实现步骤摘要】
基于多模型的C语言程序代码规范构造方法
本专利技术属于程序分析领域,特别涉及基于多模型的C语言程序代码规范描述。
技术介绍
随着软件系统日益复杂,编程语言自身强大的功能为程序员提供编程自由的同时也引入了麻烦。软件系统的开发一般是团队协作完成的,不同人的编程习惯和风格各异,对规范的忽视使得代码在整合和维护时安全隐患增多。在如今的软件开发过程中,人们越来越意识到规范化编码的重要性,特别是在对安全性要求极高的领域,如航空航天和汽车行业,针对编码规范问题制定了C编程规范集MISRA-C和航天型号软件C语言安全子集GJB-5369。目前已有的相关工具中主要提供三种编码规范的定义方式:一是通过配置检查项描述编码规范规则的语义,二是提供特定形式化语言的定义方法,第三种是提供开发接口供用户编程实现描述。在用户体验上,配置检查项和编程实现的方式在使用上对用户要求较高,且不适用于批量描述规则的情况,不及形式化语言让人容易接受。已有的形式化语言,如C++test提供的RuleWizard,虽然具有很强的通用性,且已对多个编码规范集合进行定义,但其描述的编码规范规则逻辑结构比较复杂,不易理解,在易用性上表现不佳。除此之外,部分编码规范检查工具并不能检查与控制流和数据流相关的编码规范规则。
技术实现思路
本专利技术的目的是实现一种构造C语言程序代码规范的方法,并且在这个方法的基础上提出了构造C语言程序代码规范的一般化方法。本方法首先针对源代码进行了五种代码特征定义模型的抽象化封装,并且通过程序元素间的属性关联实现了这五种代码特征定义模型的融合,为用户提供了一种融合的多维代码查询特征定义 ...
【技术保护点】
一种基于定制化的领域特定语言实现将C语言程序代码规范由自然语言定义形式,构造成形式化语言描述的形式的方法,其特征在于其特征在于,包括以下步骤:步骤1)、基于程序的源代码分析,建立行模型、分词流模型、抽象语法树模型、控制流图模型、函数调用图模型,共五种基本的程序语言结构特征定义模型,不同结构特征定义模型中的基本元素间存在一定的转换关系,五种模型和其基本元素间转化方法共同构造成融合的多模型的源代码结构特征定义模型;步骤2)、基于步骤1)所定义的源代码结构特征定义模型,定义领域特定语言PRDL,并确定该语言的语法、语义定义;所述领域特定语言PRDL是一种文本化的结构式查询语言,能将源代码结构特征定义模型中的关键元素组织成对程序源代码的语义约束,基于PRDL的语义,对程序源代码的诸多语法结构进行过滤,从而查询并且筛选出满足特定要求的代码结构或片段;步骤3)、根据步骤2)中定义的PRDL语言特有语法、语义结构,在使用PRDL语言形式化描述代码规范过程中,实现针对PRDL的集成编辑环境,提供包含代码高亮、轮廓展示、语法补全等编辑工具支持。步骤4)、根据步骤1)-3)实现的支撑环境,将C语言程序代码 ...
【技术特征摘要】
1.一种基于定制化的领域特定语言实现将C语言程序代码规范由自然语言定义形式,构造成形式化语言描述的形式的方法,其特征在于其特征在于,包括以下步骤:步骤1)、基于程序的源代码分析,建立行模型、分词流模型、抽象语法树模型、控制流图模型、函数调用图模型,共五种基本的程序语言结构特征定义模型,不同结构特征定义模型中的基本元素间存在一定的转换关系,五种模型和其基本元素间转化方法共同构造成融合的多模型的源代码结构特征定义模型;步骤2)、基于步骤1)所定义的源代码结构特征定义模型,定义领域特定语言PRDL,并确定该语言的语法、语义定义;所述领域特定语言PRDL是一种文本化的结构式查询语言,能将源代码结构特征定义模型中的关键元素组织成对程序源代码的语义约束,基于PRDL的语义,对程序源代码的诸多语法结构进行过滤,从而查询并且筛选出满足特定要求的代码结构或片段;步骤3)、根据步骤2)中定义的PRDL语言特有语法、语义结构,在使用PRDL语言形式化描述代码规范过程中,实现针对PRDL的集成编辑环境,提供包含代码高亮、轮廓展示、语法补全等编辑工具支持。步骤4)、根据步骤1)-3)实现的支撑环境,将C语言程序代码转化为形式化语言文本:①分析代码规范的精确含义,分析并形成代码规范的“正例程序样例”与“反例程序样例”;②分析涉及到的程序语法元素,并使用PRDL语言将查询过程书写成文本;③对“正例程序样例”与“正例程序样例”进行人工检查,并重复步骤②直至所有“正例程序样例”被判定为符合规则,所有“反例”被判定为违反规则。2.如权利要求1所述的方法,其特征在于,所述步骤1)中,对于行模型的构建与转化,通过基本的文本分析,从字符串的角度来解析程序源代码的结构,构建源代码的行模型;通过查找行结束符对源代码内容进行直接分割,将程序逐行分解;对于分词流模型的构建与转化,采用基本的分词分析,从文本的角度解析程序源代码的结构,将空格、换行符作为分隔标识,将编程语言中预设的操作符、符号与保留关键字作为独立分词单元,从而把源代码拆解成为单个的分词,分解所得的每一个分词将构成分词流模型中的基本元素,并且被实例化,构建分词流模型中的基本对象;对于抽象语法树模型的构建与转化,根据目标源程序使用的语言特性,从语法分析的角度,对程序源代码进行解析,建立源代码的抽象语法树,抽象语法树上的每一个结点,都构成了抽象语法树模型...
【专利技术属性】
技术研发人员:周旻,顾明,孙家广,徐宝新,
申请(专利权)人:清华大学,北京东方通科技股份有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。