一种代码段注释生成方法、系统及可读存储介质转让专利

申请号 : CN202110368963.7

文献号 : CN113065322B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄袁黄少豪陈湘萍周晓聪郑子彬

申请人 : 中山大学

摘要 :

本申请一种代码段注释生成方法、系统及可读存储介质,获取代码段的文本内容和抽象语法树,在抽象语法树中确定待注释代码段的外部依赖对应的子树,并将外部依赖对应的子树加入待注释代码段的子树集合,以子树集合中各子树的父节点作为连接点,形成扩展抽象语法树,基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释。扩展抽象语法树的构建使得代码段的外部依赖也参与了注释生成的过程,将代码段的外部依赖也考虑在内可以为模型提供更多的有效信息,生成的代码注释质量更高。

权利要求 :

1.一种代码段注释生成方法,其特征在于,包括:获取待注释代码段的代码文本内容和抽象语法树;

在抽象语法树中确定待注释代码段的外部依赖对应的子树,并将外部依赖对应的子树加入待注释代码段的子树集合;

以子树集合中各子树的父节点作为连接点,形成扩展抽象语法树;

基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释,包括:将训练数据输入Actor‑Critic神经网络,Actor网络输出注释序列,Critic网络输出各个阶段的BLEU期望值,所述训练数据包括代码段的代码文本序列、扩展抽象语法树序列及参考注释;

计算所述注释序列与所述参考注释的BLEU实际值,将所述BLEU实际值与Critic网络输出的各个阶段BLEU期望值进行比较,根据比较结果调整Actor网络和Critic网络的参数对所述Actor‑Critic神经网络进行更新。

2.根据权利要求1所述的代码段注释生成方法,其特征在于,所述在抽象语法树中确定待注释代码段的外部依赖对应的子树包括:在抽象语法树中确定待注释代码段所包含的所有变量名及变量名的作用范围;

在抽象语法树中定位变量名在作用范围内出现的所有位置,根据变量名出现的位置确定若干个子树。

3.根据权利要求1所述的代码段注释生成方法,其特征在于,所述将训练数据输入Actor‑Critic神经网络,Actor网络输出注释序列,Critic网络输出各个阶段的BLEU期望值包括:

所述神经网络内的文本编码器根据所述代码文本序列得到第一序列编码结果,第一注意力函数层根据所述第一序列编码结果得到第一聚合向量;

所述神经网络内的AST编码器根据所述扩展抽象语法树序列得到第二序列编码结果,第二注意力函数层根据所述第二序列编码结果得到第二聚合向量;

对所述第一聚合向量和第二聚合向量进行加权求和得到第三聚合向量作为解码器的输入;

基于所述第三聚合向量,所述Actor网络输出注释序列,所述Critic网络输出各个阶段的BLEU期望值。

4.根据权利要求3所述的代码段注释生成方法,其特征在于,所述第一序列编码结果的获取包括:

所述文本编码器中的第一嵌入矩阵将所述代码文本序列转换为第一向量表示,所述文本编码器中的第一编码网络根据所述第一向量表示得到所述第一序列编码结果。

5.根据权利要求3所述的代码段注释生成方法,其特征在于,所述第二序列编码结果的获取包括:

所述AST编码器中的第二嵌入矩阵分别将扩展抽象语法树序列中的type字段和value字段转换为词向量,所述AST编码器中的融合层根据type字段和value字段的词向量得到所述第二序列编码结果。

6.根据权利要求1所述的代码段注释生成方法,其特征在于,所述根据比较结果调整Actor网络和Critic网络的参数对所述Actor‑Critic神经网络进行更新包括:当所述BLEU实际值大于第t个阶段的BLEU期望值时,调整Actor网络的参数使得第t个阶段Actor所选词的选中概率提高,否则调整Actor网络的参数使得第t个阶段Actor所选词的选中概率减小。

7.一种代码段注释生成系统,其特征在于,包括存储有计算机可执行指令的存储器和处理器,当所述计算机可执行指令被所述处理器执行时使得所述代码段注释生成系统执行权利要求1‑6任一项所述的代码段注释生成方法。

