【技术实现步骤摘要】
一种基于抽象语法树增广图模型的代码补全方法
本专利技术涉及一种基于抽象语法树增广图模型的代码补全方法,属于涉及计算机软件工程
技术介绍
集成开发环境(IntegratedDevelopmentEnvironment,IDE)在现代软件工程中起着重要作用,而代码补全是其中最广泛使用的功能之一。智能代码补全功能根据已有的代码,列出了下一个可能的token(词法单元,例如变量和方法),可以有效地为软件开发人员带来便利。传统的代码完成方法使用类型信息和编程历史记录来给出补全项预测。类型信息用于过滤可能的补全选项,而编程历史用于对其进行排序。但是,上述方法对于某些动态类型化的语言(例如Python和JavaScript)具有局限性,并且其准确性也不令人满意。因此,基于机器学习的方法被设计为利用代码上下文(通常只有上文)的进行更好的预测。基于编程语言与自然语言存在一些相似之处的认识,一些研究采用统计语言模型对代码进行补全,如以n元语法(N-gram),递归神经网络(RecurrentNeuralNetwork,RNN)等序列预测模型对补全项进行预测。在这些模型中,源代码段被预处理为token序列或抽象语法树(AST)节点序列,然后由序列预测模型处理。根据预测模型给出的概率,对代码补全选项进行排序。然而,基于序列预测模型的代码补全方法忽视了代码中的一些重要信息。除了token的顺序之外,代码中还蕴含了丰富的语法信息(如AST上各节点的层次结构)和语义信息(如相同名称的标识符)。如果这些信息被合理并 ...
【技术保护点】
1.一种基于抽象语法树增广图模型的代码补全方法,其特征在于,包括如下步骤:/n步骤(1),等待新的代码补全需求,获取待补全位置附近的源代码片段;/n步骤(2),对待补全的源代码片段进行语法解析,将其表示为抽象语法树;/n步骤(3),遍历抽象语法树,检查各节点之间的顺序、语法和语义关系,通过带不同标记的有向边连接这些节点,将抽象语法树表示为有向图的形式;/n步骤(4),将有向图编码成矩阵形式,包括节点信息矩阵和多个遮挡矩阵;/n步骤(5),检查是否存在已训练好的代码补全模型,如果不存在,转步骤(6);如果存在,转入步骤(11);/n步骤(6),收集开源代码组成代码库,从代码库提取待补全代码片段和补全结果,作为训练数据;/n步骤(7),初始化以图形式表示代码上文的代码补全模型,该模型以自注意力网络为主体,使用路径特征编码和多视角遮挡机制这两种方法利用图信息;/n步骤(8),利用当前代码补全模型,预测用于训练的代码片段的补全选项概率分布;/n步骤(9),根据预测的补全选项概率分布和真实补全结果,计算当前模型的训练误差,并根据训练误差对模型参数的梯度对参数进行更新;/n步骤(10),计算模型在 ...
【技术特征摘要】
1.一种基于抽象语法树增广图模型的代码补全方法,其特征在于,包括如下步骤:
步骤(1),等待新的代码补全需求,获取待补全位置附近的源代码片段;
步骤(2),对待补全的源代码片段进行语法解析,将其表示为抽象语法树;
步骤(3),遍历抽象语法树,检查各节点之间的顺序、语法和语义关系,通过带不同标记的有向边连接这些节点,将抽象语法树表示为有向图的形式;
步骤(4),将有向图编码成矩阵形式,包括节点信息矩阵和多个遮挡矩阵;
步骤(5),检查是否存在已训练好的代码补全模型,如果不存在,转步骤(6);如果存在,转入步骤(11);
步骤(6),收集开源代码组成代码库,从代码库提取待补全代码片段和补全结果,作为训练数据;
步骤(7),初始化以图形式表示代码上文的代码补全模型,该模型以自注意力网络为主体,使用路径特征编码和多视角遮挡机制这两种方法利用图信息;
步骤(8),利用当前代码补全模型,预测用于训练的代码片段的补全选项概率分布;
步骤(9),根据预测的补全选项概率分布和真实补全结果,计算当前模型的训练误差,并根据训练误差对模型参数的梯度对参数进行更新;
步骤(10),计算模型在验证集上的预测损失,如果连续数轮训练过程中模型在验证集上的预测损失不再下降或者训练超过指定的步数,转步骤(11),否则转步骤(8)继续训练模型;
步骤(11),将节点信息矩阵和遮挡矩阵输入已有的代码补全模型,该模型从编码图信息的矩阵中提取代码片段的语义特征,并利用该特征预测下一个补全选项;
步骤(12),等待新的代码补全需求,若存在新需求,转步骤(1),否则代码补全过程结束。
2.根据权利要求1所述的基于抽象语法树增广图模型的代码补全方法,其特征在于,将代码以图形式表示的实现过程为:
步骤301,根据抽象语法树的节点建立一张对应的新图,该新图包含抽象语法树的所有节点,并记录新图与抽象语法树节点间对应关系;在语法解析后,抽象语法树上的所有节点都带有语法单元类型属性,部分节点带有值属性,这些属性也被保留在新图上;待补全节点以指定标记出现在抽象语法树和新图上;
步骤302,通过遍历抽象语法树,查找节点间的各种顺序、语法和语义关系;有以下的序列关系被查找:先序遍历的前一节点、先序遍历的后一节点、先序遍历的前一叶节点、先序遍历的后一叶节点;有以下的语法关系被查找:父节点、第一个子节点、最后的子节点、前一个兄弟节点、后一个兄弟节点;有以下的语义关系被查找:上一个同类型节点、上一个同值节点、上一个同环境节点;
步骤303,根据步骤302确定的各种关系,在新图上的对应节点之间添加有向边,根据不同的关系类型,有向边带有不同的标记。
3.根据权利要求1所述的基于抽象语法树增广图模型的代码补全方法,其特征在于,代码片段对应的有向图经过编码后转换为实数矩阵,作为后续神经网络的输入。
4.根据权利要求3所述的基于抽象语法树增广图模型的代码补全方法,其特征在于,代码片段对应的有向图经过编码后转换为实数矩阵的过程为:
步骤401,对待补全节...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。