CN110928550B - 基于关键词Trie树消除GCC抽象语法树冗余的方法 - Google Patents
基于关键词Trie树消除GCC抽象语法树冗余的方法 Download PDFInfo
- Publication number
- CN110928550B CN110928550B CN201911136042.7A CN201911136042A CN110928550B CN 110928550 B CN110928550 B CN 110928550B CN 201911136042 A CN201911136042 A CN 201911136042A CN 110928550 B CN110928550 B CN 110928550B
- Authority
- CN
- China
- Prior art keywords
- node
- keyword
- gcc
- abstract syntax
- syntax tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000003379 elimination reaction Methods 0.000 claims abstract description 15
- 230000008030 elimination Effects 0.000 claims abstract description 12
- 238000007781 pre-processing Methods 0.000 claims abstract description 12
- 238000012545 processing Methods 0.000 claims abstract description 12
- 238000004140 cleaning Methods 0.000 claims abstract description 4
- 238000001514 detection method Methods 0.000 claims description 5
- 239000002243 precursor Substances 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 10
- 238000004458 analytical method Methods 0.000 description 10
- 230000000052 comparative effect Effects 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了基于关键词Trie树消除GCC抽象语法树冗余的方法,步骤为:通过GCC编译器编译源码文件得到原始数据;对原始数据进行文本预处理即对原始数据进行数据清洗后根据GCC抽象语法树节点自上而下递增存储的逻辑结构将一节点的数据存储为一单元;用有用节点信息关键词Trie树对上步所得数据进行检索输出有效节点及其子节点信息,完成GCC抽象语法树冗余消除;关键词Trie树是依据有用节点关键词词库建立的,有用节点关键词词库是通过对基准文本库中的文本进行文本预处理后构造得到的,其包括GCC抽象语法树文本文件的编译产生的有效节点类型。本发明的处理过程简单,数据处理量小,处理速度快,去除冗余效率及查准率高。
Description
技术领域
本发明属于计算机应用技术领域,涉及一种基于关键词Trie树消除GCC抽象语法树冗余的方法。
背景技术
GCC(GNU Compiler Collection)编译器是由GNU开发的编程语言编译器,能够支持C、C++、Fortran、Java等主流程序设计语言,被多种Unix操作系统如Linux、Mac OS X等采纳为标准编译器。抽象语法树(Abstract Syntax Tree,AST)是编译系统中最常见的一种以树形结构为表现形式的中间表示,用来对前端语言的源代码进行规范化的抽象表示。GCCAST作为一种良好的中间表示,包含有显示源程序结构所需的全部静态信息,并且具有较高的存储效率。抽象语法树的用途十分广泛,在编程语言的词法语法分析阶段、静态代码抄袭检测、程序切片算法提取特征、检测缓冲区溢出漏洞等程序分析领域占据着至关重要的地位。
GCC抽象语法树文本文件是指C语言源文件经过GCC编译器编译后产生的以文本结构进行存储的语法树文件。在GCC对源码的编译过程中,会对每一个源文件生成一个抽象语法树文本文件,使用编译指令“gcc–fdump-translation-unit-C”或者“gcc–fdump-tree-all”均可得到以“源码文件名001t.tu”为文件名的抽象语法树文件。
由于GCC编译源码生成抽象语法树文本文件是为了完成语法结构以及寄存器转移语言的转化过程,因此在设计之初就考虑到底层优化等功能,也因此增加了大量中间节点。此举虽然提高了一定的完备性及优化性,但是随之而来的大量冗余信息却导致该文本不利于直接分析以及生成AST。在实际实验中,一个6行的打印“Hello World”的C语言源码会生成514KB的抽象语法树文件,这其中包含了大量编译中间节点信息用以辅助编译,如抽象语法树文件会默认引入预处理指令#include中的全部函数、结构体、变量等编译信息,其中多数信息在源码中没有涉及也不利于代码的后续分析,增加了对源代码分析时的内存消耗,降低了分析效率。因此为了方便后续的数据分析以及降低源码分析时的内存消耗、减少时空消耗,对GCC抽象语法树文件进行消除冗余信息就显得必不可少了。
因此,开发一种消除GCC抽象语法树冗余的方法极具现实意义。
发明内容
本发明的目的在于克服现有技术源码分析的内存消耗大且分析效率低的缺陷,提供基于关键词Trie树消除GCC抽象语法树冗余的方法,进而降低源码分析的内存消耗,提高分析效率。Tire树(又称字典树、关键词查找树)是实现网络信息检索的一种有效算法,其优点是能够最大限度地减少重复的字符串前缀或后缀的比较,从而节省了时空开销。本发明首先构造GCC抽象语法树文本文件的编译产生的有效节点类型以及与源文件相关的有用节点关键词词库(通用库),然后构建一棵基于有用信息关键词词库的Trie树算法,接着对已进行文本预处理的GCC抽象语法树文本(待处理文本)进行有效信息关键词检索,将检索到包含有效信息字段的节点进行输出,最后将上一步输出的节点中子节点信息也输出,得到消除冗余后的GCC抽象语法树文本。
为实现上述目的,本发明提供如下技术方案:
基于关键词Trie树消除GCC抽象语法树冗余的方法,应用于电子设备,其步骤如下:
(1)通过GCC编译器编译源码文件得到原始数据并命名为ASTtest={ast1,ast2,ast3…asti…astn}(1≤i≤n),n为原始数据的节点数,asti表示文本中的第i个节点的描述字符信息;
(2)对原始数据进行文本预处理,所述文本预处理是指对原始数据进行数据清洗后根据GCC抽象语法树节点自上而下递增存储的逻辑结构将一个节点的数据存储为一个单元;
(3)利用有用节点信息关键词Trie树对步骤(2)得到的数据进行检索输出有效节点,再输出有效节点中的子节点信息,即完成GCC抽象语法树冗余的消除,所述有效节点为包含有效信息字段的节点;
所述有用节点信息关键词Trie树是依据有用节点关键词词库建立的,所述有用节点关键词词库是通过对基准文本库中的文本进行文本预处理后构造得到的,所述有用节点关键词词库包括GCC抽象语法树文本文件的编译产生的有效节点类型;所述基准文本库是基于当前的GCC抽象语法树文本文件大数据库建立的,按照当前某类型GCC抽象语法树文本文件的使用率选取文本。
本发明的基于关键词Trie树消除GCC抽象语法树冗余的方法,针对的是编译语言的编译器(计算机软件)生成的中间冗余信息,其主要是依托有用节点信息关键词Trie树进行的,通过对当前的GCC抽象语法树文本文件的大数据进行处理,选取合适的文本作为基准文本,而后对基准文本进行预处理选取其中的有效节点,得到有用节点关键词词库,进而建立有用节点信息关键词Trie树,调用Trie树即可选取文本中的有效节点,进而完成GCC抽象语法树冗余的消除。本发明的处理方法过程简单,数据处理量小,处理速度快,同时能够有效避免冗余消除过程中出现常量、变量等有用信息节点的丢失,实现了去除冗余效率及查准率的极大提高,极具应用前景。本发明的保护范围并不仅限于此,其他如应用本发明的方法的电子设备或软件程序也属于本发明的保护范围。
作为优选的技术方案:
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,所述源码文件为C语言源码文件即以C语言为编程语言编写的源码文件;
步骤(1)的编译环境为在centos6.8下版本为6.5.0的GCC编译器。本发明的具体保护范围并不仅限于此,本领域技术人员可根据实际情况选择合适的编译软件。
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,所述数据清洗是采用数据处理软件Pentaho Kettle进行的;
所述将一个节点的数据存储为一个单元是基于节点的唯一标识符进行的,所述一个节点的数据包括该节点的描述信息和子节点信息。
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,所述有效节点类型包括包含固定的类型节点信息或节点描述信息包含源文件名称字符的关键词。
GCC抽象语法树的常用节点类型如下表所示:
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,所述固定的类型节点信息为以‘call_expr’或‘real_cst’等为后缀的节点,所述源文件名称字符为‘srcp:源文件名’。关键词词库创建是通过判定其该节点是否包含固定的类型节点信息如‘call_expr’、‘real_cst’等,以及节点描述信息是否包含源文件名称字符如‘srcp:源文件名’。将这些关键词进行建库,包含这些字段信息的节点描述信息即被认定为有用信息节点,当遇到包含‘srcp’字段但是不包含源文件名的字段时,算法能将其检测并判定其为冗余信息。本发明的保护范围并不仅限于此,此处仅给出一种可行的技术方案而已,本领域技术人员可根据实际需求选择合适的固定的类型节点信息及源文件名称字符。
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,所述有用节点关键词词库中的关键词集合具体为:K={k1,k2,…ki,…kn},(1≤i≤n),n表示类型节点关键词的个数,ki表示第i个类型节点关键词;ki={ki1,ki2,…,kij,…,ki,m},(1≤j≤m),kij表示第i个类型节点关键词的第j个子节点关键词;其中m表示子节点个数。
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,所述有用节点信息关键词Trie树的建立步骤为:
(I)初始化检测信息:i=1,j=1,q=1,q记录子节点的序号,Ci=ROOT,Ci为正在检测的节点;
(II)若i≤n,获取类型节点关键词的首字母S;
(III)进入到S子节点树查询,将Kij与类型节点关键词首字母S的第q个子节点childq进行比较;
(IV)若Kij==childq,则j++;
此时:若j<m,S=childq,q=1,返回步骤(III);若j≥m,i++,当i≥n时,则有用节点信息关键词Trie树建立;
当i<n时,则返回步骤(II);
(V)若Kij≠childij,此时查询childq的下一节点是否为空值;
(VI)若childq下一节点为空,则创建新节点childq+1,并将Kij的值赋给childq+1,j++;
此时:若j<m则创建子节点,并赋值childji,j++;若j≥m,则初始化,i++,当i<n时,返回步骤(II);当i≥n时,有用节点信息关键词Trie树建立;
(VII)若childq的下一兄弟节点不为空,则q++,返回到步骤(II),处理下一个关键词;
(VIII)有用节点信息关键词Trie树建立。
有用节点信息关键词Trie树的建立过程的输入为GCC抽象语法树文本中包含有用节点信息的关键词字段集合K,输出为GCC AST关键词Trie树。
有用节点信息关键词Trie树包含源文件名称字符、声明节点、常量节点、类型节点等节点的前缀或后缀字符,将有用节点关键词的第一个关键字母按照英文字母表进行排列,这样在检索到相同前缀关键词时仅需存储在相同的前驱节点,不仅能有效的减少存储节点利于降低空间复杂度,同时在对GCC抽象语法树文本进行冗余优化时可以节省时间,提高优化效率。
在GCC抽象语法树文本中,所有节点信息都是以英文字符和阿拉伯数字等等组成,并不涉及到中文字符,同样根据算法的设计可以发现关键词Trie树的高度和抽象语法树关键词库的关键词的数量有关,而关键词库的关键词数量有限,因此Trie树的高度对于算法空间复杂度的影响微乎其微。
此外,创建的关键词Trie树算法因GCC抽象语法树文本的有用节点信息拥有相同的节点类型后缀词,并且Trie树只有两层节点,这样大大降低了空间复杂度,简化了查询过程,提高了算法效率。
利用Trie树对GCC抽象语法树文本进行冗余消除时按照最大匹配的原则进行查找,这样消除冗余后的GCC抽象语法树文本更加纯净,数据更加完整。
如上所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,利用有用节点信息关键词Trie树检索的具体步骤为:
(3.1)初始化i=1,q=1,q用于记录进入分支的字符序列号;
(3.2)输入步骤(2)得到的数据中的一节点的描述字符信息asti,若i≥n,转步骤(3.7),否则将i的值赋值给q,j=1,获取asti的节点类型首字母S;
(3.3)查询关键词Trie树中节点类型首字母为S的子节点childj,并将其与asti进行匹配;
(3.4)若asti==childj,输出该条asti所在唯一标识行号@number及其节点信息至消除冗余后的GCC抽象语法树文本ASTnew;
(3.5)将输出的asti此节点描述字段中的子节点信息输出至ASTnew;
(3.6)若asti≠childj,查询下一节点是否为Null,若下一节点不为Null,则转至步骤(3.3);
(3.7)若下一节点为Null,则i=q+1;
此时:若i<n,转至步骤(3.2);
若i≥n,检索完成;
(3.8)检索完成。
检索过程的输入为GCC抽象语法树文本数据流ASTtest和GCC AST关键词Trie树,输出为优化冗余后的GCC抽象语法树文本ASTnew。
消除GCC抽象语法树冗余的原则是在进行检测关键词的过程中,如果一个节点的描述信息中包含多个关键词,例如同时包含有源文件(源文件名text1.c)节点信息关键字‘srcp:test1.c.*’和包含函数调用语句节点信息关键字‘call_expr’时,按照最大匹配的原则进行查找,这样消除冗余后的GCC抽象语法树文本更加纯净,数据更加完整。消除GCC抽象语法树冗余算法实现了数据的分流,根据抽象语法树文本不包含中文字符以及抽象语法树文件根据节点编号连续且升序排列存储等特性设计出更加适合关键词Trie树算法的使用,简化了匹配查询复杂度,提高了检索效率。
有益效果:
本发明通过创建了一个有用信息的关键词词库(通用库),它包含源程序所有的有用信息节点的前缀或者后缀;利用创建的关键词词库构建基于有用信息关键词的Trie树算法,将GCC抽象语法树进行冗余消除。构建Trie树算法的输入是关键词的词库,从关键词的数据库中读取关键词,然后将读取的每个关键词添加到关键词Trie树中,为了提高关键词信息检索时的查找效率,在构建决策树时将有用节点关键词的第一个关键字母按照英文字母表进行排列。这样在检索到相同前缀关键词时仅需存储在相同的前驱节点,不仅能有效的减少存储节点利于降低空间复杂度,同时在对GCC抽象语法树文本(待处理文本)进行冗余优化时可以节省时间,提高优化效率。
附图说明
图1为本发明的基于有用信息关键词Trie树的消除GCC抽象语法树冗余的方法的流程图;
图2为本发明的以decl(声明节点后缀)为后缀关键词构造的声明节点Trie树;
图3为本发明的构建关键词Trie树的整体结构图;
图4为实施例1消除冗余前后节点数的对比图;
图5为实施例1(对应图中Tire)、对比例1(对应图中KMP1)及对比例2(对应图中KMP2)消除冗余所需时耗的对比图;
其中,图2中的“*”表示下方子节点字符串,包含有常量声明(CONST_DECL)、成员声明(FIELD_DECL)、函数声明(FUNCTION_DECL)、标号声明(LABEL_DECL)、变量声明(VAR_DECL)等。
具体实施方式
下面结合附图,对本发明的具体实施方式做进一步阐述。
实施例1
一种基于有用信息关键词Trie树的消除GCC抽象语法树冗余的方法,其步骤如图1所示:
(1)通过在centos6.8下版本为6.5.0的GCC编译器编译C语言源码文件即以C语言为编程语言编写的源码文件((美)Paul Deitel(保罗·戴特尔)Harvey Deitel(哈维·戴特尔).C语言大学教程第7版英文版上5个C语言源程序,5个源程序大小不一,长短不一)得到原始数据;
(2)对原始数据进行文本预处理,文本预处理是指采用数据处理软件PentahoKettle对原始数据进行数据清洗后根据GCC抽象语法树节点自上而下递增存储的逻辑结构基于节点的唯一标识符,将一个节点的数据存储为一个单元,一个节点的数据包括该节点的描述信息和子节点信息;
(3)利用有用节点信息关键词Trie树对步骤(2)得到的数据进行检索输出有效节点,再输出有效节点中的子节点信息,即完成GCC抽象语法树冗余的消除,有效节点为包含有效信息字段的节点;
具体检索步骤如下:
(3.1)初始化i=1,q=1,q用于记录进入分支的字符序列号;
(3.2)输入步骤(2)得到的数据中的一节点的描述字符信息asti,若i≥n,转步骤(3.7),否则将i的值赋值给q,j=1,获取asti的节点类型首字母S;
(3.3)查询关键词Trie树中节点类型首字母为S的子节点childj,并将其与asti进行匹配;
(3.4)若asti==childj,输出该条asti所在唯一标识行号@number及其节点信息至消除冗余后的GCC抽象语法树文本ASTnew;
(3.5)将输出的asti此节点描述字段中的子节点信息输出至ASTnew;
(3.6)若asti≠childj,查询下一节点是否为Null,若下一节点不为Null,则转至步骤(3.3);
(3.7)若下一节点为Null,则i=q+1;
此时:若i<n,转至步骤(3.2);
若i≥n,检索完成;
(3.8)检索完成;
有用节点信息关键词Trie树是依据有用节点关键词词库建立的,有用节点关键词词库是通过对基准文本库中的文本进行文本预处理后构造得到的,有用节点关键词词库包括GCC抽象语法树文本文件的编译产生的有效节点类型,有效节点类型包括包含固定的类型节点信息或节点描述信息包含源文件名称字符的关键词,固定的类型节点信息为‘call_expr’或‘real_cst’,源文件名称字符为‘srcp:源文件名’,基准文本库是基于当前的GCC抽象语法树文本文件大数据库建立的,按照当前某类型GCC抽象语法树文本文件的使用率选取文本,有用节点关键词词库中的关键词集合具体为:K={k1,k2,…ki,…kn},(1≤i≤n),n表示类型节点关键词的个数,ki表示第i个类型节点关键词;ki={ki1,ki2,…,kij,…,ki,m},(1≤j≤m),kij表示第i个类型节点关键词的第j个子节点关键词;其中m表示子节点个数;
有用节点信息关键词Trie树的建立如图3所示,具体以decl(声明节点后缀)为后缀关键词构造的声明节点Trie树如图2所示,具体步骤为:
(I)初始化检测信息:i=1,j=1,q=1,q记录子节点的序号,Ci=ROOT,Ci为正在检测的节点;
(II)若i≤n,获取类型节点关键词的首字母S;
(III)进入到S子节点树查询,将Kij与类型节点关键词首字母S的第q个子节点childq进行比较;
(IV)若Kij==childq,则j++;
此时:若j<m,S=childq,q=1,返回步骤(III);若j≥m,i++,当i≥n时,则有用节点信息关键词Trie树建立;
当i<n时,则返回步骤(II);
(V)若Kij≠childij,此时查询childq的下一节点是否为空值;
(VI)若childq下一节点为空,则创建新节点childq+1,并将Kij的值赋给childq+1,j++;
此时:若j<m则创建子节点,并赋值childij,j++;若j≥m,则初始化,i++,当i<n时,返回步骤(II);当i≥n时,有用节点信息关键词Trie树建立;
(VII)若childq的下一兄弟节点不为空,则q++,返回到步骤(II),处理下一个关键词;
(VIII)有用节点信息关键词Trie树建立。
本例消除冗余前后节点数的对比图如图4所示,可以看出本发明的方法能够有效消除GCC抽象语法树冗余。
对比例1
一种消除GCC抽象语法树冗余的方法,其采用文献1(李鑫,王甜甜,苏小红,马培军.消除GCC抽象语法树文本中冗余信息的算法研究[J].计算机科学,2008(10):170-172.)所记载的方法消除GCC抽象语法树冗余。
对比例2
一种消除GCC抽象语法树冗余的方法,其采用文献2(田冰川,孙珂,巢汉青.简化GCC抽象语法树的新型算法[J].计算机科学,2015,42(S1):516-518+530)所记载的方法消除GCC抽象语法树冗余。
实施例1、对比例1及对比例2消除冗余所需时耗的对比图如图5所示,对比可以发现,本发明的基于有用信息关键词Trie树的消除GCC抽象语法树冗余的方法相比于现有技术极大地提高了处理效率,极具应用前景。
经验证,本发明的基于有用信息关键词Trie树的消除GCC抽象语法树冗余的方法,处理过程简单,数据处理量小,处理速度快,同时能够有效避免冗余消除过程中出现常量、变量等有用信息节点的丢失,实现了去除冗余效率及查准率的极大提高,极具应用前景。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应该理解,这些仅是举例说明,在不违背本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改。
Claims (8)
1.基于关键词Trie树消除GCC抽象语法树冗余的方法,应用于电子设备,其特征在于,首先构造GCC抽象语法树文本文件的编译产生的有效节点类型以及与源文件相关的有用节点关键词词库,然后构建一棵基于有用信息关键词词库的Trie树算法,将有用节点关键词的第一个关键字母按照英文字母表进行排列,在检索到相同前缀关键词时仅需存储在相同的前驱节点,接着对已进行文本预处理的GCC抽象语法树文本即待处理文本进行有效信息关键词检索,将检索到包含有效信息字段的节点进行输出,最后将上一步输出的节点中子节点信息也输出,得到消除冗余后的GCC抽象语法树文本;
其步骤如下:
(1)通过GCC编译器编译源码文件得到原始数据;
(2)对原始数据进行文本预处理,所述文本预处理是指对原始数据进行数据清洗后根据GCC抽象语法树节点自上而下递增存储的逻辑结构将一个节点的数据存储为一个单元;
(3)利用有用节点信息关键词Trie树对步骤(2)得到的数据进行检索输出有效节点,再输出有效节点中的子节点信息,即完成GCC抽象语法树冗余的消除,所述有效节点为包含有效信息字段的节点;
所述有用节点信息关键词Trie树是依据有用节点关键词词库建立的,所述有用节点关键词词库是通过对基准文本库中的文本进行文本预处理后构造得到的,所述有用节点关键词词库包括GCC抽象语法树文本文件的编译产生的有效节点类型;所述基准文本库是基于当前的GCC抽象语法树文本文件大数据库建立的,按照当前某类型GCC抽象语法树文本文件的使用率选取文本。
2.根据权利要求1所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,所述源码文件为C语言源码文件即以C语言为编程语言编写的源码文件;
步骤(1)的编译环境为在centos6.8下版本为6.5.0的GCC编译器。
3.根据权利要求1所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,所述数据清洗是采用数据处理软件Pentaho Kettle进行的;
所述将一个节点的数据存储为一个单元是基于节点的唯一标识符进行的,所述一个节点的数据包括该节点的描述信息和子节点信息。
4.根据权利要求3所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,所述有效节点类型包括包含固定的类型节点信息或节点描述信息包含源文件名称字符的关键词。
5.根据权利要求4所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,所述固定的类型节点信息为以‘call_expr’或‘real_cst’为后缀的节点,所述源文件名称字符为‘srcp: 源文件名’。
6.根据权利要求1所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,所述有用节点关键词词库中的关键词集合具体为:
,/>表示类型节点关键词的个数,/>表示第/>个类型节点关键词;/>,表示第/>个类型节点关键词的第/>个子节点关键词;其中/>表示子节点个数。
7.根据权利要求6所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,所述有用节点信息关键词Trie树的建立步骤为:
(I)初始化检测信息:,/>记录子节点的序号,/>,/>为正在检测的节点;
(II)若,获取类型节点关键词的首字母/>;
(III)进入到子节点树查询,将/>与类型节点关键词首字母/>的第/>个子节点/>进行比较;
(IV)若,则/>;
此时:若,/>,/>,返回步骤(III);若/>,/>,当/>时,则有用节点信息关键词Trie树建立;
当时,则返回步骤(II);
(V)若,此时查询/>的下一节点是否为空值;
(VI)若下一节点为空,则创建新节点/>,并将/>的值赋给/>,;
此时:若则创建子节点,并赋值/>,/>;若/>,则初始化,/>,当时,返回步骤(II);当/>时,有用节点信息关键词Trie树建立;
(VII)若的下一兄弟节点不为空,则/>,返回到步骤(II),处理下一个关键词;
(VIII)有用节点信息关键词Trie树建立。
8.根据权利要求7所述的基于关键词Trie树消除GCC抽象语法树冗余的方法,其特征在于,利用有用节点信息关键词Trie树检索的具体步骤为:
(3.1)初始化用于记录进入分支的字符序列号;
(3.2)输入步骤(2)得到的数据中的一节点的描述字符信息,若/>,转步骤(3.7),否则将/>的值赋值给/>,/>,获取/>的节点类型首字母/>;
(3.3)查询关键词Trie树中节点类型首字母为的子节点/>,并将其与/>进行匹配;
(3.4)若,输出该条/>所在唯一标识行号/>及其节点信息至消除冗余后的GCC抽象语法树文本/>;
(3.5)将输出的此节点描述字段中的子节点信息输出至/>;
(3.6)若,查询下一节点是否为/>,若下一节点不为/>,则转至步骤(3.3);
(3.7)若下一节点为,则/>;
此时:若,转至步骤(3.2);
若,检索完成;
(3.8)检索完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911136042.7A CN110928550B (zh) | 2019-11-19 | 2019-11-19 | 基于关键词Trie树消除GCC抽象语法树冗余的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911136042.7A CN110928550B (zh) | 2019-11-19 | 2019-11-19 | 基于关键词Trie树消除GCC抽象语法树冗余的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928550A CN110928550A (zh) | 2020-03-27 |
CN110928550B true CN110928550B (zh) | 2023-11-24 |
Family
ID=69850395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911136042.7A Active CN110928550B (zh) | 2019-11-19 | 2019-11-19 | 基于关键词Trie树消除GCC抽象语法树冗余的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928550B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112650680B (zh) * | 2020-12-28 | 2024-08-09 | 南京航空航天大学 | 基于抽象语法树的冗余变量和冗余方法的检测方法及系统 |
CN112925522B (zh) | 2021-02-26 | 2023-11-21 | 北京百度网讯科技有限公司 | 依赖图生成方法、装置、设备、存储介质和程序产品 |
CN112925564B (zh) * | 2021-03-30 | 2024-03-05 | 中国工商银行股份有限公司 | 一种源代码的冗余导入类清理方法及装置 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007115266A (ja) * | 2006-11-27 | 2007-05-10 | Nec Corp | 言語解析装置及び方法並びに記録媒体 |
CN101908006A (zh) * | 2010-07-30 | 2010-12-08 | 北京理工大学 | 一种基于gcc抽象语法树的缓冲区溢出漏洞检测方法 |
CN103198133A (zh) * | 2013-04-12 | 2013-07-10 | 同方知网(北京)技术有限公司 | 一种将XPath查询转换为树形数据结构的查询优化方法 |
CN103530415A (zh) * | 2013-10-29 | 2014-01-22 | 谭永 | 一种兼容关键词搜索的自然语言搜索方法及系统 |
WO2014190901A1 (zh) * | 2013-05-28 | 2014-12-04 | 百度在线网络技术(北京)有限公司 | 语法编译方法、语义解析方法、装置、计算机存储介质和设备 |
CN106569896A (zh) * | 2016-10-25 | 2017-04-19 | 北京国电通网络技术有限公司 | 一种数据分发及并行处理方法和系统 |
CN107133027A (zh) * | 2017-03-30 | 2017-09-05 | 南京南瑞继保电气有限公司 | 一种语法树层次化表示方法 |
CN107480260A (zh) * | 2017-08-16 | 2017-12-15 | 北京奇虎科技有限公司 | 大数据实时分析方法、装置、计算设备及计算机存储介质 |
CN108920447A (zh) * | 2018-05-07 | 2018-11-30 | 国家计算机网络与信息安全管理中心 | 一种面向特定领域的中文事件抽取方法 |
CN109669698A (zh) * | 2018-11-09 | 2019-04-23 | 福州三鑫隆铸业有限公司 | 基于频繁模式挖掘的gcc编译时能耗演化优化方法及存储设备 |
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
CN110187885A (zh) * | 2019-06-10 | 2019-08-30 | 合肥本源量子计算科技有限责任公司 | 一种量子程序编译的中间代码生成方法及装置 |
CN110275709A (zh) * | 2018-03-15 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 针对动态语言的处理及优化方法、装置、设备及存储介质 |
CN110399133A (zh) * | 2019-06-25 | 2019-11-01 | 西北大学 | 一种基于前端字节码技术的JavaScript代码优化方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020037333A1 (en) * | 2000-08-07 | 2002-03-28 | Yaushi Arimoto | Novel hepatic disorder suppressant |
-
2019
- 2019-11-19 CN CN201911136042.7A patent/CN110928550B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007115266A (ja) * | 2006-11-27 | 2007-05-10 | Nec Corp | 言語解析装置及び方法並びに記録媒体 |
CN101908006A (zh) * | 2010-07-30 | 2010-12-08 | 北京理工大学 | 一种基于gcc抽象语法树的缓冲区溢出漏洞检测方法 |
CN103198133A (zh) * | 2013-04-12 | 2013-07-10 | 同方知网(北京)技术有限公司 | 一种将XPath查询转换为树形数据结构的查询优化方法 |
WO2014190901A1 (zh) * | 2013-05-28 | 2014-12-04 | 百度在线网络技术(北京)有限公司 | 语法编译方法、语义解析方法、装置、计算机存储介质和设备 |
CN103530415A (zh) * | 2013-10-29 | 2014-01-22 | 谭永 | 一种兼容关键词搜索的自然语言搜索方法及系统 |
CN106569896A (zh) * | 2016-10-25 | 2017-04-19 | 北京国电通网络技术有限公司 | 一种数据分发及并行处理方法和系统 |
CN107133027A (zh) * | 2017-03-30 | 2017-09-05 | 南京南瑞继保电气有限公司 | 一种语法树层次化表示方法 |
CN107480260A (zh) * | 2017-08-16 | 2017-12-15 | 北京奇虎科技有限公司 | 大数据实时分析方法、装置、计算设备及计算机存储介质 |
CN110275709A (zh) * | 2018-03-15 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 针对动态语言的处理及优化方法、装置、设备及存储介质 |
CN108920447A (zh) * | 2018-05-07 | 2018-11-30 | 国家计算机网络与信息安全管理中心 | 一种面向特定领域的中文事件抽取方法 |
CN109669698A (zh) * | 2018-11-09 | 2019-04-23 | 福州三鑫隆铸业有限公司 | 基于频繁模式挖掘的gcc编译时能耗演化优化方法及存储设备 |
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
CN110187885A (zh) * | 2019-06-10 | 2019-08-30 | 合肥本源量子计算科技有限责任公司 | 一种量子程序编译的中间代码生成方法及装置 |
CN110399133A (zh) * | 2019-06-25 | 2019-11-01 | 西北大学 | 一种基于前端字节码技术的JavaScript代码优化方法 |
Non-Patent Citations (2)
Title |
---|
田冰川等.简化GCC抽象语法树的新型算法.《计算机科学》.2015,第42卷(第6A期),第516-519页. * |
简化GNU编译器套件抽象语法树的算法研究;高峰等;《上海师范大学学报(自然科学版)》;第47卷(第4期);第479-482页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110928550A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hu et al. | Improved lexically constrained decoding for translation and monolingual rewriting | |
CN110928550B (zh) | 基于关键词Trie树消除GCC抽象语法树冗余的方法 | |
US8745077B2 (en) | Searching and matching of data | |
US8239188B2 (en) | Example based translation apparatus, translation method, and translation program | |
CN111444330A (zh) | 提取短文本关键词的方法、装置、设备及存储介质 | |
US20050209844A1 (en) | Systems and methods for translating chinese pinyin to chinese characters | |
KR20100135757A (ko) | 언어-내 통계적 머신 번역 | |
JPH08194719A (ja) | 検索装置および辞書/テキスト検索方法 | |
CN102662935A (zh) | 一种交互式的机器翻译方法和机器翻译系统 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
Perez-Cortes et al. | Stochastic error-correcting parsing for OCR post-processing | |
CN114817298A (zh) | 字段级数据血缘提取方法、装置、设备及存储介质 | |
CN111178076A (zh) | 命名实体识别与链接方法、装置、设备及可读存储介质 | |
CN113076748A (zh) | 弹幕敏感词的处理方法、装置、设备及存储介质 | |
CN103729343A (zh) | 基于百科链接共现的语义消岐方法 | |
CN101470701A (zh) | 支持基于有限状态机的语义规则的文本分析器及其方法 | |
Lee et al. | Character-level feature extraction with densely connected networks | |
CN112651226B (zh) | 基于依存句法树的知识解析系统及方法 | |
CN117573096A (zh) | 一种融合抽象语法树结构信息的智能代码补全方法 | |
CN113032371A (zh) | 数据库语法分析方法、装置和计算机设备 | |
CN115796194A (zh) | 一种基于机器学习的英语翻译系统 | |
US20220004708A1 (en) | Methods and apparatus to improve disambiguation and interpretation in automated text analysis using structured language space and transducers applied on automatons | |
JP2001137788A (ja) | 地名表記辞書作成方法および地名表記辞書作成装置 | |
CN115629800A (zh) | 一种基于多模态的代码摘要生成方法与系统 | |
CN102147796B (zh) | 一种词汇检索方法及其装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |