The invention provides a code completion method and system based on double AST sequences, including: source code processing steps, using abstract grammar tree to parse source code; AST to binary tree steps, converting the above abstract grammar tree into two different sequences at the same time; model training steps, input the two different sequences into LSTM model, training language model; prediction completion steps, according to training. Practiced language model to complete the code. The abstract grammar tree (AST) of the program code to be studied is transformed into two sequences at the same time (such as \preface sequence\ and \intermediate sequence\), and an LSTM model is trained using the information of the two sequences at the same time. The LSTM trained by the method of the invention has higher accuracy. The technical scheme of the invention has the characteristics of simplicity and rapidity, and can better improve the accuracy and efficiency of code recommendation.
【技术实现步骤摘要】
一种基于双AST序列的代码补全方法及系统
本专利技术涉及计算机软件工程
,尤其是涉及一种基于双AST序列的代码补全方法及系统。
技术介绍
一个程序往往具有不同层次的结构,每个层次的结构对应着相应的程序分析过程,因而可以从不同的分析过程中获取不同抽象程度的程序信息。很多程序需要编译才能运行,如C、C++、C#、Java等,而编译中的各种技术也常用于程序分析任务中;编译大致流程如图1所示。典型的,由词法分析(LexicalAnalysis)、语法分析(SyntaxAnalysis)和语义分析(SemanticAnalysis),可以得到程序的词法信息和语法、语义信息,不确切的说,也可以将其理解为程序的“字面”信息和“结构”信息。显然,两者对于理解分析一个程序的功能都是十分重要的。现在有很多研究利用深度学习模型来进行程序分析,直观的想法是利用循环神经网络(RecurrentNeuralNetwork,RNN)对程序源代码(或者源程序的词序列,即token序列)建立语言模型。而这样的做法仅仅运用了程序最底层的信息——词法信息——来分析程序。然而,和自然语言不同,程序的结构信息包含了更本质的信息,直接利用程序的源代码/词序列进行建模,不能很好地反映程序本身的信息。换言之,仅利用词法信息对程序进行分析不够完善,没有充分利用程序源代码各方面的信息。再者,不同的任务对不同的程序信息敏感程度不同,某些程序分析任务即便只利用更抽象的程序信息也更加有效,而如程序分类任务就对程序结构更敏感,这是因为程序结构反映了程序的功能。如把程序中的自定义标识符i替换成iii,程序的结构 ...
【技术保护点】
1.一种基于双AST序列的代码补全方法,其特征在于,包括:源代码处理步骤,使用抽象语法树解析源代码;序列生成步骤,将上述抽象语法树同时转换为两个不同序列;模型训练步骤,将所述两个不同序列输入LSTM模型,训练语言模型;预测补全步骤,根据训练过的语言模型补全代码。
【技术特征摘要】
1.一种基于双AST序列的代码补全方法,其特征在于,包括:源代码处理步骤,使用抽象语法树解析源代码;序列生成步骤,将上述抽象语法树同时转换为两个不同序列;模型训练步骤,将所述两个不同序列输入LSTM模型,训练语言模型;预测补全步骤,根据训练过的语言模型补全代码。2.根据权利要求1所述的基于双AST序列的代码补全方法,其特征在于:在源代码处理步骤中,所述源代码被解析为不同形式,以获得代码的类、方法列表、代码标识符。3.根据权利要求1所述的基于双AST序列的代码补全方法,其特征在于:所述序列生成步骤包括:通过前序遍历和中序遍历得到前序序列和中序序列,拼接前序序列和中序序列,当作后续LSTM网络的输入。4.根据权利要求3所述的基于双AST序列的代码补全方法,其特征在于:所述序列生成步骤进一步包括:通过中序遍历和后序遍历得到中序序列和后序序列,拼接中序序列和后序序列,当作后续LSTM网络的输入。5.根据权利要求1或2所述的基于双AST序列的代码补全方法,其特征在于:所述LSTM模型为堆叠式的LSTM模型。6.根据权利要求1所述的基...
【专利技术属性】
技术研发人员:李戈,郝逸洋,刘洋,
申请(专利权)人:北京硅心科技有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。