一种抽象语法树裁剪方法与流程

专利2023-02-25  101



1.本发明涉及程序代码处理领域,具体涉及一种抽象语法树裁剪方法。


背景技术:

2.随着计算机技术的不断发展,编程语言也逐渐变的复杂。抽象语法树是程序源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。
3.通过抽象语法树对程序源代码进行分析,是程序代码自动生成、代码转换、代码翻译的重要手段。对抽象语法树中的节点进行特征提取,是利用程序源代码抽象语法树进行后续代码处理的核心技术之一。
4.现有的抽象语法树节点特征提取方法,较为前沿的是使用自然语言处理中的词向量等算法来完成。将抽象语法树中的节点提取出来,形成一段由节点单词组成的文本,再用自然语言处理中的单词特征提取方法,获得所有节点的特征向量表示。
5.自然语言处理中的词向量特征提取方法,充分利用了文章单词之间的上下文关系,取得了很好的效果,但运用在抽象语法树的特征提取方面,其效果并不理想,原因是抽象语法树节点之间的上下文关系,依赖于节点的父节点、子节点和关系紧密的兄弟节点。使用深度优先遍历节点,就会有兄弟节点被排除在上下文中,而使用广度优先进行遍历,子节点又有被排除的可能性。这就造成了上下文中的节点,联系不够紧密,无法充分利用词向量等算法的优势。


技术实现要素:

6.本发明提供了一种抽象语法树裁剪方法,通过对一个庞大的抽象语法树进行裁剪,获得若干棵子树,子树中的各个节点关系更加紧密,在使用词向量等方法提取节点特征时,能够取得更好的效果,可以解决背景技术中提出的问题。
7.一种抽象语法树裁剪方法,包括:
8.s1:按照自上而下的顺序,为抽象语法树的节点进行编码,获得抽象语法树的节点编码数据集;
9.s2:采用k-means聚类方法,按照自下而上的顺序对抽象语法树的节点编码数据集进行重复聚类,获得全部节点的节点编码信息;
10.s3:根据节点编码信息,采用预设的遍历模式遍历抽象语法树,通过计算节点编码信息的余弦相似度,生成若干棵抽象语法子树。
11.进一步地,s1包括:
12.s101:设置编码内容;所述编码内容包括节点层次编号、子节点个数、父节点编号、子节点贡献的局部属性编码信息;
13.s102:根据所述编码内容,对抽象语法树的节点进行编码,编码表示为:
14.15.其中,vk表示第k个节点的编码,表示该节点层次编号、表示其子节点个数、表示父节点编号、表示其子节点贡献的局部属性编码信息;
16.s103:汇总全部节点的节点编码,获得抽象语法树的节点编码数据集。
17.进一步地,s103后还包括s104:对抽象语法树的节点编码数据集进行归一化数据处理。
18.进一步地,s2包括:
19.s201:设置聚类个数k,所述聚类个数与节点的子节点贡献的局部属性编码信息长度相同;
20.s202:采用采用k-means聚类的方法,对最下层的节点进行聚类,获得最下层节点聚类信息;
21.s203:根据所述最下层节点聚类信息,生成若干个聚类簇,并将最下层节点分派到不同的聚类簇中;
22.s204:统计最下层节点在每个聚类簇中的个数,获得节点的局部属性编码信息;
23.s205:获取最下层节点所对应的上一层的父节点,将所述节点的局部属性编码信息补充到父节点,获得上一层的父节点的节点属性信息;
24.s206:重复执行步骤s202至s205,得到全部节点编码信息。
25.进一步地,s201之前还包括s2011:采用轮廓系数对k-means聚类方法进行聚类效果预评估,以确定聚类个数k值;所述s2011包括:
26.s2011-1:将抽象语法树的节点编码数据集划分出训练集;
27.s2011-2:采用k-means聚类方法对训练集进行聚类;
28.s2011-3:采用轮廓系数对聚类效果进行预评估,获得评估值;
29.s2011-4:当评估值大于预设的评估阈值时,根据评估值确定对应的k值。
30.进一步地,s202包括:
31.s2021:随机设置k个特征空间内的初始点,将所述初始点作为初始的聚类原中心点;
32.s2022:计算其他点到k个原中心点的距离,将点归到最相似类簇中;
33.s2023:对照标记的聚类中心,重新计算出每个聚类的新中心点;若计算得出的新中心点与原中心点重合,则结束聚类;若计算得出的新中心点与原中心点不重合,则重新执行s2022步骤,进行再一次迭代。
34.进一步地,s1还包括s105:计算抽象语法树节点的数量,具体步骤为:
35.s1051:对抽象语法树中的节点进行分类,区分出终结符节点和非终结符节点;
36.s1052:针对不同类型的节点,按照预设的计数规则,统计不同类型节点的数量,将统计出的数量累加得到全部节点的数量。
37.进一步地,s3包括:
38.s301:根据全部节点编码信息,采用预设的遍历模式遍历抽象语法树;
39.s302:选定某一节点,计算节点编码信息的余弦相似度;设置该节点父节点的深度为x,子节点的深度为y,子节点个数为z,兄弟节点个数为p,余弦相似度的计算公式为:
[0040][0041]
s303:通过步骤s302计算,获得(x+y)/p个余弦相似度最大的兄弟节点信息,获得z/y个余弦相似度最大的子节点信息,获得(x+y)/x个余弦相似度最大的父节点信息;
[0042]
s304:根据所述兄弟节点信息、子节点信息和父节点信息,生成以该节点为中心的抽象语法子树;
[0043]
s305:对全部节点执行步骤s302至s304操作,获得若干棵抽象语法子树。
[0044]
进一步地,s301包括:
[0045]
s3011:使用抽象语法树的监听器遍历模式建立语言应用程序;
[0046]
s3012:采用监听器模式遍历抽象语法树,当遍历发现识别某一节点时,监听器响应对应的开始识别事件,当遍历结束识别某一节点时,监听器响应对应的结束识别事件;
[0047]
s3013:利用语言应用程序根据开始识别事件和结束识别事件,执行相应的处理操作。
[0048]
进一步地,s301还包括s3014:采用预设的遍历模式遍历抽象语法树后,对遍历完一次的抽象语法树采用抽象语法树存储类结构进行存储;所述抽象语法树存储类结构包括语法树中节点序号、文件名、文件路径、节点哈希值、语法树节点类型、语法树节点名称、子节点数量、节点对应的起始行号、节点对应的终止行号。
[0049]
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
[0050]
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
[0051]
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
[0052]
图1为本发明的一种抽象语法树裁剪方法步骤示意图;
[0053]
图2为本发明的一种抽象语法树裁剪方法流程图;
[0054]
图3为本发明的一种抽象语法树裁剪方法的聚类流程步骤示意图;
[0055]
图4为本发明的一种抽象语法树裁剪方法的遍历语法树并计算余弦相似度步骤示意图。
具体实施方式
[0056]
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
[0057]
一种抽象语法树裁剪方法,如图1所示,包括:
[0058]
s1:按照自上而下的顺序,为抽象语法树的节点进行编码,获得抽象语法树的节点编码数据集;
[0059]
s2:采用k-means聚类方法,按照自下而上的顺序对抽象语法树的节点编码数据集
进行重复聚类,获得全部节点的节点编码信息;
[0060]
s3:根据节点编码信息,采用预设的遍历模式遍历抽象语法树,通过计算节点编码信息的余弦相似度,生成若干棵抽象语法子树。
[0061]
上述技术方案的工作原理为:抽象语法树是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,抽象语法树并不依赖于源语言的语法;当抽象语法树中某一节点的子节点和兄弟节点过多时,容易出现信息大量丢失问题,为了更好地分析并提取抽象语法树特征,需要对抽象语法树进行裁剪,以保证特征提取的质量。本实施例方法具体步骤为:如图2所示,首先,根据抽象语法树自上而下的顺序,为节点进行编码;其次,自下而上对所有节点进行聚类;最后,根据最终得到的所有节点的编码信息,遍历抽象语法树,得到n棵子树。
[0062]
上述技术方案的有益效果为:采用本实施例提供的方案,通过对抽象语法树进行裁剪,获得若干棵子树,子树中的各个节点关系更加紧密,在使用词向量等方法提取节点特征时,能够取得更好地效果。
[0063]
在一个实施例中,s1包括:
[0064]
s101:设置编码内容;所述编码内容包括节点层次编号、子节点个数、父节点编号、子节点贡献的局部属性编码信息;
[0065]
s102:根据所述编码内容,对抽象语法树的节点进行编码,编码表示为:
[0066][0067]
其中,vk表示第k个节点的编码,表示该节点层次编号、表示其子节点个数、表示父节点编号、表示其子节点贡献的局部属性编码信息;
[0068]
s103:汇总全部节点的节点编码,获得抽象语法树的节点编码数据集。
[0069]
上述技术方案的工作原理为:编码可以为抽象语法树节点赋予识别信息,并较好地区分各个节点;具体为:
[0070]
s101:设置编码内容;所述编码内容包括节点层次编号、子节点个数、父节点编号、子节点贡献的局部属性编码信息;
[0071]
s102:根据所述编码内容,对抽象语法树的节点进行编码,编码表示为:
[0072][0073]
其中,vk表示第k个节点的编码,表示该节点层次编号、表示其子节点个数、表示父节点编号、表示其子节点贡献的局部属性编码信息;
[0074]
s103:汇总全部节点的节点编码,获得抽象语法树的节点编码数据集。
[0075]
上述技术方案的有益效果为:采用本实施例提供的方案,通过对抽象语法树的节点进行编码,有利于更好地识别抽象语法树的节点,为聚类分析提供便利。
[0076]
在一个实施例中,s103后还包括s104:对抽象语法树的节点编码数据集进行归一化数据处理。
[0077]
上述技术方案的工作原理为:对数据归一化处理,目的是使各项指数的尺度达到统一;s103后还包括s104:对抽象语法树的节点编码数据集进行归一化数据处理。
[0078]
上述技术方案的有益效果为:采用本实施例提供的方案,通过进行归一化数据处理,有利于进行数据的聚类分析。
[0079]
在一个实施例中,s2包括:
[0080]
s201:设置聚类个数k,所述聚类个数与节点的子节点贡献的局部属性编码信息长度相同;
[0081]
s202:采用采用k-means聚类的方法,对最下层的节点进行聚类,获得最下层节点聚类信息;
[0082]
s203:根据所述最下层节点聚类信息,生成若干个聚类簇,并将最下层节点分派到不同的聚类簇中;
[0083]
s204:统计最下层节点在每个聚类簇中的个数,获得节点的局部属性编码信息;
[0084]
s205:获取最下层节点所对应的上一层的父节点,将所述节点的局部属性编码信息补充到父节点,获得上一层的父节点的节点属性信息;
[0085]
s206:重复执行步骤s202至s205,得到全部节点编码信息。
[0086]
上述技术方案的工作原理为:抽象语法树中每个节点所包含的信息主要与它的父节点、子节点和兄弟节点联系密切,为了更好的发现节点之间的联系,采用聚类的方法进行查找和分类;本实施例采用k均值聚类算法,该算法是一种迭代求解的聚类分析算法,其步骤是,将数据分为k组,随机选取k个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。具体步骤为:
[0087]
s201:设置聚类个数k,所述聚类个数与节点的子节点贡献的局部属性编码信息长度相同;
[0088]
s202:采用采用k-means聚类的方法,对最下层的节点进行聚类,获得最下层节点聚类信息;
[0089]
s203:根据所述最下层节点聚类信息,生成若干个聚类簇,并将最下层节点分派到不同的聚类簇中;
[0090]
s204:统计最下层节点在每个聚类簇中的个数,获得节点的局部属性编码信息;
[0091]
s205:获取最下层节点所对应的上一层的父节点,将所述节点的局部属性编码信息补充到父节点,获得上一层的父节点的节点属性信息;
[0092]
s206:重复执行步骤s202至s205,得到全部节点编码信息。
[0093]
例如,如图3中,e、f、g、h、i为最下层的节点,对这些节点聚类后,e、f两个节点聚为一类,g、h两个节点聚为一类,i为一类,e、f是上一层的b节点的子节点,g是上一层的c节点的子节点,h、i是上一层的d节点的子节点;在对e、f、g、h、i最下层的节点进行聚类后,同时更新节点的编码信息;节点a是b、c、d节点的上一层节点的父节点,在对b、c、d节点进行聚类后,也对b、c、d节点的父节点a更新编码信息。
[0094]
上述技术方案的有益效果为:采用本实施例提供的方案,通过采用k均值聚类,可以简洁和高效地对抽象语法树进划分聚类。
[0095]
在一个实施例中,s201之前还包括s2011:采用轮廓系数对k-means聚类方法进行聚类效果预评估,以确定聚类个数k值;所述s2011包括:
[0096]
s2011-1:将抽象语法树的节点编码数据集划分出训练集;
[0097]
s2011-2:采用k-means聚类方法对训练集进行聚类;
[0098]
s2011-3:采用轮廓系数对聚类效果进行预评估,获得评估值;
[0099]
s2011-4:当评估值大于预设的评估阈值时,根据评估值确定对应的k值。
[0100]
上述技术方案的工作原理为:轮廓系数是聚类效果好坏的一种评价方式,它结合内聚度和分离度两种因素,可以用来在相同原始数据的基础上用来评价不同算法、或者算法不同运行方式对聚类结果所产生的影响。在正式实施聚类之前,通过采用轮廓系数对聚类效果进行评价,可以保证获得符合实际要求的均值;具体包括:
[0101]
s2011-1:将抽象语法树的节点编码数据集划分出训练集;
[0102]
s2011-2:采用k-means聚类方法对训练集进行聚类;
[0103]
s2011-3:采用轮廓系数对聚类效果进行预评估,获得评估值;
[0104]
s2011-4:当评估值大于预设的评估阈值时,根据评估值确定对应的k值。
[0105]
上述技术方案的有益效果为:采用本实施例提供的方案,通过采用轮廓系数对k-means聚类方法进行聚类效果预评估,以确定聚类个数k值,保证了均值选取的科学性、合理性。
[0106]
在一个实施例中,s202包括:
[0107]
s2021:随机设置k个特征空间内的初始点,将所述初始点作为初始的聚类原中心点;
[0108]
s2022:计算其他点到k个原中心点的距离,将点归到最相似类簇中;
[0109]
s2023:对照标记的聚类中心,重新计算出每个聚类的新中心点;若计算得出的新中心点与原中心点重合,则结束聚类;若计算得出的新中心点与原中心点不重合,则重新执行s2022步骤,进行再一次迭代。
[0110]
上述技术方案的工作原理为:s202包括:
[0111]
s2021:随机设置k个特征空间内的初始点,将所述初始点作为初始的聚类原中心点;
[0112]
s2022:计算其他点到k个原中心点的距离,将点归到最相似类簇中;
[0113]
s2023:对照标记的聚类中心,重新计算出每个聚类的新中心点;若计算得出的新中心点与原中心点重合,则结束聚类;若计算得出的新中心点与原中心点不重合,则重新执行s2022步骤,进行再一次迭代。
[0114]
上述技术方案的有益效果为:采用本实施例提供的方案,通过选定k个初始点进行聚类,可以提高聚类的质量和效果。
[0115]
在一个实施例中,s1还包括s105:计算抽象语法树节点的数量,具体步骤为:
[0116]
s1051:对抽象语法树中的节点进行分类,区分出终结符节点和非终结符节点;
[0117]
s1052:针对不同类型的节点,按照预设的计数规则,统计不同类型节点的数量,将统计出的数量累加得到全部节点的数量。
[0118]
上述技术方案的工作原理为:抽象语法树节点大小定义为:一个节点以及在抽象语法树上该节点的子树中所包含的终结符节点的个数。在抽象语法树的具体表示中,终结符节点指编程语言语法规则中不能拆分的最小单元。通过计算节点数量,可以掌握抽象语法树的节点规模;具体步骤为:
[0119]
s1051:对抽象语法树中的节点进行分类,区分出终结符节点和非终结符节点;
[0120]
s1052:针对不同类型的节点,按照预设的计数规则,统计不同类型节点的数量,将统计出的数量累加得到全部节点的数量。
[0121]
上述技术方案的有益效果为:采用本实施例提供的方案,通过计算抽象语法树节点的数量,掌握抽象语法树的数量,可以有针对性地进行聚类操作。
[0122]
在一个实施例中,如图4所示,s3包括:
[0123]
s301:根据全部节点编码信息,采用预设的遍历模式遍历抽象语法树;
[0124]
s302:选定某一节点,计算节点编码信息的余弦相似度;设置该节点父节点的深度为x,子节点的深度为y,子节点个数为z,兄弟节点个数为p,余弦相似度的计算公式为:
[0125][0126]
s303:通过步骤s302计算,获得(x+y)/p个余弦相似度最大的兄弟节点信息,获得z/y个余弦相似度最大的子节点信息,获得(x+y)/x个余弦相似度最大的父节点信息;
[0127]
s304:根据所述兄弟节点信息、子节点信息和父节点信息,生成以该节点为中心的抽象语法子树;
[0128]
s305:对全部节点执行步骤s302至s304操作,获得若干棵抽象语法子树。
[0129]
上述技术方案的工作原理为:余弦相似度,是通过计算两个向量的夹角余弦值来评估他们的相似度。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90
°
时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。本实施例采用余弦相似度,计算节点的相似性;具体包括:
[0130]
s301:根据全部节点编码信息,采用预设的遍历模式遍历抽象语法树;
[0131]
s302:选定某一节点,计算节点编码信息的余弦相似度;设置该节点父节点的深度为x,子节点的深度为y,子节点个数为z,兄弟节点个数为p,余弦相似度的计算公式为:
[0132][0133]
s303:通过步骤s302计算,获得(x+y)/p个余弦相似度最大的兄弟节点信息,获得z/y个余弦相似度最大的子节点信息,获得(x+y)/x个余弦相似度最大的父节点信息;
[0134]
s304:根据所述兄弟节点信息、子节点信息和父节点信息,生成以该节点为中心的抽象语法子树;
[0135]
s305:对全部节点执行步骤s302至s304操作,获得若干棵抽象语法子树。
[0136]
上述技术方案的有益效果为:采用本实施例提供的方案,通过采用余弦相似度计算节点相似性,可以提高计算的精确度。
[0137]
在一个实施例中,s301包括:
[0138]
s3011:使用抽象语法树的监听器遍历模式建立语言应用程序;
[0139]
s3012:采用监听器模式遍历抽象语法树,当遍历发现识别某一节点时,监听器响应对应的开始识别事件,当遍历结束识别某一节点时,监听器响应对应的结束识别事件;
[0140]
s3013:利用语言应用程序根据开始识别事件和结束识别事件,执行相应的处理操作。
[0141]
上述技术方案的工作原理为:监听器模式适合全局查找,监听器机制可以使程序代码和语法分离开,可以实现语法重用,从而实现对抽象语法树的遍历,根据本实施方案实际,采用监听器模式进行遍历操作;具体为:
[0142]
s3011:使用抽象语法树的监听器遍历模式建立语言应用程序;
[0143]
s3012:采用监听器模式遍历抽象语法树,当遍历发现识别某一节点时,监听器响应对应的开始识别事件,当遍历结束识别某一节点时,监听器响应对应的结束识别事件;
[0144]
s3013:利用语言应用程序根据开始识别事件和结束识别事件,执行相应的处理操作。
[0145]
上述技术方案的有益效果为:采用本实施例提供的方案,通过采用监听器模式进行遍历可以保证遍历的效果。
[0146]
在一个实施例中,s301还包括s3014:采用预设的遍历模式遍历抽象语法树后,对遍历完一次的抽象语法树采用抽象语法树存储类结构进行存储;所述抽象语法树存储类结构包括语法树中节点序号、文件名、文件路径、节点哈希值、语法树节点类型、语法树节点名称、子节点数量、节点对应的起始行号、节点对应的终止行号。
[0147]
上述技术方案的工作原理为:当需要进行裁剪的抽象语法树结构复杂时,节点数量众多,为了便于进行聚类裁剪,需要设计存储结构,将非结构化的语法树形式存储为结构化的数据,并用序列化的方式表示出来。本方案中设计抽象语法树存储类结构,采用预设的遍历模式遍历抽象语法树后,对遍历完一次的抽象语法树进行存储;包括语法树中节点序号、文件名、文件路径、节点哈希值、语法树节点类型、语法树节点名称、子节点数量、节点对应的起始行号、节点对应的终止行号。通过节对应的起始行号和终行号,可以得出节点的信息量。
[0148]
上述技术方案的有益效果为:采用本实施例提供的方案,通过设置存储化的结构,可以提高抽象语法树裁剪的效率。
[0149]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

技术特征:
1.一种抽象语法树裁剪方法,其特征在于,包括:s1:按照自上而下的顺序,为抽象语法树的节点进行编码,获得抽象语法树的节点编码数据集;s2:采用k-means聚类方法,按照自下而上的顺序对抽象语法树的节点编码数据集进行重复聚类,获得全部节点的节点编码信息;s3:根据节点编码信息,采用预设的遍历模式遍历抽象语法树,通过计算节点编码信息的余弦相似度,生成若干棵抽象语法子树。2.根据权利要求1所述的一种抽象语法树裁剪方法,其特征在于,s1包括:s101:设置编码内容;所述编码内容包括节点层次编号、子节点个数、父节点编号、子节点贡献的局部属性编码信息;s102:根据所述编码内容,对抽象语法树的节点进行编码,编码表示为:其中,v
k
表示第k个节点的编码,表示该节点层次编号、表示其子节点个数、表示父节点编号、表示其子节点贡献的局部属性编码信息;s103:汇总全部节点的节点编码,获得抽象语法树的节点编码数据集。3.根据权利要求2所述一种抽象语法树裁剪方法,其特征在于,s103后还包括s104:对抽象语法树的节点编码数据集进行归一化数据处理。4.根据权利要求1所述的一种抽象语法树裁剪方法,其特征在于,s2包括:s201:设置聚类个数k,所述聚类个数与节点的子节点贡献的局部属性编码信息长度相同;s202:采用采用k-means聚类的方法,对最下层的节点进行聚类,获得最下层节点聚类信息;s203:根据所述最下层节点聚类信息,生成若干个聚类簇,并将最下层节点分派到不同的聚类簇中;s204:统计最下层节点在每个聚类簇中的个数,获得节点的局部属性编码信息;s205:获取最下层节点所对应的上一层的父节点,将所述节点的局部属性编码信息补充到父节点,获得上一层的父节点的节点属性信息;s206:重复执行步骤s202至s205,得到全部节点编码信息。5.根据权利要求4所述一种抽象语法树裁剪方法,其特征在于,s201之前还包括s2011:采用轮廓系数对k-means聚类方法进行聚类效果预评估,以确定聚类个数k值;所述s2011包括:s2011-1:将抽象语法树的节点编码数据集划分出训练集;s2011-2:采用k-means聚类方法对训练集进行聚类;s2011-3:采用轮廓系数对聚类效果进行预评估,获得评估值;s2011-4:当评估值大于预设的评估阈值时,根据评估值确定对应的k值。6.根据权利要求4所述一种抽象语法树裁剪方法,其特征在于,s202包括:s2021:随机设置k个特征空间内的初始点,将所述初始点作为初始的聚类原中心点;
s2022:计算其他点到k个原中心点的距离,将点归到最相似类簇中;s2023:对照标记的聚类中心,重新计算出每个聚类的新中心点;若计算得出的新中心点与原中心点重合,则结束聚类;若计算得出的新中心点与原中心点不重合,则重新执行s2022步骤,进行再一次迭代。7.根据权利要求1所述一种抽象语法树裁剪方法,其特征在于,s1还包括s105:计算抽象语法树节点的数量,具体步骤为:s1051:对抽象语法树中的节点进行分类,区分出终结符节点和非终结符节点;s1052:针对不同类型的节点,按照预设的计数规则,统计不同类型节点的数量,将统计出的数量累加得到全部节点的数量。8.根据权利要求1所述一种抽象语法树裁剪方法,其特征在于,s3包括:s301:根据全部节点编码信息,采用预设的遍历模式遍历抽象语法树;s302:选定某一节点,计算节点编码信息的余弦相似度;设置该节点父节点的深度为x,子节点的深度为y,子节点个数为z,兄弟节点个数为p,余弦相似度的计算公式为:s303:通过步骤s302计算,获得(x+y)/p个余弦相似度最大的兄弟节点信息,获得z/y个余弦相似度最大的子节点信息,获得(x+y)/x个余弦相似度最大的父节点信息;s304:根据所述兄弟节点信息、子节点信息和父节点信息,生成以该节点为中心的抽象语法子树;s305:对全部节点执行步骤s302至s304操作,获得若干棵抽象语法子树。9.根据权利要求1所述一种抽象语法树裁剪方法,其特征在于,s301包括:s3011:使用抽象语法树的监听器遍历模式建立语言应用程序;s3012:采用监听器模式遍历抽象语法树,当遍历发现识别某一节点时,监听器响应对应的开始识别事件,当遍历结束识别某一节点时,监听器响应对应的结束识别事件;s3013:利用语言应用程序根据开始识别事件和结束识别事件,执行相应的处理操作。10.根据权利要求8所述的一种抽象语法树裁剪方法,其特征在于,s301还包括s3014:采用预设的遍历模式遍历抽象语法树后,对遍历完一次的抽象语法树采用抽象语法树存储类结构进行存储;所述抽象语法树存储类结构包括语法树中节点序号、文件名、文件路径、节点哈希值、语法树节点类型、语法树节点名称、子节点数量、节点对应的起始行号、节点对应的终止行号。

技术总结
本发明提供了一种抽象语法树裁剪方法,包括:S1:按照自上而下的顺序,为抽象语法树的节点进行编码,获得抽象语法树的节点编码数据集;S2:采用K-Means聚类方法,按照自下而上的顺序对抽象语法树的节点编码数据集进行重复聚类,获得全部节点的节点编码信息;S3:根据节点编码信息,采用预设的遍历模式遍历抽象语法树,通过计算节点编码信息的余弦相似度,生成若干棵抽象语法子树。本发明通过对一个庞大的抽象语法树进行裁剪,获得若干棵子树,子树中的各个节点关系更加紧密,在使用词向量等方法提取节点特征时,能够取得更好的效果。能够取得更好的效果。能够取得更好的效果。


技术研发人员:杨永全 陈超 魏志强
受保护的技术使用者:青岛海洋科学与技术国家实验室发展中心
技术研发日:2022.07.26
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-1352.html

最新回复(0)