当前位置: 首页 > 专利查询>清华大学专利>正文

一种基于代码中间表示的代码补全方法、装置及存储介质制造方法及图纸

技术编号:19056232 阅读:21 留言:0更新日期:2018-09-29 12:04
本发明专利技术实施例提供了一种基于代码中间表示的代码补全方法,包括:将代码库中的现有代码解析得到第一中间表达,并采用所述第一中间表达训练语言模型获取有效语言模型;将待推理的上下文转换成第二中间表达,采用搜索算法对所述第二中间表达进行搜索得到上下文;将所述上下文输入所述有效语言模型进行推理得到代码片段,对所述代码片段进行拟合得到补全代码。本发明专利技术实施例还提供了一种主动交互装置及非暂态可读存储介质,用来实现所述方法。本发明专利技术可以有效提高研发人员的代码开发效率。

【技术实现步骤摘要】
一种基于代码中间表示的代码补全方法、装置及存储介质
本专利技术实施例涉及软件分析及机器学习领域,尤其涉及一种基于代码中间表示的代码补全方法、装置及存储介质。
技术介绍
代码自动补全经过最近几年的发展,已经被广泛应用于提高软件开发效率的辅助技术,已经被主流IDE例如eclipse,IntelliJ集成,目前业界普遍根据被补全的内容将代码补全技术分成两类:1)补全一个API;2)补全任意一个token。国内外学者已提出许多代码补全的方法及技术并开发出相应的代码补全工具。具体来说如下:1)补全一个API:这种技术使用机器学习中的分类技术,在上下文信息中提取出特征,将API看做类别,进行分类训练,最后推理出正确的API,这种技术的优点是精度高,一般可以利用大量的上下文信息,缺点是被推理的内容仅仅局限于API,无法适配到推理任意代码。2)补全任意一个token:这种技术使用语言模型,将任意的token当成分类标签,能够推理出任意的代码token(单词)。这种技术的优点是能够推理任意代码,缺点是由于分类标签太多,精度很低,同时,由于一段代码经常由成百上千的token组成,目前的主流语言模型(RNN/LSTM)最多就能够处理10-15个token序列,根本无法处理代码中成百上千长度的token序列。基于上述情况,如何找到一种能够精确推理任意种类及长度的代码的方法,就成为业界亟待解决的问题。
技术实现思路
针对现有技术存在的上述问题,本专利技术实施例提供了一种基于代码中间表示的代码补全方法、装置及存储介质。一方面,本专利技术实施例提供了一种基于代码中间表示的代码补全方法,包括:将代码库中的现有代码解析得到第一中间表达,并采用所述第一中间表达训练语言模型获取有效语言模型;将待推理的上下文转换成第二中间表达,采用搜索算法对所述第二中间表达进行搜索得到上下文;将所述上下文输入所述有效语言模型进行推理得到代码片段,对所述代码片段进行拟合得到补全代码。另一方面,本专利技术实施例提供了一种主动交互装置及一种非暂态可读存储介质。所述一种主动交互装置包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中:所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行所述一种基于代码中间表示的代码补全方法。所述一种非暂态可读存储介质存储程序指令,用于执行所述一种基于代码中间表示的代码补全方法。本专利技术实施例提供了一种基于代码中间表示的代码补全方法、装置及存储介质,通过将源代码库中的代码及待推理的上下文采用中间表示,使用源代码库中代码的中间表示训练语言模型,同时对待推理的上下文采用搜索算法寻找具有相应近似度的上下文,然后输入训练好的语言模型并进行拟合得到补全代码,可以在保证精确性的前提下,能够精确推理任意种类及长度的代码,有效提高研发人员的代码开发效率。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术第一实施例中基于代码中间表示的代码补全方法的整体流程图;图2是本专利技术实施例中中间表达式示意图;图3是本专利技术实施例的硬件装置工作示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例提供了一种基于代码中间表示的代码补全方法、装置及存储介质。参见图1,图1是本专利技术第一实施例中基于代码中间表示的代码补全方法的整体流程图,包括:S101:将代码库中的现有代码解析得到第一中间表达,包括:将所述现有代码转换成语法树,遍历所述语法树,将语法树中同一层叶子节点与父节点合并得到合并后节点;从所述合并后节点中抽取与所述合并后节点的子节点不重复的信息形成token,所述token即为所述第一中间表达,并采用所述第一中间表达训练语言模型获取有效语言模型。优选地,在另一实施例中,首先从开源代码库中获取源代码(可以是JAVA),将源代码转换成抽象语法树(AST),后序遍历抽象语法树,将语法树中,同一层的叶子节点,还有它的父节点合并,合并成一个节点。在这个合并后的节点中,抽取出与其子节点不重复的信息,形成一个token,迭代重复上述过程,直至整个抽象语法树(AST)只剩下一个根节点。生成过程中,依次生成的token序列作为代码的中间表示(IR)。上述算法中,加号(+)特指字符串拼接。S102:将待推理的上下文转换成第二中间表达,采用搜索算法对所述第二中间表达进行搜索得到上下文,包括:采用模糊搜索算法对所述第二中间表达进行搜索(在另一实施例中,可以根据所述第二中间表达,在代码库中进行启发式搜索),搜索出具有不同特征的上下文,得到与所述第二中间表达式具有相应相似度的代码。其中,在另一实施例中,上述第一中间表达或第二中间表达的排列顺序与程序执行顺序一致。优选地,在又一实施例中,所述待推理的上下文,包括:用户已经编写完成的代码。其中,上述S101及S102的执行不具有先后顺序,在另一实施例中,可以在S102执行完毕后再执行S101。S103:将所述上下文输入所述有效语言模型进行推理得到代码片段(在另一实施例中,所述代码片段按照所述有效语言模型计算出来的概率及所述上下文的相关性进行排序),对所述代码片段进行拟合得到补全代码(在又一实施例中,所述对所述代码片段进行拟合得到补全代码,包括:过滤掉所述代码片段中与编程环境不相关的代码得到过滤后代码片段,将所述过滤后代码片段替换成与编程环境相关的变量及函数得到所述补全代码)。优选地,在另一实施例中,所述将所述上下文输入所述有效语言模型进行推理得到代码片段,包括:当用户已经写了一部分代码之后,将已写部分当成上下文转换成IR,使用语言模型标准计算公式,计算在当前的上下文的情景下,最有可能出现的token。公式如下:预测代码步骤1:token=arg_maxtoken{P(token|context)},P(token|context)指的是,在给定context的情况下和紧接着context的token的情况下,语言模型计算出来的概率。我们不仅仅预测一个token,而是连续预测大量的token序列,我们通过将刚刚预测出的token追加至context的末尾,形成新的context:预测代码步骤2:contextnew=context+token,这里加号(+)指的是字符串拼接。预测代码步骤3:将预测代码步骤1中的context替换成contextnew,跳转至预测步骤1,开始循环,最终能够生成一个token序列。其中,若将公式arg_maxtoken{P(token|context)}变成arg_second_maxtoken{P(token|context)},也就是每一次不取某一个context下概率最大的那个tok本文档来自技高网...

