一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

代码处理方法、装置、计算机设备和存储介质与流程

2022-07-02 13:42:09 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,具体涉及代码处理方法、装置、计算机设备和存储介质。


背景技术:

2.python是一种广泛使用的解释型、高级和通用的编程语言,提供了高效的高级数据结构、简单有效地面向对象编程等特点,已经逐步为编程领域所重视。
3.然而,在实际应用中,会采用同构开发模式,即针对不同运行环境开发一套代码。这种开发方式能够提高开发效率,但是在实际运行过程中,由于代码包同时包含了多种运行环境的代码文件,导致代码文件体积大,代码运行效率差。


技术实现要素:

4.本技术实施例提供代码处理方法、装置、计算机设备和存储介质,可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
5.本技术实施例提供一种代码处理方法,包括:根据初始代码,生成抽象语法树;根据所述初始代码对应的运行环境,确定目标条件;将所述抽象语法树中满足目标条件的节点确定为目标节点;确定所述目标节点对应的目标代码;删除所述目标代码,得到处理后的代码。
6.本技术实施例还提供一种代码处理装置,包括:生成单元,用于根据初始代码,生成抽象语法树;第一确定单元,用于根据所述初始代码对应的运行环境,确定目标条件;第二确定单元,用于将所述抽象语法树中满足目标条件的节点确定为目标节点;第三确定单元,用于确定所述目标节点对应的目标代码;删除单元,删除所述目标代码,得到处理后的代码。
7.本技术实施例还提供一种计算机设备,包括存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本技术实施例所提供的任一种代码处理方法中的步骤。
8.本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本技术实施例所提供的任一种代码处理方法中的步骤。
9.本技术实施例可以通过将初始代码转化为抽象语法树,以从抽象语法树中确定与运行环境对应的目标节点,并确定目标节点中需要删除的目标代码,以删除了与运行环境无关的冗余代码,提高代码在对应运行环境中的运行效率。可见,本技术可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
附图说明
10.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于
本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
11.图1是本技术实施例提供的代码处理系统的场景示意图;
12.图2是本技术实施例提供的代码处理方法的流程示意图;
13.图3是本技术另一个实施例提供的代码处理方法的流程示意图;
14.图4是本技术实施例提供的代码处理装置的结构示意图;
15.图5是本技术实施例提供的计算机设备的结构示意图。
具体实施方式
16.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
17.本技术实施例提供代码处理方法、装置、计算机设备和存储介质。
18.其中,该代码处理装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(personal computer,pc)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
19.在一些实施例中,该代码处理装置还可以集成在多个电子设备中,比如,代码处理装置可以集成在多个服务器中,由多个服务器来实现本技术的代码处理方法。
20.在一些实施例中,服务器也可以以终端的形式来实现。
21.例如,参考图1,在一些实施方式中提供了一种代码处理系统的场景示意图,该系统可以实现代码处理方法。该代码处理系统可以包括目标设备1000、服务器2000以及网络3000,目标设备以及服务器可以通过网络进行数据交互。
22.其中,服务器用于获取初始代码以及获取计算机设备的运行环境,根据初始代码,生成抽象语法树;根据初始代码对应的运行环境,确定目标条件;将抽象语法树中满足目标条件的节点确定为目标节点;确定目标节点对应的目标代码;删除目标代码,得到处理后的代码。
23.目标设备用于从服务器获取处理后的代码,并加载运行处理后的代码,目标设备可以为服务器,也可以为终端。
24.在本技术中,通过将初始代码转化为抽象语法树,以从抽象语法树中确定与运行环境对应的目标节点,并确定目标节点中需要删除的目标代码,以删除了与运行环境无关的冗余代码,提高代码在对应运行环境中的运行效率。可见,本技术可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
25.以下分别进行详细说明。
26.在本实施例中,提供了一种代码处理方法,如图2所示,该代码处理方法的具体流程可以如下:
27.110、根据初始代码,生成抽象语法树。
28.其中,初始代码是指待处理的代码,可以包括软件全部或部分的代码文本,例如,
可以为python源代码,等等。初始抽象语法树是指通过对初始代码转换得到的抽象语法树,是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。例如,可以通过asttokens将字符串对象转化为抽象语法树上的节点,抽象语法树提供节点类的定义、工具函数和类,包括遍历语法树类和修改语法树等功能,可以使用asttokens来分析和处理python源代码。asttokens是文本和标记化形式维护源,并用标记信息标记ast节点的工具。
29.120、根据初始代码对应的运行环境,确定目标条件。
30.其中,运行环境是指初始代码在目标设备上运行的环境。目标设备是指用来运行初始代码的设备,运行环境可以根据设备类型、应用场景等要素确定,不同的设备类型或不同的应用场景可以对应不同目标设备的运行环境,例如目标设备可以为服务器或终端,服务器和终端分别属于不同的运行环境,运行环境也可以为对应不同的应用场景的运行环境,例如单机或联网等场景,运行环境还可以为对应不同使用者的运行环境,例如用户或运营人员等使用者,等等。
31.目标条件是指根据运行环境确定的用来判断抽象语法树上节点是否为目标节点的条件。目标条件可以包括节点类型、节点位置、节点属性值、函数以及关键字等,例如目标条件可以为节点是否满足运行环境对应的节点类型,或节点是否包括运行环境对应的关键字,等等。例如,可以根据初始代码对应的运行环境确定对应的节点属性值,目标条件可以为将节点属性值满足该节点属性值的节点确定为目标节点。
32.在一些实施方式中,步骤120可以包括步骤:根据初始代码对应的运行环境,确定目标节点类型以及目标关键字。目标条件可以为目标节点为满足目标节点类型以及节点关键字与目标关键字对应的节点。
33.在一些实施方式中,步骤120可以包括步骤1.1~1.3,如下:
34.1.1、获取初始代码对应的运行环境;
35.1.2、根据运行环境,从初始代码中确定目标变量;
36.1.3、获取目标变量对应的目标节点类型以及目标关键字,得到目标条件。
37.其中,目标变量是指初始代码中与运行环境对应的变量的代码文本。在实际应用中,目标变量可以出现在初始代码的任意位置,例如类或函数等之中。例如,当运行环境为与目标设备类型(服务器/终端)对应的运行环境,则目标变量可以包括if client以及if server。
38.目标节点类型是指抽象语法树中与目标变量对应的节点类型,例如,if client以及if server对应的节点类型可以为ast.if(条件判断节点类型)以及ast.name(名字表达式节点类型)。在将初始代码转化为抽象语法树时,初始代码中的目标变量与抽象语法树的节点对应,该节点的节点类型即为目标节点类型,可以根据经验或应用场景预先确定目标变量以及目标节点类型的对应关系。
39.目标关键字是指运行环境对应的关键字,可以为目标变量中的关键字,目标关键字可以包括目标变量的全部或部分内容,或其他能够用来表征目标变量的内容,等等。例如,在目标变量为if client以及if server时,目标关键字可以为client以及server,也可以为if client以及if server,等等。
40.通过获取初始代码对应的运行环境,以及获取与运行环境对应的目标变量,再根
据目标变量确定抽象语法树中对应的目标节点类型以及目标关键字,以得到目标条件。目标条件为目标节点为满足目标节点类型以及节点关键字与目标关键字对应的节点。再有多个目标节点类型或多个目标关键字类型时,目标节点可以为满足全部或至少一个目标节点类型,以及包含全部或至少一个目标关键字的节点,具体可以根据经验或应用场景确定。本技术根据目标变量确定目标条件,可以在遍历抽象语法树的过程中,根据目标条件逐一判断是否为目标节点,而若直接根据初始代码中的目标变量,在抽象语法树中寻找目标节点,由于初始代码中目标变量一般有多个,且位于初始代码的不同位置,需要针对每一个目标变量遍历一次抽象语法树才能找到其对应的目标节点。可见,本技术使用目标条件从抽象语法树中获取目标节点的方法,能够大大提升处理效率。
41.在一些实施方式中,在步骤130之前,还可以包括步骤2.1~2.2,如下:
42.2.1、根据初始代码对应的运行环境,从初始代码中确定多个候选关键字;
43.2.2、将多个候选关键字中功能相同的候选关键字替换为目标关键字。
44.其中,候选关键字是指运行环境对应的关键字。
45.在一些实施方式中,目标关键字可以为从候选关键字中确定的关键字。例如,可以根据功能对多个候选关键字进行分类,从功能相同的候选关键字中确定一个候选关键字作为该功能对应的目标关键字。目标关键字可以有多个,其个数可以根据候选关键字的功能类型确定。
46.在实际应用中,在根据初始代码对应的运行环境确定目标关键字时,常会出现不同类型的,但功能相同的关键字,这些关键字都可以作为候选关键字用来指向需要处理的代码块。例如,在运行环境为服务端时,候选关键字可以包括if client、if server、if true、if false,在代码运行时,if server与代码中的if true功能相同,if client与代码中的if false功能相同。候选关键字可以直接作为目标关键字,在遍历语法树的过程中,基于这四种候选关键字判断该节点与哪个候选关键字对应,目标条件可以为目标节点为满足目标节点类型以及节点关键字与任意一种类型的候选关键字对应的节点。然而,这种将候选关键字直接作为目标关键字的方法,需要对抽象语法树上节点进行四种情形的判断,计算量大,为了提高处理效率,本技术将功能相同的候选关键字替换为目标关键字,例如,将if true以及if false作为目标关键字,同时根据运行环境(服务端),将if server替换为功能相同的if true,将if client替换为功能相同的if false,替换后只需要对抽象语法树上节点进行两种情形的判断就能确定是否为目标节点,大大提升了处理效率。
47.需要说明的是,在步骤2.1~2.2中,根据功能将候选关键字替换为目标关键字,不同功能的候选关键字替换的目标关键字不同,而没有将所有的候选关键字替换为同一个目标关键字,也使得在后续步骤(如步骤4.1~4.2)中能够根据目标关键字的不同,对目标节点采用不同的删除策略,避免语法错误。步骤120以及步骤110的先后顺序不作限制,可以先执行步骤110,再执行步骤120,也可以先执行步骤120,再执行步骤110。
48.130、将抽象语法树中满足目标条件的节点确定为目标节点。
49.其中,目标节点是根据目标条件确定的节点。例如,可以通过遍历抽象语法树,以根据目标条件对节点逐一判断,将满足目标条件的节点确定为目标节点。
50.在一些实施方式中,目标条件包括目标节点类型以及目标关键字,步骤130可以包括步骤3.1~3.2,如下:
51.3.1、将抽象语法树中满足目标节点类型的节点确定为候选节点;
52.3.2、将节点关键字与目标关键字对应的候选节点确定为目标节点。
53.其中,目标节点类型可以通过步骤1.1~1.3的方法,在获取目标变量后将与其对应的节点类型作为目标节点类型,也可以根据经验,将与运行环境对应的节点类型作为目标节点类型,等等。
54.节点关键字是指目标节点中的关键字。节点关键字可以为节点属性的值或其他关键字等,例如可以为node.txt.id(节点文本id属性)。例如,若目标关键字为if true,节点关键字为true,或若目标关键字为if false,节点关键字为false,则两者对应。
55.在确定抽象语法树上的节点是否为目标节点的过程中,先根据目标节点类型确定候选节点,再对候选节点的节点关键字进行判断,若同时满足目标节点类型,且节点关键字与目标关键字对应,则为目标节点。由于抽象语法树上有多种类型的节点,甚至部分节点不具有节点关键字,因此,先依据目标节点类型对节点进行初步判断,若不满足,则不需要获取目标关键字以及节点关键字进行判断,提高了对抽象语法树上节点的处理效率。
56.140、确定目标节点对应的目标代码。
57.其中,目标代码是根据目标节点从初始代码中确定的要删除的代码,也可以称为冗余代码。
58.在一些实施方式中,步骤140可以包括步骤4.1~4.2,如下:
59.4.1、获取目标节点对应的代码块;
60.4.2、根据目标节点的节点关键字,从代码块中确定目标代码。
61.可以通过node.body获取初始代码中与目标节点对应的整个代码块,由于不同的目标关键字的功能可能不同,而节点关键字与目标关键字对应,也即不同的目标节点的节点关键字的功能也可能不同。在实际应用中,不同功能的节点关键字会使得代码块中不同的代码分支冗余,该冗余分支代码即为要删除的目标代码,在获取目标节点对应的代码块后,可以从该代码块中获取对应的分支作为目标代码,例如,若节点关键字为true,则将初始代码中if true中的else分支确定为目标代码,若节点关键字为false,则将初始代码中if false中除else分支以外的分支均确定为目标代码,等等。也可以根据步骤4.2.1~4.2.2的方案,根据第一子节点确定目标代码。
62.在一些实施方式中,代码块包括至少一个代码分支,步骤140或步骤4.2可以包括步骤4.2.1~4.2.2,如下:
63.4.2.1、将目标节点中与目标节点的节点关键字对应的子节点确定为第一子节点;
64.4.2.2、将第一子节点对应的代码分支确定为目标代码。
65.由于目标节点对应的代码块中可以包含多个代码分支,为了能够从代码块的多个代码分支中找到需要删除的目标代码,通过对目标节点对应的多个子节点进行扫描,确定与节点关键字对应的子节点。例如,若节点关键字为true,则子节点可以为ast.else,若节点关键字为false,则子节点可以为ast.else以外的所有节点,等等,ast.else对应代码块中的else分支。需说明的是,节点关键字以及子节点的对应关系可以为根据经验或场景设置的预设的关联关系。
66.通过在抽象语法树中确定第一子节点,以再根据该节点确定目标代码。可以直接在抽象语法树上实现确定目标节点以及与目标代码对应的子节点的两个过程,再根据结果
返回子节点对应的代码分支,以提高处理效率。
67.在一些实施方式中,步骤140还可以包括步骤4.3~4.4,如下:
68.4.3、将目标节点中满足预设节点类型的子节点确定为第二子节点;
69.4.4、对第二子节点对应的代码分支进行缩进处理。
70.其中,预设节点类型是根据经验或应用场景设置的节点类型,预设节点类型可以包括ast.classdef,ast.functiondef,ast.if,ast.for,ast.while,ast.tryexcept,ast.tryfinally,ast.with中的至少一种。通过对预设节点类型对应的代码分支进行缩进,避免语法错误。
71.150、删除目标代码,得到处理后的代码。
72.通过将目标代码从初始代码中删除后,得到处理后的代码。由于处理后的代码是经过步骤110~140的方法删除了与运行环境无关的冗余代码,提高了代码的运行效率。
73.在一些实施方式中,在步骤150之后,还可以包括步骤5,如下:
74.5、在目标代码所在的位置增加预设关键字。
75.其中,预设关键字是指根据经验或场景预先设置的关键字,该关键字用于占位。在将目标代码从初始代码中删除后,为了避免可能存在代码文本为空的情况,在删除目标代码的位置补充pass关键字,以避免语法错误。
76.在实际应用中,为了代码更高的复用性,常常会使用一些判断分支分别处理不同的逻辑;但在代码实际运行中,有些分支并不会运行到,例如应用于客户端时,服务端分支的代码应该去除,不仅能够提高代码运行效率,还能避免代码泄露;而对于应用于服务端的代码来说,客户端分支也应该被剪除,以换取更高地运行效率,提供更优质的服务。现有技术中,一般通过手动注释这些分支代码或人工删除这些代码分支。
77.本技术实施例提供的代码处理方案可以应用在各种程序运行场景中。比如,以游戏开发中的python源代码为例,根据初始代码,生成抽象语法树;根据初始代码对应的运行环境,确定目标条件;将抽象语法树中满足目标条件的节点确定为目标节点;确定目标节点对应的目标代码;删除目标代码,得到处理后的代码。
78.由上可知,本技术实施例通过将初始代码转化为抽象语法树,以从抽象语法树中确定与运行环境对应的目标节点,并确定目标节点中需要删除的目标代码,以删除了与运行环境无关的冗余代码,提高代码在对应运行环境中的运行效率。可见,本技术实施例可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
79.根据上述实施例所描述的方法,以下将作进一步详细说明。
80.在本实施例中,将以对python源代码的预处理为例,对本技术实施例的方法进行详细说明。
81.如图3所示,一种代码处理方法的具体流程如下:
82.210、根据初始代码对应的运行环境,确定目标条件。
83.预处理是指在代码进行编译之前,对代码进行处理,以提升代码的编译效率和运行效率,也能隐去一些源代码的信息。在游戏开发的python项目中,会使用客户端服务器同构的开发模式,即客户端以及服务器共用到某些代码文件,并在代码文件中用标记(if client/if server)去做区分,这种方式能够提升开发效率;但在实际代码打包过程,客户端不需要服务端对应的部分代码,服务端也同样不需要客户端对应的部分代码,因此本申
请通过预处理,将不需要的代码分支剪除,去除各自包体的冗余代码,减少文件体积,最终提升运行效率。
84.在对初始代码进行预处理时,可以先根据运行环境定义要剪枝的代码分支。例如,在运行环境为客户端或服务端时,可以将if client、if server、if true以及if false作为要剪枝的代码分支。并可以根据要剪枝的代码分支(即前述实施例的代码块)确定用来判断抽象语法树上节点是否为目标节点的目标条件。例如,针对要剪枝的代码分支if xx,其目标条件可以为抽象语法树上的节点属于ast.if以及ast.name,并且node.txt.id=="xx"。
85.上述提到的if client、if server、if true以及if false只是一种示例,本技术还可以自动处理其他分支标记,对于其他更多的分支标记,只需要确定目标条件以及对分支的处理方法,也能够进行剪枝处理。
86.在步骤210之前还可以包括步骤:设置待处理python源代码的路径。
87.220、根据初始代码,生成抽象语法树。
88.通过对python源代码文件进行扫描,并利用asttokens对扫描的每个文件构造初始抽象语法树。asttokens是文本和标记化形式维护源,并用标记信息标记ast节点的工具。
89.若采用扫描并读取每一个python文件,通过判断if关键字等方式来匹配并修改相应的代码文本,再将修改完的代码文本写回原python文件的方法,过字符串的纯文本判断不能保证替换后代码正确性,基于字符串的纯文本修改会带来很多麻烦,在获取命中分支代码块,处理缩进,删除非命中分支等操作上可能会引入其他错误,不方便且不灵活。相比而言,本技术实施例通过将初始代码转换为抽象语法树,利用asttokens库用标记和源代码信息增强了python的抽象语法树,足以检测每个节点的原文本,利用此信息能有效地对源代码进行转换,从而实现高效并且准确地确定目标节点以及其对应的代码块。
90.230、根据初始代码对应的运行环境,从初始代码中确定多个候选关键字。
91.240、将多个候选关键字中功能相同的候选关键字替换为目标关键字。
92.以服务端代码处理为例,此时server=true,可以将if server转化为if true,将if client转化为if false,以此将if client/if server以及if true/if false的处理流程统一,即只需处理if true/if false。
93.需要说明的是,步骤230以及步骤240也可以在步骤220之前执行。
94.250、将抽象语法树中满足目标条件的节点确定为目标节点。
95.对每个文件对应的抽象语法树(记为ast),遍历其中每个节点(node)。
96.目标条件可以包括条件一以及条件,其中,条件一为节点类型属于ast.if以及ast.name,并且node.txt.id=="true"的节点为if true节点,条件二为节点类型属于ast.if以及ast.name,并且node.txt.id=="false"的节点为if false节点。if true节点以及if false节点均为目标节点。通过目标条件来判断抽象语法树上的节点是否命中需要处理的代码分支,进而获取命中块的代码行数,代码文本等信息。
97.260、将目标节点中满足预设节点类型的子节点确定为第二子节点,并对第二子节点对应的代码分支进行缩进处理。
98.在获得目标节点对应的代码分支(代码块)后,通过node.body拿到代码分支的整个分支块。并对node.body的每个子节点(sub_node)进行扫描,如果sub_node属于
ast.classdef、ast.functiondef、ast.if、ast.for、ast.while,ast.tryexcept、ast.tryfinally、ast.with中的任意一种,则要将子节点的代码文本缩进需要减少一格。再在步骤270中对目标节点对应的目标代码进行剪枝。
99.270、确定目标节点对应的目标代码,并删除目标代码。
100.以服务端代码处理为例,当目标节点为if true节点时,目标代码为if true节点对应的初始代码中的else分支,当目标节点为if false节点时,目标代码为if false节点对应的初始代码中除else分支以外的分支。
101.280、在目标代码所在的位置增加预设关键字,得到处理后的代码。
102.由于代码剪除后可能存在代码文本为空的情况,因此可以补充"pass"关键字起到占位的作用,避免语法错误。
103.在本技术实施例中,标记代码(if client/if server)可以出现在任何地方,比如类中,函数中等。通过本技术的方法,可以对这些代码标记全部进行替换,以得到处理后的代码。
104.由上可知,本技术实施例在对python源代码文件进行扫描时使用了多进程进行加速,例如本实施例中通过构建抽象语法树获取目标节点,并通过两步判断过程提高了确定目标节点的效率,能够大幅缩短处理时间,使用本技术实施例的方法处理百万行的python源代码的时长在1分钟左右。同时,本技术实施例提供的方案通过将初始代码转化为抽象语法树,以从抽象语法树中确定与运行环境对应的目标节点,并确定目标节点中需要删除的目标代码,以删除了与运行环境无关的冗余代码,提高代码在对应运行环境中的运行效率。可见,本技术实施例可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
105.为了更好地实施以上方法,本技术实施例还提供一种代码处理装置,该代码处理装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
106.比如,在本实施例中,将以代码处理装置具体集成在电子设备为例,对本技术实施例的方法进行详细说明。
107.例如,如图4所示,该代码处理装置可以包括生成单元310、第一确定单元320、第二确定单元330、第三确定单元340以及删除单元350,如下:
108.(一)生成单元310
109.用于根据初始代码,生成抽象语法树。
110.(二)第一确定单元320
111.用于根据初始代码对应的运行环境,确定目标条件。
112.在一些实施方式中,第一确定单元320具体可以用于步骤6.1~6.3,如下:
113.6.1、获取初始代码对应的运行环境;
114.6.2、根据运行环境,从初始代码中确定目标变量;
115.6.3、获取目标变量对应的目标节点类型以及目标关键字,得到目标条件。
116.在一些实施方式中,第一确定单元320还用于步骤7.1~7.2,如下:
117.7.1、根据初始代码对应的运行环境,从初始代码中确定多个候选关键字;
118.7.2、将多个候选关键字中功能相同的候选关键字替换为目标关键字。
119.(三)第二确定单元330
120.用于将抽象语法树中满足目标条件的节点确定为目标节点。
121.在一些实施方式中,目标条件包括目标节点类型以及目标关键字,第二确定单元330具体可以用于步骤8.1~8.2,如下:
122.8.1、将抽象语法树中满足目标节点类型的节点确定为候选节点;
123.8.2、将节点关键字与目标关键字对应的候选节点确定为目标节点。
124.(四)第三确定单元340
125.用于确定目标节点对应的目标代码。
126.在一些实施方式中,第三确定单元340具体可以用于步骤9.1~9.2,如下:
127.9.1、获取目标节点对应的代码块;
128.9.2、根据目标节点的节点关键字,从代码块中确定目标代码。
129.在一些实施方式中,代码块包括至少一个代码分支,第三确定单元340具体可以用于步骤10.1~10.2,如下:
130.10.1、将目标节点中与目标节点的节点关键字对应的子节点确定为第一子节点;
131.10.2、将第一子节点对应的代码分支确定为目标代码。
132.在一些实施方式中,第三确定单元340还可以用于步骤11.1~11.2,如下:
133.11.1、将目标节点中满足预设节点类型的子节点确定为第二子节点;
134.11.2、对第二子节点对应的代码分支进行缩进处理。
135.(五)删除单元350
136.用于删除目标代码,得到处理后的代码。
137.在一些实施方式中,删除单元350还用于步骤12,如下:
138.12、在目标代码所在的位置增加预设关键字。
139.具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
140.由上可知,本实施例的代码处理装置可以包括生成单元、第一确定单元、第二确定单元、第三确定单元以及删除单元,其中生成单元,用于根据初始代码,生成抽象语法树;第一确定单元,用于根据初始代码对应的运行环境,确定目标条件;第二确定单元,用于将抽象语法树中满足目标条件的节点确定为目标节点;第三确定单元,用于确定目标节点对应的目标代码;删除单元,删除目标代码,得到处理后的代码。
141.由此,本技术实施例可以提升通过将初始代码转化为抽象语法树,以从抽象语法树中确定与运行环境对应的目标节点,并确定目标节点中需要删除的目标代码,以删除了与运行环境无关的冗余代码,提高代码在对应运行环境中的运行效率。可见,本技术可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
142.相应的,本技术实施例还提供一种计算机设备,该计算机设备可以为终端或服务器,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机、个人数字助理(personal digital assistant,pda)等终端设备。
143.如图5所示,图5为本技术实施例提供的计算机设备的结构示意图,该计算机设备
400包括有一个或者一个以上处理核心的处理器410、有一个或一个以上计算机可读存储介质的存储器420及存储在存储器420上并可在处理器上运行的计算机程序。其中,处理器410与存储器420电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
144.处理器410是计算机设备400的控制中心,利用各种接口和线路连接整个计算机设备400的各个部分,通过运行或加载存储在存储器420内的软件程序和/或模块,以及调用存储在存储器420内的数据,执行计算机设备400的各种功能和处理数据,从而对计算机设备400进行整体监控。
145.在本技术实施例中,计算机设备400中的处理器410会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器420中,并由处理器410来运行存储在存储器420中的应用程序,从而实现各种功能:
146.根据初始代码,生成抽象语法树;根据初始代码对应的运行环境,确定目标条件;将抽象语法树中满足目标条件的节点确定为目标节点;确定目标节点对应的目标代码;删除目标代码,得到处理后的代码。
147.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
148.可选的,如图5所示,计算机设备400还包括:触控显示屏430、射频电路440、音频电路450、输入单元460以及电源470。其中,处理器410分别与触控显示屏430、射频电路440、音频电路450、输入单元460以及电源470电性连接。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
149.触控显示屏430可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏430可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(lcd,liquid crystal display)、有机发光二极管(oled,organic light-emitting diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器410,并能接收处理器410发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器410以确定触摸事件的类型,随后处理器410根据触摸事件的类型在显示面板上提供相应的视觉输出。在本技术实施例中,可以将触控面板与显示面板集成到触控显示屏430而实现输入和输出功能。但是在某些实施例中,触控面板与显示面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏430也可以作为输入单元460的一部分实现输入功能。
150.射频电路440可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
151.音频电路450可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路450可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路450接收后转换为音频数据,再将音频数据输出处理器410处理后,经射频电路440以发送给比如另一计算机设备,或者将音频数据输出至存储器420以便进一步处理。音频电路450还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
152.输入单元460可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
153.电源470用于给计算机设备400的各个部件供电。可选的,电源470可以通过电源管理系统与处理器410逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源470还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
154.尽管图5中未示出,计算机设备400还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
155.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
156.由上可知,本实施例提供的计算机设备可以通过将初始代码转化为抽象语法树,以从抽象语法树中确定与运行环境对应的目标节点,并确定目标节点中需要删除的目标代码,以删除了与运行环境无关的冗余代码,提高代码在对应运行环境中的运行效率。可见,本技术可以根据运行环境简化初始代码,提升代码在不同运行环境的运行效率。
157.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
158.为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种代码处理方法中的步骤。例如,该计算机程序可以执行如下步骤:
159.根据初始代码,生成抽象语法树;根据初始代码对应的运行环境,确定目标条件;将抽象语法树中满足目标条件的节点确定为目标节点;确定目标节点对应的目标代码;删除目标代码,得到处理后的代码。
160.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
161.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
162.由于该存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种代码处理方法中的步骤,因此,可以实现本技术实施例所提供的任一种代码处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
163.以上对本技术实施例所提供的一种代码处理方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,
依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献