Python静态类型分析及其应用

来源 :南京大学 | 被引量 : 0次 | 上传用户:peng23
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
Python作为一种面向对象的动态类型语言,因其语法简单、有一组功能完备的标准库,且能轻松完成很多常见任务,而被越来越广泛地使用。但是,由于采用动态类型系统,Python虚拟机在程序运行时才会进行类型检查,在编译时不会检查对象是否拥有被调用的方法或属性,这就导致Python无法在编译时进行类型错误检查,也无法提供显式的类型信息以及当前变量拥有的属性和方法。为了解决上述问题,本文提出并实现了针对Python程序的静态类型分析方法,并将其应用于程序的编译时类型错误检查。该方法是一套完整的解决方案,包括定义完备的类型标注系统,将类型信息进行抽象和封装,并将类型组织起来;对源程序进行预处理,转换为中间形式;对预处理后的程序进行类型注释,并对内置模块、类、方法等进行模拟和注释;采用基于约束图的类型推导算法,将程序规约到标注系统中,从而得到程序中每个变量的类型信息。使用这些类型信息,可以对程序进行类型错误检查,并集成于IDE中辅助程序开发,本文通过案例说明了如何进行类型错误检查。本文选取了标准库和Github上的开源程序作为实验对象,统计了本文方法的时间开销,以及变量类型集合的分布、注释率、召回率和准确率等信息,验证了本文方法的有效性。本文主要包括以下工作:第一,通过对源程序进行预处理构建底层框架。将Python中复杂的语法元素转换为简单形式,同时将复杂的语句转换为一组等价的简单语句,将程序中变量、控制结构等程序信息保存在特定数据结构中,并为上层的分析工作提供接口。第二,构建了完备的类型标注系统,类型标注系统抽象并封装了类型信息、类型间的关系以及类型支持的操作,通过类型注释与类型推导将Python源程序规约到此类型标注系统中。第三,通过类型注释和类型推导,获取类型信息,并对内置模块、类、函数等进行模拟和注释。在类、函数等定义时进行类型注释,同时Python解释器中集成了大量使用C语言实现的内置模块、类、函数等,在Python程序中可以引用这些内置模块和函数,但无法分析其类型信息,所以本文使用Python模拟了这些内置模块的实现,并对其进行类型注释。采用基于约束图的类型推导算法,迭代扫描程序的每条语句,构造变量间的类型约束图,在变量类型集合变化时通过约束图传播,推导出变量的类型集合。第四,进行编译时的静态类型错误检查;同时提供给开发人员程序中每个变量的属性、方法,辅助开发。本文采用基于约束的类型错误检查算法,通过定义约束、使用自动化算法生成约束、应用错误检查算法,检测表达式匹配错误、函数调用错误、可用属性错误等类型错误。
其他文献
对中考阅读试题的类型归纳是中考备考的开始。本文"对症下药",试图对此类试题提供解答技巧。
针对某大型火力发电厂一次风机频繁雷击跳闸的故障,通过现场的试验分析,发现一次风机附近的烟囱将雷电流引入到主接地网,使附近地电位抬升,造成一次风机进线电缆接头多次发生
新中国成立之后,连环画的创作得到了国家的大力支持,连环画的创作人数以相对的优势,并且在社会环境的作用下不断的扩大。五六十年代,《连环画报》的出现也使得连环画在社会上
新媒体正在潜移默化地改变人们的生活,本文主要从网络短视频出发,探究其对大学生群体消费观的影响,并提出通过短视频来帮助大学生树立正确消费观的建议。
厚度或质量连续分布技术对车身薄壁结构的轻量化和性能设计有着非常重要,甚至起到决定性的作用,从设计方法上研究连续变厚度结构在车身零部件中的耐撞性应用是安全性设计所需
[目的]为杂交鳢的苗种培育及鱼病防治提供参考。[方法]在室内静水条件下,采用常规生物毒性方法研究6种常见药物(甲苯咪唑、铜铁合剂、硫酸铜、敌百虫、三氯异氰尿酸、甲醛溶液
在日光温室湿度预测模型建模中,由于输入因子间存在复杂耦合关系以及冗余的条件属性,导致网络训练难以收敛且精度不高.选用影响日光温室湿度的环境因子组成数据样本,采用主成
知识经济时代,企业对知识型人才的争夺最终导致了企业缺乏稳定的员工队伍,以及员工对企业忠诚度的缺乏。为何会出现此种状况,企业又该如何对员工忠诚度进行有效的管理,本文将一一
文章介绍了一种电缆故障测试系统。该系统有8051单片机、多路选择开关和比较器等模块组成。系统可用来检测长距离、多芯电缆的多种常见故障。可适用于航天、航空、通信、工业
目的:探讨细胞极性蛋白CRB3诱导乳腺癌他莫昔芬耐药细胞LCC2凋亡的作用机制。方法:运用免疫组织化学和WesternBlot技术分析CRB3在乳腺癌他莫昔芬耐药组织和细胞中的表达情况,