【技术保护点】
1.一种基于代码中间表示的代码补全方法,其特征在于,包括:将代码库中的现有代码解析得到第一中间表达,并采用所述第一中间表达训练语言模型获取有效语言模型;将待推理的上下文转换成第二中间表达,采用搜索算法对所述第二中间表达进行搜索得到上下文;将所述上下文输入所述有效语言模型进行推理得到代码片段,对所述代码片段进行拟合得到补全代码。

【技术特征摘要】
1.一种基于代码中间表示的代码补全方法,其特征在于,包括:将代码库中的现有代码解析得到第一中间表达,并采用所述第一中间表达训练语言模型获取有效语言模型;将待推理的上下文转换成第二中间表达,采用搜索算法对所述第二中间表达进行搜索得到上下文;将所述上下文输入所述有效语言模型进行推理得到代码片段,对所述代码片段进行拟合得到补全代码。2.根据权利要求1所述的方法,其特征在于,所述第一中间表达或第二中间表达的排列顺序与程序执行顺序一致。3.根据权利要求1所述的方法,其特征在于,所述将代码库中的现有代码解析得到第一中间表达,包括:将所述现有代码转换成语法树,遍历所述语法树,将语法树中同一层叶子节点与父节点合并得到合并后节点;从所述合并后节点中抽取与所述合并后节点的子节点不重复的信息形成token,所述token即为所述第一中间表达。4.根据权利要求1所述的方法,其特征在于,所述采用搜索算法对所述第二中间表达进行搜索得到上下文,包括:采用模糊搜索算法对所述第二中间表达进行搜索,得到与所述第二中间表达式具有相应相似度的代码。5.根...

【专利技术属性】
技术研发人员:姜宇杨镒箫顾明孙家广
申请(专利权)人:清华大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1