[发明专利]基于多模型的C语言程序代码规范构造方法有效
申请号: | 201710367175.X | 申请日: | 2017-05-23 |
公开(公告)号: | CN107943481B | 公开(公告)日: | 2021-01-26 |
发明(设计)人: | 周旻;顾明;孙家广;徐宝新 | 申请(专利权)人: | 清华大学;北京东方通科技股份有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F11/36 |
代理公司: | 北京律谱知识产权代理事务所(普通合伙) 11457 | 代理人: | 黄云铎 |
地址: | 10008*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 模型 语言 程序代码 规范 构造 方法 | ||
1.一种基于定制化的领域特定语言实现将C语言程序代码规范由自然语言定义形式,构造成形式化语言描述的形式的方法,其特征在于,包括以下步骤:
步骤1)、基于程序的源代码分析,建立行模型、分词流模型、抽象语法树模型、控制流图模型、函数调用图模型,共五种基本的程序语言结构特征定义模型,不同结构特征定义模型中的基本元素间存在一定的转换关系,五种模型和其基本元素间转化方法共同构造成融合的多模型的源代码结构特征定义模型;
行模型的构建与转化,是采用基本的文法分析,以换行符作为分隔字符,将程序代码切割成一行行的文本;每一行文本就对应着源代码的一个行模型基本对象;
分词流模型的构建与转化,是采用基本的分词分析,将空格、换行符作为分隔标识符,并将编程语言文法中定义的操作符、符号与保留关键字作为独立分词单元,从而把源代码拆解成为单个的token;
抽象语法树模型的构建与转化,是根据目标源程序使用的语言特性,从语法分析的角度,对程序源代码进行解析,从而建立源代码的抽象语法树;
控制流图模型的构建与转化,是对程序源代码进行控制流的分析,将每一条语句作为一个结点,语句的执行顺序作为有向边,得出程序执行的路径图;
函数调用图模型的构建与转化,是对程序的源代码中所有函数的定义与引用进行分析,解析函数定义中,各个函数的调用关系;
步骤2)、基于步骤1)所定义的源代码结构特征定义模型,定义领域特定语言PRDL,并确定该语言的语法、语义定义;所述领域特定语言PRDL是一种文本化的结构式查询语言,能将源代码结构特征定义模型中的关键元素组织成对程序源代码的语义约束,基于PRDL的语义,对程序源代码的诸多语法结构进行过滤,从而查询并且筛选出满足特定要求的代码结构或片段;
步骤3)、根据步骤2)中定义的PRDL语言特有语法、语义结构,在使用PRDL语言形式化描述代码规范过程中,实现针对PRDL的集成编辑环境,提供包含代码高亮、轮廓展示、语法补全编辑工具支持;
步骤4)、根据步骤1)-3)实现的支撑环境,将C语言程序代码规范“循环结构必须用大括号包围”转化为形式化语言文本的具体过程为:①分析代码规范的精确含义,分析并形成代码规范的“正例程序样例”与“反例程序样例”,理解代码规范的自然语义,并分解成各种查询模型的基本元素,确定它们各自的约束关系,其“正例程序样例”为所有被大括号包围的循环体,使用其“反例程序样例”:所有不被大括号包括的循环体;②分析涉及到的程序语法元素,并使用PRDL语言将查询过程书写成文本,查询不被大括号包括的循环体,查询对象为循环结构结点,其约束条件为循环结构的循环体中没有大括号包围,根据对于自然语义的理解,设计代码规范的形式化定义,在代码规范定义的构造过程中,通过编译环境自带的自动补全和提示来辅助理解,采用构造的形式化规范对程序代码进行检测;③对“正例程序样例”与“反例程序样例”进行人工检查,并重复步骤②直至所有“正例程序样例”被判定为符合规范,所有“反例程序样例”被判定为违反规范。
2.如权利要求1所述的方法,其特征在于,所述步骤1)中,
对于行模型的构建与转化,通过基本的文本分析,从字符串的角度来解析程序源代码的结构,构建源代码的行模型;通过查找行结束符对源代码内容进行直接分割,将程序逐行分解;
对于分词流模型的构建与转化,采用基本的分词分析,从文本的角度解析程序源代码的结构,将空格、换行符作为分隔标识,将编程语言中预设的操作符、符号与保留关键字作为独立分词单元,从而把源代码拆解成为单个的分词,分解所得的每一个分词将构成分词流模型中的基本元素,并且被实例化,构建分词流模型中的基本对象;
对于抽象语法树模型的构建与转化,根据目标源程序使用的语言特性,从语法分析的角度,对程序源代码进行解析,建立源代码的抽象语法树,抽象语法树上的每一个结点,都构成了抽象语法树模型中的一个基本对象;
对于控制流图模型的构建与转化,对程序源代码进行语句分析,将每一条语句作为一个结点,语句的执行顺序作为有向边,得出程序执行的路径图,即程序的控制流图,控制流图中的每一个结点都对应控制流图模型中的一个基本对象;
对于函数调用图模型的构建与转化,对程序的源代码中所有函数的定义进行分析,解析函数定义中各个函数的调用关系,将每一个函数作为一个结点,函数间的调用关系构成一个有向边,从而建立起源代码的函数调用图,其中,函数调用图的每一个节点对应函数调用模型的一个基本对象。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学;北京东方通科技股份有限公司,未经清华大学;北京东方通科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710367175.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:管理数据的方法
- 下一篇:为用户集中整合资源的新闻推荐方法