[发明专利]一种资源流图的构建方法有效
申请号: | 202010741701.6 | 申请日: | 2020-07-29 |
公开(公告)号: | CN111857811B | 公开(公告)日: | 2023-09-22 |
发明(设计)人: | 欧鹏程 | 申请(专利权)人: | 湖南泛联新安信息科技有限公司 |
主分类号: | G06F8/74 | 分类号: | G06F8/74 |
代理公司: | 长沙市护航专利代理事务所(特殊普通合伙) 43220 | 代理人: | 莫晓齐 |
地址: | 410000 湖南省长沙市开福区伍家*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 资源 构建 方法 | ||
本发明公开了一种资源流图的构建方法,包括以下步骤:S100、将源代码文件通过转换器生成相应的抽象语法树;S200、对每个方法中需要分析的变量和语句分别定义,其中,变量定义为未赋值变量、赋值变量和参数变量;S300、遍历所有的抽象语法树,并找到抽象语法树中的每一个方法,建立一个以它的名称和参数类型为主键值的索引;S400、对于方法内的每一个参数变量进行处理;S500、对于方法内的所有赋值变量进行处理;S600、对于方法内的所有未赋值变量进行处理。本发明的资源流图构建不需要通过生成大量中间的结果,可通过语法树直接生成,并且能够通过该资源流图分析数据的流向,节省了大量的时间和空间。
技术领域
本发明属于计算机技术领域,具体涉及一种资源流图的构建方法。
背景技术
在静态分析领域,通常我们对程序分析的步骤都是先对代码进行解析生成相应的语法树,然后将语法树再生成中间代码表示,通过中间代码来生成基本块,再在基本块的基础上构建控制流图。通过控制流图构造出数据流图。大部分构建的控制流图主要是为之后生成数据流图做准备。这种构建方式生成了很多中间的结果,而这些中间结果在后续的分析中并不重要,这浪费了大量的储存空间和计算资源。
发明内容
本发明的目的在于避免现有技术中的不足而提供一种资源流图的构建方法,其构建不需要通过生成大量中间的结果,可通过语法树直接生成,并且能够通过该资源流图分析数据的流向,节省了大量的时间和空间。
本发明的目的通过以下技术方案实现:提供一种资源流图的构建方法,包括以下步骤:
S100、将源代码文件通过转换器生成相应的抽象语法树;
S200、对每个方法中需要分析的变量和语句分别定义,其中,变量定义为未赋值变量、赋值变量和参数变量;
S300、遍历所有的抽象语法树,并找到抽象语法树中的每一个方法,建立一个以它的名称和参数类型为主键值的索引;
S400、对于方法内的每一个参数变量进行处理;
S500、对于方法内的所有赋值变量进行处理;
S600、对于方法内的所有未赋值变量进行处理。
作为进一步的改进,所述步骤S200中未赋值变量为只初始化了但是未赋值的变量,参数变量为方法的入参且不包括基本类型的变量,赋值变量为在方法内声明了并初始化的变量。
作为进一步的改进,每个方法中需要分析的语句定义为跳转、返回值、If分支、try块、结束和其他普通语句六种类型,其中,跳转类型为在try语句中会抛出异常的语句,返回值类型为含有return的语句,If分支类型为语句if块的入口点,try块类型为try块的入口点,结束类型为方法结束的位置。
作为进一步的改进,所述步骤S400具体包括以下过程:
S401、判断方法内的参数变量的类型是否为基本类型,若是,则返回步骤S200,反之,则进入步骤S402;
S402、对方法中的参数变量相关所有语句进行遍历。
作为进一步的改进,所述步骤S402中参数变量相关所有语句进行遍历时,语句类型判断的具体表现为:
A)判断是否为返回值类型,如果为返回值类型,则把该语句的类型设置为返回值后返回步骤S402;
B)判断是否为try块类型,如果为try块,则对于try块中的语句逐一分析后返回步骤S402;
C)判断是否为If分支类型,如果为if分支类型,首先,判断if分支的表达式,是否与分析的参数有关;其次,对于if里的then块语句分析后返回步骤S402;再次,对于if里的else块语句分析后返回步骤S402;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于湖南泛联新安信息科技有限公司,未经湖南泛联新安信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010741701.6/2.html,转载请声明来源钻瓜专利网。