[发明专利]MSVL中结构体以及结构体指针类型的扩展解释系统及其扩展方法有效
申请号: | 201410334324.9 | 申请日: | 2014-07-15 |
公开(公告)号: | CN104182216B | 公开(公告)日: | 2017-11-03 |
发明(设计)人: | 王小兵;孙涛;段振华;赵亮;田聪;张南 | 申请(专利权)人: | 西安电子科技大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F17/50 |
代理公司: | 北京科亿知识产权代理事务所(普通合伙)11350 | 代理人: | 汤东凤 |
地址: | 710071 陕西省*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种MSVL中结构体以及结构体指针类型的扩展解释系统,具体包括结构体类型定义模块、结构体变量定义声明模块、结构体变量存储模块和结构体及结构体指针类型赋值操作处理模块;在该系统的基础上,还公开了一种MSVL中结构体以及结构体指针类型的扩展方法,该方法在MSVL基本数据类型(包括整型、浮点型、字符型、字符串型)和指针类型的基础之上扩展了结构体类型和相应的结构体指针类型,解决了现有MSVL中数据类型单一,应用范围窄的问题,使得MSVL可用于相对复杂的多数据类型系统的建模、仿真和验证。 | ||
搜索关键词: | msvl 结构 以及 指针 类型 扩展 解释 系统 及其 方法 | ||
【主权项】:
一种基于MSVL中结构体以及结构体指针类型的扩展解释系统的扩展方法,其特征在于,所述方法包括如下步骤:步骤1,对于MSVL中的基本数据类型引入指针类型;基本数据类型中引入指针类型具体流程如下:步骤1.1,所述基本数据类型集合用表示,其中包括原始数据类型int float char、列表类型int<>float<>char<>、数组类型int[]float[]char[],则给定数组长度的基本数据类型集合用表示,定义如下:并给出所述基本数据类型的论域其中:-Float=defF×{float},Float<>=defF*×{float<>},]]>Float[]=defFn×{float[]forn>1},float[]=def∪n≥1Float[n]]]>-Char=defC×{char},Char<>=defC*×{char<>}]]>Char[]=defCn×{char[]forn>1},Char[]=def∪n≥1Char[n];]]>步骤1.2,用IsT定义表示一种基本数据类型T,从而得到类型声明公式:Tx=defIsT(x);]]>其中步骤1.3,定义一个解释I[e]来表示变量e类型化的值,其中,nil表示变量还未定义;步骤1.4,对于每一种基本数据类型,引入指针类型,记作T*,而指针类型的集合用表示;指针类型的解释需要一个合适的地址模型,因此把指针t解释为(x,int),表示指针t指向变量x,而*t解释为x;步骤1.5,定义指针类型的论域如下:其中,代表所有变量名的集合,NULL是一个空指针;如果指针t为空指针,t的解释I[t]=(NULL,T*),否则I[t]=(x,T*);步骤1.6,定义指针的基本操作引用(&)和解引用(*)如下:步骤1.7,在基本数据类型,已经定义用IsT(·)来表示一种T类型,现在把指针类型扩展进去;对于每一个定义如下:IsT:并且其中,是bool类型,上式解释为,如果变量v是T类型,则为true,否则为false;步骤1.8,如下定义指针类型变量的声明:Tx=defIsT(x);]]>其中,步骤2,在指针类型的基础上引入结构体类型,扩展出结构体及结构体指针类型;通过结构体类型定义模块,并结合结构体类型定义的条件,给出正确的结构体类型定义;所述结构体类型定义模块包括结构体类型的定义;具体包括:步骤2.1,在指针类型的基础上引入结构体类型,用S表示结构体类型,表示一个可数的结构体类型集合,则有对每一种结构体类型,用S*表示结构体类型S的指针类型,则所述结构体类型中指针类型的集合为步骤2.2,初步定义结构体类型为:struct S{T1a1,…,Tkak};其中k≥1(/表示除去),为所有变量名的集合,所述结构体类型S中的每一个成员ak分别对应类型Tk;步骤2.3,定义好一个结构体类型S之后,用Sx来声明一个新的结构体变量,这样x就拥有的所有成员类型,用x.a来表示的每一个成员;定义一个结构体指针类型S*t,其中用t‑>a来指向结构体类型的成员a;如果结构体指针类型S*t为空指针,把t解释为(NULL,S*),否则,把t解释为(x,S*);结构体指针类型的论域定义如下:步骤2.4,结构体类型的论域定义如下:可以得出为一个嵌套的二元组,其中FPF(E1,E2)表示从集合E1到集合E2所有的有限偏函数,如下定义FPF:FPF(E1,E2)=def{E|E⊆E1×E2};]]>其中,E是有限的,并且如果(u,v),(u,v′)∈E,那么v=v′,即u和v是一一对应的;步骤2.5,对于基本数据类型和指针类型有现在对其进行扩展,把结构体类型引入就得到并且对于每一个都有IsT:并且步骤2.6,引入系统变量healthy,所述系统变量healthy为字符类型变量;所述变量healthy只有y和n两个值,默认值为y,在一些坏情况下设置为n;步骤2.7,对于每一个结构体类型S,引入rs表示它是否定义过:结构体S一旦定义,rs就一直保持是true,只有S未定义前是false;如果struct S{T1a1,…,Tkak}是不合法的,那么在当前状态为false,并且把变量healthy的值设置为’n’;步骤2.8,在结构体变量x拥有结构体类型S同样的成员以及类型时,则认为结构体变量x和结构体类型S是一致的,即:当结构体类型S定义为struct S{T1a1,…,Tkak}时,x被解释为其中步骤2.9,为了确保结构体变量及其成员的一致性,在结构体变量定义时记录它每个成员的信息,然后用来限制每一个结构体变量,因此引入一个系统变量mems,定义为:mems=def{(a1,T1),...,(akTk)}(k≥0);]]>这样得到一个特殊类型:其中MEMTYPE是用来记录结构体每个成员的信息;步骤2.10,得出结构体类型S的最终定义:其中当k=0时,{(a1,T1),...(akTk)}是空集步骤3,通过结构体变量定义声明模块,用MSVL中的类型声明语句定义结构体变量,并声明结构体以及结构体指针类型;所述结构体变量定义声明模块包括变量声明命令以及类型声明定义;具体包括:步骤3.1,所述结构体变量定义为一个嵌套的二元组;步骤3.2,为了检查结构体变量和定义的一致性,定义一个断言Cons,用Cons(x,mems)表示一致;对于每一个并且{(a1,T1),...(akTk)}∈MEMTYPE,都有:Cons并且当且定当有步骤3.3,结合所述系统变量healthy给出结构体以及结构体指针类型的声明如下:如果一个结构体变量声明Sx是合法的,一旦它被定义,rs就会一直保持,用□IsS(x)∧ConS(x,memS)来确保生成结构体变量x的类型和值和结构体类型S保持一致;如果因为结构体类型S没有定义而导致Sx和S*x不合法,那么在当前状态下rs为false,并且系统变量healthy设置为’n’;步骤4,通过结构体变量存储模块,根据所述结构体变量所声明的类型及其语义,将所述结构体变量保存在MSVL符号表中;所述结构体变量存储模块包含有变量类型标记和变量取值,所述变量类型标记根据变量声明语句记录变量的类型,变量存储变量的取值限制在其类型所对应的论域内;步骤5,在结构体及结构体指针类型赋值操作处理模块中对所述结构体以及结构体指针类型进行赋值操作;赋值操作的左操作数为变量,右操作数为表达式并对左操作数进行解释;对结构体指针类型的赋值操作步骤如下:对于赋值操作t=&x的执行,流程如下:步骤5.1.1,查找符号表,查看变量x是否存在,如果存在,执行步骤5.1.2,否则执行步骤5.1.5;步骤5.1.2,查找符号表,查看t是否为结构体指针类型,如果是,执行步骤5.1.3,否则执行步骤5.1.5;步骤5.1.3,判断&x的类型和结构体指针t的类型是否相等,如果是,执行步骤5.1.4,否则执行步骤5.1.5;步骤5.1.4,执行操作t=&x;步骤5.1.5,I[t]≠I[&x],向用户提示t=&x不满足;对于赋值操作x=*t的执行,流程如下:步骤5.2.1,查找符号表,看变量x是否在存在,如果存在,执行步骤5.2.2,否则执行步骤5.2.5;步骤5.2.2,在符号表中查找t,首先看t是否是一个结构体指针类型,如果是,然后再看*t的取值是否为数据域中的一个常量,如果是,执行步骤5.2.3,否则执行步骤5.2.5;步骤5.2.3,对变量x的取值进行判断,如果变量x的取值为nil时,将*t的取值赋给x,使得x=*t等式满足,赋值操作执行成功,否则执行步骤5.2.4;步骤5.2.4,如果x的取值不是nil,判断x的取值是否等于*t的取值,如果相等,那么等式满足,赋值操作执行成功,赋值操作流程结束,如果取值不相等,执行步骤5.2.5;步骤5.2.5,I[x]≠I[*t],向用户提示x=*t不满足;结构体类型的赋值操作步骤如下:对于赋值操作x=S.a的执行,流程如下:步骤5.3.1,查找符号表,看变量x是否存在,如果存在,执行步骤5.3.2,否则执行步骤5.3.5;步骤5.3.2,查找符号表,检查变量S是否为结构体类型,如果是,执行步骤5.3.3,否则执行步骤5.3.5;步骤5.3.3,遍历结构体类型S的存储链表,找出成员a所在项,如果查找成功,执行步骤5.3.4,否则执行步骤5.3.5;步骤5.3.4,执行操作x=S.a;步骤5.3.5,I[x]≠I[S.a],向用户提示x=S.a不满足;对于赋值操作x=t‑>a的执行,流程如下:步骤5.4.1,查找符号表,看变量x是否存在,如果存在,执行步骤5.4.2,否则执行步骤5.4.6;步骤5.4.2,查找符号表,看t是否为结构体指针类型,如果是,执行步骤5.4.3,否则执行步骤5.4.6;步骤5.4.3,查找符号表,看t所指的变量是否为结构体类型,如果是,执行步骤5.4.4,否则执行步骤5.4.6;步骤5.4.4,遍历t所指的结构体的存储链表,找出成员a所在项,如果查找成功,执行步骤5.4.5,否则执行步骤5.4.6;步骤5.4.5,执行操作x=t‑>a;步骤5.4.6,Ι[x]≠Ι[t‑>a],向用户提示x=t‑>a不满足。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201410334324.9/,转载请声明来源钻瓜专利网。
- 上一篇:一种生成模板预览图的方法和系统
- 下一篇:应用程序建置平台及其执行系统