The invention discloses a method and a device for detecting variables in a language. Among them, the method includes: acquiring the target scripting language source code of the target variable; dependent variables including target acquisition, dependence is used to represent the relationship between the target variables defined in the variables and use variables; according to the dependency, target sentence belong to target variables for the slice analysis, get the target condition. The target variables which target conditions are used to constrain the target variable is unassigned variables; when the results meet the target conditions on the target variables, determine the target variables for uninitialized variables. The invention solves the technical problem that the variable detection efficiency of the language in the relevant technology is low.
【技术实现步骤摘要】
语言的变量检测方法和装置
本专利技术涉及计算机领域,具体而言,涉及一种语言的变量检测方法和装置。
技术介绍
在现有的语言变量检测技术中,采用对C语言变量的未初始化使用进行检测的技术方案,可以利用符号表、抽象语法树、控制流程图等分析未初始化变量。其中,符号表是一种用于语言翻译器中的数据结构。在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如,数据类型,作用域以及内存地址等。抽象语法树所对应的树状结构,控制流程图为以图形的方式表达在问题中信息的变换和传递过程,为数据流联系的各种概念的组合,用分解及抽象手段来控制需求分析的复杂性,采用分层的数据流程图来表示一个复杂的系统。现有技术支持C语言的变量未初始化使用检测,但不支持脚本语言的变量未初始化使用检测,同时也没有考虑条件的满足性,容易报错,导致检测误报率很高,因而语言检测的准确率低,进而导致语言的变量检测效率低下。另外,在脚本语言的使用过程中,经常出现的典型错误是脚本语言的变量的未初始化使用。由于变量的未初始化使用只有在运行时发生崩溃才会发现这个错误,而对于游戏中使用大量脚本语言代码的情况,靠运行来修改错误,显然非常耗时,降低了语言的变量检测效率。针对上述的语言的变量检测效率低下的问题,目前尚未提出有效的解决方案。
技术实现思路
本专利技术实施例提供了一种语言的变量检测方法和装置,以至少解决相关技术中语言的变量检测效率低下的技术问题。根据本专利技术实施例的一个方面,提供了一种语言的变量检测方法。该语言的变量检测方法包括:获取脚本语言的目标源代码中的目标变量;获取目标变量的依赖关系,其中,依赖关 ...
【技术保护点】
一种语言的变量检测方法,其特征在于,包括:获取脚本语言的目标源代码中的目标变量;获取所述目标变量的依赖关系,其中,所述依赖关系用于表示所述目标变量中的定义变量与使用变量之间的关系;根据所述依赖关系,对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件,其中,所述目标条件用于约束所述目标变量为未赋值变量;当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为未初始化变量。
【技术特征摘要】
1.一种语言的变量检测方法,其特征在于,包括:获取脚本语言的目标源代码中的目标变量;获取所述目标变量的依赖关系,其中,所述依赖关系用于表示所述目标变量中的定义变量与使用变量之间的关系;根据所述依赖关系,对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件,其中,所述目标条件用于约束所述目标变量为未赋值变量;当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为未初始化变量。2.根据权利要求1所述的方法,其特征在于,获取所述脚本语言的目标源代码中的目标变量包括:构造所述脚本语言的所述目标源代码的抽象语法树,其中,所述抽象语法树上的每个节点与所述目标源代码中的每条语句相对应;遍历所述抽象语法树,得到所述每条语句中的定义变量和使用变量,其中,所述目标变量包括所述定义变量和所述使用变量。3.根据权利要求2所述的方法,其特征在于,在获取所述目标变量的依赖关系之后,所述方法还包括:将所述目标源代码中的语句确定为多个目标节点;通过所述依赖关系连接所述多个目标节点,得到值依赖图,其中,所述多个目标节点的变量包括:所述定义变量和所述使用变量;根据所述依赖关系,对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件包括:对所述值依赖图上的所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件。4.根据权利要求3所述的方法,其特征在于,对所述值依赖图上的所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件包括:查找所述值依赖图上的所有所述目标变量的声明点;从所述声明点开始执行后向切片操作,得到所述目标变量所属的目标语句,其中,所述值依赖图上与所述目标语句对应的节点为与所述目标变量的值有关的使用点;在所述值依赖图上确定由所述声明点到所述使用点的目标路径,其中,所述目标路径不包括所述目标源代码中已经对所述目标变量赋值过的语句;计算所述目标路径上的所述目标条件。5.根据权利要求1所述的方法,其特征在于,对所述目标变量所属的所述目标语句进行切片分析,得到所述目标变量的目标条件包括:获取所述目标变量所属的第一目标语句,其中,所述第一目标语句包括所述目标变量的第一赋值条件;确定与所述第一赋值条件相反的赋值条件为第一目标条件;获取所述目标变量所属的第二目标语句,其中,所述第二目标语句包括所述目标变量的第二赋值条件;确定与所述第二赋值条件相反的赋值条件为第二目标条件;确定用于在所述第一目标条件下且在所述第二目标条件下对所述目标变量执行与逻辑运算的条件为所述目标条件;其中,当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为所述未初始化变量包括:当对所述目标变量求解出满足所述第一目标条件且满足所述第二目标条件的求解结果时,确定所述目标变量为所述未初始化变量。6.根据权利要求1所述的方法,其特征在于,对所述目标变量所属的所述目标语句进行切片分析,得到所述目标变量的目标条件包括:获取第一目标变量所属的第一目标语句,其中,所述第一目标语句包括所述第一目标变量的第一赋值条件;确定与所述第一赋值条件相反的赋值条件为第一目标条件;获取第一目标变量所属的第二目标语句,其中,所述第二目标语句包括所述第一目标变量的第二赋值条件,所述第二赋值条件由所述第一赋值条件对应的第二目标变量确定;确定与所述第二赋值条件相反的赋值条件为第二目标条件;确定用于在所述第一目标条件下且在所述第二目标条件下对所述第一目标变量执行与逻辑运算的条件为第三目标条件;确定所述第二赋值条件的第四目标条件,其中,所述第四目标条件为所述第二目标变量的取值条件;确定用于在所述第三目标条件下且在所述第四目标条件下对所述第一目标变量执行与逻辑运算的条件为所述目标条件;其中,当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为所述未初始化变量包括:当对所述目标变量求解出满足所述第三目标条件且满足所述第四目标条件的求解结果时,确定所述目标变量为所述未初始化变量。7.根据权利要求1至6中任意一项所述的方法,其特征在于,在对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件之后,所述方法还包括:当未对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为初始化变量。8.一种语言的变量检测装置,其特征在于,...
【专利技术属性】
技术研发人员:王杰,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。