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

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

2022-06-05 05:32:03 来源:中国专利 TAG:


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


背景技术:

2.python是一种广泛使用的解释型、高级和通用的编程语言,提供了高效的高级数据结构、简单有效地面向对象编程等特点,已经逐步为编程领域所重视。
3.然而,在实际应用中,在加载python代码时会将代码对应的全部运行代码资源进行加载。也就是说,当python代码中包含多个对象时,通常要加载每个对象对应的代码文本,这种方式会导致加载过多的运行代码资源的情况,代码运行速度低。


技术实现要素:

4.本技术实施例提供代码处理方法、装置、计算机设备和存储介质,可以简化初始代码,以提升代码运行速度。
5.本技术实施例提供一种代码处理方法,包括:根据初始代码,生成初始抽象语法树;确定所述初始抽象语法树中的目标属性节点;将所述目标属性节点替换为所述目标属性节点对应的字面值,得到目标抽象语法树;根据所述目标抽象语法树,生成目标代码。
6.本技术实施例还提供一种代码处理装置,包括:生成单元,用于根据初始代码,生成初始抽象语法树;确定单元,用于确定所述初始抽象语法树中的目标属性节点;替换单元,用于将所述目标属性节点替换为所述目标属性节点对应的字面值,得到目标抽象语法树;生成单元,还用于根据所述目标抽象语法树,生成目标代码。
7.本技术实施例还提供一种计算机设备,包括存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本技术实施例所提供的任一种代码处理方法中的步骤。
8.本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本技术实施例所提供的任一种代码处理方法中的步骤。
9.本技术实施例可以根据初始代码,生成初始抽象语法树;确定所述初始抽象语法树中的目标属性节点;将所述目标属性节点替换为所述目标属性节点对应的字面值,得到目标抽象语法树;根据所述目标抽象语法树,生成目标代码。
10.在本技术中通过将抽象语法树中的目标属性节点替换为了对应的字面值,简化初始代码,以提升代码运行速度,在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。
附图说明
11.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使
用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
12.图1是本技术实施例提供的代码处理系统的场景示意图;
13.图2是本技术实施例提供的代码处理方法的流程示意图;
14.图3是本技术另一个实施例提供的代码处理方法的流程示意图;
15.图4是本技术实施例提供的代码处理装置的结构示意图;
16.图5是本技术实施例提供的计算机设备的结构示意图。
具体实施方式
17.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
18.本技术实施例提供代码处理方法、装置、计算机设备和存储介质。
19.其中,该代码处理装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(personal computer,pc)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
20.在一些实施例中,该代码处理装置还可以集成在多个电子设备中,比如,代码处理装置可以集成在多个服务器中,由多个服务器来实现本技术的代码处理方法。
21.在一些实施例中,服务器也可以以终端的形式来实现。
22.例如,参考图1,在一些实施方式中提供了一种代码处理系统的场景示意图,该系统可以实现代码处理方法。该代码处理系统可以包括终端1000、服务器2000以及网络3000,终端以及服务器可以通过网络进行数据交互。
23.其中,服务器用于根据初始代码,生成初始抽象语法树;确定初始抽象语法树中的目标属性节点;将目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树;根据目标抽象语法树,生成目标代码。
24.其中,终端用于从服务器获取目标代码,并加载运行目标代码。
25.在本技术中,通过将抽象语法树中的目标属性节点替换为了对应的字面值,简化初始代码,以提升代码运行速度,在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。
26.以下分别进行详细说明。
27.在本实施例中,提供了一种基于代码处理方法,如图2所示,该代码处理方法的具体流程可以如下:
28.110、根据初始代码,生成初始抽象语法树。
29.其中,初始代码是指待处理的代码,可以包括软件全部或部分的代码文本,例如,可以为python源代码,等等。初始抽象语法树是指通过对初始代码转换得到的抽象语法树,
是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。例如,可以通过asttokens将字符串对象转化为抽象语法树上的节点,抽象语法树提供节点类的定义、工具函数和类,包括遍历语法树类和修改语法树等功能,可以使用asttokens来分析和处理python源代码。asttokens是文本和标记化形式维护源,并用标记信息标记ast节点的工具。
30.在一些实施方式中,具体地,在步骤120之前,还可以包括步骤1.1~1.2,如下:
31.1.1、获取初始代码对应的所有常量文件;
32.1.2、建立常量文件集,常量文件集包括所有常量文件。
33.其中,常量文件是指用来存储常量的配置文件。由于python语言中没有常量,因此可以通过自定义类实现常量,常量可以满足命名全部为大写以及一旦绑定不可再修改这两个条件。例如,以自定义类实现常量,const.py作为常量文件,通过import(导入)const,以定义常量,const是用来声明某个常量字段或常量局部变量的关键字。常量文件集是指初始代码对应的所有常量文件的集合。
34.通过汇集初始代码对应的所有常量文件,预设常量文件集,以作为目标属性节点的判断依据以及常量值获取的来源,提高源,提高对目标属性节点判断的效率以及准确性。
35.在一些实施方式中,步骤1.2可以包括步骤1.2.1~1.2.3,如下:
36.1.2.1、获取所有常量文件的存储位置,以及每个常量文件对应的目标标识信息;
37.1.2.2、根据存储位置以及目标标识信息,建立常量文件列表;
38.1.2.3、根据常量文件列表,建立常量文件集。
39.其中,目标标识信息是指每个常量文件在初始抽象语法树上对应的节点的标识信息,该标识信息可以用来表征节点的特性,可以为节点的关键字或节点的id属性,等等。例如,在常量文件为ustateconst.py,目标标识信息可以为otherconst。
40.在建立常量文件集时,通过获取常量文件的存储位置以及目标标识信息,建立常量文件列表,由于常量在转换成抽象语法树前后其目标标识信息不变,因此可以以此确定该节点是否为常量文件对应的节点。在建立常量文件列表后,可以将常量文件列表与所有常量文件一起作为常量文件集,也可以将常量文件列表对应的所有常量文件一起作为常量文件集,等等。在需要访问常量文件时,可以先访问常量文件集,以获取目标标识信息,再根据对应的存储位置访问常量文件。
41.因此,通过建立常量文件列表可以不用访问常量文件,直接依据常量文件列表的内容确定属性节点是否为常量对应的节点,提高对目标属性节点判断的效率以及准确性,同时常量文件列表还存储有常量文件的存储路径,以便于访问常量文件。
42.120、确定初始抽象语法树中的目标属性节点。
43.其中,属性节点是指ast.attribute节点,是抽象语法树上的一种节点类型。目标属性节点是指可以替换为字面值的属性节点。目标属性节点可以包括对应常量文件的属性节点,也可以为与对打印语句print,游戏使用的表格数据data等多种场景进行自定义处理后得到的文件对应的节点,等等。本技术实施例可以通过对不同封装,自由添加新的处理单元(目标属性节点对应的文件),也即常量文件可以为自定义的常量文件。
44.在一些实施方式中,在步骤120中,通过遍历初始抽象语法树上的每个节点,依此判断该节点是否为目标属性节点,若是,则执行步骤130中的将目标属性节点替换为目标属
性节点对应的字面值,在遍历完初始抽象语法树后,即同时完成了对所有目标属性节点的替换,得到了目标抽象语法树。
45.在一些实施方式中,为了使得属性节点被替换为其对应的字面值后不会出现程序错误,根据目标标识信息确定目标属性节点。具体地,步骤120可以包括步骤2.1~2.2,如下:
46.2.1、获取初始抽象语法树中的候选属性节点;
47.2.2、将包含目标标识信息的候选属性节点确定为目标属性节点。
48.其中,候选属性节点是指从初始抽象语法树的属性节点确定的节点,可以为属性值对应的子节点满足名字表达式节点类型的节点,也可以将所有属性节点都确定为候选属性节点,还可以根据经验或应用场景确定,等等。步骤2.2中的目标标识信息可以为根据常量文件集或常量文件列表确定的标识信息,也可以为根据应用场景或经验预设的标识信息,等等。
49.在一些实施方式中,步骤2.1可以包括步骤2.1.1~2.1.3,如下:
50.2.1.1、获取初始抽象语法树中的属性节点;
51.2.1.2、获取属性节点的目标子节点,目标子节点用来表征属性节点的节点值;
52.2.1.3、将目标子节点为名字表达式节点类型的属性节点确定为候选属性节点。
53.其中,目标子节点是用来表征属性节点的节点值的子节点。例如,在属性节点为ast.attribute节点时,node.value(属性值)是该属性节点的目标子节点,当node.value属于ast.name(名字表达式节点类型),则目标子节点归属的属性节点即为候选属性节点。
54.由于若将初始抽象语法树的所有属性节点都作为候选属性节点,那么在根据候选属性节点确定目标属性节点时,实际上是要将始抽象语法树的所有属性节点一一进行判断,尤其是在依据常量文件集或常量文件列表确定候选属性节点的标识信息是否为目标标识信息时,每次判断过程都是需要调用一次对应的常量文件集或常量文件列表,因此会导致判断过程慢,甚至若出现调用错误还会导致判断过程出错,因此先在初始抽象语法树中根据属性节点的目标子节点类型筛选得到候选属性节点,能够大大减少下一步需要判断的候选属性节点的数量,提高处理效率。
55.在一些实施方式中,步骤2.2可以包括步骤2.2.1~2.2.3,如下:
56.2.2.1、获取常量文件集,常量文件集包含至少一个常量文件,每个常量文件对应一个目标标识信息;
57.2.2.2、获取候选属性节点中的标识信息;
58.2.2.3、将标识信息与任意一个目标标识信息相同的候选属性节点确定为目标属性节点。
59.由于属性节点包含的信息通常都只包含用来表征节点类型或特性的信息,因此,在获取属性节点对应的字面值时,要访问属性节点对应的文件,例如常量文件才能获取,因此,通过将与常量文件集中的任意一个常量文件对应的候选属性节点确定为目标属性节点,也使得能够根据对应的常量文件获取得到字面值,避免出现程序错误。
60.130、将目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树。
61.其中,字面值是指以具体数字或字符串形式存储的值。目标字面值是指与目标属性节点对应的字面值。目标抽象语法树是将初始抽象语法树中的目标属性节点替换为对应
的字面值后得到的抽象语法树。例如,使用本技术实施例方法替换前初始代码中的文本可以为(ustateconst.state_stand)、(ustateconst.state_rush)、(ustateconst.state_die)以及(ustateconst.state_dying),在使用本技术实施例替换后得到的目标代码中的字面值分别为(“stand”)、(“rush”)、(“die”)以及(“dying”)。
62.在一些实施方式中,步骤130可以包括步骤3.1~3.2,如下:
63.3.1、获取目标属性节点对应的目标字面值;
64.3.2、将目标属性节点替换为目标字面值,得到目标抽象语法树。
65.在步骤3.1中可以通过应用场景或经验预设与目标属性节点对应的目标字面值,也可以通过目标属性节点对应的常量文件获取目标字面值。
66.在一些实施方式中,具体地,步骤3.1可以包括步骤3.1.1~3.1.3,如下:
67.3.1.1、获取常量文件集,常量文件集包含至少一个常量文件;
68.3.1.2、获取常量文件集中与目标属性节点对应的目标常量文件;
69.3.1.3、将目标常量文件对应的字面值确定为目标字面值。
70.其中,目标常量文件是指与目标属性节点对应的常量文件。通过调用目标属性节点对应的目标常量文件,获取目标字面值,增加目标属性节点与目标字面值的关联性,也能够灵活调整初始代码中的常量。
71.在一些实施方式中,具体地,步骤3.1.2可以包括步骤3.1.2.1~3.1.2.3,如下:
72.3.1.2.1、获取目标属性节点中的标识信息;
73.3.1.2.2、从常量文件列表中确定目标常量文件的存储位置,目标常量文件为目标标识信息与目标属性节点中的标识信息相同的常量文件;
74.3.1.2.3、根据目标常量文件的存储位置,获取目标常量文件。
75.通过访问常量文件列表可以不用访问常量文件,直接依据常量文件列表的内容确定属性节点是否为常量对应的节点,提高对目标属性节点判断的效率以及准确性,同时利用常量文件列表中的常量文件的存储路径,以便于访问常量文件。
76.140、根据目标抽象语法树,生成目标代码。
77.其中,目标代码是将目标抽象语法树转化得到的代码。由于在步骤130中将抽象语法树中的目标属性节点替换为了对应的字面值,因此在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。需说明的是,在采用本技术实施例的方法由初始代码得到目标代码后,若需要修改目标属性节点对应的字面值,可以在初始代码上进行修改,并对修改后的代码再次执行步骤110~140的方法,以实现对字面值的修改。
78.本技术实施例提供的代码处理方案可以应用在各种程序运行场景中。比如,以游戏开发中的python源代码为例,根据初始代码,生成初始抽象语法树;确定初始抽象语法树中的目标属性节点;将目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树;根据目标抽象语法树,生成目标代码。例如,以常量文件ustateconst.py为例,在常量文件ustateconst.py中定义了很多常量变量,在代码中会通过ustateconst.py访问到这些变量,比如源代码中使用ustateconst.state_move代表特定的字符串“move”;使用这种方式能够提升开发效率和代码可读性,并降低开发错误,假设需要改动到字符串“move”的时候,则只要修改ustateconst.py中对应的state_move的值,而不需要改动代码中所有使用
到ustateconst.state_move的地方。但是,在实际代码的运行中,ustateconst.state_move会带来额外的消耗,运行时代码需要先找到ustateconst,然后从ustateconst中找到state_move,才能得到最终的字符串“move”;所以本技术实施例将所有使用ustateconst.state_move的地方全部替换为字符串“move”,使代码在运行时不再依赖ustateconst.py。
79.由上可知,采用本技术实施例提供的方案通过将抽象语法树中的目标属性节点替换为了对应的字面值,简化初始代码,以提升代码运行速度,在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。
80.根据上述实施例所描述的方法,以下将作进一步详细说明。
81.在本实施例中,将以对python源代码的预处理为例,对本技术实施例的方法进行详细说明。
82.如图3所示,一种代码处理方法具体流程如下:
83.210、获取初始代码对应的所有常量文件,并建立常量文件集,常量文件集包括所有常量文件。
84.预处理是指在代码进行编译之前,对代码进行处理,以提升代码的编译效率和运行效率,也能隐去一些源代码的信息。在步骤210之前还可以包括步骤:设置待处理python源代码的路径以及记录所有常量文件的路径。
85.在获取初始代码对应的所有常量文件后,将常量文件import(导入)得到模块,例如将ustateconst.py得到的模块以文件名前缀存储在const模块集中,其中,ustateconst.py可以命名为ustateconst,const模块集即是前述实施例中的常量文件集,例如,const模块集可以记为modules(单元),形式如下:
[0086][0087]
在后续步骤中可以通过上述modules的信息对python源代码进行进一步操作。
[0088]
220、根据初始代码,生成初始抽象语法树。
[0089]
通过对python源代码文件进行扫描,并利用asttokens对扫描的每个文件构造初始抽象语法树。asttokens是文本和标记化形式维护源,并用标记信息标记ast节点的工具。
[0090]
若采用扫描并读取每一个python文件,通过匹配和判断字符串来修改相应的代码文本,再将修改完的代码文本写回原python文件的方法,通过字符串的纯文本判断不能保证替换后代码正确性,比如源代码中可能引用常量并对常量进行赋值操作,直接进行代码文本替换会导致代码出现语法错误,不能编译和运行。相比而言,本技术实施例通过将初始代码转换为初始抽象语法树,利用asttokens库用标记和源代码信息增强了python的抽象
语法树,足以检测每个节点的原文本,利用此信息能有效地对源代码进行转换,从而实现高效并且准确地替换代码常量。
[0091]
230、获取初始抽象语法树中的属性节点。
[0092]
在对每个文件对应的初始抽象语法树(记为ast),遍历其中每个节点(记为node),首先跳过特殊条件的节点(比如利用isinstance(node,ast.assign)判断赋值节点),再利用isinstance(node,ast.attribute)判断属性节点,并对属性节点进一步执行步骤240的判断过程。
[0093]
在本技术实施例中,对初始抽象语法树的赋值节点(ast.assign)跳过不处理,避免替换导致代码产生语法错误。
[0094]
240、根据目标子节点以及目标标识信息,从属性节点中确定目标属性节点。
[0095]
若属性节点的子节点node.value属于ast.name(名字表达式节点类型),则进一步判断该属性节点的子节点node.value的node.value.id(node.value子节点的id属性)是否存在于const模块集modules中。如果是,则说明该属性节点是替换的目标属性节点,如果不是,则继续递归判断。例如,步骤230以及步骤240的过程的实现代码可以如下:
[0096][0097][0098]
上述过程中,先利用isinstance(node,ast.attribute)判断属性节点,再在初始抽象语法树中根据属性节点的目标子节点类型筛选得到候选属性节点,再将候选属性节点的标识信息与目标标识信息进行比较(即判断node.value是否属于ast.name),能够大大减少下一步需要判断的候选属性节点的数量,避免反复访问modules,提高处理效率。
[0099]
250、获取目标属性节点对应的目标字面值。
[0100]
将步骤240中确定的目标属性节点(node),通过其node.value.id与modules中的信息比较可以获取到命中的const模块(记为module),并通过getattr(getattr是从指定的对象返回指定属性的值的函数)的方式从module中获取到node对应的实际字面量。例如,步骤250的过程的实现代码可以如下:
[0101][0102][0103]
260、将目标属性节点替换为目标字面值,得到目标抽象语法树。
[0104]
通过asttokens.util.replace的方法,使用步骤250获取到的字面值替换步骤240中的目标属性节点对应的代码文本。
[0105]
270、根据目标抽象语法树,生成目标代码。
[0106]
由上可知,本技术实施例在对python源代码文件进行扫描时使用了多进程进行加速,例如本实施例中利用const模块集简化了引用常量文件的过程,并通过两步筛选提高了判断目标属性节点过程的效率,能够大幅缩短处理时间,使用本技术实施例的方法处理百万行的python源代码的时长在1分钟左右。同时,本技术实施例提供的方案通过将抽象语法树中的目标属性节点替换为了对应的字面值,简化初始代码,以提升代码运行速度,在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。
[0107]
为了更好地实施以上方法,本技术实施例还提供一种代码处理装置,该代码处理装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
[0108]
比如,在本实施例中,将以代码处理装置具体集成在终端为例,对本技术实施例的方法进行详细说明。
[0109]
例如,如图4所示,该代码处理装置可以包括生成单元310、确定单元320以及替换单元330,如下:
[0110]
(一)生成单元310
[0111]
用于根据初始代码,生成初始抽象语法树。
[0112]
在一些实施方式中,生成单元310还可以用于步骤4.1~4.2,如下:
[0113]
4.1、获取初始代码对应的所有常量文件;
[0114]
4.2、建立常量文件集,常量文件集包括所有常量文件。
[0115]
在一些实施方式中,步骤4.2可以包括步骤4.2.1~4.2.3,如下:
[0116]
4.2.1、获取所有常量文件的存储位置,以及每个常量文件对应的目标标识信息;
[0117]
4.2.2、根据存储位置以及目标标识信息,建立常量文件列表;
[0118]
4.2.3、根据常量文件列表,建立常量文件集。
[0119]
在一些实施方式中,生成单元310还可以用于根据目标抽象语法树,生成目标代码。
[0120]
(二)确定单元320
[0121]
用于确定初始抽象语法树中的目标属性节点。
[0122]
在一些实施方式中,确定单元320具体可以用于步骤5.1~5.2,如下:
[0123]
5.1、获取初始抽象语法树中的候选属性节点;
[0124]
5.2、将包含目标标识信息的候选属性节点确定为目标属性节点。
[0125]
在一些实施方式中,步骤5.1可以包括步骤5.1.1~5.1.3,如下:
[0126]
5.1.1、获取初始抽象语法树中的属性节点;
[0127]
5.1.2、获取属性节点的目标子节点,目标子节点用来表征属性节点的节点值;
[0128]
5.1.3、将目标子节点为名字表达式节点类型的属性节点确定为候选属性节点。
[0129]
在一些实施方式中,步骤5.2可以包括步骤5.2.1~5.2.3,如下:
[0130]
5.2.1、获取常量文件集,常量文件集包含至少一个常量文件,每个常量文件对应一个目标标识信息;
[0131]
5.2.2、获取候选属性节点中的标识信息;
[0132]
5.2.3、将标识信息与任意一个目标标识信息相同的候选属性节点确定为目标属性节点。
[0133]
(三)替换单元330
[0134]
用于将目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树。
[0135]
在一些实施方式中,替换单元330具体可以用于步骤6.1~6.2,如下:
[0136]
6.1、获取目标属性节点对应的目标字面值;
[0137]
6.2、将目标属性节点替换为目标字面值,得到目标抽象语法树。
[0138]
在一些实施方式中,步骤6.1可以包括步骤6.1.1~6.1.3,如下:
[0139]
6.1.1、获取常量文件集,常量文件集包含至少一个常量文件;
[0140]
6.1.2、获取常量文件集中与目标属性节点对应的目标常量文件;
[0141]
6.1.3、将目标常量文件对应的字面值确定为目标字面值。
[0142]
在一些实施方式中,步骤6.1.2可以包括步骤6.1.2.1~6.1.2.3,如下:
[0143]
6.1.2.1、获取目标属性节点中的标识信息;
[0144]
6.1.2.2、从常量文件列表中确定目标常量文件的存储位置,目标常量文件为目标标识信息与目标属性节点中的标识信息相同的常量文件;
[0145]
6.1.2.3、根据目标常量文件的存储位置,获取目标常量文件。
[0146]
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
[0147]
由上可知,本实施例的代码处理装置可以包括生成单元、确定单元以及替换单元,其中,生成单元,用于根据初始代码,生成初始抽象语法树;确定单元,用于确定初始抽象语法树中的目标属性节点;替换单元,用于将目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树;生成单元,还用于根据目标抽象语法树,生成目标代码。
[0148]
由此,本技术实施例通过将抽象语法树中的目标属性节点替换为了对应的字面值,简化初始代码,以提升代码运行速度,在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。
[0149]
相应的,本技术实施例还提供一种计算机设备,该计算机设备可以为终端或服务器,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机、个人数字助理(personal digital assistant,pda)等终端设备。如图5所示,图5为本技术实施例提供的计算机设备的结构示意图,该计算机设备400包括有一个或者一个以上处理核心的处理器410、有一个或一个以上计算机可读存储介质的存储器420及存储在存储器420上并可在处理器上运行的计算机程序。其中,处理器410与存储器420电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0150]
处理器410是计算机设备400的控制中心,利用各种接口和线路连接整个计算机设备400的各个部分,通过运行或加载存储在存储器420内的软件程序和/或模块,以及调用存储在存储器420内的数据,执行计算机设备400的各种功能和处理数据,从而对计算机设备400进行整体监控。
[0151]
在本技术实施例中,计算机设备400中的处理器410会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器420中,并由处理器410来运行存储在存储器420中的应用程序,从而实现各种功能:
[0152]
根据初始代码,生成初始抽象语法树;确定初始抽象语法树中的目标属性节点;将目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树;根据目标抽象语法树,生成目标代码。
[0153]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0154]
可选的,如图5所示,计算机设备400还包括:触控显示屏430、射频电路440、音频电路450、输入单元460以及电源470。其中,处理器410分别与触控显示屏430、射频电路440、音频电路450、输入单元460以及电源470电性连接。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0155]
触控显示屏430可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏430可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(lcd,liquid crystal display)、有机发光二极管(oled,organic light-emitting diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并
生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器410,并能接收处理器410发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器410以确定触摸事件的类型,随后处理器410根据触摸事件的类型在显示面板上提供相应的视觉输出。在本技术实施例中,可以将触控面板与显示面板集成到触控显示屏430而实现输入和输出功能。但是在某些实施例中,触控面板与显示面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏430也可以作为输入单元460的一部分实现输入功能。
[0156]
射频电路440可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
[0157]
音频电路450可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路450可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路450接收后转换为音频数据,再将音频数据输出处理器410处理后,经射频电路440以发送给比如另一计算机设备,或者将音频数据输出至存储器420以便进一步处理。音频电路450还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
[0158]
输入单元460可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0159]
电源470用于给计算机设备400的各个部件供电。可选的,电源470可以通过电源管理系统与处理器410逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源470还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0160]
尽管图5中未示出,计算机设备400还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
[0161]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0162]
由上可知,本实施例提供的计算机设备可以通过将抽象语法树中的目标属性节点替换为了对应的字面值,简化初始代码,以提升代码运行速度,在运行获得的目标代码时,当运行目标属性节点对应的代码文本时,可以直接访问到真实的字面值,而不需要依照原本代码文本的方式进行多层索引,大大提升了代码的运行效率。
[0163]
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0164]
为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种代码处理方法中的步骤。例如,该计算机程序可以执行如下步骤:
[0165]
根据初始代码,生成初始抽象语法树;确定初始抽象语法树中的目标属性节点;将
目标属性节点替换为目标属性节点对应的字面值,得到目标抽象语法树;根据目标抽象语法树,生成目标代码。
[0166]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0167]
其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
[0168]
由于该存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种代码处理方法中的步骤,因此,可以实现本技术实施例所提供的任一种代码处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0169]
以上对本技术实施例所提供的一种代码处理方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

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

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

相关文献