[发明专利]一种基于类型标注的Python程序类型推导方法有效
申请号: | 201910210830.X | 申请日: | 2019-03-15 |
公开(公告)号: | CN111694726B | 公开(公告)日: | 2022-04-05 |
发明(设计)人: | 陈林;马洪跃;许蕾;罗阳 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 210023 江苏省南*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 类型 标注 python 程序 推导 方法 | ||
1.一种基于类型标注的Python程序类型推导方法,特征在于基于类型标注,在对Python程序的类型推导过程中,检查类型错误并进行程序节点的类型标注等级分析,实现了一个类型标注分析引擎,比较程序节点的标注等级高低,提醒开发者哪些变量或者函数需要进行类型标注,提高类型标注比率,显著提高标注效率;同时将强类型引入Python将使得开发者对代码的再次理解和二次开发变得更加容易,同时减少程序漏洞的产生;该方法包括以下步骤:
1)将开发者经过类型标注开发的Python程序代码转化为抽象语法树;使用Python3对抽象语法树类型标注的支持,针对更加丰富的类型进行标注,对官方提供的抽象语法树生成方法进行了特殊定制,并使用面向对象编程将抽象语法树表示为内存中的结构化对象,便于后续的程序分析;
2)进行类型推导;利用抽象解释的方法进行程序全局的过程间类型推导,同时收集类型信息并检查类型错误和进行节点的标注等级分析;针对类型标注等级分析,使用Ranking算法,量化程序节点是否标注对类型推导的贡献程度,查找出有利于类型推导的语法树节点;
3)返回步骤1)再次进行类型标注和类型缺陷修复,并重新进行类型推导和类型标注分析,直到目前的静态类型代码满足开发者的需求为止;
4)生成静态类型池;将前几个步骤中标注的类型、推导出的类型进行进一步的汇总,判断局部代码段是否符合静态类型,如果符合,则将其加入静态类型池,提供给JIT进行优化;
定义1:抽象语法树是源代码的语法结构的树状表示,树上的每个节点都表示源代码中的一种结构;
定义2:类型标注是添加到源代码中的变量的类型信息;
定义3:抽象解释是一种类似解释器行为的程序对源代码按行求值的程序分析方法,和解释器不同的是数据流不再是原先的具体值,而是由一种抽象值代替,本文中使用的抽象值是类型;
定义4:过程间类型推导指程序分析过程中关注程序执行路径信息,使类型推导更加精确;
定义5:Ranking是对变量进行的等级划分,Ranking值越高代表越重要;
定义6:有利于类型推导指的是对于相关联的代码块,其中一部分经过类型标注,那些未进行标注的语法树节点影响了整个代码块的类型标注,即通过开发者标注将会很大程度上提高代码块的静态类型比率;
定义7:符合完全静态类型的代码段指的是一个函数或者一个类或者一系列代码的执行中,所有的变量类型是确定的;
定义8:静态类型是指在编译时期被确定的变量类型,在动态类型语言中,类型只有在运行时期,在特定时刻,特定上下文中被确定下来。
2.根据权利要求1所述的基于类型标注的Python 程序类型推导方法,其特征在于,在步骤2)的标注等级分析过程中,抽象解释代码的同时,为每个节点预先给定一个Ranking值。
3.根据权利要求1所述的基于类型标注的Python 程序类型推导方法,其特征在于,在步骤3)中,根据步骤2)中输出的分析结果:类型错误和程序节点的类型标注等级,优先推荐标注等级高的程序节点给开发者,待开发者完善代码,修复类型缺陷代码,以及添加更多的类型标注后,再次执行上述的1)、 2)步骤,直到静态类型代码比率达到一定比率或者达到开发者的需求程度为止,这个过程需要人为控制,产生的结果很大程度上受人的需求和软件开发场景的影响。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910210830.X/1.html,转载请声明来源钻瓜专利网。