CN108984843B - 一种基于守卫计算的区间信息分析方法 - Google Patents
一种基于守卫计算的区间信息分析方法 Download PDFInfo
- Publication number
- CN108984843B CN108984843B CN201810634710.8A CN201810634710A CN108984843B CN 108984843 B CN108984843 B CN 108984843B CN 201810634710 A CN201810634710 A CN 201810634710A CN 108984843 B CN108984843 B CN 108984843B
- Authority
- CN
- China
- Prior art keywords
- node
- interval information
- condition
- condition judgment
- predecessor
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供一种基于守卫计算的区间信息分析方法,包括:S1,对于值依赖图中任一结点,根据该结点与该结点的任一前驱结点间的守卫条件获取守卫条件对应的条件判断结点;S2,根据条件判断结点的前驱结点的区间信息,计算条件判断结点的区间信息,进一步确认条件判断结点的属性;属性为假、真和可满足中的一种;S3,根据条件判断结点的属性,确认条件判断结点对应的守卫条件的区间信息;S4,根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,获取该结点的区间信息。本发明提供的方法,补偿了值依赖图缺少控制流信息的不足,提高了分析精度。
Description
技术领域
本发明涉及值依赖图技术领域,尤其涉及一种基于守卫计算的区间信息分析方法。
背景技术
值依赖图(Value Dependence Graph)是一种有向图,可表示为VDG=(N,N_s,E,E_i)。其中,N为结点集,每个结点对应程序中的一条语句,N_s为选择语句结点集,包含分支选择语句以及循环选择语句,边集E={<n1,ns1,…,nsi,n2>|n1,n2∈N,ns1,nsi∈N_s,n1为n2在值依赖源点,ns为可选结点即n1可以直接到达n2}。上述值依赖图是对流值图的一种扩展。
值依赖图本身是通过定值使用分析和数据流分析等构造的反应变量之间守卫条件的图,所有可能影响当前结点值域范围的结点都是当前结点的前驱结点,并且每个前驱结点到当前结点都有相应的逻辑条件进行约束。
目前,基于值依赖图的传统区间分析方法,由于值依赖图缺少控制流信息,对于前驱结点到当前结点的逻辑条件,仅考虑逻辑条件自身中变量之间的约束关系,而忽略了逻辑条件自身的区间信息,导致了分析精度的缺失。
发明内容
本发明为解决现有技术中存在的基于值依赖图的区间分析忽略逻辑条件的区间信息导致的分析精度缺失问题,提供了一种基于守卫计算的区间信息分析方法。
一方面,本发明提出一种区间信息分析方法,包括:S1,对于值依赖图中任一结点,根据该结点与该结点的任一前驱结点间的守卫条件获取所述守卫条件对应的条件判断结点;S2,根据所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息,确认所述条件判断结点的属性;所述属性为假、真和可满足中的一种;S3,根据所述条件判断结点的属性,确认所述条件判断结点对应的守卫条件的区间信息;S4,根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,获取该结点的区间信息。
优选地,所述步骤S2进一步包括:取所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息的交集;若所述交集为空集,则将所述条件判断结点的属性设置为假;若所述交集不为空集,且所述条件判断结点的前驱结点的区间信息属于所述条件判断结点的区间信息,则将所述条件判断结点的属性设置为真;否则,将所述条件判断结点的属性设置为可满足。
优选地,所述步骤S3进一步包括:若所述条件判断结点的属性为假,则所述条件判断结点对应的守卫条件的区间信息为空集;若所述条件判断结点的属性为真,则所述条件判断结点对应的守卫条件的区间信息为全集;若所述条件判断结点的属性为可满足,则所述条件判断结点对应的守卫条件的区间信息为所述交集。
优选地,所述步骤S4进一步包括:根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,应用下式获取流入该结点的区间信息:
式中,inMap(vnode)为流入该结点的区间信息,outMap[i]为该结点的第i个前驱结点的区间信息,guardMap[i]为该结点与该结点的第i个前驱结点间的守卫条件的区间信息,n为该结点的前驱结点数;根据所述流入该结点的区间信息,获取该结点的区间信息。
优选地,所述根据所述流入该结点的区间信息,获取该结点的区间信息,进一步包括:若所述流入该结点的区间信息为空集,则该结点的区间信息为空集;否则,若该结点的前驱结点中包括该结点,则根据所述流入该结点的区间信息和该结点的类型,获取该结点循环前信息,应用所述循环前信息和自循环的守卫条件获取该结点的区间信息;若该结点的前驱结点不包括该结点,则基于所述流入该结点的区间信息和该结点的类型获取该结点的区间信息。
优选地,该结点的类型为赋值结点、函数调用结点、函数入口结点、条件判断结点或返回语句结点。
优选地,若该结点为赋值结点,则根据所述流入该结点的区间信息模拟计算,获取该结点的区间信息;若该结点为函数调用结点,则根据所述流入该结点的区间信息获取该结点中的函数调用的参数的区间信息,将所述参数的区间信息作为该结点的区间信息;若该结点为函数入口结点,且函数调用为变量,则从所述流入该结点的区间信息中提取所述变量的区间信息,并将所述变量的区间信息作为该结点的区间信息;若该结点为函数入口结点,且函数调用为常量,则将该常量的区间信息作为该结点的区间信息;若该结点为条件判断结点或返回语句结点,则该结点的区间信息为所述流入该结点的区间信息。
优选地,任一结点的区间信息如下式所示:
outMap={<var,isLeft,VRI>}
式中,outMap为结点的区间信息,var为变量,isLeft为true或false,true和false分别用于表示变量var位于所述结点对应的语句中等号的左边和右边,VRI为变量var对应的值域信息。
优选地,所述流入该结点的区间信息如下式所示:
inMap={<var,VRI>}
式中,inMap为流入该结点的区间信息,var为变量,VRI为变量var对应的值域信息。
本发明提供的一种基于守卫计算的区间信息分析方法,将条件判断结点的属性反馈给对应的守卫条件,补偿了值依赖图缺少控制流信息的不足,在对前驱结点到当前结点的逻辑条件进行考虑时加入了逻辑条件自身的区间信息,提高了分析精度。
附图说明
图1为本发明具体实施例的一种区间信息分析方法的流程示意图;
图2为本发明具体实施例的值依赖图中结点存在形式示意图;
图3为本发明具体实施例的一种值依赖图;
图4为本发明具体实施例的一种单变量循环的值依赖图;
图5为本发明具体实施例的一种值依赖图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
图1为本发明具体实施例的一种区间信息分析方法的流程示意图,如图1所示,一种区间信息分析方法,包括:S1,对于值依赖图中任一结点,根据该结点与该结点的任一前驱结点间的守卫条件获取所述守卫条件对应的条件判断结点;S2,根据所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息,确认所述条件判断结点的属性;所述属性为假、真和可满足中的一种;S3,根据所述条件判断结点的属性,确认所述条件判断结点对应的守卫条件的区间信息;S4,根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,获取该结点的区间信息。
具体地,图2为本发明具体实施例的值依赖图中结点存在形式示意图,如图2所示,值依赖图中,任一结点与其前驱结点之间存在依赖关系(dependence),守卫条件(guard)为所述依赖关系的属性,所述守卫条件,包括了该结点与其前驱结点间所含的变量从定义到使用的关系、数组从定义到其数组元素使用的关系等。所述前驱结点的值依赖信息能够传递到该结点的条件即所述守卫条件得到满足。根据前驱结点的区间信息获取该结点的区间信息,具体步骤如下:
首先,对于值依赖图中的任一结点,根据该结点与其任一前驱结点间的守卫条件,遍历所述值依赖图,获取所述守卫条件对应的条件判断结点。
其次,分别提取所述条件判断结点及其前驱结点的区间信息,根据所述条件判断结点的区间信息和所述条件判断结点的各前驱结点的区间信息,确认所述条件判断结点的属性。此处,所述条件判断结点的属性为“假”、“真”和“可满足”中的一种。
其中,所述条件判断结点的属性为“假”,则表示所述条件判断结点中的条件判断式恒为假;所述条件判断结点的属性为“真”,则表示所述条件判断结点中的条件判断式恒为真;所述条件判断结点的属性为“可满足”,则表示所述条件判断结点中的条件判断式可以满足,即存在真假两种情况。
随后,将上一步骤中获取的所述条件判断结点的属性,反馈到所述条件判断结点对应的守卫条件,用于确认对所述守卫条件的区间信息。
最后,根据上述步骤获取任一结点及其各前驱结点间的守卫条件的区间信息,并应用该结点的各前驱结点的区间信息和该结点及其各前驱结点间守卫条件的区间信息,获取该结点的区间信息。
本发明具体实施例中,将条件判断结点的属性反馈给对应的守卫条件,补偿了值依赖图缺少控制流信息的不足,在对前驱结点到当前结点的守卫条件进行考虑时加入了守卫条件自身的区间信息,提高了分析精度。
基于上述任一具体实施例,一种区间信息分析方法,所述步骤S2进一步包括:取所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息的交集;若所述交集为空集,则将所述条件判断结点的属性设置为假;若所述交集不为空集,且所述条件判断结点的前驱结点的区间信息属于所述条件判断结点的区间信息,则将所述条件判断结点的属性设置为真;否则,将所述条件判断结点的属性设置为可满足。
具体地,所述步骤S2中,分别提取所述条件判断结点及其前驱结点的区间信息,根据所述条件判断结点的区间信息和所述条件判断结点的各前驱结点的区间信息,确认所述条件判断结点的属性,进一步包括:
首先,分别提取所述条件判断结点及其前驱结点的区间信息,并取所述条件判断结点及其前驱结点的区间信息的交集。
随后,对所述交集进行判断:
若所述交集为空集,即所述条件判断结点的前驱结点的区间信息不可能满足所述条件判断结点中的条件判断式,即所述条件判断式恒为假,故设置所述条件判断结点的属性为“假”;
若所述交集不为空集,则进一步判断所述条件判断结点的区间信息是否包含所述条件判断结点的前驱结点的区间信息:
若所述条件判断结点的区间信息包含所述条件判断结点的前驱结点的区间信息,即所述条件判断结点的前驱结点的区间信息完全满足所述判断结点中的条件判断式,即所述条件判断式恒为真,故设置所述条件判断结点的属性为“真”;
否则,所述条件判断结点的前驱结点的区间信息部分满足所述判断结点中的条件判断式,则所述条件判断式可以满足,故设置所述条件判断结点的属性为“可满足”。
例如,C语言中,条件判断结点的属性设置程序如下:
1.boolExprBaseMap←boolExprBaseMap∩inMap//把boolExprBaseMap和inMap取交集然后赋给boolExprBaseMap
2.If boolExprBaseMap.hasEmpty()then//判断boolExprBaseMap中是否存在VRI为空的变量,如果有说明inMap中的区间信息不可能使条件判断式为真,则在第3行设置该条件判断结点状态为FALSE;
3.Set Status(FALSE)
4.Else//判断inMap是否包含于boolExprBaseMap,如果包含,说明流经当前结点的区间信息使当前表达式恒为真,
6.Set Status(TRUE)
7.Else
8.Set Status(SAT)
9.End
其中,boolExprBaseMap和inMap分别为条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息。
本发明具体实施例中,通过判断条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息的交集确定所述条件判断结点的属性,有助于补偿值依赖图缺少控制流信息的不足。
基于上述任一具体实施例,一种区间信息分析方法,所述步骤S3进一步包括:若所述条件判断结点的属性为假,则所述条件判断结点对应的守卫条件的区间信息为空集;若所述条件判断结点的属性为真,则所述条件判断结点对应的守卫条件的区间信息为全集;若所述条件判断结点的属性为可满足,则所述条件判断结点对应的守卫条件的区间信息为所述交集。
具体地,步骤S3中,将上一步骤中获取的所述条件判断结点的属性,反馈到所述条件判断结点对应的守卫条件,确认对所述守卫条件的区间信息,进一步包括:
若所述条件判断结点的属性为假,则所述条件判断结点对应的守卫条件也为假,其区间信息为空集,即所述守卫条件对应的前驱结点的区间信息无法通过所述守卫条件到达当前分析的所述任一结点,输入所述任一结点的区间信息不包括来自所述守卫条件对应的前驱结点的区间信息;
若所述条件判断结点的属性为真,则所述条件判断结点对应的守卫条件也为真,其区间信息为全集,即所述守卫条件对应的前驱结点的区间信息能够直接通过所述守卫条件传输到当前分析的所述任一结点;
若所述条件判断结点的属性为可满足,则所述条件判断结点对应的守卫条件为满足所述条件判断结点中的条件判断式的区间信息,因此所述守卫条件的区间信息为所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息的交集,即满足所述交集时,所述守卫条件对应的前驱结点的区间信息能够直接通过所述守卫条件传输到当前分析的所述任一结点,不满足所述交集时,所述守卫条件对应的前驱结点的区间信息无法通过所述守卫条件传输到当前分析的所述任一结点。
本发明具体实施例中,将条件判断结点的反馈信息应用于对应的守卫条件的区间信息确认,有效补偿了值依赖图缺少控制流信息的不足。
基于上述任一具体实施例,一种区间信息分析方法,所述步骤S4进一步包括:根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,应用下式获取流入该结点的区间信息:
根据所述流入该结点的区间信息,获取该结点的区间信息。
具体地,所述步骤S4中,并应用该结点的各前驱结点的区间信息和该结点及其各前驱结点间守卫条件的区间信息,获取该结点的区间信息,进一步包括以下两个步骤:
首先,根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,获取流入该结点的区间信息;
其次,根据流入该结点的区间信息,获取该结点的区间信息。
其中,应用如下公式,计算流入该结点的区间信息:
式中,inMap(vnode)为流入该结点的区间信息,outMap[i]为该结点的第i个前驱结点的区间信息,guardMap[i]为该结点与该结点的第i个前驱结点间的守卫条件的区间信息,n为该结点的前驱结点数;
由上式可知,首先,取该结点的任一前驱结点的区间信息和所述任一前驱结点与该结点间的守卫条件的区间信息的交集;
随后,取该结点的各前驱结点对应的交集的并集,作为流入该结点的区间信息。
例如,C语言中,inMap的获取程序如下:
1.For each pred∈preds do//遍历前驱结点集合preds,获取各结点pred
2.If pred==this then//如果pred和当前结点相同,说明pred存在自循环,在这一环节不予考虑。
3.Continue
4.End
5.tmp←getIntervalOfPreNode(pre)/获取前驱结点pre的区间信息tmp
6.For each var∈tmp.keySet()//实现上述公式中汇总每个前驱结点流向当前结点区间信息的过程,即取前驱结点区间信息与守卫条件区间信息的交集的过程。再如果当前inMap中的区间信息original非空,则把rs和original取并集后的结果作为inMap的var对应的区间信息。
7.rs←tmp.get(var)//对于每一个tmp中涉及到的变量var,取出tmp中的var的区间信息rs。
8.original←inMap.get(var)//取出inMap中的var的区间信息original。
9.If original!=null then//如果当前结点的区间信息为空,把rs作为inMap的var的区间信息。
10.rs←union(rs,original)
11.End
12.inMap.put(var,rs)
13.End
14.End
上述程序中,函数getIntervalOfPreNode用于实现inMap[i]∩guardMap[i],即获取每一前驱结点流向当前结点区间信息的过程,其计算流程如下示例:
上述程序中,函数getIntervalOfLoopPreNode(outMap,guard)和getIntervalOfNormalPreNode(outMap,guard)算法的流程相似,均是先求解守卫条件的区间信息guardMap,在应用guardMap与前驱结点的区间信息outMap进行叫运算获取最终的结果。两者的区别在于,对guardMap进行求解时,若此时的守卫条件不是从循环内跳转到循环外,则将其对应的条件判断结点的属性反馈到守卫条件,再求解guardMap。
本发明具体实施例中,通过取交集获取了任一前驱结点流向当前结点的区间信息,通过取并集获取了所有前驱结点流向当前结点的区间信息,为获取当前结点的区间信息提供了条件。
基于上述任一具体实施例,一种区间信息分析方法,所述根据所述流入该结点的区间信息,获取该结点的区间信息,进一步包括:若所述流入该结点的区间信息为空集,则该结点的区间信息为空集;否则,若该结点的前驱结点中包括该结点,则根据所述流入该结点的区间信息和该结点的类型,获取该结点循环前信息,应用所述循环前信息和自循环的守卫条件获取该结点的区间信息;若该结点的前驱结点不包括该结点,则基于所述流入该结点的区间信息和该结点的类型获取该结点的区间信息。
具体地,通过流入该结点的区间信息获取该结点的区间信息,进一步包括:
首先,判断所述流入该结点的区间信息是否为空:
若所述流入该结点的区间信息为空,则说明没有变量的区间信息流入该结点,即该结点不可达,将该结点的区间信息设置为空;
若所述流入该结点的区间信息不为空,则进一步判断该结点的前驱结点中是否包含该结点,即该结点是否存在自循环:
若该结点的前驱结点中包含该结点,即该结点存在自循环,则将该结点和自循环的守卫条件作为一个模块,首先根据所述流入该结点的区间信息和该结点的类型,获取该结点的循环前信息,随后基于该结点的循环前信息,在所述模块内部运行该结点及其自循环的守卫条件,将该结点的运行结果作为其区间信息;
若该结点的前驱结点中不包含该结点,即该结点不存在自循环,则根据流入该结点的区间信息和该结点的类型,获取该结点的区间信息。
例如,在C语言中,应用如下代码获取结点的区间信息outMap:
上述代码中,基于递归思想,应用惰性初始化(Lazy Initialization)的方式对值依赖图中结点的区间信息进行计算。
本发明具体实施例中,通过对流入结点的区间信息的判断和结点本身自循环的判断实现了结点区间信息的获取,有助于分析效率的提高。
基于上述任一具体实施例,一种区间信息分析方法,该结点的类型为赋值结点、函数调用结点、函数入口结点、条件判断结点或返回语句结点。
具体地,所述赋值结点(AssignNode)对应程序中的赋值语句。例如赋值语句x=y,在值依赖图中,以左值为主键表达赋值关系,仅建立一个赋值结点。若该结点为赋值结点,根据所述流入该结点的区间信息模拟计算,获取该结点的区间信息。
例如,a=b+c,应用流入该结点的区间信息inMap中b的区间信息和c的区间信息进行算术运算,获取a的区间信息。
再例如,a=f(5),从流入该结点的区间信息inMap中获取f()函数的返回语句结点,并将f()函数的返回语句结点的区间信息赋给a。
所述函数调用结点(ParamAtCall)对应程序中的函数调用语句。例如函数调用语句a=call(b,c),对应值依赖图中函数调用结点a@a=call(b,c)、b@a=call(b,c)和c@a=call(b,c)。值依赖图用于表达的是值的守卫条件,因而针对任一变量均需要建立一个值依赖点,a@a=call(b,c)为返回结果,表达了对a的重新定义,b@a=call(b,c)和c@a=call(b,c)则表达了对参数b和c的使用。若该结点为函数调用结点,根据所述流入该结点的区间信息获取该结点中的函数调用的参数的区间信息,将所述参数的区间信息作为该结点的区间信息。
所述函数入口结点(ParamAtEntry)对应程序中的被调函数的定义语句,例如定义函数fun(inti),并且在调用函数fun时,参数为fun(5)那么会生成ParamAtCall结点5@fun(5),和生成ParamAtEntry结点i@fun(inti),并从5@fun(5)到i@fun(inti)有一个依赖关系。若该结点为函数入口结点,且函数调用为变量,则从所述流入该结点的区间信息中提取所述变量的区间信息,并将所述变量的区间信息作为该结点的区间信息;若该结点为函数入口结点,且函数调用为常量,则将该常量的区间信息作为该结点的区间信息。
所述条件判断结点(SwitchNode)对应程序中的条件判断语句。例如if(x>0),在值依赖图中,作为结点间的依赖条件出现,同一依赖条件可能出现多次,或以求反的方式出现,但该结点的对应仅创建一次。由于条件判断结点只对条件进行判断,不改变区间信息,因此流入条件判断结点的区间信息即该条件判断结点的区间信息。
所述返回语句结点(ReturnNode)对应程序中的返回语句。例如return a+b,对应值依赖图中返回语气结点a@returna+b和b@returna+b,通过在值依赖图中构建与变量数目相等的值依赖点表达不同变量的使用。返回语句结点通常用作函数调用结点的前驱结点,将其返回的值的区间信息传递到函数调用处。由于返回语句结点只在函数借书处返回值,不改变区间信息,因而流入返回语句结点的区间信息即该返回语句结点的区间信息。
基于上述任一具体实施例,一种区间信息分析方法,任一结点的区间信息如下式所示:
outMap={<var,isLeft,VRI>}
式中,var为变量,isLeft为true或false,true和false分别用于表示变量var位于所述结点对应的语句中等号的左边和右边,VRI为变量var对应的值域信息。outMap为结点的区间信息,是变量var和表示该变量出现在语句中等号的左侧或右侧的布尔值isLeft所组成的偶对<var,isLeft>到该变量所对应的变量值域信息VRI的一一映射。
所述流入该结点的区间信息如下式所示:
inMap={<var,VRI>}
式中,var为变量,VRI为变量var对应的值域信息。inMap为流入该结点的区间信息,是变量var到该变量所对应的变量值域信息VRI的一一映射。其中,var为流入该结点所涉及的变量集合中的一个变量,每给定一个变量var,即可通过inMap得到该变量对应的值域信息VRI。
例如,图3为本发明具体实施例的一种值依赖图,如下为图3对应的代码:
1.void foo()
2.{
3.Int i;
4.i=1;
5.i=i+1;
6.}
由上,针对结点n4,流入结点n4的区间信息inMap为{<i,[1,1]>},结点n4的区间信息outMap为{<i,false,[1,1]>,<i,true,[2,2]>}。
基于上述任一具体实施例,一种区间信息分析方法,所述若该结点的前驱结点中包括该结点,则根据所述流入该结点的区间信息和该结点的类型,获取该结点循环前信息,应用所述循环前信息和自循环的守卫条件获取该结点的区间信息,进一步包括:
若该结点的前驱结点中包含该结点,即该结点存在自循环,则将该结点和自循环的守卫条件作为一个模块,首先根据所述流入该结点的区间信息和该结点的类型,获取该结点的循环前信息,随后基于该结点的循环前信息,在所述模块内部运行该结点及其自循环的守卫条件,将该结点的运行结果作为其区间信息。
在所述模块内部运行该结点及其自循环的守卫条件,进一步包括:
对由单变量控制的自循环,用模拟循环语句执行的方式来保障结果正确性;对于由多变量控制的自循环,则将循环当作条件判断语句只执行一次,并结合自循环的依赖条件进行求解,来保障时空开销的低耗性。
例如,图4为本发明具体实施例的一种单变量循环的值依赖图,如下为图4对应的代码:
根据上述代码和图4,第7行中的while循环体现在结点n4的自循环上,在求解n4的区间信息时,首先获取流入n4的区间信息,此时不考虑n4自身到自身的值的传递。
对于结点n4,流入n4的区间信息inMap为{<a,[1,1]>},将n4与n4指向n4的守卫条件作为一个模块,求解循环执行完的循环信息,此时n4的outMap相当于该循环执行完毕后变量的值域信息,随后将该值域信息传递给n4的后继结点。
由于此处的循环的条件是a<5,初始a的VRI为[1,1],a<5成立,继续执行n4结点a+=1操作;a的VRI变成[2,2],a<5依旧成立,继续执行n4结点a+=1操作;a的VRI变成[3,3],a<5依旧成立,继续执行n4结点a+=1操作;a的VRI变成[4,4],a<5依旧成立,继续执行n4结点a+=1操作;此时a的VRI变成[5,5],a<5不成立,该模块执行完毕,该模块对应的outMap为{<a,true,VRI:[5,5]>}。
接下来n4的区间信息会传递到n6和n7,n6的区间信息会传递到n7,根据本发明具体实施例提出的方法可以求解出n7结点的inMap为{<a,false,VRI:[5,5]>,<b,false,VRI:[5,5]>,<c,true,VRI:[10,10]>},这与程序实际执行的效果是完全一致的。因此本发明具体实施例对由单变量控制的循环的处理方式较为准确。
对于由多变量控制的循环,把循环当作条件判断语句处理并结合守卫条件的约束条件进行求解。本发明具体实施例中,仍将循环当作一个模块进行处理,首先执行循环一次,把所述模块的区间信息存储起来,设为该结点的区间信息outMap。
设该循环的条件为loopCondition,那么从该模块跳转到其后继结点的守卫条件的条件应为!loopCondition。继而根据所述守卫条件求出守卫条件的区间信息guardMap,再用outMap和guardMap取交,取交的结果作为当前循环基本快传递给其后继结点的区间信息。
本发明具体实施例中提出的多变量控制的循环计算方法,在实际工程应用中,有效提升了处理效率,同时应用guardMap来限制循环模块传递给其后继结点的区间信息,确保了分析的保守性。
为了更好地理解与应用本发明提出的一种区间信息分析方法,本发明进行以下示例,且本发明不仅局限于以下示例。
图5为本发明具体实施例的一种值依赖图,如下为图5对应的代码:
根据上述代码和图5,在获取结点n3→n7和n4→n6的守卫条件的区间信息(下文称为guardMap)时,首先需要找到守卫条件的源头,即条件判断结点n5。
结点n5的前驱结点区间信息inMap为{<b,VRI∶[-1,-1]>},n5的区间信息boolExprBaseMap为{<b,VRI∶[2,posi]>},inMap与boolExprBaseMap取交集后得到的boolExprBaseMap为因而结点n5的属性为假。
对应地,结点n3→n7的守卫条件是!(b>2),与n5的条件判断式相反,!(b>2)为真,结点n3的区间信息{<b,VRI∶[-1,1]>}直接流入结点n7;结点n4→n6的守卫条件为(b>2),(b>2)为假,故结点n6不可达。
因此,输入结点n7的区间信息仅来自于结点n3,为{<b,VRI∶[-1,1]>},又因为结点n7将变量b的区间信息赋给了变量c,由此得到结点n7的区间信息outMap为{<b,false,VRI∶[-1,1]>},{<c,true,VRI∶[-1,1]>}。
本示例中,将条件判断结点的属性反馈给对应的守卫条件,补偿了值依赖图缺少控制流信息的不足,在对前驱结点到当前结点的逻辑条件进行考虑时加入了逻辑条件自身的区间信息,提高了分析精度。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种区间信息分析方法,其特征在于,包括:
S1,对于值依赖图中任一结点,根据该结点与该结点的任一前驱结点间的守卫条件获取所述守卫条件对应的条件判断结点;
S2,根据所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息,确认所述条件判断结点的属性;所述属性为假、真和可满足中的一种;
S3,根据所述条件判断结点的属性,确认所述条件判断结点对应的守卫条件的区间信息;
S4,根据该结点的各前驱结点的区间信息和该结点与该结点的各前驱结点间的守卫条件的区间信息,获取该结点的区间信息;
每个结点对应程序中的一条语句。
2.根据权利要求1所述的方法,其特征在于,所述步骤S2进一步包括:
取所述条件判断结点的区间信息和所述条件判断结点的前驱结点的区间信息的交集;
若所述交集为空集,则将所述条件判断结点的属性设置为假;
若所述交集不为空集,且所述条件判断结点的前驱结点的区间信息属于所述条件判断结点的区间信息,则将所述条件判断结点的属性设置为真;
否则,将所述条件判断结点的属性设置为可满足。
3.根据权利要求2所述的方法,其特征在于,所述步骤S3进一步包括:
若所述条件判断结点的属性为假,则所述条件判断结点对应的守卫条件的区间信息为空集;
若所述条件判断结点的属性为真,则所述条件判断结点对应的守卫条件的区间信息为全集;
若所述条件判断结点的属性为可满足,则所述条件判断结点对应的守卫条件的区间信息为所述交集。
5.根据权利要求4所述的方法,其特征在于,根据所述流入该结点的区间信息,获取该结点的区间信息,进一步包括:
若所述流入该结点的区间信息为空集,则该结点的区间信息为空集;
否则,若该结点的前驱结点中包括该结点,则根据所述流入该结点的区间信息和该结点的类型,获取该结点循环前信息,应用所述循环前信息和自循环的守卫条件获取该结点的区间信息;若该结点的前驱结点不包括该结点,则基于所述流入该结点的区间信息和该结点的类型获取该结点的区间信息。
6.根据权利要求5所述的方法,其特征在于,该结点的类型为赋值结点、函数调用结点、函数入口结点、条件判断结点或返回语句结点。
7.根据权利要求6所述的方法,其特征在于,
若该结点为赋值结点,则根据所述流入该结点的区间信息模拟计算,获取该结点的区间信息;
若该结点为函数调用结点,则根据所述流入该结点的区间信息获取该结点中的函数调用的参数的区间信息,将所述参数的区间信息作为该结点的区间信息;
若该结点为函数入口结点,且函数调用为变量,则从所述流入该结点的区间信息中提取所述变量的区间信息,并将所述变量的区间信息作为该结点的区间信息;
若该结点为函数入口结点,且函数调用为常量,则将该常量的区间信息作为该结点的区间信息;
若该结点为条件判断结点或返回语句结点,则该结点的区间信息为所述流入该结点的区间信息。
8.根据权利要求1至7中任一权利要求所述的方法,其特征在于,任一结点的区间信息如下式所示:
outMap={<var,isLeft,VRI>}
式中,outMap为结点的区间信息,var为变量,isLeft为true或false,true和false分别用于表示变量var位于所述结点对应的语句中等号的左边和右边,VRI为变量var对应的值域信息。
9.根据权利要求4至7中任一权利要求所述的方法,其特征在于,所述流入该结点的区间信息如下式所示:
inMap={<var,VRI>}
式中,inMap为流入该结点的区间信息,var为变量,VRI为变量var对应的值域信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810634710.8A CN108984843B (zh) | 2018-06-20 | 2018-06-20 | 一种基于守卫计算的区间信息分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810634710.8A CN108984843B (zh) | 2018-06-20 | 2018-06-20 | 一种基于守卫计算的区间信息分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108984843A CN108984843A (zh) | 2018-12-11 |
CN108984843B true CN108984843B (zh) | 2021-02-09 |
Family
ID=64540836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810634710.8A Active CN108984843B (zh) | 2018-06-20 | 2018-06-20 | 一种基于守卫计算的区间信息分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108984843B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110244953A (zh) * | 2019-05-21 | 2019-09-17 | 北京大学 | Java程序的区间分析方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101311898A (zh) * | 2008-07-02 | 2008-11-26 | 北京大学 | 软件构件可信度评价方法和系统 |
WO2016066364A1 (fr) * | 2014-10-29 | 2016-05-06 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Architecture logicielle pour systeme expert |
CN107153610A (zh) * | 2017-04-28 | 2017-09-12 | 腾讯科技(深圳)有限公司 | 一种程序语句错误检测方法和装置 |
-
2018
- 2018-06-20 CN CN201810634710.8A patent/CN108984843B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101311898A (zh) * | 2008-07-02 | 2008-11-26 | 北京大学 | 软件构件可信度评价方法和系统 |
WO2016066364A1 (fr) * | 2014-10-29 | 2016-05-06 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Architecture logicielle pour systeme expert |
CN107153610A (zh) * | 2017-04-28 | 2017-09-12 | 腾讯科技(深圳)有限公司 | 一种程序语句错误检测方法和装置 |
Non-Patent Citations (1)
Title |
---|
基于值依赖分析的空指针解引用检测;马森,等;《电子学报》;20150430;第43卷(第4期);647-651 * |
Also Published As
Publication number | Publication date |
---|---|
CN108984843A (zh) | 2018-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8001510B1 (en) | Automated method of architecture mapping selection from constrained high level language description via element characterization | |
US8078839B2 (en) | Concurrent processing element system, and method | |
US7325232B2 (en) | Compiler for multiple processor and distributed memory architectures | |
CN109858019B (zh) | 对话状态跟踪方法及装置、存储介质及语义识别系统 | |
JP2012527054A5 (zh) | ||
US20080028380A1 (en) | Localized, incremental single static assignment update | |
US20190370322A1 (en) | Spreadsheet recalculation algorithm for directed acyclic graph processing | |
CN108984843B (zh) | 一种基于守卫计算的区间信息分析方法 | |
CN109656950B (zh) | 递归查询方法、装置、服务器及存储介质 | |
D'Andrea et al. | Self-adaptive loop for CPSs: is the dynamic partial reconfiguration profitable? | |
US20220309218A1 (en) | Method for dividing simulation models up between a processor and an fpga | |
US20100005203A1 (en) | Method of Merging and Incremantal Construction of Minimal Finite State Machines | |
CN109002684B (zh) | 一种区间信息分析方法 | |
Klaus et al. | Automatic generation of scheduled SystemC models of embedded systems from extended task graphs | |
US9600613B1 (en) | Block-level code coverage in simulation of circuit designs | |
CN112799671A (zh) | 一种函数解析方法及其计算机设备 | |
Krainyk et al. | Configurable Description of FPGA-based Control System for Sensor Processing | |
Esser et al. | Applying an object-oriented petri net language to heterogeneous systems design | |
CN112394972A (zh) | 一种云应用发布方法、装置、设备及存储介质 | |
CN112204526A (zh) | 用于配置自动化系统的方法 | |
US9633160B2 (en) | Method of placement and routing in a reconfiguration of a dynamically reconfigurable processor | |
Galanis et al. | A partitioning methodology for accelerating applications in hybrid reconfigurable platforms | |
Määttä et al. | Characterising embedded applications using a UML profile | |
US20240126960A1 (en) | Intelligent Suggestions for CAD-Based Design Entry | |
Oakden et al. | Modeling phonological processes with recursive program schemes |
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 |