8.一种可读存储介质,存储有计算机可执行程序,其特征在于,当所述程序被执行时可实现权利要求1‑6任一项所述的代码段注释生成方法。

说明书 :

一种代码段注释生成方法、系统及可读存储介质

技术领域

[0001] 本发明属于代码注释分析工具,具体涉及一种代码段注释生成方法系统及可读存储介质。

背景技术

[0002] 代码注释是用自然语言的形式阐述代码背后实现的逻辑或功能,能够帮助开发者阅读与理解代码,提升项目的维护与迭代效率,随着机器学习和深度学习的应用,对代码注
释进行自动生成是未来的发展趋势。
[0003] 代码注释可以分为类注释、函数注释和代码段注释。类注释用于说明类的定位和作用,函数注释一般用于描述全局的函数功能,帮助开发者从全局功能角度理解代码;而代
码段注释一般用于描述局部代码块的功能和实现逻辑,帮助开发者从细节层面理解代码功
能如何实现。目前已有的代码注释自动生成方法主要着眼于函数注释的生成,少量关于代
码段注释自动生成的研究工作也仅仅是直接套用函数注释生成方法,并没有针对代码段的
特性进行设计。
[0004] 代码段中常常含有外部依赖,当外部依赖也参与了注释所描述的局部实现逻辑与功能时,例如一段代码由若干个语句组成,并存在一些变量是在代码段范围以外定义的,而
该段代码的注释包含了这些变量的信息,这时代码本身可能无法独立支撑起对应注释的功
能描述,从而导致代码段与注释不能对应,生成的代码注释质量不高。

发明内容

[0005] 基于此,本发明旨在提供一种代码段注释生成方法、系统及可读存储介质,以克服现有技术的代码注释生成方法没有考虑到代码段的外部依赖导致代码注释质量不高的问
题。
[0006] 第一方面,本发明提供一种代码段注释生成方法,包括:
[0007] 获取待注释代码段的代码文本内容和抽象语法树;
[0008] 在抽象语法树中确定待注释代码段的外部依赖对应的子树,并将外部依赖对应的子树加入待注释代码段的子树集合;
[0009] 以子树集合中各子树的父节点作为连接点,形成扩展抽象语法树;
[0010] 基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释。
[0011] 优选地,在抽象语法树中确定待注释代码段的外部依赖对应的子树包括:
[0012] 在抽象语法树中确定待注释代码段所包含的所有变量名及变量名的作用范围,在抽象语法树中定位变量名在作用范围内出现的所有位置,根据变量名出现的位置确定若干
个子树。
[0013] 优选地,基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释包括:
[0014] 将代码文本内容和扩展抽象语法树均处理成序列输入至训练后的注释生成模型,生成待注释代码段对应的注释。
[0015] 优选地,注释生成模型的训练包括:
[0016] 将训练数据输入Actor‑Critic神经网络,Actor网络输出注释序列,Critic网络输出各个阶段的BLEU期望值,训练数据包括代码段的代码文本序列、扩展抽象语法树序列及
参考注释;
[0017] 计算注释序列与参考注释的BLEU实际值,将BLEU实际值与Critic网络输出的各个阶段BLEU期望值进行比较,根据比较结果调整Actor网络和Critic网络的参数对Actor‑
Critic神经网络进行更新。
[0018] 优选地,将训练数据输入Actor‑Critic神经网络,Actor网络输出注释序列,Critic网络输出各个阶段的BLEU期望值包括:
[0019] 神经网络内的文本编码器根据代码文本序列得到第一序列编码结果,第一注意力函数层根据第一序列编码结果得到第一聚合向量;
[0020] 神经网络内的AST编码器根据扩展抽象语法树序列得到第二序列编码结果,第二注意力函数层根据第二序列编码结果得到第二聚合向量;
[0021] 对第一聚合向量和第二聚合向量进行加权求和得到第三聚合向量作为解码器的输入;
[0022] 基于第三聚合向量,Actor网络输出注释序列,Critic网络输出各个阶段的BLEU期望值。
[0023] 优选地,神经网络内的文本编码器根据代码文本序列得到第一序列编码结果包括:
[0024] 文本编码器中的第一嵌入矩阵将代码文本序列转换为第一向量表示,文本编码器中的第一编码网络根据第一向量表示得到第一序列编码结果。
[0025] 优选地,神经网络内的AST编码器根据扩展抽象语法树序列得到第二序列编码结果包括:
[0026] AST编码器中的第二嵌入矩阵分别将扩展抽象语法树序列中的type字段和value字段转换为词向量,AST编码器中的融合层根据type字段和value字段的词向量得到第二序
列编码结果。
[0027] 优选地,根据比较结果调整Actor网络和Critic网络的参数对Actor‑Critic神经网络进行更新包括:
[0028] 当BLEU实际值大于第t个阶段的BLEU期望值时,调整Actor网络的参数使得第t个阶段Actor所选词的选中概率提高,否则调整Actor网络的参数使得第t个阶段Actor所选词
的选中概率减小。
[0029] 第二方面,本发明提供一种代码段注释生成系统,包括存储有计算机可执行指令的存储器和处理器,当计算机可执行指令被处理器执行时使得该代码段注释生成系统执行
第一方面提供的代码段注释生成方法。
[0030] 第三方面,本发明提供一种可读存储介质,存储有计算机可执行程序,当该程序被执行时可实现第一方面提供的代码段注释生成方法。
[0031] 从以上技术方案可以看出,本发明具有如下有益效果:
[0032] 本发明提供的代码段注释生成方法,获取代码段的代码文本内容和抽象语法树,在抽象语法树中确定待注释代码段的外部依赖对应的子树,并将外部依赖对应的子树加入
待注释代码段的子树集合;以子树集合中各子树的父节点作为连接点,形成扩展抽象语法
树,基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释,扩展抽象语法树
的构建使得代码段的外部依赖也参与了注释生成的过程,可以掌握更多生成注释的有效信
息,进而生成更高质量的代码注释。

附图说明

[0033] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
提供的附图获得其他的附图。
[0034] 图1本发明一种实施例提供的代码段注释生成方法实施流程图
[0035] 图2本发明另一实施例提供的代码段注释生成方法实施流程图
[0036] 图3本发明另一实施例提供的代码段注释生成过程及模型训练架构
[0037] 图4本发明另一实施例提供的代码段注释生成模型训练过程图
[0038] 图5本发明实施例提供的代码段注释生成系统结构示意图

具体实施方式

[0039] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
[0040] 参阅图1,本实施例提供一种代码段注释生成方法,该方法的执行包括:
[0041] 步骤S100.获取待注释代码段的代码文本内容和抽象语法树。
[0042] 具体地,待注释代码段通过特征提取器分离出代码文本内容和抽象语法树,其中代码文本内容蕴含代码段的语义信息,抽象语法树蕴含代码段的结构信息,代码段的结构
信息由抽象语法树中的几个子树表达。
[0043] 步骤S110.在抽象语法树中确定待注释代码段的外部依赖对应的子树,并将外部依赖对应的子树加入待注释代码段的子树集合。
[0044] 语句在抽象语法树中以子树形式存在,这意味着语句与子树存在确定的映射关系,由此考虑外部依赖需要将其对应的子树加入代码段的子树集合中,使得外部依赖所代
表的代码段结构信息能参与到注释生成过程中。
[0045] 步骤S120.以子树集合中各子树的父节点作为连接点形成扩展抽象语法树。
[0046] 这里的父节点也就是子树的最近公共祖先,在函数的抽象语法树中可以找到这样的一个节点把代码段子树集合中的各个子树连接起来,保留连接点到各子树的路径,便可
以形成以连接点为根的抽象语法树。
[0047] 步骤S130.基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释。
[0048] 本实施例提供的代码段注释生成方法,将代码段的外部依赖也考虑到注释生成过程中,使得代码段注释生成时掌握更多的有效信息,能生成更高质量的代码注释。
[0049] 进一步参阅图2,图2示出了本申请实施例另一种代码段注释生成过程,具体说明了如何在抽象语法树中确认外部依赖子树,该过程包括:
[0050] 步骤S200.获取待注释代码段的代码文本内容和抽象语法树。
[0051] 步骤S210.在抽象语法树中确定待注释代码段的外部依赖对应的子树,并将外部依赖对应的子树加入待注释代码段的子树集合。
[0052] 其中步骤S210可以是包括如下步骤:
[0053] 步骤S211.遍历抽象语法树,从抽象语法树中收集代码段包含的所有变量名。
[0054] 步骤S212.对每一个变量名遍历抽象语法树,确定变量的作用范围,不同变量的作用范围不同。
[0055] 步骤S213.在抽象语法树中定位变量在作用范围内出现的所有位置。
[0056] 步骤S214.根据变量在抽象语法树中定位到的位置,找到所属语句扩展到语句级别的子树。
[0057] 步骤S215.将扩展到的子树加入到待注释代码段的子树集合,该子树集合表示代码段及其外部依赖的抽象语法树特征。
[0058] 步骤S220.以子树集合中各子树的父节点作为连接点形成扩展抽象语法树。
[0059] 步骤S230.基于代码文本内容和扩展抽象语法树,生成待注释代码段对应的注释。
[0060] 进一步地,通过前述的实施例获得代码段的文本内容及扩展抽象语法树后,可以直接将其作为输入,利用已训练的注释生成模型生成代码段对应的注释,注释生成模型可
以是常用的神经网络训练获得,例如GNN网络、GAN网络、循环神经网络、Actor‑Critic网络
等。
[0061] 利用神经网络训练注释生成模型时,需要对输入的训练数据进行预处理。为了方便神经网络对训练数据的识别以提高特征学习的准确率,一般将训练数据处理成序列形
式,例如将代码段的文本内容处理成文本序列,其序列元素表示语句的词,将扩展抽象语法
树同样处理成序列形式,其序列元素表示语法树中的节点。
[0062] 进一步地,由于语法树中的节点包含两个字段,分别是type和value,type表示节点类型,value表示节点内容,则扩展抽象语法树对应的序列包括两个序列集合,一个表示
节点的type字段,另一个表示节点的value字段。
[0063] 在可选的实施例中,为了避免使用Seq2Seq处理序列任务时出现的标注偏置问题,采用强化学习Actor‑Critic策略作为注释生成模型的训练网络。
[0064] 参阅图3和图4,下面介绍本申请实施例另一种利用注释生成模型进行代码段注释生成的过程,其中图3示出了生成代码段注释及模型训练的整体架构,图4示出了本实施例
采用Actor‑Critic策略进行模型训练的过程。
[0065] 在模型训练过程中Actor网络负责学习训练数据的特征并输出对应的代码注释,Critic网络负责学习期望,输出当前的期望值。计算Actor的输出结果与参考注释的BLEU值
作为实际值,计算实际值与期望值的差异,由此调整Actor网络和Critic网络的参数,使得
模型收敛,Actor网络成为一个最佳的代码注释自动生成策略,Critic网络能输出一个最佳
的预测结果。模型训练完成投入实际应用时只需要用到Actor网络负责输出代码注释。
[0066] 如图3所示,代码注释生成过程包括:
[0067] 获取代码段的代码文本内容和扩展抽象语法树。
[0068] 代码段的文本可以为模型提供代码段的语义信息,而扩展抽象语法树则可以为模型提供代码段及其外部依赖的语义与结构信息。
[0069] 将代码文本和扩展抽象语法树输入注释生成模型生成对应的代码注释。
[0070] 图3还示出了从数据收集到模型训练的过程,该过程包括:
[0071] 对源代码进行数据清洗和特征提取。
[0072] 利用注释范围预测模型预测代码段的注释范围,得到代码段‑注释样本。
[0073] 获取代码段的外部依赖,得到扩展代码段‑注释样本。
[0074] 到此通过对源代码的一系列处理得到代码文本、扩展抽象语法树及代码段的参考注释,将其作为训练数据对模型进行训练。
[0075] 如图4所示,以Java语言的代码文件为例,利用Actor‑Critic策略进行模型训练的过程包括:
[0076] 获取Java源文件,经过注释范围预测后得到代码段的参考注释,参考注释用于在Actor‑Critic策略中与输出的注释序列进行相似度比较。
[0077] 将代码段所处函数看作代码段的上下文环境,首先根据这个函数得到关于函数的抽象语法树,在得到抽象语法树后,就可以对代码的变量进行定位与作用范围确定。为了得
到代码段的外部依赖,会有以下这些步骤:
[0078] (1)使用SBT遍历方法遍历抽象语法树,从抽象语法树中收集代码段包含的所有变量名。
[0079] (2)对每一个变量名遍历抽象语法树,确定变量的作用范围,不同变量的作用范围不同。
[0080] (3)在抽象语法树中定位变量在作用范围内出现的所有位置。
[0081] (4)根据变量在抽象语法树中定位到的位置。
[0082] 找到所属语句扩展到语句级别的子树,这是因为外部依赖以语句的形式分散在抽象语法树的子树中。
[0083] (5)将扩展到的子树加入到代码段的子树集合。
[0084] 该子树集合表示代码段及其外部依赖的抽象语法树特征。
[0085] 通过(1)~(3)的步骤就可以定位代码段所有的外部依赖。
[0086] 通过上面的步骤,可以得到代码段及其外部依赖的抽象语法树特征,上面的步骤执行一次会得到代码段一阶依赖的特征,即代码段中变量的外部依赖,执行两次能得到代
码段二阶依赖的特征,即代码段中变量的外部依赖语句中其他变量的外部依赖,在本实施
例中使用一阶依赖的特征。
[0087] 得到代码段及其外部依赖在抽象语法树上的子树集合后,在抽象语法树上寻找这些子树的父节点作为子树的连接点,并保留连接点到子树的路径,形成扩展抽象语法树。
[0088] 将代码文本内容和扩展抽象语法树均处理成序列输入至训练好的注释生成模型,生成待注释代码段对应的注释;
[0089] 文本内容可以看做序列W=(w1,w2,…,wm),序列元素wm表示文本单词,扩展抽象语法树包含两个序列T=(t1,t2,…tn)和V=(v1,v2,…vn),抽象语法树中每个节点都包含type
和value两个字段,type表示节点类型,value表示节点内容,T序列表示type字段部分,V序
列表示value字段部分。
[0090] 序列处理时使用到词典将序列中的单词转换成数字形式,本实施例中构建了四个词典,分别对应代码文本、type字段、value字段和代码注释。
[0091] 考虑到词典的容量是固定的,在构建词典时会优先保留出现频率更高的词,也意味着一些低频词可能会被忽略,当代码文本或扩展抽象语法树的变量名是低频词,且属于
生成注释的有效信息时,容易因信息缺失而使得注释质量不高。
[0092] 为了尽可能保留代码的语义信息,采用驼峰命名规则和/或下划线命名规则将代码文本内容、扩展抽象语法树中的变量名、代码注释分解为若干个词,使得低频词转化为高
频词,例如readFile分解为read和file,print_paycheck分解成print和paycheck。
[0093] 在本实施例中采用了Actor‑Critic策略进行注释生成模型的训练,Actor网络和Critic网络拥有相同结构的编码器,需要注意的是,它们的编码器结构和编码过程是相同
的,但是两个网络的编码过程是独立的。编码器部分包括文本编码器和AST编码器,文本编
码器负责编码代码文本序列,AST编码器负责编码扩展抽象语法树序列。
[0094] 对于代码文本序列的编码,本实施例将文本序列W输入文本编码器,通过文本编码器中的第一嵌入矩阵得到文本序列的向量表示,再通过长短期记忆网络层(LSTM网络)得到
第一序列编码结果,编码结果将会传送到第一注意力函数层得到第一聚合向量;文本编码
器的LSTM网络的编码过程可以表示为si=f(xi,si‑1),xi表示文本序列W第i个词的向量表
示,si‑1表示前一个词的编码结果,f()表示网络编码函数。
[0095] 对于扩展抽象语法树序列的编码,本实施例将扩展抽象语法树序列T和V输入AST编码器,两个字段对应的序列分别通过AST编码器中的第二嵌入矩阵得到各自的词向量,两
个词向量通过融合层得到扩展抽象语法树的向量表示,再通过LSTM网络得到第二序列编码
结果,编码结果将会传送到第二注意力函数层得到第二聚合向量;AST编码器LSTM网络的编
码过程可以表示为s′j=f′(uj,s′j‑1),uj表示扩展抽象语法树第j个节点的向量表示,s′j‑1
表示前一个节点的编码结果,f′()表示网络编码函数。
[0096] 对第一聚合向量和第二聚合向量进行加权求和得到第三聚合向量,作为各自网络解码器的输入。
[0097] 在可选的实施例中,上述两步编码中的单层LSTM网络还可以替换成双层的LSTM网络,还可以是GRU网络,其他可以达到编码目的的网络都可以成为选择,本发明不对此进行
具体限定。
[0098] Actor网络和Critic网络拥有相似结构的解码器,两个解码器的输入都是代码段的参考注释和各自编码器的第三聚合向量,Actor网络的解码结果是当前阶段的词概率分
布,Critic网络的解码结果是当前阶段BLEU期望值。
[0099] 需要注意的是,Actor网络的编码器在每个阶段输出一个词,满足停止条件时停止词生成,Actor网络输出一个N维向量,该向量表示词概率分布,为N个词和每个词的选择概
率,Critic网络则输出在各个阶段的BLEU期望值。
[0100] Actor网络的词生成停止条件可以是生成词、生成词数量达到预设值中的一个或多个。
[0101] 在模型训练的初始可以视作有一个空的输出序列,默认该序列有一个词,Actor网络解码器输出第t个阶段的词概率分布,从中选一个词作为该阶段的词输出并更新
输出序列,Critic网络编码器则输出第t阶段的BLEU期望值。
[0102] 对于两个解码器都有如下过程:第t个阶段解码器的状态向量可以表示为ht=g(yt‑1,ht‑1,ct),yt‑1表示解码器在第t‑1阶段的输出词,ht‑1表示解码器在上一个阶段的状态
向量,ct表示第t个阶段的第三聚合向量,在Actor网络中ht决定着当前阶段输出词的选择概
率分布,而在Critic网络则决定着BLEU期望值,具体实现可以是添加一个线性层,Actor将
ht的维度转换成概率分布,Critic将ht转换成一个数值。
[0103] 停止词生成时Actor网络将输出一个N维向量,可以视作注释序列,计算该注释序列与参考注释的BLEU实际值,比较该BLEU实际值与Critic网络输出的各个阶段的BLEU期望
值的差异,如果存在BLEU实际值大于某一个阶段的BLEU期望值,说明该阶段选择的词是一
个较好的选择,提升该词的选择概率,反之如果BLEU实际值小于某一个阶段的BLEU期望值,
说明该阶段选择的词是较差的,降低该词的选择概率,通过这样的方式调整Actor网络和
Critic网络的参数对训练网络进行更新,直至模型收敛。
[0104] 通过本申请提供的方案,将代码段的外部依赖也考虑到注释生成过程中,使得代码段注释生成时掌握更多的有效信息,能生成更高质量的代码注释。
[0105] 本申请实施例提供的代码段注释生成方法可以由代码段注释生成系统执行,该系统可以是服务器、电脑、云端等,图5示出了代码段注释生成系统的硬件结构框图,包括:至
少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
[0106] 在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
[0107] 处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电
路等;
[0108] 存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non‑volatile memory)等,例如至少一个磁盘存储器;
[0109] 其中,存储器存储有计算机可执行指令,处理器可调用存储器存储的程序,所述程序用于:实现前述各个实施例提供的代码段注释生成流程。
[0110] 本申请实施例还提供一种存储介质,存储有计算机可执行程序,当该程序被执行时可实现前述各个实施例提供的代码段注释生成流程。
[0111] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作
之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意
在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那
些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者
设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排
除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。以上实施例仅用
以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说
明,本领域的技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或
者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质
脱离本发明实施例技术方案的精神和范围。