CN117707612A - 代码的处理方法、装置及电子设备 - Google Patents
代码的处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN117707612A CN117707612A CN202311731823.7A CN202311731823A CN117707612A CN 117707612 A CN117707612 A CN 117707612A CN 202311731823 A CN202311731823 A CN 202311731823A CN 117707612 A CN117707612 A CN 117707612A
- Authority
- CN
- China
- Prior art keywords
- target
- code
- structure diagram
- vector
- graph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 11
- 238000010586 diagram Methods 0.000 claims abstract description 203
- 239000013598 vector Substances 0.000 claims abstract description 138
- 238000012545 processing Methods 0.000 claims abstract description 55
- 238000000034 method Methods 0.000 claims abstract description 40
- 230000008439 repair process Effects 0.000 claims abstract description 19
- 238000013507 mapping Methods 0.000 claims abstract description 14
- 238000012549 training Methods 0.000 claims description 32
- 238000003062 neural network model Methods 0.000 claims description 6
- 238000005516 engineering process Methods 0.000 abstract description 17
- 230000001537 neural effect Effects 0.000 abstract description 7
- 238000013519 translation Methods 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 22
- 230000008569 process Effects 0.000 description 11
- 230000000694 effects Effects 0.000 description 10
- 238000013528 artificial neural network Methods 0.000 description 8
- 238000001514 detection method Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种代码的处理方法、装置及电子设备。其中,该方法包括:获取目标代码,并基于目标代码的语法结构,将目标代码转换为图结构,得到目标结构图;将目标结构图映射为多维的向量,得到第一图向量;将第一图向量输入目标模型,在目标模型中,基于目标原语操作对目标结构图进行调整,以对目标代码进行修复,其中,目标模型用于预测修复代码错误后的代码结构图,目标原语操作用于在目标结构图中对目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。本发明解决了相关技术中由于神经机器翻译技术难以学习代码的语义结构信息,导致对代码的错误进行修复的精准度低的技术问题。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种代码的处理方法、装置及电子设备。
背景技术
目前,随着现代代码库越来越庞大,为了提高生产和自动化效率,自动化检测代码错误的工具也在不断发展。这些工具背后的技术可以大致分为两类,具体包括:
(1)基于规则的技术和数据驱动技术。基于规则的技术使用手动编写的规则捕获不正确的代码模式并扫描整个代码库以查找这些类别的错误,但是基于规则的技术只能针对的是特定的错误模式或特定代码库中特定的错误类型,无法捕获预先写入规则以外的代码错误,存在大量的误报情况。
(2)基于深度学习的技术使用深度神经网络从大型代码语料库中检测异常代码,不需要手动写入不正确的代码模式,但种模型大多只能针对特定类型的代码错误。例如:基于神经机器翻译(NMT)的技术,将错误的代码当成自然语言,使用神经网络将错误的代码“翻译”成正确的代码,但是NMT的架构难以充分学习到代码特有的语义结构信息,比如相同变量和函数引起的长距离依赖以及由于跳转、循环、判断形成的控制流特征等,导致NMT技术对错误的代码的检测修复的精准度低。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种代码的处理方法、装置及电子设备,以至少解决相关技术中由于神经机器翻译技术难以学习代码的语义结构信息,导致对代码的错误进行修复的精准度低的技术问题。
根据本发明实施例的一个方面,提供了一种代码的处理方法,包括:获取目标代码,并基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,其中,所述图结构为树形结构,所述目标结构图的节点中至少记录有所述目标代码中参数的信息;将所述目标结构图映射为多维的向量,得到第一图向量;将所述第一图向量输入目标模型,在所述目标模型中,基于目标原语操作对所述目标结构图进行调整,以对所述目标代码进行修复,其中,所述目标模型用于预测修复代码错误后的代码结构图,所述目标原语操作用于在所述目标结构图中对所述目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。
进一步地,基于目标原语操作对所述目标结构图进行调整,包括:基于所述目标原语操作,确定多种操作算子,其中,所述多种操作算子用于对所述目标结构图进行编辑,以预测修复错误代码后的所述目标代码的代码结构图;基于所述多种操作算子,对所述目标结构图进行调整。
进一步地,所述目标原语操作包括以下至少之一:定位原语操作、赋予类型原语操作以及赋予值原语操作,所述定位原语操作用于在所述目标结构图中对错误代码对应节点的位置进行定位,所述赋予类型原语操作用于确定对错误代码进行修复的参数的参数类型,所述赋予值原语操作用于对代码的参数进行赋值;
所述多种操作算子包括以下至少之一:用于在所述目标结构图中增加节点的操作算子、用于在所述目标结构图中删除节点的操作算子、用于在所述目标结构图中替换节点值的操作算子、用于在所述目标结构图中替换节点类型的操作算子以及空操作算子,所述节点类型包括参数类型,所述空操作算子表示无需对所述目标结构图进行编辑操作。
进一步地,基于所述多种操作算子,对所述目标结构图进行调整,包括:在所述目标结构图的每个节点中,通过所述目标模型中预测目标操作算子,其中,所述目标操作算子为所述多种操作算子的其中之一;在预测到的所述目标操作算子为所述空操作算子的情况下,确定所述目标结构图不存在错误,无需对所述目标结构图进行调整;在预测到的所述目标操作算子不是所述空操作算子的情况下,通过所述目标操作算子对所述目标结构图进行调整。
进一步地,通过所述目标操作算子对所述目标结构图进行调整,包括:获取目标向量集合,其中,所述目标向量集合至少包括:位置向量、操作算子向量、目标向量,其中,所述位置向量用于在所述目标结构图中定位存在错误的代码对应的节点,所述操作算子向量用于表示所述目标操作算子,所述目标向量用于记录对所述目标结构图进行编辑操作的操作记录;基于所述目标向量集合对所述目标结构图进行调整。
进一步地,基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,包括:基于所述目标代码的语法结构,生成所述目标代码的抽象语法树,其中,所述抽象语法树的叶子节点中记录有所述目标代码中参数的标识信息;将所述抽象语法树中的叶子节点用边连接,并在所述抽象语法树中添加用于存放参数的值的节点,得到所述目标结构图。
进一步地,在基于目标原语操作对所述目标结构图进行调整之后,包括:通过所述目标模型输出第二图向量,其中,所述第二图向量用于表示对所述目标结构图进行调整后得到的代码结构图;基于所述第二图向量,对所述目标代码中错误代码进行修复,得到修复后的所述目标代码。
进一步地,所述目标模型通过以下方式得到:获取训练样本,其中,所述训练样本至少包括:M个第三图向量,M个第四图向量,其中,所述第三图向量用于历史代码的代码结构图,所述历史代码包括:历史时间段得到的存在代码错误的代码,所述第四图向量用于表示对代码错误进行修复后的所述历史代码的代码结构图,M为正整数;将所述训练样本输入初始模型进行模型训练,并在初始模型训练收敛的情况下,将所述初始模型作为所述目标模型,其中,所述初始模型的模型类型包括:图神经网络模型。
根据本发明实施例的另一方面,还提供了一种代码的处理装置,包括:第一处理单元,用于获取目标代码,并基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,其中,所述图结构为树形结构,所述目标结构图的节点中至少记录有所述目标代码中参数的信息;映射单元,用于将所述目标结构图映射为多维的向量,得到第一图向量;第二处理单元,用于将所述第一图向量输入目标模型,在所述目标模型中,基于目标原语操作对所述目标结构图进行调整,以对所述目标代码进行修复,其中,所述目标模型用于预测修复代码错误后的代码结构图,所述目标原语操作用于在所述目标结构图中对所述目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。
进一步地,第二处理单元包括:确定子单元,用于基于所述目标原语操作,确定多种操作算子,其中,所述多种操作算子用于对所述目标结构图进行编辑,以预测修复错误代码后的所述目标代码的代码结构图;调整子单元,用于基于所述多种操作算子,对所述目标结构图进行调整。
进一步地,所述目标原语操作包括以下至少之一:定位原语操作、赋予类型原语操作以及赋予值原语操作,所述定位原语操作用于在所述目标结构图中对错误代码对应节点的位置进行定位,所述赋予类型原语操作用于确定对错误代码进行修复的参数的参数类型,所述赋予值原语操作用于对代码的参数进行赋值;所述多种操作算子包括以下至少之一:用于在所述目标结构图中增加节点的操作算子、用于在所述目标结构图中删除节点的操作算子、用于在所述目标结构图中替换节点值的操作算子、用于在所述目标结构图中替换节点类型的操作算子以及空操作算子,所述节点类型包括参数类型,所述空操作算子表示无需对所述目标结构图进行编辑操作。
进一步地,调整子单元包括:预测模块,用于在所述目标结构图的每个节点中,通过所述目标模型中预测目标操作算子,其中,所述目标操作算子为所述多种操作算子的其中之一;确定模块,用于在预测到的所述目标操作算子为所述空操作算子的情况下,确定所述目标结构图不存在错误,无需对所述目标结构图进行调整;调整模块,用于在预测到的所述目标操作算子不是所述空操作算子的情况下,通过所述目标操作算子对所述目标结构图进行调整。
进一步地,调整模块包括:获取子模块,用于获取目标向量集合,其中,所述目标向量集合至少包括:位置向量、操作算子向量、目标向量,其中,所述位置向量用于在所述目标结构图中定位存在错误的代码对应的节点,所述操作算子向量用于表示所述目标操作算子,所述目标向量用于记录对所述目标结构图进行编辑操作的操作记录;调整子模块,用于基于所述目标向量集合对所述目标结构图进行调整。
进一步地,第一处理单元包括:生成子单元,用于基于所述目标代码的语法结构,生成所述目标代码的抽象语法树,其中,所述抽象语法树的叶子节点中记录有所述目标代码中参数的标识信息;处理子单元,用于将所述抽象语法树中的叶子节点用边连接,并在所述抽象语法树中添加用于存放参数的值的节点,得到所述目标结构图。
进一步地,代码的处理装置包括:输出单元,用于在基于目标原语操作对所述目标结构图进行调整之后,通过所述目标模型输出第二图向量,其中,所述第二图向量用于表示对所述目标结构图进行调整后得到的代码结构图;修复单元,用于基于所述第二图向量,对所述目标代码中错误代码进行修复,得到修复后的所述目标代码。
进一步地,所述目标模型通过以下单元得到:获取单元,用于获取训练样本,其中,所述训练样本至少包括:M个第三图向量,M个第四图向量,其中,所述第三图向量用于历史代码的代码结构图,所述历史代码包括:历史时间段得到的存在代码错误的代码,所述第四图向量用于表示对代码错误进行修复后的所述历史代码的代码结构图,M为正整数;训练单元,用于将所述训练样本输入初始模型进行模型训练,并在初始模型训练收敛的情况下,将所述初始模型作为所述目标模型,其中,所述初始模型的模型类型包括:图神经网络模型。
根据本发明实施例的另一方面,还提供了一种电子设备,包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行上述任意一项的代码的处理方法。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述任意一项的代码的处理方法。
在本发明中,获取目标代码,并基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,其中,所述图结构为树形结构,所述目标结构图的节点中至少记录有所述目标代码中参数的信息;将所述目标结构图映射为多维的向量,得到第一图向量;将所述第一图向量输入目标模型,在所述目标模型中,基于目标原语操作对所述目标结构图进行调整,以对所述目标代码进行修复,其中,所述目标模型用于预测修复代码错误后的代码结构图,所述目标原语操作用于在所述目标结构图中对所述目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。进而解决了相关技术中由于神经机器翻译技术难以学习代码的语义结构信息,导致对代码的错误进行修复的精准度低的技术问题。在本发明中,基于代码的语法结构,通过目标模型对代码的结构图进行调整,以对目标代码中的错误代码进行检测及修复,达到了基于代码的语义信息对代码进行修复的目的,从而实现了提高对代码的错误进行修复的精准度的技术效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的代码的处理方法的流程图;
图2是根据本发明实施例的一种可选的目标模型对目标结构图进行变换推断的流程图;
图3是根据本发明实施例的一种可选的目标结构图的示意图;
图4是根据本发明实施例的一种可选的目标结构图的调整过程的流程图;
图5是根据本发明实施例的一种可选的代码的处理装置的示意图;
图6是根据本发明实施例的一种电子设备的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
实施例一
根据本发明实施例,提供了一种可选的代码的处理方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种可选的代码的处理方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,获取目标代码,并基于目标代码的语法结构,将目标代码转换为图结构,得到目标结构图,其中,图结构为树形结构,目标结构图的节点中至少记录有目标代码中参数的信息。
为了避免相关技术中由于神经机器翻译技术难以学习代码的语义结构信息的情况,在本实施例中,可以依据目标代码的语法结构,将目标代码转换成抽象语法树(AST)的形式,达到以树状的形式表现编程语言的语法结构的目的,抽象语法树上的每个节点可以表示代码中的一种结构。将程序的源代码转换成抽象语法树之后,对于生成的抽象语法树,还可以将叶子节点用边连接起来。并增加存储叶节点真实内容的值节点(例如:叶子节点用于记录参数名称,则值节点可以用于记录具体的参数值),还可以将这些值节点用指定的边连接在一起,以此得到目标结构图。
步骤S102,将目标结构图映射为多维的向量,得到第一图向量。
将代码表示成图结构,得到目标结构图之后,还以通过图神经网络(Graph NeuralNetwork,GNN)将目标结构图映射到多维向量空间中,以将通过向量的形式表示目标结构图。例如:给定一个图结构g=(V,E),其中,V表示顶点,E表示边,可以通过函数以获取图结构g的d维空间的表示(用符号/>表示),并且还可以获取顶点v∈V的表示/>为了确定方程f(·)的参数,可以使用GIN(Graph Isomorphism Network,图同构网络)的方法,并通过以下公式进行图嵌入:
其中,是模型的参数,R为实数,d表示维度,σ(·)使用的是"tanh(双曲正切函数),K可以表示边的种类的个数。顶点的嵌入为/>L表示GNN网络中传播的次数。/>表示顶点v的邻居的集合,它们和顶点v连接的边的类型是type k。在使用GIN之后,可得程序(或代码)的图形表示/>是/>的聚合,对每一个/>使用最大池化(max pooling),然后对取得的L+1个向量取平均,得到/>(对应于第一图向量)。
步骤S103,将第一图向量输入目标模型,在目标模型中,基于目标原语操作对目标结构图进行调整,以对目标代码进行修复,其中,目标模型用于预测修复代码错误后的代码结构图,目标原语操作用于在目标结构图中对目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。
在本实施例中,可以将第一图向量输入目标模型,可以通过目标模型预测至多T步的图形变换,以通过目标模型预测一个正确的代码片段的图形表示gfix,其中,图形变换的步数T可以由目标模型确定。为了便于通过目标模型预测正确的代码的图形表示,可以通过目标原语操作对目标结构图进行调整。
通过上述步骤,在本实施例中,基于代码的语法结构,通过目标模型对代码的结构图进行调整,以对目标代码中的错误代码进行检测及修复,达到了基于代码的语义信息对代码进行修复的目的,从而实现了提高对代码的错误进行修复的精准度的技术效果。进而解决了相关技术中由于神经机器翻译技术难以学习代码的语义结构信息,导致对代码的错误进行修复的精准度低的技术问题。
可选地,基于目标原语操作对目标结构图进行调整,包括:基于目标原语操作,确定多种操作算子,其中,多种操作算子用于对目标结构图进行编辑,以预测修复错误代码后的目标代码的代码结构图;基于多种操作算子,对目标结构图进行调整。
为了避免相关技术中采用NMT技术,将错误的代码当成自然语言使用神经网络“翻译”成正确的代码,由于NMT技术难以学习到代码的语义结构信息,导致代码修复精准度低的情况,在本实施例中,可以采用多种操作算子对目标结构图进行调整方式,预测正确代码的结构图。
上述的目标原语操作可以包括多种操作,多种操作可以包定位、赋值等操作,通过对多种操作进行组合可以得到多种操作算子,通过目标模型预测目标结构图中的每个节点中的可行的操作算子,根据预测到的可行的操作算子对目标结构进行调整,实现了提高检测错误代码检测准确度以及代码修复的精准度的技术效果。
可选地,目标原语操作包括以下至少之一:定位原语操作、赋予类型原语操作以及赋予值原语操作,定位原语操作用于在目标结构图中对错误代码对应节点的位置进行定位,赋予类型原语操作用于确定对错误代码进行修复的参数的参数类型,赋予值原语操作用于对代码的参数进行赋值;多种操作算子可以包括但不限于:用于在目标结构图中增加节点的操作算子、用于在目标结构图中删除节点的操作算子、用于在目标结构图中替换节点值的操作算子、用于在目标结构图中替换节点类型的操作算子以及空操作算子,节点类型包括参数类型,空操作算子表示无需对目标结构图进行编辑操作。
上述的目标原语操作可以包括但不限于:Location(对应于定位原语操作)用于定位,Type(对应于赋予类型原语操作)用于为节点赋予类型,Value(对应于赋予值原语操作)用于为节点赋予值。
具体地,Location(定位)基本操作原语(即定位原语操作)可以实现对于源代码(对应于目标代码)特定位置的定位功能,在代码的图形表示结构当中,可以简单地将其变成对目标结构图的顶点(node)进行选择定位。对目标结构图中可以使用指针网络(pointernetworks)的方式,找到需要定位到的顶点,具体来说,即在获取到顶点的空间向量嵌入之后,通过/>找到目标顶点。
Value(赋值)基本操作原语(即赋予值原语操作)可以实现AST语法树中对叶子节点的赋值的操作。可以使用注意力机制(attention mechanism)让模型从当前文件中出现的值(本地值表)或特定语言通用的全局值集合中进行选择。可以令Dval作为编程语言中常用叶节点值的全局字典,每一项iv∈Dval都对应一个向量表示本地值表Vval是可以当前目标结构图的顶点的子集。然后,通过/>预测值,出于运算效率的考虑,Value(赋值)基本操作原语和Location基本原语操作一样使用内积运算。
Type(赋类型)基本操作原语(对应于赋予类型原语操作)实现AST语法树中对非叶子节点指定其类型的功能。由于在指定的一种编程语言当中,可能的类型总数是有限且固定的,因此类型预测可以作为一个多分类问题。可以利用带有上下文信息的AST语法检查器来对输出空间进行剪枝。为了预测给定非终端节点的类型,可以先获得其父节点和当前子节点,然后在当前位置循环不同类型的有效生成规则,获得所有有效类型的列表。最终类型即可以从该列表中选择。
代码的图形嵌入上可以定义上述的目标原语操作,目标原语操作可以组成多种操作算子,一种可选的方式中,三种基本的原语操作(即定位原语操作、赋予类型原语操作以及赋予值原语操作)可以组合起来形成五种不同的单步图形编辑操作算子。
多种操作算子可以包括但不限于:用于在目标结构图中增加节点的操作算子、用于在目标结构图中删除节点的操作算子、用于在目标结构图中替换节点值的操作算子、用于在目标结构图中替换节点类型的操作算子以及空操作算子,节点类型包括参数类型,空操作算子表示无需对目标结构图进行编辑操作。
具体地,增加节点(ADD)(对应于增加节点的操作算子)、删除节点(DEL)(对应于删除节点的操作算子)、替换节点的值(REP_VAL)(对应于替换节点值的操作算子)、替换节点的类型(REP_TYPE)(对应于替换节点类型的操作算子)以及空操作(NO_OP)(对应于空操作算子)。
增加节点(ADD):可以通过ADD运算符实现在图中增加节点的功能。这个过程可以调用了一个Location原语,一个Type原语和一个Value原语,在对目标结构图进行编辑之前可以调用的Location原语确定要添加的节点的父节点,而在编辑期间可以调用的Location原语选择节点的左兄弟。在父节点没有任何子节点的特殊情况下,则将此类左兄弟节点设置为父节点其本身。以此即可以唯一地确定节点要插入AST的目标结构图中的位置。最后,可以根据要添加的新节点的位置自动推断相应的边。
由于此过程是自回归的,因此“微上下文”嵌入向量会随着所有原语的调用保持更新。对于此运算符,上下文向量按以下顺序更新: 最后,/>总结增加节点(ADD)的过程。
删除节点(DEL):可以通过DEL运算符实现删除图中的节点和相应边的功能。如果它是AST的目标结构图中的非终端节点,如果它是AST的目标结构图中的非终端节点,则相应的子树也可以被删除。“微上下文”嵌入向量可以通过GRU根据被删除的节点的嵌入向量来更新。
替换节点的值(REP_VAL):可以通过REP_VAL运算符实现替换AST叶节点(目标结构图终端节点)值的功能。替换过程可以预测值。叶节点通过ValueLink边(用于连接值节点的边)链接到内部值表中的新值节点。此外,GRU通过嵌入相应节点和值来更新“微上下文”向量。
替换节点的类型:可以通过REP_TYPE运算符实现改变一个非终端节点的类型的功能,这涉及到类型原语的步骤。GRU通过嵌入相应的节点和类型来更新“微上下文”向量。
空操作(NO_OP):可以通过NO_OP运算符实现,不会更改图形且可以表示图形编辑序列的结束。
图操作算子(即多种操作算子)和基础原语操作(即目标原语操作)的组成关系如表1所示。
表1
Location | Value | Type | |
ADD | √ | √ | √ |
REP_VAL | √ | √ | |
REP_TYPE | √ | √ | |
DEL | √ |
在本实施例中,通过目标原语操作和多种操作算子,可以对代码的图结构进行编辑,实现了对代码的图结构进行精准调整的技术效果。
可选地,基于多种操作算子,对目标结构图进行调整,包括:在目标结构图的每个节点中,通过目标模型中预测目标操作算子,其中,目标操作算子为多种操作算子的其中之一;在预测到的目标操作算子为空操作算子的情况下,确定目标结构图不存在错误,无需对目标结构图进行调整;在预测到的目标操作算子不是空操作算子的情况下,通过目标操作算子对目标结构图进行调整。
在对目标结构图进行调整过程中,多种操作算子的选择可以通过由一个自回归的GRU控制器进行确定,每次选择操作算子都可以导致控制器向量的更新。第t次的图形编辑操作可以是基于当前的图形gt-1(目标结构图进行t-1次编辑得到的图形),其对应的图形表示向量和当前的“宏上下文”向量包含了当前为止的以及对目标结构图进行过的操作信息。每种类型的编辑操作(不包括NO_OP),都需要预测错误的位置,所以在对目标结构图的每一轮编辑过程中,Location原语操作可以均被调用来确定要定位的节点,然后此时在位置v可行的操作类型e在五种可能的操作算子中被预测出来。
可选地,通过目标操作算子对目标结构图进行调整,包括:获取目标向量集合,其中,目标向量集合至少包括:位置向量、操作算子向量、目标向量,其中,位置向量用于在目标结构图中定位存在错误的代码对应的节点,操作算子向量用于表示目标操作算子,目标向量用于记录对目标结构图进行编辑操作的操作记录;基于目标向量集合对目标结构图进行调整。
为了对目标结构图进行调整,可以使用节点的位置向量算子向量/>(对应于操作算子向量)和“宏上下文”向量信息(对应于目标向量),通过两个GRU网络去更新“微上下文”向量/>(“微上下文”嵌入向量在每个算子的执行过程中可以被用作控制器),即:
一种可选的方式中,可以将错误图gbug表示为g0(对应于目标结构图)。然后,对于第t次图形编辑,执行以下步骤:
步骤1.获取图形表示和节点嵌入。使用/>更新“宏上下文”嵌入,其中,/>用于表示目标结构图经过t-1次编辑后的得到代码的结构图;
步骤2.通过执行Location原语定位编辑位置vt并更新上下文嵌入;
步骤3.选择与vt相适应的图形编辑运算符et(用于表示操作算子);使用vt和et获得“微上下文”嵌入;
步骤4.执行编辑,获取对应的“微上下文”嵌入更新“宏上下文”嵌入;
步骤5.如果编辑不是NO_OP,则返回到第1步;否则返回。
步骤1至步骤5可以一直重复,直到达到最大步数T或选择了NO_OP运算符。当输入程序没有错误时,在这种情况下,NO_OP运算符可以在第一步被触发。此外,每个编辑步骤不限于单个节点级别的操作,可以扩展为修改某个子结构(例如,替换一棵树节点及其子节点之一),反过来可以允许以更少的编辑步骤执行程序修复。
图2是根据本发明实施例的一种可选的目标模型对目标结构图进行变换推断的流程图,如图2所示,包括变换推断p(gfix∣∣gbug),其中,gbug表示目标结构图,gfix表示修复目标代码中错误代码的后正确的目标代码的代码结构图。
输入:和模型参数θ,其中,/>表示目标结构图的D维空间向量表示θ表示目标模型的模型参数;
输出:T步编辑之后的gfix。
目标结构图的编辑操作如下:
1.获取令/>为空,其中,/>对应于第一图向量,
2.对t=1到T循环:
3.获取
4.选取节点位置vt和编辑类型et,其中,et用于表示目标操作算子;
5.如果et=NO-OP则:
令gT=gt-1并退出循环;
6.获取
7.执行编辑et;
8.获取更新了的“微上下文”嵌入
9.获取新的图形表示gt,用更新/>
10.循环结束;
11.返回gT。
目标结构图的编辑过程可以一直重复,直到达到最大步数T或选择了NO_OP运算符。当输入程序(对应于目标代码)没有错误时,在这种情况下,NO_OP运算符可以在第一步被触发。此外,每个编辑步骤不限于单个节点级别的操作,它可以扩展为修改某个子结构(例如,替换一棵树节点及其子节点之一)。
基于目标向量集合对目标结构图进行调整,实现了提高预测目标代码的正确的结构图的预测效率的技术效果。
可选地,基于目标代码的语法结构,将目标代码转换为图结构,得到目标结构图,包括:基于目标代码的语法结构,生成目标代码的抽象语法树,其中,抽象语法树的叶子节点中记录有目标代码中参数的标识信息;将抽象语法树中的叶子节点用边连接,并在抽象语法树中添加用于存放参数的值的节点,得到目标结构图。
为了便于后续依据代码语法结构对目标代码中的错误进行检测和修复。例如,可以先将源代码(即目标代码)转换成抽象语法树的形式(AST)。AST语法树是源代码语法结构的一种抽象表示。以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。将程序的源代码转换成抽象语法树之后,对生成的抽象语法树,可以将叶子节点用边连接起来。增加存储叶子节点真实内容的值节点,并使用指定的边将它们连接在一起,以得到目标结构图,需要说明的是,增加这组值节点的目的是让代码的表示和转换与变量,函数等的命名无关。
图3是根据本发明实施例的一种可选的目标结构图的示意图,如图3所示,表示了“function add(a){a+b;}”的代码的图结构,包括:函数声明、函数入参、参数名称、函数体、表达式、二元表达式,左参数“a”,右参数“b”,操作符“+”,将代码用图结构进行表示,实现了提高精准获取的代码语义结构信息的技术效果。
可选地,在基于目标原语操作对目标结构图进行调整之后,包括:通过目标模型输出第二图向量,其中,第二图向量用于表示对目标结构图进行调整后得到的代码结构图;基于第二图向量,对目标代码中错误代码进行修复,得到修复后的目标代码。
由于对于任何代码错误的修改,都可以用一系列的图形结构的编辑(或调整)操作来完成,下面通过一种可选的代码改错示例进行举例说明:
代码改错示例:
错误代码“-function add(a){a+b;}”,正确代码“+function add(a,b){returna+b;}”,修改过程如下:
首先是增加函数的参数b,然后再将“a+b;”的语句替换成“return a+b;”。
在对目标结构图进行编辑(或调整)过程中,增加b这个参数,可以对应于在目标代码的图结构上增加一个节点。首先在编辑之前可以调用一次Location原语确定要添加的节点的父节点。然后需要选择一个单步图形操作算子,可以使用的是增加节点(ADD)操作,插入的节点的值b从本地全局值表当中选取,插入的节点的类型是从本地全局类型表当中选取,需要再调用一次Location原语选择节点的左兄弟(如果有的话),这样综合父节点信息就可以唯一地确定节点要插入AST的位置。最后添加的新节点的位置自动推断相应的边,更新图向量嵌入,其中,全局值表中可以记录有:False(布尔值中的假)、React(用于开发单页面应用)、className(类名)……,全局类型表中可以记录有:判断声明、连接声明、数组表达式以及调用表达式等。
将“a+b;”的语句替换成“return a+b;”,就对应于在图结构中将对应节点类型expr_Stmt更换成returnStmt。在编辑之前先调用一次Location原语选择节点的位置,再选择替换节点的类型(REP_TYPE)操作,然后在当前位置循环不同类型的有效生成规则,获得所有有效类型的列表,returnStmt就是一种有效类型。最终类型就从该列表中选择,再根据相应的节点和类型变化更新图向量嵌入。
选择空操作(NO_OP)即表示结束代码的修改。
在本实施例中,目标代码的改错,可以基于一系列的图形结构的编辑操作来完成。可以通过目标模型预测到的结构来表示修复的目标代码的代码结构图。
例如:给定一段错误的代码片段的图形表示gbug,可以通过目标模型预测一个正确的代码片段的图形表示gfix,在此过程中,可以通过目标模型预测至多T步的图形变换,即:p(gfix∣∣gbug;θ)=p(g1∣∣gbug;θ)p(g2∣g1;θ)…p(gfix∣gT-1;θ),其中,θ表示目标模型的模型参数,gi表示经过第i次对代码的图形表示进行编辑操作后的得到的代码的图形表示,i为正整数。通过预测到的图形变换可以为对目标代码中的错误进行修复,实现了提高代码的修复精准度的技术效果。
可选地,目标模型通过以下方式得到:获取训练样本,其中,训练样本至少包括:M个第三图向量,M个第四图向量,其中,第三图向量用于历史代码的代码结构图,历史代码包括:历史时间段得到的存在代码错误的代码,第四图向量用于表示对代码错误进行修复后的历史代码的代码结构图,M为正整数;将训练样本输入初始模型进行模型训练,并在初始模型训练收敛的情况下,将初始模型作为目标模型,其中,初始模型的模型类型包括:图神经网络模型。
在本实施例中,可以将M段历史代码以及每段历史代码对应的正确代码分别转换为抽象语法树,树上的每个节点都表示源代码中的一种结构。将历史代码转换成抽象语法树之后,对生成的抽象语法树,可以将叶子节点用边连接起来。增加存储叶子节点真实内容的值节点,并使用指定的边将它们连接在一起,以得到历史代码的图结构,需要说明的是,增加这组值节点的目的是让代码的表示和转换与变量,函数等的命名无关。在将历史代码转换为结构图之后,还可以将历史代码的结构图通过向量进行表示,将历史代码的结构图转换为向量的方式与将目标结构图转换为第一图向量的方式相同,在此不再进行赘述。
在一种可选的方式中,还可以对历史代码的图结构的顶点类型使用one-hot编码(独热编码)对进行赋值,顶点类型可以从基于历史代码生成的AST语法树中得到,或者从本地维护的值表格中得到。为了不让各异的编程命名风格对模型训练产生影响,模型的训练可以只使用了源代码图形表示中的语法结构信息,而不使用其变量名称,函数名称等信息。
在本实施例中,可以将训练样本输入初始的图神经网络模型进行模型训练,并在该模型收敛的情况下,将该模型作为目标模型。实现了提高模型识别代码语义结构信息的精准度的技术效果。
图4是根据本发明实施例的一种可选的目标结构图的调整过程的流程图,如图4所示,给出了一种可选的将错误代码“function add(a){a+b;}”的结构图修改为正确代码“function add(a,b){return a+b;}”的结构图的修改过程,图4中的GNN表示目标模型。
在本实施例中,将程序的源代码转换成抽象语法树的形式,增加特殊的节点和边;将代码表示成图结构之后,使用图神经网络将图映射到多维向量空间中;使用三种基本的原语操作组合形成五种不同的单步图形编辑定位修复代码错误;对错误代码使用基于图神经网络的图变换的改错方案,充分利用代码特有的语义结构信息,通过基于图神经网络的端到端的代码错误检测修改模型,包括定位错误,预测修复类型和生成补丁,不仅能提高代码错误检测修复的准确度,还能检测修改更多样化(如使用错误的运算符或标识符、访问未定义的属性、错误处理变量范围、触发类型不兼容等)和复杂的代码错误性质(如需要添加或删除语句才能修复的错误),进而能在训练数据之外,还可以检测修改更多的代码错误,以及迁移到更多的编程语言代码库。
实施例二
本发明实施例二提供了一种可选的代码的处理装置,该代码的处理装置中的各个实施单元对应于实施例一中的各个实施步骤。
图5是根据本发明实施例的一种可选的代码的处理装置的示意图,如图5所示,该代码的处理装置中包括:第一处理单元51、映射单元52以及第二处理单元53。
具体地,第一处理单元51,用于获取目标代码,并基于目标代码的语法结构,将目标代码转换为图结构,得到目标结构图,其中,图结构为树形结构,目标结构图的节点中至少记录有目标代码中参数的信息;
映射单元52,用于将目标结构图映射为多维的向量,得到第一图向量;
第二处理单元53,用于将第一图向量输入目标模型,在目标模型中,基于目标原语操作对目标结构图进行调整,以对目标代码进行修复,其中,目标模型用于预测修复代码错误后的代码结构图,目标原语操作用于在目标结构图中对目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。
在本发明实施例二提供的代码的处理装置中,可以通过第一处理单元51获取目标代码,并基于目标代码的语法结构,将目标代码转换为图结构,得到目标结构图,其中,图结构为树形结构,目标结构图的节点中至少记录有目标代码中参数的信息,通过映射单元52将目标结构图映射为多维的向量,得到第一图向量,通过第二处理单元53将第一图向量输入目标模型,在目标模型中,基于目标原语操作对目标结构图进行调整,以对目标代码进行修复,其中,目标模型用于预测修复代码错误后的代码结构图,目标原语操作用于在目标结构图中对目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。进而解决了相关技术中由于神经机器翻译技术难以学习代码的语义结构信息,导致对代码的错误进行修复的精准度低的技术问题。在本实施例中,基于代码的语法结构,通过目标模型对代码的结构图进行调整,以对目标代码中的错误代码进行检测及修复,达到了基于代码的语义信息对代码进行修复的目的,从而实现了提高对代码的错误进行修复的精准度的技术效果。
可选地,在本发明实施例二提供的代码的处理装置中,第二处理单元包括:确定子单元,用于基于目标原语操作,确定多种操作算子,其中,多种操作算子用于对目标结构图进行编辑,以预测修复错误代码后的目标代码的代码结构图;调整子单元,用于基于多种操作算子,对目标结构图进行调整。
可选地,在本发明实施例二提供的代码的处理装置中,目标原语操作包括以下至少之一:定位原语操作、赋予类型原语操作以及赋予值原语操作,定位原语操作用于在目标结构图中对错误代码对应节点的位置进行定位,赋予类型原语操作用于确定对错误代码进行修复的参数的参数类型,赋予值原语操作用于对代码的参数进行赋值;多种操作算子包括以下至少之一:用于在目标结构图中增加节点的操作算子、用于在目标结构图中删除节点的操作算子、用于在目标结构图中替换节点值的操作算子、用于在目标结构图中替换节点类型的操作算子以及空操作算子,节点类型包括参数类型,空操作算子表示无需对目标结构图进行编辑操作。
可选地,在本发明实施例二提供的代码的处理装置中,调整子单元包括:预测模块,用于在目标结构图的每个节点中,通过目标模型中预测目标操作算子,其中,目标操作算子为多种操作算子的其中之一;确定模块,用于在预测到的目标操作算子为空操作算子的情况下,确定目标结构图不存在错误,无需对目标结构图进行调整;调整模块,用于在预测到的目标操作算子不是空操作算子的情况下,通过目标操作算子对目标结构图进行调整。
可选地,在本发明实施例二提供的代码的处理装置中,调整模块包括:获取子模块,用于获取目标向量集合,其中,目标向量集合至少包括:位置向量、操作算子向量、目标向量,其中,位置向量用于在目标结构图中定位存在错误的代码对应的节点,操作算子向量用于表示目标操作算子,目标向量用于记录对目标结构图进行编辑操作的操作记录;调整子模块,用于基于目标向量集合对目标结构图进行调整。
可选地,在本发明实施例二提供的代码的处理装置中,第一处理单元包括:生成子单元,用于基于目标代码的语法结构,生成目标代码的抽象语法树,其中,抽象语法树的叶子节点中记录有目标代码中参数的标识信息;处理子单元,用于将抽象语法树中的叶子节点用边连接,并在抽象语法树中添加用于存放参数的值的节点,得到目标结构图。
可选地,在本发明实施例二提供的代码的处理装置中,代码的处理装置包括:输出单元,用于在基于目标原语操作对目标结构图进行调整之后,通过目标模型输出第二图向量,其中,第二图向量用于表示对目标结构图进行调整后得到的代码结构图;修复单元,用于基于第二图向量,对目标代码中错误代码进行修复,得到修复后的目标代码。
可选地,在本发明实施例二提供的代码的处理装置中,目标模型通过以下单元得到:获取单元,用于获取训练样本,其中,训练样本至少包括:M个第三图向量,M个第四图向量,其中,第三图向量用于历史代码的代码结构图,历史代码包括:历史时间段得到的存在代码错误的代码,第四图向量用于表示对代码错误进行修复后的历史代码的代码结构图,M为正整数;训练单元,用于将训练样本输入初始模型进行模型训练,并在初始模型训练收敛的情况下,将初始模型作为目标模型,其中,初始模型的模型类型包括:图神经网络模型。
上述的代码的处理装置还可以包括处理器和存储器,上述的第一处理单元51、映射单元52以及第二处理单元53等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
上述处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来基于代码的语法结构,通过目标模型对代码的结构图进行调整,以对目标代码中的错误代码进行检测及修复,达到了基于代码的语义信息对代码进行修复的目的,从而实现了提高对代码的错误进行修复的精准度的技术效果。
上述存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
根据本发明实施例的另一方面,还提供了一种电子设备,包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行上述任意一项的代码的处理方法。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述任意一项的代码的处理方法。
图6是根据本发明实施例的一种电子设备的示意图,如图6所示,本发明实施例提供了一种电子设备60,电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现上述任意一项的代码的处理方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种代码的处理方法,其特征在于,包括:
获取目标代码,并基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,其中,所述图结构为树形结构,所述目标结构图的节点中至少记录有所述目标代码中参数的信息;
将所述目标结构图映射为多维的向量,得到第一图向量;
将所述第一图向量输入目标模型,在所述目标模型中,基于目标原语操作对所述目标结构图进行调整,以对所述目标代码进行修复,其中,所述目标模型用于预测修复代码错误后的代码结构图,所述目标原语操作用于在所述目标结构图中对所述目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。
2.根据权利要求1所述的代码的处理方法,其特征在于,基于目标原语操作对所述目标结构图进行调整,包括:
基于所述目标原语操作,确定多种操作算子,其中,所述多种操作算子用于对所述目标结构图进行编辑,以预测修复错误代码后的所述目标代码的代码结构图;
基于所述多种操作算子,对所述目标结构图进行调整。
3.根据权利要求2所述的代码的处理方法,其特征在于,
所述目标原语操作包括以下至少之一:定位原语操作、赋予类型原语操作以及赋予值原语操作,所述定位原语操作用于在所述目标结构图中对错误代码对应节点的位置进行定位,所述赋予类型原语操作用于确定对错误代码进行修复的参数的参数类型,所述赋予值原语操作用于对代码的参数进行赋值;
所述多种操作算子包括以下至少之一:用于在所述目标结构图中增加节点的操作算子、用于在所述目标结构图中删除节点的操作算子、用于在所述目标结构图中替换节点值的操作算子、用于在所述目标结构图中替换节点类型的操作算子以及空操作算子,所述节点类型包括参数类型,所述空操作算子表示无需对所述目标结构图进行编辑操作。
4.根据权利要求3所述的代码的处理方法,其特征在于,基于所述多种操作算子,对所述目标结构图进行调整,包括:
在所述目标结构图的每个节点中,通过所述目标模型中预测目标操作算子,其中,所述目标操作算子为所述多种操作算子的其中之一;
在预测到的所述目标操作算子为所述空操作算子的情况下,确定所述目标结构图不存在错误,无需对所述目标结构图进行调整;
在预测到的所述目标操作算子不是所述空操作算子的情况下,通过所述目标操作算子对所述目标结构图进行调整。
5.根据权利要求4所述的代码的处理方法,其特征在于,通过所述目标操作算子对所述目标结构图进行调整,包括:
获取目标向量集合,其中,所述目标向量集合至少包括:位置向量、操作算子向量、目标向量,其中,所述位置向量用于在所述目标结构图中定位存在错误的代码对应的节点,所述操作算子向量用于表示所述目标操作算子,所述目标向量用于记录对所述目标结构图进行编辑操作的操作记录;
基于所述目标向量集合对所述目标结构图进行调整。
6.根据权利要求1所述的代码的处理方法,其特征在于,基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,包括:
基于所述目标代码的语法结构,生成所述目标代码的抽象语法树,其中,所述抽象语法树的叶子节点中记录有所述目标代码中参数的标识信息;
将所述抽象语法树中的叶子节点用边连接,并在所述抽象语法树中添加用于存放参数的值的节点,得到所述目标结构图。
7.根据权利要求1所述的代码的处理方法,其特征在于,在基于目标原语操作对所述目标结构图进行调整之后,包括:
通过所述目标模型输出第二图向量,其中,所述第二图向量用于表示对所述目标结构图进行调整后得到的代码结构图;
基于所述第二图向量,对所述目标代码中错误代码进行修复,得到修复后的所述目标代码。
8.根据权利要求1所述的代码的处理方法,其特征在于,所述目标模型通过以下方式得到:
获取训练样本,其中,所述训练样本至少包括:M个第三图向量,M个第四图向量,其中,所述第三图向量用于历史代码的代码结构图,所述历史代码包括:历史时间段得到的存在代码错误的代码,所述第四图向量用于表示对代码错误进行修复后的所述历史代码的代码结构图,M为正整数;
将所述训练样本输入初始模型进行模型训练,并在初始模型训练收敛的情况下,将所述初始模型作为所述目标模型,其中,所述初始模型的模型类型包括:图神经网络模型。
9.一种代码的处理装置,其特征在于,包括:
获取单元,用于获取目标代码,并基于所述目标代码的语法结构,将所述目标代码转换为图结构,得到目标结构图,其中,所述图结构为树形结构,所述目标结构图的节点中至少记录有所述目标代码中参数的信息;
映射单元,用于将所述目标结构图映射为多维的向量,得到第一图向量;
处理单元,用于将所述第一图向量输入目标模型,在所述目标模型中,基于目标原语操作对所述目标结构图进行调整,以对所述目标代码进行修复,其中,所述目标模型用于预测修复代码错误后的代码结构图,所述目标原语操作用于在所述目标结构图中对所述目标代码中错误代码对应的节点的位置进行定位,并对错误代码对应的节点进行调整。
10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至8中任意一项所述的代码的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311731823.7A CN117707612A (zh) | 2023-12-15 | 2023-12-15 | 代码的处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311731823.7A CN117707612A (zh) | 2023-12-15 | 2023-12-15 | 代码的处理方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117707612A true CN117707612A (zh) | 2024-03-15 |
Family
ID=90149360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311731823.7A Pending CN117707612A (zh) | 2023-12-15 | 2023-12-15 | 代码的处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117707612A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118012781A (zh) * | 2024-04-08 | 2024-05-10 | 腾讯科技(深圳)有限公司 | 模型训练方法与相关方法、装置、设备及存储介质 |
-
2023
- 2023-12-15 CN CN202311731823.7A patent/CN117707612A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118012781A (zh) * | 2024-04-08 | 2024-05-10 | 腾讯科技(深圳)有限公司 | 模型训练方法与相关方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Huang et al. | Gamepad: A learning environment for theorem proving | |
US10545733B2 (en) | Code reusability | |
US9928040B2 (en) | Source code generation, completion, checking, correction | |
CN109634869B (zh) | 二进制翻译中间表示正确性测试方法及装置 | |
CN112597063B (zh) | 缺陷代码定位的方法、装置以及存储介质 | |
CN117707612A (zh) | 代码的处理方法、装置及电子设备 | |
CN110399286B (zh) | 一种基于独立路径的测试数据自动生成方法 | |
CN112114791A (zh) | 一种基于元学习的代码自适应生成方法 | |
CN113687821A (zh) | 一种基于图形可视化的智能代码拼接方法 | |
Le et al. | Interactive program synthesis | |
Hajipour et al. | SampleFix: learning to correct programs by sampling diverse fixes | |
CN112416788B (zh) | 一种分层规范的Web应用UI自动化测试方法 | |
CN115066674A (zh) | 使用源代码元素的数值数组表示来评估源代码的方法 | |
WO2023010916A1 (zh) | 软件自动修复方法、系统、电子设备及存储介质 | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
CN116166236A (zh) | 代码推荐方法、装置、计算机设备及存储介质 | |
Shin et al. | Towards specification-directed program repair | |
US11593076B2 (en) | Method for merging architecture data | |
Benzinger | Automated complexity analysis of Nuprl extracted programs | |
Bauer et al. | MLFMF: data sets for machine learning for mathematical formalization | |
CN116820996A (zh) | 基于人工智能的集成测试用例自动生成方法和装置 | |
CN113656669B (zh) | 标签更新方法及装置 | |
JPH07319682A (ja) | ソフトウエア発見システム | |
CN111381826A (zh) | 生成代码文件的语法树的方法、装置及电子设备 | |
CN112231650B (zh) | 一种数据隐私保护协议的分析方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |