本发明涉及计算机工程领域,尤其涉及的是一种wasm指令集生成方法、装置、终端及存储介质。
背景技术:
1、webassembly是w3c的开放标准,用于在web浏览器中运行跨平台的虚拟指令集。随着webassembly的发展,出现了一系列提案,如multi-value提案,它改进了指令集的控制流部分,允许代码块声明输入,从而提高了运算效率。
2、在现有技术中,通常会将高级编程语言代码输入到支持multi-value提案的webassembly编译器中,以生成webassembly(wasm)指令集。这种做法使得循环中的变量保留在堆栈上,从而减少生成代码所需的本地变量数量和指令数量,提高运算效率。然而,在将c语言中的循环结构转换为wasm指令集时,面临一个挑战:c语言中的循环通常依赖于中间变量来临时存储计算结果,以便在循环的下一次迭代中使用,而webassembly的multi-value提案并没有直接提供对中间变量的支持,这导致了编译器需要进行复杂的分析和转换过程来将c语言的循环结构转换为wasm指令集,即无法直接利用multi-value提案将c语言的循环结构直接转换为对应的wasm指令集。
3、因此,现有技术存在缺陷,有待改进与发展。
技术实现思路
1、本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种wasm指令集生成方法、装置、终端及存储介质,旨在解决现有技术中无法直接利用multi-value提案将c语言的循环结构直接转换为对应的wasm指令集的问题。
2、本发明解决技术问题所采用的技术方案如下:
3、第一方面,本发明实施例提供一种wasm指令集生成方法,所述方法包括:
4、获取具有预设的循环结构的目标循环代码;
5、利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的wasm指令集;
6、其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中继续执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码。
7、可选的,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的wasm指令集,包括:
8、利用所述目标编译器中预设的语法规则,将所述目标循环代码中的所述循环结构识别为一个完整代码块,并对所述完整代码块中的所述归纳变量定义结构、所述循环结束判断表达式、所述归纳变量迭代结构、所述循环体结构和所述循环终结分支表达式进行语法判断,得到语法判断结果;
9、若所述语法判断结果为正确,则对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的wasm指令集;
10、若所述语法判断结果为未通过,则生成代码语法错误的提示信息。
11、可选的,所述归纳变量定义结构中包括多个归纳变量,以及每个所述归纳变量对应的归纳变量初始值;所述对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的wasm指令集,包括:
12、基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组wasm指令,所述第一组wasm指令用于定义一个循环块的开始;
13、基于所述归纳变量定义结构,生成第二组wasm指令,所述第二组wasm指令用于将全部所述归纳变量初始值压入堆栈;
14、基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组wasm指令,所述第三组wasm指令用于描述所述循环结构中循环条件判断逻辑、循环体执行逻辑和循环结束时处理逻辑;
15、基于所述归纳变量迭代结构,生成第四组wasm指令,所述第四组wasm指令用于在每次循环迭代中,将所述归纳变量的计算值更新至堆栈中;
16、当生成所述第四组wasm指令后,在所述第四组wasm指令之后添加预设的第一预设wasm指令,以完成所述目标循环代码对应的wasm指令集的生成,其中,所述第一预设wasm指令用于跳转至循环块开头语句。
17、可选的,所述归纳变量定义结构包括第一归纳变量、与所述第一归纳变量对应的第一归纳变量初始值、若干第二归纳变量和每个与所述第二归纳变量对应的第二归纳变量初始值,所述第一归纳变量用于控制循环迭代次数,所述第二归纳变量用于保存每次循环迭代的计算值,所述基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组wasm指令,包括:
18、对所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式进行语义分析,得到所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型、以及循环结束时计算结果的数据类型;
19、基于所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型以及所述计算结果的数据类型,生成第一组wasm指令;
20、其中,所述第一组wasm指令包括所述第一归纳变量对应的参数、所述第二归纳变量对应的参数,以及本地变量对应的参数,所述第一归纳变量对应的参数用于将所述第一归纳变量在循环过程中的计算值存储于堆栈中,所述第二归纳变量对应的参数用于将所述第二归纳变量在循环过程中的计算值存储于堆栈中,所述本地变量对应的参数用于将循环结束时的计算结果存储于堆栈中。
21、可选的,所述基于所述归纳变量定义结构,生成第二组wasm指令,包括:
22、基于所述归纳变量定义结构中所述第一归纳变量的数据类型和所述第一归纳变量初始值,以及每个所述第二归纳变量的数据类型和对应的所述第二归纳变量初始值,生成第二组wasm指令。
23、可选的,所述循环结束判断表达式包括第一归纳变量、预设常量、关系符号;所述基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组wasm指令,包括:
24、基于所述循环结束判断表达式中的第一归纳变量、预设常量、关系符号,以及所述循环体结构中的全部语句和所述循环终结分支表达式中的全部语句,生成第三组wasm指令。
25、可选的,所述归纳变量迭代结构依次包括:第一归纳变量迭代表达式和第二归纳变量迭代表达式,所述第一归纳变量迭代表达式包含多个元素,所述第一归纳变量迭代表达式用于在每次循环迭代中更新所述第一归纳变量的计算值,所述第二归纳变量迭代表达式包含多个元素,所述第二归纳变量迭代表达式用于在每次循环迭代中更新所述第二归纳变量的计算值;所述基于所述归纳变量迭代结构,生成第四组wasm指令,包括:
26、当所述循环结构为for语句时,对所述归纳变量迭代结构中的所述第一归纳变量迭代表达式和所述第二归纳变量迭代表达式的顺序进行调整,得到调整后的归纳变量迭代结构;
27、基于调整后的归纳变量迭代结构生成所述第四组wasm指令。
28、可选的,所述基于所述归纳变量迭代结构,生成第四组wasm指令还包括:
29、当所述循环结构为loop语句时,分别提取所述第一归纳变量迭代表达式中的全部元素,以及所述第二归纳变量迭代表达式中的全部元素;
30、依次对所述第二归纳变量迭代表达式中的全部元素和所述第一归纳变量迭代表达式中的全部元素进行转换,以形成所述归纳变量迭代结构对应的第四组wasm指令。
31、可选的,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的wasm指令集之后,还包括:
32、利用所述目标编译器编译第二目标代码,所述第二目标代码为调用所述循环结构的计算结果的代码;
33、其中,所述计算结果存储于堆栈中,由执行所述循环体结构中的跳出语句后或执行所述循环终结分支表达式后生成。
34、可选的,所述计算结果在堆栈中的存储方式为绑定预设标识符存储于堆栈中的本地变量或直接存储于堆栈中。
35、第二方面,本发明实施例还提供一种wasm指令集生成装置,包括:
36、代码获取模块,用于获取具有预设的循环结构的目标循环代码;
37、指令集生成模块,用于利用目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的wasm指令集;
38、其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码。
39、第三方面,本发明实施例还提供一种终端,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的wasm指令集生成程序,所述wasm指令集生成程序被所述处理器执行时实现如上所述的wasm指令集生成方法的步骤。
40、第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有wasm指令集生成程序,所述wasm指令集生成程序能够被执行以用于实现如上所述的wasm指令集生成方法的步骤。
41、本发明的有益效果:本发明实施例通过获取具有预设的循环结构的目标循环代码;利用具有预设语法规则的目标编译器编译目标循环代码,将目标循环代码直接转换为带有multi-value提案的wasm指令集;循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式。本发明通过定义一种声明式循环结构,利用目标编译器对具有预设的循环结构的目标循环代码进行编译,可直接生成目标循环代码对应的带有multi-value提案的wasm指令集。
1.一种wasm指令集生成方法,其特征在于,所述方法包括:
2.根据权利要求1所述的wasm指令集生成方法,其特征在于,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的wasm指令集,包括:
3.根据权利要求2所述的wasm指令集生成方法,其特征在于,所述归纳变量定义结构中包括多个归纳变量,以及每个所述归纳变量对应的归纳变量初始值;所述对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的wasm指令集,包括:
4.根据权利要求3所述的wasm指令集生成方法,其特征在于,所述归纳变量定义结构包括第一归纳变量、与所述第一归纳变量对应的第一归纳变量初始值、若干第二归纳变量和每个与所述第二归纳变量对应的第二归纳变量初始值,所述第一归纳变量用于控制循环迭代次数,所述第二归纳变量用于保存每次循环迭代的计算值,所述基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组wasm指令,包括:
5.根据权利要求4所述的wasm指令集生成方法,其特征在于,所述基于所述归纳变量定义结构,生成第二组wasm指令,包括:
6.根据权利要求3所述的wasm指令集生成方法,其特征在于,所述循环结束判断表达式包括第一归纳变量、预设常量、关系符号;所述基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组wasm指令,包括:
7.根据权利要求3所述的wasm指令集生成方法,其特征在于,所述归纳变量迭代结构依次包括:第一归纳变量迭代表达式和第二归纳变量迭代表达式,所述第一归纳变量迭代表达式包含多个元素,所述第一归纳变量迭代表达式用于在每次循环迭代中更新所述第一归纳变量的计算值,所述第二归纳变量迭代表达式包含多个元素,所述第二归纳变量迭代表达式用于在每次循环迭代中更新所述第二归纳变量的计算值;所述基于所述归纳变量迭代结构,生成第四组wasm指令,包括:
8.根据权利要求7所述的wasm指令集生成方法,其特征在于,所述基于所述归纳变量迭代结构,生成第四组wasm指令还包括:
9.根据权利要求4所述的wasm指令集生成方法,其特征在于,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的wasm指令集之后,还包括:
10.根据权利要求9所述的wasm指令集生成方法,其特征在于,所述计算结果在堆栈中的存储方式为绑定预设标识符存储于堆栈中的本地变量或直接存储于堆栈中。
11.一种wasm指令集生成装置,其特征在于,包括:
12.一种终端,其特征在于,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的wasm指令集生成程序,所述wasm指令集生成程序被所述处理器执行时实现如权利要求1-10任意一项所述的wasm指令集生成方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有wasm指令集生成程序,所述wasm指令集生成程序能够被执行以用于实现如权利要求1-10任意一项所述的wasm指令集生成方法的步骤。
