CN109710307A - 基于Python代码重建抽象语法树的方法、电子设备 - Google Patents

基于Python代码重建抽象语法树的方法、电子设备 Download PDF

Info

Publication number
CN109710307A
CN109710307A CN201811637116.0A CN201811637116A CN109710307A CN 109710307 A CN109710307 A CN 109710307A CN 201811637116 A CN201811637116 A CN 201811637116A CN 109710307 A CN109710307 A CN 109710307A
Authority
CN
China
Prior art keywords
syntax tree
abstract syntax
python
main structure
tree
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201811637116.0A
Other languages
English (en)
Other versions
CN109710307B (zh
Inventor
孙悦
李天驰
赵子亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Dianmao Technology Co Ltd
Original Assignee
Shenzhen Dianmao Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Dianmao Technology Co Ltd filed Critical Shenzhen Dianmao Technology Co Ltd
Priority to CN201811637116.0A priority Critical patent/CN109710307B/zh
Publication of CN109710307A publication Critical patent/CN109710307A/zh
Application granted granted Critical
Publication of CN109710307B publication Critical patent/CN109710307B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开基于Python代码重建抽象语法树的方法、电子设备,其中,方法包括:将Python代码转化为JavaScript的原始抽象语法树;获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。这样,便解决了现有技术中无法对抽象语法树进行重建的难题,不仅如此,简洁抽象语法树不会存在语法错误的问题,以及重要数据均能直接显示于抽象语法树中,使得用户能够对简洁抽象语法树做进一步的处理。

Description

基于Python代码重建抽象语法树的方法、电子设备
技术领域
本发明涉及Python代码领域,尤其涉及基于Python代码重建抽象语法树的方法、电子设备。
背景技术
在Web开发中,抽象语法树的应用十分广泛。例如,按照预设的规则对抽象语法树进行解析,获取动态类语言(如JS代码)的函数信息,从而修改函数信息等等。以JavaScript(JS代码)为例,由于是动态类型语言没有编译器或解释器,因此无法直接改变其运行时的运行结果,在引入抽象语法树后,便可以获取即将运行代码的结构,进而获取其中一个函数或者多个函数的引用关系并对其进行修改,从而在当前代码运行的过程中修改下一行代码,进而修改下一行代码的运行结果。
但是抽象语法树生成的树对象并没有太多的源代码信息并且数据层级比较深。一般来说,100行左右JS代码生成的语法树就相当复杂了,这也大量有用数据被埋藏的原因之一。
换句话说,现有技术得到的抽象语法树并不能直接使用,必须对其进行精简或者修改,才能进一步使用。
然而,现有技术并没有较好的方法可以对抽象语法树进行修改或者重新建立抽象语法树。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足,本发明的目的在于提供将Python代码转化为脚本语言的方法以及电子设备,旨在解决现有技术无法重建抽象语法树的问题。
本发明的技术方案如下:
一种基于Python代码重建抽象语法树的方法,其包括步骤:
将Python代码转化为JavaScript的原始抽象语法树;
获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;
根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。
优选的,所述将Python代码转化为JavaScript的原始抽象语法树的步骤具体包括:
按照语法作用域将Python代码分割成若干段Python子代码;
读取每段Python子代码的内容;
对Python子代码进行解析,生成各段Python子代码的抽象语法树。
优选的,所述对Python子代码进行解析,生成各段Python子代码的抽象语法树的步骤之后包括:
将生成的各段Python子代码的抽象语法树返回给递归的上层;
然后执行块作用域的循环;
最后按照语法作用域的从属关系拼接Python子代码的抽象语法树,得到原始抽象语法树。
优选的,所述获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象的步骤具体包括:
获取原始抽象语法树的主体结构;
判断所述主体结构是否为数组;
若为数组,则获取所述主体结构的子主体结构,根据所述子主体结构的类型创建相应的树对象;若不为数组则根据主体结构的类型创建相应的树对象。
优选的,创建树对象的步骤具体包括:
根据所述主体结构或子主体结构的类型查找对应的表达式类型;
根据所述表达式类型创建相应的树对象。
优选的,所述根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树的步骤具体包括:
按照主体结构的同级或子级的关系将对应的树对象进行结合,得到简洁抽象语法树。
优选的,当主体结构中包含子主体结构时,则将所述子主体结构对应的树对象递归至上层。
优选的,所述根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树的步骤之后包括:
根据所述简洁抽象语法树调用接口,绘制相应的积木。
优选的,当递归时,读取主体结构的层级信息,按照层级信息进行递归。
优选的,根据语法关键字对Python子代码进行解析,生成各段Python子代码的抽象语法树。
优选的,所述主体结构的类型包括:调用表达式、循环结构或返回结构的一种或几种。
优选的,所述根据所述简洁抽象语法树调用接口,绘制相应的积木的步骤具体包括:
创建一画布,并在所述画布中绘制相应的积木。
本发明还提供一种电子设备,其包括:
处理器,适于实现各指令,以及
存储设备,适于存储多条指令,所述指令适于由处理器加载并执行:
将Python代码转化为JavaScript的原始抽象语法树;
获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;
根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。
本发明还提供一种计算机程序产品,其中,计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被处理器执行时,使所述处理器执行所述的基于Python代码重建抽象语法树的方法。
本发明还提供一种非易失性计算机可读存储介质,其中,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器任一项所述的基于Python代码重建抽象语法树的方法。
有益效果:通过本发明提供的方法,可以先将Python代码转换为原始抽象语法树,然后获取原始抽象语法树的主体结构,并创建主体结构的树对象,最后对树对象进行重组和拼接,得到简洁抽象语法树,即完成对抽象语法树的重建。这样,便解决了现有技术中无法对抽象语法树进行重建的难题,不仅如此,简洁抽象语法树不会存在语法错误的问题,以及重要数据均能直接显示于抽象语法树中,使得用户能够对简洁抽象语法树做进一步的处理。
附图说明
图1为本发明基于Python代码重建抽象语法树的方法较佳实施例的流程图。
图2为本发明电子设备较佳实施例的结构框图。
具体实施方式
本发明提供基于Python代码重建抽象语法树的方法、电子设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,一种基于Python代码重建抽象语法树的方法,其包括步骤:
S1、将Python代码转化为JavaScript的原始抽象语法树;
S2、获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;
S3、根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。
通过本发明提供的方法,能够对原始抽象语法树进行重建,得到简洁抽象语法树。并且本发明提供的方法具有简单、便捷和易实现的特点。
所述步骤S1中,Python代码是一种结合了解释性、编译性、互动性和面向对象的脚本语言;同时,Python代码具有很强的可读性,并且可移植、可拓展以及可拓展的特点。
JavaScript主要用来改进设计、验证表单、检测浏览器、创建cookies以及创建应用程序。JavaScript是一种动态类型、弱类型和基于原型的语言,并且它的解释器被称为JavaScript引擎,为浏览器的一部分
抽象语法树(Abstract Syntax Tree或者缩写为AST),或者语法树(Syntax Tree)是源代码的抽象语法结构的树状表现形式,这里特指编程语言(例如,JavaScript)的源代码。抽象语法树上的每个节点都表示源代码中的一种结构。之所以说树是“抽象”的,是因为这里的语法并不会表示出真实语法中的每个细节,比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
具体可先将用户输入的Python代码转化为JS代码,然后把转化得到的JS代码转化为相应原始抽象语法树。需要说明的是,原始抽象语法树实际上是指抽象语法树,只是为了与后面的简洁抽象语法树进行区分,故将JS代码转化得到的抽象语法树称为原始抽象语法树。
优选的,所述步骤S1具体包括:
S11、按照语法作用域将Python代码分割成若干段Python子代码;
S12、读取每段Python子代码的内容;
S13、对Python子代码进行解析,生成各段Python子代码的抽象语法树。
语法作用域具体包括语句、批语句和函数。其中,语句可以为var()、for()、while()或with();批语句可以为switch()、try()或catch();函数可以为function()。
也就是说,所述步骤S11中,将自动读取用户输入的Python代码的每一行,然后判断该行代码包括哪些语法作用域,然后根据语法作用域对全部的Python代码进行拆分(分割),从而得到若干段Python子代码。
例如,Python代码的第一行、第五行和第六行包含语句,第二行和第四行包含批语句,第三行包含函数。这样,便可以根据语法作用域对Python进行分割,从而将Python代码的第一行、第五行和第六行分割为第一Python子代码、将第二行和第四行分割为第二Python子代码以及将第三行为第三Python子代码。当然,上述分割方式仅仅为举例说明,具体的分割方式完全可以根据用户的需求进行分割。
优选的,根据语法关键字对Python子代码进行解析,生成各段Python子代码的抽象语法树。
其中,语法关键字即为token。先通过语法关键字对Python子代码进行解析,进而生成各段Python子代码的抽象语法树。其中,token能够防止表单重复解析,还可利用token作为每个Python子代码的身份信息,即每个Python子代码的token较为不同。
所述步骤S12中,读取每一个Python子代码的实质内容,例如,读取每个Python子代码中的函数参数、常数或者引用关系等等。
优选的,读取每段Python子代码的内容的方式为并列方式。
为了提高效率,本发明将同时进行读取Python子代码,用户可以设置每次读取Python子代码的段数。例如,同时读取3段Python子代码,同时读取5段Python子代码等等。当然,同时读取Python子代码的段数不能超过预设的阈值,例如,预设的阈值为10段。
所述步骤S13中,对各段Python子代码进行解析,进而将各段Python子代码转化为JS代码,最后生成各个Python子代码对应的抽象语法树。换句话说,本步骤的目的是在于将Python子代码转化为与之对应的抽象语法树。
以“print(123)”为例,解释器首先读取到“print”,解析到表达式语句(ExpressionStatement),随后读到括号,将括号中内容理解为参数(arguments),同时print自身成为方法调用名,出现在CallExpression(方法调用表达式)的property中。括号内的数据是“123”,这是一串数字没有其它功能,那它的类型就是普通类型(Literal)。arguments是一个数组,它表示这个表达式的参数有多个,即参数和方法调用表达式是同级的,它表示同一个函数调用的两个组成部分,它们的上级是整个表达式语句。
这样,便可以得到多个抽象语法树。
优选的,所述步骤S13之后包括:
S14、将生成的各段Python子代码的抽象语法树返回给递归的上层;
S15、然后执行块作用域的循环;
S16、最后按照语法作用域的从属关系拼接Python子代码的抽象语法树,得到原始抽象语法树。
所述步骤S14,因为抽象语法树都是执行到最小粒度的语法结构处才会开始解析,因此当对Python子代码进行解析时,都将优先搜索到最深子节点并进行相应的处理,随后向上层返回底层结构,依次遍历。
例如,一个抽象语法树包括三层,且第三层为最“深”层,即最底层,第二层在第三层的上方,第一层在第二层的上方,即第一层为最“顶”层。那么,将优先对第三层进行搜索,并将搜索结果返回第二层;然后对第二层进行搜索,并将第二层搜索得到的搜索结果返回至第一层;最后再对第一层进行搜索。也就是说,对第三层、第二层和第一层依次进行遍历。
以“print”语句为例,“print(1+2,3%4)”的这样一行语句,它的含义是“打印一行数据”。那么读取完方法名(即print)、左括号之后,解释器知道下一步读取的是参数了,但是这时候解释器遇到了另外一个表达式,就是“1+2”,它虽然简单但毫无疑问是一个新的表达式,它不是最小的解释单位,所以解释器将继续深入下去读取(直至读取最深子节点),读到“1”和“+”之后,解释器知道这是新的表达式,然后读到了2,从而完成抽象语法树的遍历操作。
所述步骤S15中,在完成抽象语法树最顶层的搜索后,将自动执行作用域的循环。其中,由于一段程序代码中所用到的函数名并不永久有效或永久可用,但通过设定函数名可用性的代码范围,从而得到相应函数名的作用域。换句话说,处于作用域中的函数能够反复执行或反复调用。也就是说,本步骤是调用处于作用域的循环函数,其中,循环函数可以为for()函数,也可以是while()函数等等。
所述步骤S16中,关于语法作用域已在上述步骤中详述,故此不做赘述。
从属关系是指该抽象语法树的顶部节点具体连接于另一个抽象语法树的哪一个子节点的具体信息。例如,第一个抽象语法树的顶部节点连接于第二个抽象语法树的第二行的第一个子节点。
这样,根据从属关系便可以将抽象语法树连接成一个整体,即连接为原始抽象语法树。
所述步骤S2中,主体结构具体是指body。body是抽象语法树的最上层结构体,一个body就是一段代码,一般一段代码只有一个body。
在获取主体结构后,便根据主体结构创建相应的树对象。
其中,树对象代表传统文件系统中的文件夹,即为文件或其他文件夹的嵌套容器。
优选的,所述步骤S2具体包括:
S21、获取原始抽象语法树的主体结构;
S22、判断所述主体结构是否为数组;
S23、若为数组,则获取所述主体结构的子主体结构,根据所述子主体结构的类型创建相应的树对象;若不为数组则根据主体结构的类型创建相应的树对象。
所述步骤S21中,关于主体结构已在上述步骤中详述,故此不做赘述。
具体获取主体结构的方式可以是先读取抽象语法树,然后便能获取抽象语法树的最上层结构体,即获得主体结构。
需要说明的是,一般一段代码只有一个body,不过如果是循环体、类或函数声明等其内部一般会有多个body。
更具体的说,body会具有一个“type”属性,根据这些语句的不同来标注不同的结构名。函数声明FunctionDeclaration,变量赋值VariableDeclaration以及函数调用ExpressionStatment(指示一段表达式),CallExpression(函数调用)。当一段嵌套结构(函数、条件判断、循环判断等)出现时,body下才有子body。
所述步骤S22中,获得抽象语法树的body后,便可以对body进行判断。具体的说,解释器会自动对body进行判断的操作。
所述步骤S23中,如果解释器判断boby为数组,那么先获取boby的子body,然后根据子body类型创建相应的树对象;如果解释器判断boby不为数组,则直接根据body类型创建相应的树对象。
优选的,所述主体结构的类型包括:调用表达式、循环结构或返回结构的一种或几种。
其中,调用表达式可以令其函数声明的变量绕过JavaScript的变量置顶声明规则,还可以消除新的变量被解释成全局变量或函数名占用全局变量名的隐患;循环结构是指在程序中需要反复执行的某个功能;返回结构主要是指return结构。
优选的,创建树对象的步骤具体包括:
S231、根据所述主体结构或子主体结构的类型查找对应的表达式类型;
S232、根据所述表达式类型创建相应的树对象。
所述步骤S131中,在获取body或者获取子body后,便可以得知body的类型,然后根据获取得到的类型查询对应表达式的类型。
所述步骤S232中,或查询得到表达式类型后,便可以根据表达式的类型创建相应的树对象。
这样,便能够为原始抽象语法树创建相应的树对象。
所述步骤S3中,根据body的层级结构对树对象进行重组以及拼接,从而得到简洁抽象语法树,即完成了原始抽象语法树的重建工作。
优选的,所述步骤S3具体包括:
按照主体结构的同级或子级的关系将对应的树对象进行结合,得到简洁抽象语法树。
由于body具有级别关系,具体的说,原先JS代码中包括多个body,但是各个body之间存在先后顺序或者层级关系。如果body为同级关系,那么可以随意改变body的位置,但body与body之间互为子集的关系,那么子body必须在其body的内部。
根据这一关系,便可以对树对象进行拼接和结合,使得树对象与树对象按照正确的关系结合,不易出错,并在结合后得到本发明中的简洁抽象语法树。
优选的,当主体结构中包含子主体结构时,则将所述子主体结构对应的树对象递归至上层。
如果body含有一个或者多个子body,则先将子bod的树对象递归至上一层,或者递归至指定层。
优选的,当递归时,读取主体结构的层级信息,按照层级信息进行递归。
例如,一个主体结构包括三层,且第三层为最“深”层,即最底层,第二层在第三层的上方,第一层在第二层的上方,即第一层为最“顶”层。那么,可以将第三层的树对象递归至第二层,将第二层的树对象递归至第一层。
这样,便完成了对原始抽象语法树的重建工作,或者说对原始抽象语法树进行数据的清洗工作,从而得到相应的简洁抽象语法树。
简单的说,通过递归原始抽象语法树的结构,读取body、arguments和property等比较重要的属性,同时记录下该节点的层级,自底向上对原始抽象语法树进行重新构建进而生成简洁抽象语法树。
优选的,所述步骤S3之后包括:
S4、根据所述简洁抽象语法树调用接口,绘制相应的积木。
所述步骤S4中,在得到简洁抽象语法树后,通过修改抽象语法树的接口,并运行抽象语法树,从而绘制相应的积木。
其中,积木(wood)是指一种图形化编程模块,积木与积木之间能够紧密连接,并且,用户可通过移动积木,从而改变积木的整体结构。
优选的,所述步骤S4包括:
创建一画布,并在所述画布中绘制相应的积木。
所述画布具体是指canvas,canvas是一种用于绘制图形的显示界面,由于浏览器无法直接显示JS代码或python代码绘制的图形,因此,需要调用画布,从而在画布中显示JS代码或python代码绘制的图形。
也就是说,所述积木在所述画布中显示。
请参阅图2,本发明还提供一种电子设备10,其包括:
处理器110,适于实现各指令,以及
存储设备120,适于存储多条指令,所述指令适于由处理器加载并执行:
将Python代码转化为JavaScript的原始抽象语法树;
获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;
根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。
所述处理器110可以为通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、单片机、ARM(Acorn RISC Machine)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。还有,处理器还可以是任何传统处理器、微处理器或状态机。处理器也可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP核、任何其它这种配置。
存储设备120作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的基于Python代码重建抽象语法树的方法对应的程序指令。处理器通过运行存储在存储设备中的非易失性软件程序、指令以及单元,从而执行基于Python代码重建抽象语法树的各种功能应用以及数据处理,即实现上述方法实施例中的基于Python代码重建抽象语法树的方法。
本发明还提供一种计算机程序产品,其中,计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被处理器执行时,使所述处理器执行所述的基于Python代码重建抽象语法树的方法。
本发明还提供一种非易失性计算机可读存储介质,其中,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器执行所述的基于Python代码重建抽象语法树的方法。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (15)

1.一种基于Python代码重建抽象语法树的方法,其特征在于,包括步骤:
将Python代码转化为JavaScript的原始抽象语法树;
获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;
根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。
2.根据权利要求1所述基于Python代码重建抽象语法树的方法,其特征在于,所述将Python代码转化为JavaScript的原始抽象语法树的步骤具体包括:
按照语法作用域将Python代码分割成若干段Python子代码;
读取每段Python子代码的内容;
对Python子代码进行解析,生成各段Python子代码的抽象语法树。
3.根据权利要求2所述基于Python代码重建抽象语法树的方法,其特征在于,所述对Python子代码进行解析,生成各段Python子代码的抽象语法树的步骤之后包括:
将生成的各段Python子代码的抽象语法树返回给递归的上层;
然后执行块作用域的循环;
最后按照语法作用域的从属关系拼接Python子代码的抽象语法树,得到原始抽象语法树。
4.根据权利要求1所述基于Python代码重建抽象语法树的方法,其特征在于,所述获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象的步骤具体包括:
获取原始抽象语法树的主体结构;
判断所述主体结构是否为数组;
若为数组,则获取所述主体结构的子主体结构,根据所述子主体结构的类型创建相应的树对象;若不为数组则根据主体结构的类型创建相应的树对象。
5.根据权利要求4所述基于Python代码重建抽象语法树的方法,其特征在于,创建树对象的步骤具体包括:
根据所述主体结构或子主体结构的类型查找对应的表达式类型;
根据所述表达式类型创建相应的树对象。
6.根据权利要求1所述基于Python代码重建抽象语法树的方法,其特征在于,所述根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树的步骤具体包括:
按照主体结构的同级或子级的关系将对应的树对象进行结合,得到简洁抽象语法树。
7.根据权利要求6所述基于Python代码重建抽象语法树的方法,其特征在于,当主体结构中包含子主体结构时,则将所述子主体结构对应的树对象递归至上层。
8.根据权利要求1所述基于Python代码重建抽象语法树的方法,其特征在于,所述根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树的步骤之后包括:
根据所述简洁抽象语法树调用接口,绘制相应的积木。
9.根据权利要求7所述基于Python代码重建抽象语法树的方法,其特征在于,当递归时,读取主体结构的层级信息,按照层级信息进行递归。
10.根据权利要求2所述基于Python代码重建抽象语法树的方法,其特征在于,根据语法关键字对Python子代码进行解析,生成各段Python子代码的抽象语法树。
11.根据权利要求4所述基于Python代码重建抽象语法树的方法,其特征在于,所述主体结构的类型包括:调用表达式、循环结构或返回结构的一种或几种。
12.根据权利要求8所述基于Python代码重建抽象语法树的方法,其特征在于,所述根据所述简洁抽象语法树调用接口,绘制相应的积木的步骤具体包括:
创建一画布,并在所述画布中绘制相应的积木。
13.一种电子设备,其特征在于,包括:
处理器,适于实现各指令,以及
存储设备,适于存储多条指令,所述指令适于由处理器加载并执行:
将Python代码转化为JavaScript的原始抽象语法树;
获取原始抽象语法树的主体结构,根据所述主体结构的类型创建树对象;
根据主体结构的层级对所述树对象进行重组拼接,获得简洁抽象语法树。
14.一种计算机程序产品,其特征在于,计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被处理器执行时,使所述处理器执行权利要求1-12任一项所述的基于Python代码重建抽象语法树的方法。
15.一种非易失性计算机可读存储介质,其特征在于,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器执行权利要求1-12任一项所述的基于Python代码重建抽象语法树的方法。
CN201811637116.0A 2018-12-29 2018-12-29 基于Python代码重建抽象语法树的方法、电子设备 Active CN109710307B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811637116.0A CN109710307B (zh) 2018-12-29 2018-12-29 基于Python代码重建抽象语法树的方法、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811637116.0A CN109710307B (zh) 2018-12-29 2018-12-29 基于Python代码重建抽象语法树的方法、电子设备

Publications (2)

Publication Number Publication Date
CN109710307A true CN109710307A (zh) 2019-05-03
CN109710307B CN109710307B (zh) 2022-03-11

Family

ID=66259562

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811637116.0A Active CN109710307B (zh) 2018-12-29 2018-12-29 基于Python代码重建抽象语法树的方法、电子设备

Country Status (1)

Country Link
CN (1) CN109710307B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457065A (zh) * 2019-08-14 2019-11-15 中国工商银行股份有限公司 用于获得可兼容多版本系统的应用的方法及装置
CN111045678A (zh) * 2019-11-06 2020-04-21 北京奇艺世纪科技有限公司 页面执行动态代码的方法、装置、设备及存储介质
CN111506900A (zh) * 2020-04-15 2020-08-07 北京字节跳动网络技术有限公司 漏洞检测方法、装置、电子设备及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法
US9928040B2 (en) * 2013-11-12 2018-03-27 Microsoft Technology Licensing, Llc Source code generation, completion, checking, correction

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法
US9928040B2 (en) * 2013-11-12 2018-03-27 Microsoft Technology Licensing, Llc Source code generation, completion, checking, correction

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
廖兴等: "基于Java语言的抽象语法树的创建与遍历", 《长沙大学学报》 *
王莉莉: "基于抽象语法树的软件语义分析方法研究", 《中国优秀硕士学位论文全文数据库》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457065A (zh) * 2019-08-14 2019-11-15 中国工商银行股份有限公司 用于获得可兼容多版本系统的应用的方法及装置
CN110457065B (zh) * 2019-08-14 2023-11-07 中国工商银行股份有限公司 用于获得可兼容多版本系统的应用的方法及装置
CN111045678A (zh) * 2019-11-06 2020-04-21 北京奇艺世纪科技有限公司 页面执行动态代码的方法、装置、设备及存储介质
CN111506900A (zh) * 2020-04-15 2020-08-07 北京字节跳动网络技术有限公司 漏洞检测方法、装置、电子设备及计算机存储介质
CN111506900B (zh) * 2020-04-15 2023-07-18 抖音视界有限公司 漏洞检测方法、装置、电子设备及计算机存储介质

Also Published As

Publication number Publication date
CN109710307B (zh) 2022-03-11

Similar Documents

Publication Publication Date Title
Orleans et al. DJ: Dynamic adaptive programming in Java
Kühn et al. Choosy and picky: configuration of language product lines
US7698694B2 (en) Methods and systems for transforming an AND/OR command tree into a command data model
US7779398B2 (en) Methods and systems for extracting information from computer code
US7784036B2 (en) Methods and systems for transforming a parse graph into an and/or command tree
Launchbury Lazy imperative programming
CN109710307A (zh) 基于Python代码重建抽象语法树的方法、电子设备
CN106648662B (zh) 基于工程造价计算描述语言bcl的报表生成装置及生成方法
Gargantini et al. A semantic framework for metamodel-based languages
Lämmel et al. Strategic programming meets adaptive programming
US20130152061A1 (en) Full fidelity parse tree for programming language processing
Petricek et al. Types from data: making structured data first-class citizens in F#
CN108170435A (zh) 一种源代码转换方法、装置及设备
Li et al. QVT-based model transformation using XSLT
CN107220250A (zh) 一种模板配置方法及系统
CN107515739A (zh) 提高代码执行性能的方法及装置
US9268558B2 (en) Searching source code
van Der Storm et al. The design and implementation of Object Grammars
Verano Merino et al. Getting grammars into shape for block-based editors
Tonella et al. Reverse engineering of the UML class diagram from C++ code in presence of weakly typed containers
van Binsbergen et al. GLL parsing with flexible combinators
Cresswell et al. Deductive synthesis of recursive plans in linear logic
Bagge et al. A pretty good formatting pipeline
Ramsey Beyond relooper: recursive translation of unstructured control flow to structured control flow (functional pearl)
Prokesch et al. Towards automated generation of time-predictable code

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant