一种基于逐层融合抽象语法树的代码补全方法
申请人信息
- 申请人:广东工业大学
- 申请人地址:510090 广东省广州市越秀区东风东路729号
- 发明人: 广东工业大学
专利详细信息
| 项目 | 内容 |
|---|---|
| 专利名称 | 一种基于逐层融合抽象语法树的代码补全方法 |
| 专利类型 | 发明申请 |
| 申请号 | CN202310959780.1 |
| 申请日 | 2023/8/2 |
| 公告号 | CN117573084A |
| 公开日 | 2024/2/20 |
| IPC主分类号 | G06F8/30 |
| 权利人 | 广东工业大学 |
| 发明人 | 苏庆; 黄炜谦; 谢国波; 刘添添; 黄剑锋 |
| 地址 | 广东省广州市越秀区东风东路729号大院 |
摘要文本
本发明公布了一种基于逐层融合抽象语法树的代码补全方法,具体实现步骤如下:(1)对数据集中的每一份待补全源程序进行预处理:将待补全源程序解析为对应的抽象语法树、控制流程图、数据流程图和函数调用图,并将经过预处理后的数据集进行划分。(2)搭建一个基于逐层融合抽象语法树的代码补全模型:逐步构建语句级抽象语法树、增强语句级抽象语法树和信息增强函数调用图,使用图注意力网络提取信息增强函数调用图的信息,得到对应的特征向量,根据该特征向量生成补全代码。(3)设置模型的所有初始参数和超参数,将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数。(4)运用该模型进行代码补全。
专利主权项内容
1.一种基于逐层融合抽象语法树的代码补全方法,其特征在于提取代码抽象语法树的层次结构信息,同时结合语义信息进行代码补全,该方法包括以下步骤:第一步,对数据集中的每一份待补全源程序进行预处理:对待补全源程序进行解析,生成与待补全源程序对应的抽象语法树(Abstract Syntax Tree,AST)、控制流程图(ControlFlow Graph,CFG)、数据流程图(Data Flow Graph,DFG)和函数调用图(Call Graph,CG);将经过预处理后的数据集划分为训练集、验证集和测试集;第二步,搭建一个基于逐层融合抽象语法树的代码补全模型:首先根据AST构建语句级抽象语法树(Sentence-Abstract Syntax Tree,S-AST),接着根据CFG和DFG,对 S-AST进行语义信息增强得到增强语句级抽象语法树(Augmented Sentence-Abstract Syntax Tree,AS-AST),然后根据AS-AST和CG构建信息增强函数调用图(Information Augmented CallGraph,IA-CG),使用图注意力网络(Graph attention networks,GAT)提取IA-CG包含的层次结构信息和语义信息,其中语义信息包括AS-AST中含有的语义相似信息、控制流信息、数据流信息和CG中含有的函数调用信息;最后根据IA-CG特征提取后得到的特征向量,生成补全代码;第三步,设置基于逐层融合抽象语法树的代码补全模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数;将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数;第四步,运用该代码补全模型,对待补全源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。