本技术涉及计算机,尤其涉及一种基于深度神经网络和全局缓存的智能合约代码补全方法。
背景技术:
1、集成开发环境(ide)是一种软件应用程序,提供了一体化的开发环境,包括代码编辑器、调试器、编译器和其他工具,用于方便地进行软件开发。ide的目标是提高开发者的效率,通过提供一系列协同工具和功能,简化代码编写、测试和调试的过程。而代码补全是集成开发环境中的一项重要特性,它旨在提高开发者编写代码的效率,该特性通过在开发者输入代码的过程中,根据上下文和可能的选择,自动弹出建议或完成代码片段。
2、其中,solidity作为编写智能合约的主流编程语言之一,solidity智能合约通常涉及到许多复杂的上下文,包括状态变量、函数和事件。在这样的上下文中,智能代码补全变得更为复杂,因为ide需要理解整个合约的结构和功能。并且在大型项目中,可能存在多个智能合约相互依赖的情况然而,由于代码补全通常是基于当前文件的上下文进行的,使得ide无法完全理解所有合约之间的依赖关系,导致补全代码的准确性下降。
技术实现思路
1、本技术的目的旨在至少能解决上述的技术缺陷之一,特别是现有技术中ide无法完全理解所有合约之间的依赖关系,导致补全代码的准确性下降的技术缺陷。
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、概率调整模块,用于对所述预测位置概率和所述预测类型概率进行概率整合,并将整合结果与所述预测名称概率进行权重调整,得到调整结果;
39、代码补全模块,用于基于所述调整结果确定所述待补全代码的下一标识符,并根据所述下一标识符对所述待补全代码进行代码补全。
40、本技术还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述代码补全方法的步骤。
41、本技术还提供了一种计算机设备,包括:一个或多个处理器,以及存储器;
42、所述存储器中存储有计算机可读指令,所述计算机可读指令被所述一个或多个处理器执行时,执行如上述实施例中任一项所述代码补全方法的步骤。
43、从以上技术方案可以看出,本技术实施例具有以下优点:
44、本技术提供的基于深度神经网络和全局缓存的智能合约代码补全方法,在对待补全代码进行补全时,可以先获取包含待补全代码的代码数据,以及确定目标标识符预测模型,从而得到代码补全的基础数据;其中,待补全代码是由多个标识符组成得到的;接着可以将代码数据输入目标标识符预测模型中,得到目标标识符预测模型输出的待补全代码的下一个标识符的预测名称概率和预测类型概率,以及,将代码数据输入提前训练好的目标多层感知机中,得到多层感知机输出的待补全代码的下一个标识符的预测位置概率,进而可以对预测位置概率和预测类型概率进行概率整合,并将整合结果与预测名称概率进行权重调整,得到调整结果,最后基于该调整结果确定待补全代码的下一标识符,并根据该下一标识符对待补全代码进行代码补全。本技术在对代码补全时可以利用多层感知机构建全局缓存,并结合代码标识符类型进行预测来增加预测的准确性以及减小语法错误的概率,最后结合标识符名称的预测,可以解决待补全代码中长距离的标识符和自定义标识符的预测表现一般的问题,从而理解所有合约之间的依赖关系,提高补全代码的准确性。
1.一种代码补全方法,其特征在于,所述方法包括:
2.根据权利要求1所述的代码补全方法,其特征在于,所述获取包含待补全代码的代码数据,包括:
3.根据权利要求1所述的代码补全方法,其特征在于,所述确定目标标识符预测模型,包括:
4.根据权利要求3所述的代码补全方法,其特征在于,所述构建初始预测标识符预测模型,包括:
5.根据权利要求2所述的代码补全方法,其特征在于,所述目标标识符预测模型包括名称预测子模型和类型预测子模型;
6.根据权利要求1所述的代码补全方法,其特征在于,所述目标多层感知机的训练过程,包括:
7.根据权利要求1所述的代码补全方法,其特征在于,所述基于所述调整结果确定所述待补全代码的下一标识符,包括:
8.一种代码补全装置,其特征在于,包括:
9.一种存储介质,其特征在于:所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至7中任一项所述代码补全方法的步骤。
10.一种计算机设备,其特征在于,包括:一个或多个处理器,以及存储器;