本申请实施例涉及计算机,尤其涉及一种程序变量类型处理方法和装置。
背景技术:
1、目前源代码编译生成的字节码中通常不保存源代码中变量的类型,在实际运行时再实时推导变量类型,以保证程序的正常运行。该方法虽然可以降低编译时间,减小字节码的尺寸进而减小整个应用包的尺寸,但运行过程中推导变量类型增加了处理设备的工作量,处理设备的运行速度会受到影响。从用户的角度来看,该方法会使得用户在使用应用的时候,应用执行速度较慢,影响用户的体验。
技术实现思路
1、本申请实施例提供一种程序变量类型处理方法和装置。通过预先存储少量第一变量的变量类型并构建变量类型语法树,使得处理器运行源代码文件时能够高效推导出其他变量的变量类型,有效提高程度的运行速度,提高用户体验,同时不占用字节码文件的过多空间。
2、第一方面,本申请实施例提供了一种程序变量类型处理方法,包括:
3、基于待编译的源代码文件中的变量,构建所述源代码文件的变量类型语法树;
4、基于所述变量类型语法树在所述源代码文件中确定至少一个第一变量,并获取所述第一变量的变量类型;
5、将所述第一变量的变量类型和所述变量类型语法树添加至所述源代码文件编译生成的字节码文件中,以使处理器运行所述字节码文件过程中,基于所述变量类型语法树和所述第一变量的变量类型推导出第二变量的变量类型。
6、一种实施例中,所述将所述第一变量的变量类型和所述变量类型语法树添加至所述源代码文件编译生成的字节码文件中之前,所述方法还包括:
7、基于所述变量类型语法树和所述第一变量的变量类型,在所述源代码文件中确定第三变量,并获取所述第三变量的变量类型;
8、其中,所述第三变量为基于所述变量类型语法树和所述第一变量的变量类型无法推导出变量类型的变量。
9、一种实施例中,所述基于所述变量类型语法树和所述第一变量的变量类型,在所述源代码文件中确定第三变量,包括:
10、基于所述变量类型语法树和所述第一变量的变量类型推导所述源代码文件中其他所有变量的变量类型;
11、对于任一变量,若检测到当前变量所推导出的变量类型与实际的变量类型不同,则将所述当前变量确定为所述第三变量。
12、一种实施例中,所述方法还包括:
13、将所述第三变量的变量类型添加至所述字节码文件中。
14、本申请实施例中,处理设备预先筛选出无法推导出变量类型的变量,并存储此类变量的变量类型,可提高程序的运行速度。
15、一种实施例中,所述将所述第一变量的变量类型和所述变量类型语法树添加至所述源代码文件编译生成的字节码文件中之前,所述方法还包括:
16、基于所述变量类型语法树和所述第一变量的变量类型,在所述源代码文件中确定所述第二变量,并且不存储所述第二变量的变量类型;
17、其中,所述第二变量为基于所述变量类型语法树和所述第一变量的变量类型能够推导出变量类型的变量。
18、一种实施例中,基于所述变量类型语法树和所述第一变量的变量类型,在所述源代码文件中确定所述第二变量,包括:
19、基于所述变量类型语法树和所述第一变量的变量类型推导所述源代码文件中其他所有变量的变量类型;
20、对于任一变量,若检测到当前变量所推导出的变量类型与实际的变量类型相同,则将所述当前变量确定为所述第二变量。
21、本申请实施例中,处理设备筛选出第二变量后,不存储第二变量的变量类型,能够有效降低字节码文件的尺寸。
22、一种实施例中,所述基于待编译的源代码文件中的变量,构建所述源代码文件的变量类型语法树,包括:
23、获取所述源代码文件中的所有变量;
24、基于所述变量的变量类型以及所述变量在所述源代码文件中相关的代码语句,将所述变量放置于所述变量类型语法树的各个节点。
25、一种实施例中,所述基于所述变量的变量类型以及所述变量在所述源代码文件中相关的代码语句,将所述变量放置于所述变量类型语法树的各个节点,包括:
26、基于所述变量的变量类型以及所述变量在所述源代码文件中相关的代码语句,在变量中筛选出基础变量,并将所述基础变量放置于所述变量类型语法树的叶子节点中;
27、针对任一基础变量,将与所述基础变量存在语法联系的变量放置于与所述基础变量所在叶子节点连接的字节点中。
28、一种实施例中,所述与所述基础变量存在语法联系的变量包括:与所述基础变量的变量类型相同的变量,或与所述基础变量位于同一段代码语句中的变量。
29、第二方面,本申请实施例提供了一种程序变量类型处理装置,包括:
30、构建模块,用于基于待编译的源代码文件中的变量,构建所述源代码文件的变量类型语法树;
31、确定模块,用于基于所述变量类型语法树在所述源代码文件中确定至少一个第一变量,并获取所述第一变量的变量类型;
32、处理模块,用于将所述第一变量的变量类型和所述变量类型语法树添加至所述源代码文件编译生成的字节码文件中,以使处理器运行所述字节码文件过程中,基于所述变量类型语法树和所述第一变量的变量类型推导出第二变量的变量类型。
33、第三方面,本申请实施例提供了一种电子设备,包括:
34、至少一个处理器;以及
35、与所述处理器通信连接的至少一个存储器,其中:
36、所述存储器存储程序指令,所述处理器调用所述程序指令能够执行第一方面提供的方法。
37、第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序被处理器执行时实现第一方面提供的方法。
38、本申请实施例中,基于待编译的源代码文件中的变量,构建源代码文件的变量类型语法树;基于变量类型语法树在源代码文件中确定至少一个第一变量,并获取第一变量的变量类型;将第一变量的变量类型和所述变量类型语法树添加至源代码文件编译生成的字节码文件中,以使处理器运行字节码文件过程中,基于变量类型语法树和第一变量的变量类型推导出第二变量的变量类型。通过预先存储少量第一变量的变量类型并构建变量类型语法树,使得处理器运行源代码文件时能够高效推导出其他变量的变量类型,有效提高程度的运行速度,同时不占用字节码文件的过多空间。
1.一种程序变量类型处理方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述将所述第一变量的变量类型和所述变量类型语法树添加至所述源代码文件编译生成的字节码文件中之前,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述基于所述变量类型语法树和所述第一变量的变量类型,在所述源代码文件中确定第三变量,包括:
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
5.根据权利要求1所述的方法,其特征在于,所述将所述第一变量的变量类型和所述变量类型语法树添加至所述源代码文件编译生成的字节码文件中之前,所述方法还包括:
6.根据权利要求5所述的方法,其特征在于,基于所述变量类型语法树和所述第一变量的变量类型,在所述源代码文件中确定所述第二变量,包括:
7.根据权利要求1所述的方法,其特征在于,所述基于待编译的源代码文件中的变量,构建所述源代码文件的变量类型语法树,包括:
8.根据权利要求7所述的方法,其特征在于,所述基于所述变量的变量类型以及所述变量在所述源代码文件中相关的代码语句,将所述变量放置于所述变量类型语法树的各个节点,包括:
9.根据权利要求8所述的方法,其特征在于,所述与所述基础变量存在语法联系的变量包括:与所述基础变量的变量类型相同的变量,或与所述基础变量位于同一段代码语句中的变量。
10.一种程序变量类型处理装置,其特征在于,包括:
11.一种电子设备,其特征在于,包括:
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的程序,其中,所述程序被处理器执行时实现如权利要求1至9任意一项所述的方法。