[发明专利]一种Python语言特征自动识别系统和方法有效
申请号: | 202010663123.9 | 申请日: | 2020-07-10 |
公开(公告)号: | CN111858322B | 公开(公告)日: | 2022-01-11 |
发明(设计)人: | 张昱;彭昀;胡明哲 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/75;G06F8/30;G06N5/04 |
代理公司: | 北京科迪生专利代理有限责任公司 11251 | 代理人: | 张乾桢 |
地址: | 230026 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 python 语言 特征 自动识别 系统 方法 | ||
1.一种Python语言特征自动识别系统,其特征在于,包括:
AST生成模块,用于将Python源代码转换成抽象语法树AST;
AST访问模块,用于访问抽象语法树,为每一种AST节点定义访问函数以收集节点的信息;
语言特征识别模块,用于将AST访问模块收集的信息进行计算,与语言特征识别模式进行比对,识别每一个语言特征并且统计语言特征出现的次数;
识别模式构建模块,用于针对选定的语言特征,通过分析它们在Python语言规范中的定义,为每一种语言特征构建对应的识别模式,所述识别模式会被语言特征识别模块采用以识别各种语言特征的使用次数;
所述识别模式构建模块所构建的识别模式类型包括简单识别模式和复杂识别模式,
所述简单识别模式是指:对于只需要使用到某一部分的代码信息的语言特征,直接基于源代码来构建识别模式;
所述复杂识别模式包括:
对于需要使用到全局信息,基于计算后的信息构建识别模式,即需要在所有类都扫描完毕并构建继承关系链信息之后才能明确;
对于需要类型信息进行识别的语言特征,构建基于第三方工具提供的类型信息的识别模式;
对于与Python标准库有关联的语言特征,构建基于源代码与标准库的共同信息的识别模式;
具体的,所述的复杂识别模式包括:
1)参数多态
实际中有两种参数多态的使用情况:Python程序直接从Python的标准库调用具有参数多态特性的函数,并且在源代码中不存在它们的定义;或者Python程序中定义了一些函数,对其的调用体现了参数多态特性;对于第一种情况,系统提前扫描Python的标准库,查找具有参数多态特性的所有标准函数,并将这些信息预先以标准库摘要的形式存储为文件;当系统在源代码的函数调用中找不到被调用函数的定义时,它将转而搜索标准库摘要来确定这个函数是否是标准库函数;对于第二种情况,系统使用类型推断工具来帮助推断函数的类型;如果一个函数接受不止一种类型的参数,则类型推断工具会列出所有可能的参数类型;因此,系统会检查类型推断工具给出的参数类型,以找到具有参数多态特性的用户自定义函数;
2)嵌套函数
为了找到所有嵌套函数,系统维护一个函数定义栈,每当系统访问到函数定义节点时,都会将函数名压栈,并在退出该节点时将其弹出,如果没有嵌套函数,栈的深度会始终小于等于1,当系统访问到新的函数定义节点并且栈的深度为1或更大时,即可知道这个函数一定是在另一个函数中定义的;而每碰到一个这样的函数定义节点,系统都会增加嵌套函数的语言特性计数器;
3)递归
为了找到Python软件中所有的递归案例,系统在访问Python程序对应的抽象语法树(AST)时收集了函数的调用关系,其中包括每个函数及其定义中所调用的函数;每个函数调用在Python的AST中都表示为一个节点
标准库扫描模块,用于扫描使用标准库函数而产生的语言特征,提供标准库信息;
所述类型推断工具接口模块,用于与外部类型推断工具进行对接;
报告生成模块,用于在整个扫描以及识别完毕后,输出语言特征的使用报告。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010663123.9/1.html,转载请声明来源钻瓜专利网。