一种多类型msvl语言解释系统及多类型msvl语言解释方法

文档序号:6401766阅读:320来源:国知局
专利名称:一种多类型msvl语言解释系统及多类型msvl语言解释方法
技术领域
本发明属于计算机系统形式化建模与验证技术领域,主要涉及形式化方法对多数据类型的系统进行建模与验证,具体是一种扩展内置数据类型的MSVL建模和验证方法和系统,可用于对多数据类型的系统进行建模与验证。
背景技术
时序逻辑作为一种系统建模与验证的形式化工具,已广泛应用于软件工程、数字电路设计等领域。时序逻辑主要有三大分支:线性时序逻辑(LTL),分支时序逻辑(CTL)以及区间时序逻辑(ITL)。投影时序逻辑(PTL)对ITL进行了扩展,基于区间时序逻辑,投影时序逻辑包括无限模型,过去操作,和一个新的投影操作来处理并发计算。它适用于描述带有时间区间的软硬件系统性质,可以处理顺序、并发、投影等结构,具有较强、较灵活的表达力。时序逻辑语言MSVL是PTL的一个可执行子集,是一个集建模(Modeling)、仿真(Simulation)和验证(Verification)为一体的时序逻辑程序设计语言。时序逻辑程序设计语言MSVL可以将程序的书写、性质描述和验证统一在时序逻辑的框架中进行,对软硬件系统使用时序逻辑程序设计语言进行建模,对系统期望的性质采用时序逻辑公式来描述,将模型和性质统一在时序逻辑的框架中,从而实现对软硬件系统的形式化验证。目前,许多现有的软硬件系统都是由主流程序设计语言C、C++编写实现的,通过开发一些语言转换工具,将C、C++编写的程序转换为MSVL程序,自动实现MSVL对C语言编写的系统进行描述。然后再利用命题投影时序逻辑对该系统的性质进行刻画,即可以实现对该系统的建模和验证。目前,我们在语言转换工具方面的工作已经取得了一定的进展和成果,由于主流的程序设计语言如C、C++以及Java等语言,都提供了丰富的内置数据类型,如字符型,整型、浮点型等基本类型,丰富而复杂的内置数据类型使得程序设计语言能够灵活处理不同数据类型的系统。自上世纪70年代,大量的时序逻辑程序设计语言相继被提出。时序逻辑是一种用于描述和验证实时系统实时性的重要方法,很多基于时序逻辑的编程语言都可以描述和证明同一逻辑框架下的程序。Cactus基于分支时间时序逻辑,XYZ/E, THLP, Chronolog,Tempura以及Tokio基于区间时序逻辑,TLA也是一种基于时序逻辑行为的描述语言。和上述形式化方法相比,MSVL在建模验证并行系统等方面具有显著的优势。因为MSVL是一个时序逻辑编程语言,有建模,仿真和验证三种功能。MSVL中含有丰富的时序操作符和语句,因此可以用于描述系统的顺序、并发、非确定、非终止、自治、同步通信等特征。同时,MSVL还包括赋值、条件、循环等语句,具有命令式程序设计语言的特征。使用MSVL语言,可以完成模型检测中系统建模、性质描述、性质验证等一系列工作,在投影时序逻辑的基础上,实现一种统一的模型检测方法。作为一种形式化的工具,MSVL语言已被广泛应用于各种领域的建模与验证中。但是MSVL的数据类型比较单一,内置基本数据类型仅为整型,不包括浮点型和字符型,存在局限性。因此在投影时序逻辑和MSVL中扩展数据类型并开发相关的支持工具(例如模型检测器)以及理论证明均是计算机系统形式化建模与验证技术领域的客观需要,本发明正是在这方面进行的研究和创新。目前MSVL的基本内置数据类型仅限于整型,描述能力和表达能力弱,应用不够灵活,不能够根据系统的实际需求提供相应的其他数据类型,适应面太窄,这严重地限制了 MSVL的描述能力和应用领域。因此本发明的主要内容是扩展MSVL中的基本内置数据类型,实现MSVL对复杂数据类型构造的系统的建模与验证。发明内容
本发明针对现有技术中数据类型单一,应用范围窄的技术问题,提供一种在程序设计语言MSVL中扩展了浮点,字符以及字符串多种内置数据类型的多类型MSVL语言解释系统及MSVL语目解释方法。
为了实现上述目的,本发明提供了一种多类型MSVL语言解释系统,其包括,
变量类型声明模块,其设置有变量类型声明命令以及类型声明定义,所述变量类型声明命令以MSVL变量声明语句的形式规定了变量的类型,MSVL包括了 int,float, char以及string四种变量声明语句,扩展类型后MSVL中变量和常量的论域定义为DOMAIN,DOMAIN中的元素被定义为二元组,二元组的第一个分量表示变量的取值,而第二个分量标记了变量的类型;
变量存储模块,其设置有变量类型标记和变量取值,所述变量类型标记根据变量声明语句记录该变量的类型,变量存储变量的取值限制在其类型所对应的论域内;
算术表达式处理模块,其用于多种类型的数据构造的算术表达式进行运算,其设置有:加法、减法、乘法、除法和取模运算的定义和处理模块,定义模块规定了各项算术运算的定义域和值域,算术运算的处理模块对操作数属于定义域的表达式进行解释,返回结果为相应值域中的一个常量;
赋值操作处理模块,其对赋值操作进行处理,赋值操作符左操作数是变量,右操作数是算术表达式,调用算术表达式处理模块对右操作数进行解释,然后将运算结果赋给变量;
强制类型转换命令处理模块,其对算术表达式进行强制类型转换,强制类型转换命令以MSVL强制类型转换语句的形式修改变量的解释结果的类型和取值;以及,
框架命令处理模块,其控制变量在未赋值的情况下,自动继承上一状态的取值。
本发明还提供一种多类型MSVL语言解释方法,其包括以下步骤,
步骤1、用MSVL语言中的类型声明语句对变量进行声明,规定变量的类型,并且依据变量的所声明的类型及其语义,将所述变量保存在MSVL符号表中;
步骤2、对变量和常量进行引用,对引用变量和常量的形式进行判断,如果变量和常量是算术表达式中的操作数,则调用算术表达式处理模块对算术表达式进行运算;如果变量出现在赋值操作中,则调用赋值操作处理模块完成对变量的赋值操作;如果变量由框架命令声明,则调用框架命令处理模块对变量增加框架性质;如果有强制类型转换操作,则调用强制类型转换命令处理模块以MSVL强制类型转换语句的形式修改变量的类型和取值。
在上述技术方案的基础上,MSVL中变量定义为一个二元组,该二元组的第一个分量表示变量的取值,第二个分量标记变量的类型,变量声明命令以MSVL语句的形式限制了变量类型,类型声明的定义按如下方式进行://// X = X =< / //,Π >float y = y=< nil,FT >chur c = c =< nil, CT >s(rillg s = s =< ,"./,Si >其中,int, float, char以及string分别为MSVL中的整型、浮点型、字符型和字符串型的类型声明语句,nil表示当前状态上变量的取值不确定。在上述技术方案的基础上,所述算术表达式的处理方法按以下流程进行:步骤1、对算术表达式的两个操作数进行判断,如果是常量或者变量,直接解释获取其类型和取值,则执行步骤3,如果操作数为算术表达式,则执行步骤2 ;步骤2、分别对两个操作数 调用算术表达式处理模块对操作对象进行处理,如果返回一个论域内的常量,执行步骤3,否则执行步骤5 ;步骤3、对两个操作数是否属于所进行的算术运算的定义域,如果两个操作数都属于所进行算术运算的定义域,执行步骤4,否则执行步骤5 ;步骤4、依据所进行算术运算的运算规则,构造一个新的常量作为运算返回结果,执行步骤6 ;步骤5、语义不满足,向用户提示化简结果为false ;步骤6、算术表达式的处理流程结束。在上述技术方案的基础上,所述多类型MSVL包括了(int), (float)以及(string)三种强制类型转换语句,整型强制类型转换命令的调用形式如下:(int)e (float)e (string)e操作对象为算术表达式,返回值为相应论域内的常量:其中(int)的定义域为FLOAT U CHAR,值域为 INT,(float) e 的定义域为 INT U CHAR,值域为 FLOAT,(string)的定义域为INT U FLOAT U CHAR,值域为STR。在上述技术方案的基础上,强制类型转换命令的处理方法按以下流程进行:步骤1、调用算术表达式处理模块对操作对象进行处理,如果算术表达式合法,则返回所述论域DOMAIN内的常量,否则执行步骤4 ;步骤2、对该常量进行判断,如果常量属于该强制类型转换命令的定义域,那么执行步骤3,否则执行步骤4;步骤3、构造一个新的常量,其类型设置为强制类型转换命令所对应的类型,依据不同的强制转换命令设置该常量的取值,将该常量作为强制类型转换结果返回,执行步骤5 ;步骤4、语义不满足,向用户提示化简结果为false ;步骤5、强制类型转换命令的处理流程结束。在上述技术方案的基础上,赋值语句处理模块对赋值操作x=e进行处理,规定赋值操作符左操作数X是变量,右操作数e是算术表达式,对于赋值操作符的执行,流程如下:
步骤1、首先对于变量X和算术表达式e进行解释,判断X和e的类型是否相等,如果类型相等,执行步骤2,否则执行步骤5 ;
步骤2、如果变量X和表达式e的类型相等,判断表达式e的取值是否为论域DOMAIN中的一个常量,如果是,执行步骤3,否则执行步骤5 ;
步骤3、那么对变量X的取值进行判断,如果变量X的取值为nil时,将e的取值赋给X,等式x=e满足,赋值操作执行成功;否则执行步骤4 ;
步骤4、如果X的取值不为nil,那么判断x的取值是否等于e的取值,如果相等,那么等式x=e满足,赋值操作执行成功赋值操作的执行流程结束;如果取值不相等,进行步骤5;
步骤5、I [X]古I [e],向用户提示等式x=e是不满足的。
在上述技术方案的基础上,在扩展了内置数据类型后,MSVL中的变量被解释为取值和类型两个部分,在每一个状态上,对于加框架的变量的处理按照如下流程进行:
步骤1、对于每一个加框架的变量,记录其上一个状态的类型标记和取值。在当前状态上,将变量的类型标记设置为上一个状态上该变量的类型标记,并且将该变量的取值置为nil,即不确定,执行步骤2;
步骤2、调用变量赋值模块,遍历当前状态上的所有赋值语句,如果变量是某个赋值操作符的左操作数,执行步骤3,否则执行步骤4 ;
步骤3、利用赋值操作符处理模块完成对该变量的赋值,执行步骤5 ;
步骤4、在当前状态上没有被赋值,那么变量的取值自动继承该变量上一个状态的取值,执行步骤5 ;
步骤5、加框架变量的处理流程结束。
与现有技术相比较,本发明提出的多类型MSVL语言解释系统和多类型MSVL语言解释方法可以增强投影时序逻辑程序设计语言MSVL的表达能力,使得MSVL可以更加灵活广泛地对多数据类型的系统进行建模和验证。与现有方法相比,本发明优点如下所示:
(I)在投影时序逻辑和MSVL中扩展内置数据类型,增强了 MSVL的表达能力,使得MSVL可以对带有浮点、字符和字符串数据的系统进行描述,拓展了投影时序逻辑和MSVL建模和验证的系统范围。
(2)将变量和常量的论域定义为取值和类型组成的二元组,并且将变量的解释定义为二元组,使得每一个变量的类型作为该变量的固有性质,提高了变量进行运算和赋值的效率。
(3)针对于变量和常量的论域以及解释的扩展,本发明给出了赋值操作符、算数运算符、强制类型转换函数的语义,使得扩展类型后与类型相关的函数和运算符与现有的MSVL语句相兼容。
(4)重新定义加框架语句frame的语义,对于加框架的变量,自动继承上一个状态的类型,提高了赋值操作和算术运算操作的效率。


