一种基于操作链接的抽象语法树取词方法与流程

文档序号:20680729发布日期:2020-05-08 18:22阅读:181来源:国知局
一种基于操作链接的抽象语法树取词方法与流程

本发明实施例涉及及其语言处理技术领域,具体涉及一种基于操作链接的抽象语法树取词方法。



背景技术:

自上世纪40年代现代数字计算机发明以来,人类创造了数量繁多的程序语言,以及使用不同程序语言编写的代码。在实践中,需要对这些程序进行分析,比如发现隐藏的恶意代码,比如软件版权保护,再比如软件家族溯源……显然,这项工作是浩大而艰难的。一个自然的想法是使用一些自动化的手段来帮助人工实施分析。

近年来,自然语言处理(naturallanguageprocessing,nlp)是人工智能应用的一个热点,在应用的过程中产生了很多基础技术,比如n-gram。随着人工智能技术向相关领域渗透和扩展,一些技术也在不同的领域中取得了新的发展。计算机程序语言来自人类的自然语言,但又有很多不同。使用传统的n-grams的一个问题是计算机程序语句的前后次序关系和人类的自然语言有些差别。



技术实现要素:

为此,本发明实施例提供一种基于操作链接的抽象语法树取词方法,以解决现有指令码取词方式单一,不能体现程序语言内在含义的问题。

为了实现上述目的,本发明实施例提供如下技术方案:

本发明实施例公开了一种基于操作链接的抽象语法树取词方法,所述取词方法为:

利用编译器将计算机程序处理为抽象语法树,在抽象语法树的基础上进行取词;

抽象语法树构建完成后,对抽象语法树进行处理,删除出现频率大的没有区分价值的节点,去除干扰冗余;

利用变量连接将抽象语法树进行合并,删除作为连接点的变量节点;

得到最终唯一的抽象语法树,从树根到树叶按照预设规则进行取词

进一步地,所述编译器处理流程为:对计算机程序进行词法分析,词法分析结束后进行语法分析,语法分析后生成抽象语法树。

进一步地,所述抽象语法树包括但不限于赋值操作、函数调用操作、和动态调用操作,赋值操作包括变量和函数调用两个叶节点,函数调用下设有函数名叶节点和参数类型叶节点,参数类型下设参数值叶节点,动态调用包括变量和调用参数两个叶节点,调用参数下设有变量和参数类型两个叶节点。

进一步地,所述抽象语法树进行关联处理,删除变量节点,用具体的函数名替代函数调用节点,删除具体的参数类型节点下的叶节点,用变量名替代赋值操作节点,通过变量名建立抽象语法树之间的连接。

进一步地,利用抽象语法树之间的变量连接进行合并,合并后删除作为连接节点的变量节点,得到转化后唯一的抽象语法树。

进一步地,在抽象语法树上进行取词操作,取词的顺序为从树根到树叶,不同子树之间不交叉。

进一步地,所述取词方法为利用n-grams取词操作进行取词,所述n-grams取词操作为:从链接指令数的树根开始向下遍历,忽略叶子节点,其中n为取n个词。

进一步地,所述抽象语法树在取词过程根据预设的取词规则进行取词,取词完成后输出取词结果。

本发明实施例具有如下优点:

本发明实施例公开了一种基于操作链接的抽象语法树取词方法,利用编译器将计算机程序处理为抽象语法树,对抽象语法树进行处理,将符合逻辑联系的节点进行关联,去除干扰冗余和区别效果不好的节点,并利用变量的内在逻辑联系将抽象语法树进行合并,合并完成后进行取词。借助抽象语法树的树状结构,重构了语句的顺序,使其取出的词组更加贴合程序的本质逻辑,实现程序识别准确率的提高。

附图说明

为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。

本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。

图1为本发明实施例提供的一种基于操作链接的抽象语法树取词方法的流程图;

图2为本发明实施例提供的一种基于操作链接的抽象语法树取词方法的抽象语法树示意图;

图3为本发明实施例提供的一种基于操作链接的抽象语法树取词方法的抽象语法树连接示意图;

图4为本发明实施例提供的一种基于操作链接的抽象语法树取词方法的合并结果示意图。

具体实施方式

以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

参考图1,本实施例公开了一种基于操作链接的抽象语法树取词方法,所述取词方法为:

利用编译器将计算机程序处理为抽象语法树(abstractsyntaxtree,ast),在抽象语法树的基础上进行取词;

抽象语法树构建完成后,对抽象语法树进行处理,删除出现频率大的没有区分价值的节点,去除干扰冗余;

利用变量连接将抽象语法树进行合并,删除作为连接点的变量节点;

得到最终唯一的抽象语法树,从树根到树叶按照预设规则进行取词。

编译器处理流程为:对计算机程序进行词法分析,词法分析结束后进行语法分析,语法分析后生成抽象语法树。

本实施例以具体程序为例对取词方法进行说明,程序为:

$x=base64_decode(“yxnzzxj0”);

$x($_post[‘c’]);

将计算机程序通过编译器转化为抽象语法树的形式,参考图2,生成两个抽象语法树,抽象语法树包括但不限于赋值操作、函数调用操作、和动态调用操作,赋值操作为assign,赋值操作包括变量var和函数调用func_call两个叶节点,函数调用下设有函数名base64_decode叶节点和参数类型string节点,参数类型下设参数值叶节点“yxnzzxj0”,动态调用为dynamic_call,动态调用包括变量var和调用参数array_value两个叶节点,调用参数下设有变量var和参数类型string两个叶节点。

对抽象语法树进行关联处理,删除变量节点var,用具体的函数名替代函数调用func_call节点,删除具体的参数类型节点下的叶节点,用变量名替代赋值操作assign节点,通过变量名建立抽象语法树之间的连接,得到图3。

参考图4,将相关联程序利用$进行连接,使两个抽象语法树进行合并,合并后删除作为连接节点的变量节点,得到转化后唯一的抽象语法树。利用n-grams取词操作进行取词,以2-grams为例,得到dynamic_callbase64_decode”、“base64_decodestring”、“dynamic_callarray_value”、“array_value$_post”、“array_valuestring”,更加符合计算机程序的逻辑顺序。取词完成后,对取词结果进行输出。

本发明实施例公开的一种基于操作链接的抽象语法树取词方法利用编译器将计算机程序处理为抽象语法树,对抽象语法树进行处理,将符合逻辑联系的节点进行关联,去除干扰冗余和区别效果不好的节点,并利用变量的内在逻辑联系将抽象语法树进行合并,合并完成后进行取词。借助抽象语法树的树状结构,重构了语句的顺序,使其取出的词组更加贴合程序的本质逻辑,实现程序识别准确率的提高。

虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1