【技术实现步骤摘要】
一种基于语法分析树的程序代码平行语料挖掘方法及系统
[0001]本专利技术涉及代码分析
,并且更具体地,涉及一种基于语法分析树的程序代码平行语料挖掘方法及系统。
技术介绍
[0002]由于缺乏平行语料,现有的翻译模型在编程语言转换领域中的应用比较有限,因此程序代码的平行语料挖掘对于编程语言翻译系统的构建和验证具有重要意义。用户对于编程语言平行语料挖掘的需求主要体现在以下方面:(1)基于神经网络模型的编程语言翻译系统需要大量的编程语言平行语料进行模型的训练和验证。(2)现存开源代码仓库拥有庞大的编程语言数据,且大量项目都具有多语言版本。这类项目在从一个语言迁移到另一个语言的过程中往往会保留其原来的设计和模式,因此源码在结构和逻辑上具有高度的相似性,其中的平行语料具有比较高的利用价值,需要一种能够自动化地识别并提取平行代码结构的方法和工具来从已有数据中提取出大量的平行语料。
[0003]语法分析树是对编程语言进行语法分析的产物,它能够将源码从底层实现向上逐步抽象,将各部分的具体代码映射到语法树上相应的位置。 >[0004]因此,本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种基于语法分析树的程序代码平行语料挖掘方法,其特征在于,所述方法包括:获取同一项目对应的基于两种不同类型的编程语言编写的第一源码文件和第二源码文件,并分别对所述第一源码文件和第二源码文件进行语法分析,以获取第一语法分析树和第二语法分析树;其中,所述语法分析树,包括:至少两个节点和每个节点的节点信息;根据节点信息从所述第一语法分析树和第二语法分析树的根节点开始依次向下进行节点匹配,以确定至少一组匹配成功的属于第一语法分析树的第一语法分析子树和属于第二语法分析树的第二语法分析子树;确定每组匹配成功的第一语法分析子树在所述第一源码文件的字符流中的第一首尾位置和第二语法分析子树在所述第二源码文件的字符流中的第二首尾位置,并根据每组的第一首尾位置和第二首尾位置进行代码提取,以获取多组平行语料。2.根据权利要求1所述的方法,其特征在于,所述方法基于不同类型的编程语言的语法和ANTLR生成与不同类型的编程语言对应的语法分析器,并利用生成的语法分析器读入相同类型的编程语言对应的源码文件的输入流并进行分词处理,以获取词法符号流,并对所述词法符号流进行递归下降的语法分析,以获取语法分析树。3.根据权利要求1所述的方法,其特征在于,所述根据节点信息从所述第一语法分析树和第二语法分析树的根节点开始依次向下进行节点匹配,以确定至少一组匹配成功的属于第一语法分析树的第一语法分析子树和属于第二语法分析树的第二语法分析子树,包括:同时对所述第一语法分析树和第二语法分析树进行分析,从根节点开始,若根节点匹配,则遍历根节点下包含的能够继续匹配的子规则节点,若当前的根节点下的子规则节点的节点信息一致,则进入子规则节点向下继续分析以子规则节点为根节点的子语法树,直至节点信息不一致时停止;若根节点不匹配,则对根节点下的所有子节点进行匹配分析,并重复上述匹配过程,同时在一个节点分析完成后将结果回溯至对应的父节点,最终确定匹配成功的属于第一语法分析树的第一语法分析子树和属于第二语法分析树的第二语法分析子树。4.根据权利要求1所述的方法,其特征在于,所述方法在进行节点匹配时,对于类节点,判断匹配的条件为节点的基本信息和包含的子规则节点信息一致,类节点的基本信息包括:类名、修饰符和继承信息,包含的子规则节点包括:类方法和声明;对于方法节点,判断匹配的条件为基本信息和包含的子规则节点一致,方法节点的基本信息包括:方法名、修饰符、参数列表和返回值类型,包含的子规则节点为声明、循环体和判断分支;其中,对于任一个节点,该节点的节点信息包括:该节点的基本信息和该节点包含的子规则节点信息。5.根据权利要求4所述的方法,其特征在于,所述基本信息的比对规则为:对于文本类信息,忽略大小写进行相似匹配;对于方法的参数列表,根据参数的个数和参数类型进行匹配;对于循环体结构,根据循环条件进行匹配;对于判断分支结构,根据每个分支的判断条件进行匹配;对于方法返回值和声明部分,根据类型信息进行匹配。6.一种基于语法分析树的程序代码平行语料挖掘系统,其特征...
【专利技术属性】
技术研发人员:杨永全,孙铭,魏志强,
申请(专利权)人:青岛海洋科学与技术国家实验室发展中心,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。