图1为本发明一种多类型MSVL语言解释系统的组成示意图2为本发明中赋值操作符执行的流程图;图3为本发明中框架操作符执行的流程图。
具体实施方式
:一种多类型MSVL语言解释系统,在现有MSVL语言解释系统中引入了浮点型和字符型两种内置数据类型,可实现对多数据类型的系统进行自动化建模与验证,参见图1,多类型MSVL语言解释系统包括变量类型声明模块,其设置有变量类型声明命令以及类型声明定义,所述变量类型声明命令以MSVL变量声明语句的形式规定了变量的类型,MSVL包括了 int, float, char以及string四种变量声明语句,扩展类型后MSVL中变量和常量的论域定义为DOMAIN,DOMAIN中的元素被定义为二元组,二元组的第一个分量表示变量的取值,而第二个分量标记了变量的类型;变量存储模块,其设置有变量类型标记和变量取值,所述变量类型标记根据变量声明语句记录该变量的类型,变量存储变量的取值限制在其类型所对应的论域内;算术表达式处理模块,其用于多种类型的数据构造的算术表达式进行运算,其设置有:加法、减法、乘法、除法和取模运算的定义和处理模块,定义模块规定了各项算术运算的定义域和值域,算术运算的处理模块对操作数属于定义域的表达式进行解释,返回结果为相应值域中的一个常量; 赋值操作处理模块,其对赋值操作进行处理,赋值操作符左操作数是变量,右操作数是算术表达式,调用算术表达式处理模块对右操作数进行解释,然后将运算结果赋给变量;强制类型转换命令处理模块,其对算术表达式进行强制类型转换,强制类型转换命令以MSVL强制类型转换语句的形式修改变量的解释结果类型和取值;以及,框架命令处理模块,其控制变量在未赋值的情况下,自动继承上一状态的取值。下面介绍基于本发明多类型MSVL语言解释系统的一种多类型MSVL语言解释方法,可用于对多数据类型的系统进行建模与验证,多类型MSVL语言解释方法按以下流程进行:步骤1、用MSVL语言中的类型声明语句对变量进行声明,规定变量的类型,并且依据变量的所声明的类型及其语义,将所述变量保存在MSVL符号表中;步骤2、对变量和常量进行引用,对引用变量和常量的形式进行判断,如果变量和常量是算术表达式中的操作数,则调用算术表达式处理模块对算术表达式进行运算;如果变量出现在赋值操作中,则调用赋值操作处理模块完成对变量的赋值操作;如果变量由框架命令声明,则调用框架命令处理模块对变量增加框架性质;如果有强制类型转换操作,则调用强制类型转换命令处理模块以MSVL强制类型转换语句的形式修改变量的类型和取值。本发明的实现在于重新定义变量和常量的论域:为了在投影时序逻辑中扩展得到整型,浮点型以及字符型等内置数据类型,需要在投影时序逻辑中给出如下基本的集合定乂:整数集合:Z= {...,-1,0, I,....}非负整数集合:N= {O, I, 2, 3,...}
浮点数集合:
F = {yl.y2 I yl e Z Λ y2 e N Λ yl.y2 ^lO1 = | yl MO1+}^ Ai = sizeof (y2)}
数字集合=DIGIT= {0,I, 2,3,4,5,6,7,8,9}
字母集合:ALPHA= {a,...,z, A,....,Z}
符号集合:SYMBOL= {!,@,#,$,%,~,&,*,(,),...}
字符集合:C= DIGIT U ALPHA U SYMBOL
字符串集合:S = C*
布尔集合:B= {true, false}
其中Sizeof(X)表示x的位数。而当一个变量或者常量的取值属于不同的集合时,为了区别常量和变量,也应该对该变量或常量的类型进行约束,每一个变量或常量需要有一个类型标志,变量类型标志的论域定义如下:
T = {IT, FT, CT, ST, NULL}
其中,IT为整型的标志,FT为浮点型的标志,CT为字符型的标志,而ST为字符串类型的标志,NULL表示该变量或常量的类型不确定。
在投影时序逻辑和MSVL中,变量和常量的论域中的元素都是一个二元组,包括取值和类型两个部分。基于上述集合整型、浮点型、字符型和字符串型变量和常量的论域定义如下:
整型变量和常量的论域:INT = (Z U {nil}) X {IT}
浮点型变量和常量的论域:FL0AT = (F U {nil}) X {FT}
字符型变量和常量的论域:CHAR = (C U {nil}) X {CT}
字符串型变量和常量的论域:STR = (S U {nil}) X {ST}
投影时序逻辑中,基本变量和常量的论域DOMAIN的定义如下:
DoMAIN=INT U FLOAT U CHAR U STR U { < nil, NULL > }
本发明的实现在于重新定义变量和常量的解释:
将一个基本变量X (X e V)在DOMAIN (DOMAIN = Value X Type)上的解释定义为二元组< Ival, ITvpe >,用 /丨来表示在状态Sk上对变量的解释,用f ,表示在状态Sk上对变量取值的解释,用A表示在状态Sk上对变量类型的解释。
/fai是对变量X赋一个在D中的取值,类型扩展后:
D=Z U F U C U S U {nil}
Ikval为对变量X定义一个变量类型,而变量类型的取值在集合T中:
T = {IT, FT, CT, ST, NULL}
将一个变量X在DOMAIN (DOMAIN = Value X Type)上的解释定义为二元组< IVai, IType >,对静态变量在一个区间上的解释,规定静态变量的在时序区间上的所有状态上保持不变:
J[a] = -SiU/] = φ] =</:;ypJa] >=< /;n/[cvj, I!lyrJa] >
而动态变量的取值在时序区间上是不同的:
/[-V] =.V4 [x] = /; [x] =< /;i,,[.\:], W >
本发明将变量和常量的论域定义为取值和类型组成的二元组,并且将变量的解释定义为二元组,使得每一个变量的类型作为该变量的固有性质,提高了变量进行运算和赋值的效率。本发明的实现在于:MSVL中变量定义为一个二元组,该二元组的第一个分量表示变量的取值,第二个分量标记变量的类型,变量声明命令以MSVL语句的形式限制了变量类型,类型声明的定义按如下方式进行:m, x = X =< nil^ JT > β0α) y = y =< "//, I i >char c = c =< nil, CT >string s = s =< nil, Si >其中,int, float, char以及string分别为MSVL中的整型、浮点型、字符型和字符串型的类型声明语句,利用类型声明语句对一个变量进行声明,实际上是将该变量定义为一个包括取值和类型的二元组,二元组的第一个分量记录了该变量在当前状态上的取值,变量的初始取值为nil,即变量的取值不 确定,二元组的第二个分量记录了变量的类型,而变量的类型则取决于于定义它的语句,IT为整型标志,FT为浮点型标志,CT为字符型标志,而ST为字符串类型标志。引入类型后,每个变量都是先声明后引用,声明规定了变量的类型,这样在其他语句中引用时,可以直接对变量进行解释获取变量的类型,从而提高了程序的执行效率。在投影时序逻辑程序设计语言中扩展了内置数据类型后,表达式的定义为:算术表达式可以是常量、变量的取值或函数返回值。扩展类型后的表达式包括整型表达式、浮点型表达式、字符型表达式、字符串表达式。e:: = a I X I O X I Θ X I f (e”...,em)布尔表达式的递归定义如下:如果ei和e2是算术表达式,那么下列结构属于关系表达式:ej > e2, G1 ^ e2, G1〈 e2, G1 ^ e2, G1 = e2, G1 Φ e2一个关系表达式是一个布尔表达式;布尔常量“ true ”和“ fal se ”是布尔表达式。如果Id1和b2是布尔表达式,那么下列结构也是布尔表达式:
—ib, M a 62, Bi V 02, M -> b2, b\ hi算术表达式处理模块针对数据类型的扩展,对于不同的类型,定义该类型上的可以进行的算术运算操作,算术表达式处理模块对算术表达式的加法、减法、乘法、除法和取模运算进行处理。其中模运算的定义域为1阶\1见',值域为1见'。加法、减法、乘法和除法运算的定义域为(INTXINT) U (FLOATXFLOAT),值域为INT U FLOAT。算术运算返回结果为相应值域中的一个常量。算术表达式的处理方法按以下流程进行:步骤1、对算术表达式的两个操作数进行判断,如果是常量或者变量,直接解释获取其类型和取值,则执行步骤3,如果操作数为算术表达式,则执行步骤2 ;
步骤2、分别对两个操作数调用算术表达式处理模块对操作对象进行处理,如果返回一个论域内的常量,执行步骤3,否则执行步骤5 ;
步骤3、对两个操作数是否属于所进行的算术运算的定义域,如果两个操作数都属于所进行算术运算的定义域,执行步骤4,否则执行步骤5 ;
步骤4、依据所进行算术运算的运算规则,构造一个新的常量作为运算返回结果,执行步骤6 ;
步骤5、语义不满足,向用户提示化简结果为false ;
步骤6、算术表达式的处理流程结束。
本发明的实现还在于:强制类型转换命令处理模块对算术表达式进行强制类型转换,强制类型转换命令以MSVL强制类型转换语句的形式修改变量的类型和取值,返回值为相应转换类型的常量。MSVL包括了(int),(float)以及(string)三种强制类型转换语句。整型强制类型转换命令的调用形式如下:
(int)e (float)e (string)e
操作对象为算术表达式,返回值为相应论域内的常量:其中(int)的定义域为FLOAT U CHAR,值域为 INT,(float) e 的定义域为 INT U CHAR,值域为 FLOAT。(string)的定义域为INT U FLOAT U CHAR,值域为STR。强制类型转换命令的处理方法按以下流程进行:
步骤1、调用算术表达式处理模块对操作对象进行处理,如果算术表达式合法,则返回所述论域DOMAIN内的常量,否则执行步骤4 ;
步骤2、对该常量进行判断,如果常量属于该强制类型转换命令的定义域,那么执行步骤3,否则执行步骤4;
步骤3、构造一个新的常量,其类型设置为强制类型转换命令所对应的类型,依据不同的强制转换命令设置该常量的取值,将该常量作为强制类型转换结果返回,执行步骤5 ;
步骤4、语义不满足,向用户提示化简结果为false ;
步骤5、强制类型转换命令的处理流程结束。
本发明的实现还在于:赋值语句处理模块对赋值操作进行处理,规定赋值操作符左边必须是变量,右边必须是表达式。赋值操作符是等价语句的一个特例。在扩展了内置数据类型后,对于变量X以及表达式e的解释都变成了值和类型两部分。参见图2,对于一个赋值操作符的执行,流程如下:
赋值语句处理模块对赋值操作x=e进行处理,规定赋值操作符左操作数X是变量,右操作数e是算术表达式,对于赋值操作符的执行,流程如下:
步骤1、首先对于变量X和算术表达式e进行解释,判断X和e的类型是否相等,如果类型相等,执行步骤2,否则执行步骤5 ;
步骤2、如果变量X和表达式e的类型相等,判断表达式e的取值是否为论域DOMAIN中的一个常量,如果是,执行步骤3,否则执行步骤5 ;
步骤3、那么对变量X的取值进行判断,如果变量X的取值为nil时,将e的取值赋给X,等式x=e满足,赋值操作执行成功;否则执行步骤4 ;
步骤4、如果X的取值不为nil,那么判断x的取值是否等于e的取值,如果相等,那么等式x=e满足,赋值操作执行成功赋值操作的执行流程结束;如果取值不相等,进行步骤5;步骤5、I [X]古I [e],向用户提示等式x=e是不满足的。针对于变量和常量的论域以及解释的扩展,本发明给出了赋值操作符、算数运算符、强制类型转换函数的语义,使得扩展类型后与类型相关的函数和运算符与现有的MSVL语句相兼容。在扩展了内置数据类型后,MSVL中的变量被解释为取值和类型两个部分,在每一个状态上,参见图3,对于加框架的变量的处理按照如下流程进行:步骤1、对于每一个加框架的变量,记录其上一个状态的类型标记和取值。在当前状态上,将变量的类型标记设置为上一个状态上该变量的类型标记,并且将该变量的取值置为nil,即不确定,执行步骤2;步骤2、调用变量赋值模块,遍历当前状态上的所有赋值语句,如果变量是某个赋值操作符的左操作数,执行步骤3,否则执行步骤4 ;步骤3、利用赋值操作符处理模块完成对该变量的赋值,执行步骤5 ;步骤4、在当前状态上没有被赋值,那么变量的取值自动继承该变量上一个状态的取值,执行步骤5 ;步骤5、加框架变量的处理流程结束。本发明重新定义加框架语句frame的语义,对于加框架的变量,自动继承上一个状态的类型,提高了赋值操作和算术运算操作的效率。综上,本发明扩展了投影时序逻辑,定义了变量和常量的论域,并且重新定义了变量的解释;本发明在投影时序逻辑程序设计语言MSVL中扩展了内置数据类型,定义了变量的类型声明语句,赋值操作符、算术运算符及相关函数和框架语句的语义,使得扩展类型后与类型相关的函数和运算符与现有的MSVL语句相兼容。本发明提出的多类型MSVL语言解释系统和方法,在投影时序逻辑中及其程序设计语言MSVL中扩展了多种内置数据类型,增强了 MSVL的描述能力,拓展了 MSVL的应用领域,使得MSVL可以更加灵活广泛地对多数据类型的系统进行建模和验证。本发明将变量的论域定义为取值和类型组成的二元组,并且将变量和常量的解释定义为二元组,使得每一个变量的类型作为变量的固有性质,提高了变量引用的效率。针对于变量和常量的论域以及解释的扩展,本发明给出了相关函数和操作符的语义,使得扩展类型后与类型相关的函数和运算符与现有的MSVL语句相兼容。对于加框架的变量,自动继承上一个状态的类型提高了赋值操作的效率。
权利要求
1.一种多类型MSVL语言解释系统,其特征在于,其包括, 变量类型声明模块,其设置有变量类型声明命令以及类型声明定义,所述变量类型声明命令以MSVL变量声明语句的形式规定了变量的类型,MSVL包括了 int,float,char以及string四种变量声明语句,扩展类型后MSVL中变量和常量的论域定义为DOMAIN,DOMAIN中的元素被定义为二元组,二元组的第一个分量表示变量的取值,而第二个分量标记了变量的类型; 变量存储模块,其设置有变量类型标记和变量取值,所述变量类型标记根据变量声明语句记录该变量的类型,变量存储变量的取值限制在其类型所对应的论域内; 算术表达式处理模块,其用于多种类型的数据构造的算术表达式进行运算,其设置有:加法、减法、乘法、除法和取模运算的定义和处理模块,定义模块规定了各项算术运算的定义域和值域,算术运算的处理模块对操作数属于定义域的表达式进行解释,返回结果为相应值域中的一个常量; 赋值操作处理模块,其对赋值操作进行处理,赋值操作符的左操作数是变量,右操作数是算术表达式,调用算术表达式处理模块对右操作数进行解释,然后将运算结果赋给变量; 强制类型转换命令处理模块,其对算术表达式进行强制类型转换,强制类型转换命令以MSVL强制类型转换语句的形式修改变量的解释结果的类型和取值;以及, 框架命令处理模块,其控制变量在未赋值的情况下,自动继承上一状态的取值。
2.一种使用权利要求1所述的一种多类型MSVL语言解释方法,其特征在于:其包括以下步骤, 步骤1、用MSVL语言中的类型声明语句对变量进行声明,规定变量的类型,并且依据变量的所声明的类型及其语义,将所述变量保存在MSVL符号表中; 步骤2、对变量和常量进行引用,对引用变量和常量的形式进行判断,如果变量和常量是算术表达式中的操作数,则调用算术表达式处理模块对算术表达式进行运算;如果变量出现在赋值操作中,则调·用赋值操作处理模块完成对变量的赋值操作;如果变量由框架命令声明,则调用框架命令处理模块对变量增加框架性质;如果有强制类型转换操作,则调用强制类型转换命令处理模块以MSVL强制类型转换语句的形式修改变量的类型和取值。
3.根据权利要求2所述的多类型MSVL语言解释方法,其特征在于:MSVL中变量定义为一个二元组,该二元组的第一·个分量表示变量的取值,第二个分量标记变量的类型,变量声明命令以MSVL语句的形式限制了变量类型,类型声明的定义按如下方式进行: Δ int X -- X -< "//' IT > / υ ι V = Y -< "/7, Fi >char c = e =< nilA'T > A string s - s -< "//, ST > 其中,int,float, char以及string分别为MSVL中的整型、浮点型、字符型和字符串型的类型声明语句,nil表示当前状态上变量的取值不确定。
4.根据权利要求2所述的多类型MSVL语言解释方法,其特征在于:所述算术表达式的处理方法按以下流程进行: 步骤1、对算术表达式的两个操作数进行判断,如果是常量或者变量,直接解释获取其类型和取值,则执行步骤3,如果操作数为算术表达式,则执行步骤2 ; 步骤2、分别对两个操作数调用算术表达式处理模块对操作对象进行处理,如果返回一个论域内的常量,执行步骤3,否则执行步骤5 ; 步骤3、对两个操作数是否属于所进行的算术运算的定义域,如果两个操作数都属于所进行算术运算的定义域,执行步骤4,否则执行步骤5 ; 步骤4、依据所进行算术运算的运算规则,构造一个新的常量作为运算返回结果,执行步骤6 ; 步骤5、语义不满足,向用户提示化简结果为false ; 步骤6、算术表达式的处理流程结束。
5.根据权利要求2所述的MSVL语言解释方法,其特征在于:所述多类型MSVL包括了(int),(float)以及(string)三种强制类型转换语句,整型强制类型转换命令的调用形式如下:(int)e(float)e(string)e 操作对象为算术表达式,返回值为相应论域内的常量:其中(int)的定义域为FLOAT U CHAR,值域为 INT,(float) e 的定义域为 INT U CHAR,值域为 FLOAT,(string)的定义域为INT U FLOAT U CHAR,值域为STR。
6.根据权利要求5所述的多类型MSVL语言解释方法,其特征在于:强制类型转换命令的处理方法按以下流程进行: 步骤1、调用算术表达式处理模块对操作对象进行处理,如果算术表达式合法,则返回所述论域DOMAIN内的常量,否则执行步骤4 ; 步骤2、对该常量进行判断,如果常量属于该强制类型转换命令的定义域,那么执行步骤3,否则执行步骤4; 步骤3、构造一个新的常量,其类型设置为强制类型转换命令所对应的类型,依据不同的强制转换命令设置该常量的取值,将该常量作为强制类型转换结果返回,执行步骤5 ;步骤4、语义不满足,向用户提示化简结果为false ; 步骤5、强制类型转换命令的处理流程结束。
7.根据权利要求2所述的多类型MSVL语言解释方法,其特征在于:赋值语句处理模块对赋值操作x=e进行处理,规定赋值操作符左操作数X是变量,右操作数e是算术表达式,对于赋值操作符的执行,流程如下: 步骤1、首先对于变量X和算术表达式e进行解释,判断X和e的类型是否相等,如果类型相等,执行步骤2,否则执行步骤5 ; 步骤2、如果变量X和表达式e的类型相等,判断表达式e的取值是否为论域DOMAIN中的一个常量,如果是,执行步骤3,否则执行步骤5 ; 步骤3、那么对变量X的取值进行判断,如果变量X的取值为nil时,将e的取值赋给X,等式x=e满足,赋值操作执行成功;否则执行步骤4 ; 步骤4、如果X的取值不为nil,那么判断X的取值是否等于e的取值,如果相等,那么等式x=e满足,赋值操作执行成功赋值操作的执行流程结束;如果取值不相等,进行步骤5 ; 步骤5、I[x]幸I [e],向用户提示等式x=e是不满足的。
8.根据权利要求2所述的多类型MSVL语言解释方法,其特征在于:在扩展了内置数据类型后,MSVL中的变量被解释为取值和类型两个部分,在每一个状态上,对于加框架的变量的处理按照如下流程进行: 步骤1、对于每一个加框架的变量,记录其上一个状态的类型标记和取值。在当前状态上,将变量的类型标记设置为上一个状态上该变量的类型标记,并且将该变量的取值置为nil,即不确定,执行步骤2; 步骤2、调用变量赋值模块,遍历当前状态上的所有赋值语句,如果变量是某个赋值操作符的左操作数,执行步骤3,否则执行步骤4 ; 步骤3、利用赋值操作符处理模块完成对该变量的赋值,执行步骤5 ; 步骤4、在当前状态上没有被赋值,那么变量的取值自动继承该变量上一个状态的取值,执行步骤5 ; 步骤5、加框架变量的处 理流程结束。
全文摘要
一种多类型MSVL语言解释系统其包括,变量类型声明模块、变量存储模块、算术表达式处理模块、赋值操作处理模块、强制类型转换命令处理模块及框架命令处理模块。在投影时序逻辑中及其程序设计语言MSVL中扩展了多种内置数据类型,增强了MSVL的描述能力,拓展了MSVL的应用领域,使MSVL可以更加灵活广泛地对多数据类型的系统进行建模和验证。本发明将变量的论域定义为取值和类型组成的二元组,将变量和常量的解释定义为二元组,使得每一个变量的类型作为变量的固有性质,提高变量引用的效率。针对于变量和常量的论域以及解释的扩展,给出相关函数和操作符的语义,使扩展类型后与类型相关的函数和运算符与现有的MSVL语句相兼容。
文档编号G06F9/45GK103150199SQ20131012018
公开日2013年6月12日 申请日期2013年4月8日 优先权日2013年4月8日
发明者段振华, 李洁, 王小兵, 田聪, 张南, 于研, 杨凯 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1