[发明专利]一种Python语言特征自动识别系统和方法有效
申请号: | 202010663123.9 | 申请日: | 2020-07-10 |
公开(公告)号: | CN111858322B | 公开(公告)日: | 2022-01-11 |
发明(设计)人: | 张昱;彭昀;胡明哲 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/75;G06F8/30;G06N5/04 |
代理公司: | 北京科迪生专利代理有限责任公司 11251 | 代理人: | 张乾桢 |
地址: | 230026 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 python 语言 特征 自动识别 系统 方法 | ||
本发明提出一种Python语言特征自动识别系统及方法,所述系统包括:AST生成模块;AST访问模块;语言特征识别模块,用于将AST访问模块收集的信息进行计算,与语言特征识别模式进行比对,识别每一个语言特征并且统计语言特征出现的次数;标准库扫描模块,用于扫描使用标准库函数而产生的语言特征;类型推断工具接口模块;报告生成模块,用于在整个扫描以及识别完毕后,输出语言特征的使用报告。本发明分析Python语言规范,总结归类出6大类共22种影响广泛的语言特征;然后提出对这些特征自动识别的方法,进一步分析了各领域对Python语言特征使用的差异以及Python语言特征的总体使用情况,为构建Python编译模块或者基于Python子集的领域专用语言以及分析和优化提供语言特征参考。
技术领域
本发明涉及编程语言和静态分析领域,尤其是一种Python软件中语言特征的自动识别方法。
背景技术
Python是目前非常流行的动态编程语言,它灵活多样的语言特征使得它被广泛用于各个计算机领域。目前已经有一些对不同编程语言的语言特征的研究,研究者们希望借此来发现语言特征在现有软件中的使用方式和缺陷,为进而研制提高编程语言性能和安全性的方法和工具奠定基础。2013年Dyer等人从大量的Java开源项目中研究了Java语言特征的使用情况,2018年Rodrigues等人从28个Ruby项目中分析了开发者对Ruby语言特征的使用方式,2019年Malloy等人研究了Python项目从Python2转向Python3的情况,2016年Lin等人研制工具PyCT对Python项目代码更新进行了细粒度的分析。
对于Python语言,研究者们对渐进定型、反射、元编程等语言特征进行了详细的分析:2012年Aseem Rastogi等人将Python类型推断与渐进定型这一特性结合起来,极大地减轻了开发者类型标注的负担;2019年John Toman等人针对反射、元编程等难以分析的特性构建了可应用于不同语言的Concerto分析框架以支持可靠的程序分析,并在Java子集上进行原型验证。这些工作都从Python语言特征的某些方面做了详细的研究,但不足的是缺乏对Python语言特征整体的系统研究,不能对各类特征自动扫描定位。
除了对Python语言特征的直接研究,目前也有一些针对Python代码执行效率等方面的优化,比如Python编译器Numba(2015年),将Python代码转换为LLVM IR并使用LLVM IR的优化工具链实施优化,以此来提高Python代码的执行效率。然而在将Python源代码转换成LLVM IR时需要进行类型推断,而Heterogenous List这类语言特征会给类型推断带来很大的困难,故Numba的编译仅支持Python子集。
发明内容
为了解决上述技术问题,本发明系统分析Python语言规范,总结归类出6大类共22种影响广泛的语言特征;然后提出对这些特征自动识别的方法并基于此设计和构建了一个Python程序的语言特征扫描系统和方法。本发明进一步使用所述系统分析了8个应用领域的17个Python项目,分析了各个领域对Python语言特征使用的差异以及Python语言特征的总体使用情况,为构建Python编译模块或者基于Python子集的领域专用语言以及分析和优化工具提供语言特征参考;
本发明的技术方案为:一种Python语言特征自动识别系统,包括:
AST生成模块,用于将Python源代码转换成抽象语法树AST;
AST访问模块,用于访问抽象语法树,为每一个AST节点定义访问函数以收集节点的信息;
语言特征识别模块,用于将AST访问模块收集的信息进行计算,与语言特征识别模式进行比对,识别每一个语言特征并且统计语言特征出现的次数;
标准库扫描模块,用于扫描使用标准库函数而产生的语言特征,提供标准库信息;
所述类型推断工具接口模块,用于与外部类型推断工具进行对接;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010663123.9/2.html,转载请声明来源钻瓜专利网。