语言的变量检测方法和装置制造方法及图纸

技术编号:16216224 阅读:36 留言:0更新日期:2017-09-15 22:23
本发明专利技术公开了一种语言的变量检测方法和装置。其中,该方法包括:获取脚本语言的目标源代码中的目标变量;获取目标变量的依赖关系,其中,依赖关系用于表示目标变量中的定义变量与使用变量之间的关系;根据依赖关系,对目标变量所属的目标语句进行切片分析,得到目标变量的目标条件,其中,目标条件用于约束目标变量为未赋值变量;当对目标变量求解出满足目标条件的求解结果时,确定目标变量为未初始化变量。本发明专利技术解决了相关技术中语言的变量检测效率低下的技术问题。

Method and apparatus for variable detection of language

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是根据本专利技术实施例的一种语言的变量检测方法的流程图;图3是根据本专利技术实施例的一种获取脚本语言的目标源代码中的目标变量方法的流程图;图4是根据本专利技术实施例的一种对值依赖图上的目标变量所属的目标语句进行切片分析的方法的流程图;图5是根据本专利技术实施例的一种对目标变量所属的目标语句进行切片分析的方法的流程图;图6是根据本专利技术实施例的一种对目标变量所属的目标语句进行切片分析的方法的流程图;图7是根据本专利技术实施例的另一种语言的变量检测方法的流程图;图8是根据本专利技术实施例的一种VDG的示意图;图9是根据本专利技术实施例的另一种VDG的示意图;图10是根据本专利技术实施例的另一种VDG的示意图;图11是根据本专利技术实施例的一种语言的变量检测装置的示意图;图12是根据本专利技术实施例的另一种语言的变量检测装置的示意图;图13是根据本专利技术实施例的另一种语言的变量检测装置的示意图;图14是根据本专利技术实施例的另一种语言的变量检测装置的示意图;图15是根据本专利技术实施例的另一种语言的变量检测装置的示意图;图16是根据本专利技术实施例的另一种语言的变量检测装置的示意图;以及图17是根据本专利技术实施例的一种终端的结构框图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分的实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。需要说明的是,本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本专利技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。实施例1根据本专利技术实施例,提供了一种语言的变量检测方法的实施例。可选地,在本实施例中,上述语言的变量检测方法可以应用于如图1所示的由服务器102和终端104所构成的硬件环境中。图1是根据本专利技术实施例的语言的变量检测方法的硬件环境的示意图。如图1所示,服务器102通过网络与终端104进行连接,上述网络包括但不限于:广域网、城域网或局域网,终端104并不限定于PC、手机、平板电脑等。本专利技术实施例的语言的变量检测方法可以由服务器102来执行,也可以由终端104来执行,还可以是由服务器102和终端104共同执行。其中,终端104执行本专利技术实施例的语言的变量检测方法也可以是由安装在其上的客户端来执行。图2是根据本专利技术实施例的一种语言的变量检测方法的流程图。如图2所示,该方法可以包括以下步骤:步骤S202,获取脚本语言的目标源代码中的目标变量。在本申请上述步骤S202提供的技术方案中,获取脚本语言的目标源代码中的目标变量。该实施例的脚本语言可以为lua脚本语言,lua脚本语言为一个小巧的脚本语言,主要是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能,由于lua支持热加载,游戏中后台可以采用lua作为脚本语言。获取脚本语言的目标源代码,该目标源代码具有源程序中的语句,以及每条语句中的定义变量和使用变量。获取目标源代码中的目标变量,该目标变量包括定义变量和使用变量。步骤S204,获取目标变量的依赖关系。在本申请上述步骤S204提供的技术方案中,获取目标变量的依赖关系,其中,依赖关系用于表示目标变量中的定本文档来自技高网
...
语言的变量检测方法和装置

【技术保护点】
一种语言的变量检测方法,其特征在于,包括:获取脚本语言的目标源代码中的目标变量;获取所述目标变量的依赖关系,其中,所述依赖关系用于表示所述目标变量中的定义变量与使用变量之间的关系;根据所述依赖关系,对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件,其中,所述目标条件用于约束所述目标变量为未赋值变量;当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为未初始化变量。

【技术特征摘要】
1.一种语言的变量检测方法,其特征在于,包括:获取脚本语言的目标源代码中的目标变量;获取所述目标变量的依赖关系,其中,所述依赖关系用于表示所述目标变量中的定义变量与使用变量之间的关系;根据所述依赖关系,对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件,其中,所述目标条件用于约束所述目标变量为未赋值变量;当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为未初始化变量。2.根据权利要求1所述的方法,其特征在于,获取所述脚本语言的目标源代码中的目标变量包括:构造所述脚本语言的所述目标源代码的抽象语法树,其中,所述抽象语法树上的每个节点与所述目标源代码中的每条语句相对应;遍历所述抽象语法树,得到所述每条语句中的定义变量和使用变量,其中,所述目标变量包括所述定义变量和所述使用变量。3.根据权利要求2所述的方法,其特征在于,在获取所述目标变量的依赖关系之后,所述方法还包括:将所述目标源代码中的语句确定为多个目标节点;通过所述依赖关系连接所述多个目标节点,得到值依赖图,其中,所述多个目标节点的变量包括:所述定义变量和所述使用变量;根据所述依赖关系,对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件包括:对所述值依赖图上的所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件。4.根据权利要求3所述的方法,其特征在于,对所述值依赖图上的所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件包括:查找所述值依赖图上的所有所述目标变量的声明点;从所述声明点开始执行后向切片操作,得到所述目标变量所属的目标语句,其中,所述值依赖图上与所述目标语句对应的节点为与所述目标变量的值有关的使用点;在所述值依赖图上确定由所述声明点到所述使用点的目标路径,其中,所述目标路径不包括所述目标源代码中已经对所述目标变量赋值过的语句;计算所述目标路径上的所述目标条件。5.根据权利要求1所述的方法,其特征在于,对所述目标变量所属的所述目标语句进行切片分析,得到所述目标变量的目标条件包括:获取所述目标变量所属的第一目标语句,其中,所述第一目标语句包括所述目标变量的第一赋值条件;确定与所述第一赋值条件相反的赋值条件为第一目标条件;获取所述目标变量所属的第二目标语句,其中,所述第二目标语句包括所述目标变量的第二赋值条件;确定与所述第二赋值条件相反的赋值条件为第二目标条件;确定用于在所述第一目标条件下且在所述第二目标条件下对所述目标变量执行与逻辑运算的条件为所述目标条件;其中,当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为所述未初始化变量包括:当对所述目标变量求解出满足所述第一目标条件且满足所述第二目标条件的求解结果时,确定所述目标变量为所述未初始化变量。6.根据权利要求1所述的方法,其特征在于,对所述目标变量所属的所述目标语句进行切片分析,得到所述目标变量的目标条件包括:获取第一目标变量所属的第一目标语句,其中,所述第一目标语句包括所述第一目标变量的第一赋值条件;确定与所述第一赋值条件相反的赋值条件为第一目标条件;获取第一目标变量所属的第二目标语句,其中,所述第二目标语句包括所述第一目标变量的第二赋值条件,所述第二赋值条件由所述第一赋值条件对应的第二目标变量确定;确定与所述第二赋值条件相反的赋值条件为第二目标条件;确定用于在所述第一目标条件下且在所述第二目标条件下对所述第一目标变量执行与逻辑运算的条件为第三目标条件;确定所述第二赋值条件的第四目标条件,其中,所述第四目标条件为所述第二目标变量的取值条件;确定用于在所述第三目标条件下且在所述第四目标条件下对所述第一目标变量执行与逻辑运算的条件为所述目标条件;其中,当对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为所述未初始化变量包括:当对所述目标变量求解出满足所述第三目标条件且满足所述第四目标条件的求解结果时,确定所述目标变量为所述未初始化变量。7.根据权利要求1至6中任意一项所述的方法,其特征在于,在对所述目标变量所属的目标语句进行切片分析,得到所述目标变量的目标条件之后,所述方法还包括:当未对所述目标变量求解出满足所述目标条件的求解结果时,确定所述目标变量为初始化变量。8.一种语言的变量检测装置,其特征在于,...

【专利技术属性】
技术研发人员:王杰
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1