一种基于Coq的C++编译器变量作用域形式化方法与流程

文档序号:20028770发布日期:2020-02-28 10:07阅读:202来源:国知局
本发明属于计算机应用的
技术领域
:,具体涉及一种基于coq的c++编译器变量作用域形式化方法。
背景技术
::自区块链和虚拟币种市场诞生以来,各种安全问题层出不穷,由于各种安全问题导致的黑客攻击引起的损失也成文了行业内的关注重点。为了保证代码安全,业界提出了多种代码检测的方式。但就eos智能合约的形式化验证,现阶段还没有成熟的方案。出现这一现象主要是由于对工业级程序语义的形式化语义较为困难。形式语义与形式建模即为了对计算机系统的行为进行推理验证,需要对编程语言的语义进行严格的定义,使用形式模型对计算机系统的行为进行建模。虽然当前有很多项目已经实现了对以太坊的智能合约的形式化验证,但是极少有对eos智能合约的形式化验证。这主要是由于相较于由solidity编写的以太坊智能合约,由c++编写的eos智能合约的语法和语义更为复杂。在形式化eos智能合约时需要实现c++特有的语法特性形式化,其中c++变量作用域的形式化验证方案目前业界还未有成熟的解决方案。技术实现要素:本发明公开了一种基于coq的c++编译器变量作用域形式化方法,目的为解决coq解释器无法将含有变量作用域特性的代码正确解释为虚拟内存指令序列的问题。本发明主要通过以下技术方案实现:一种基于coq的c++编译器变量作用域形式化方法,采用record数学模型形式化表结构,采用inductive归纳定义形式化栈结构,采用match匹配形式化代码中引起分支的操作逻辑,采用fixpoint递归函数形式化重复行为操作逻辑。形式化验证:指从数学上完备地证明或验证程序的实现方案是否确实实现了程序设计所描述的功能。形式化/形式化方法:本发明中指代将某一实体或行为或特性抽象成coq中的可解释的数学模型。fspvm形式化验证引擎:指使用基于coq的形式化符号执行虚拟机[1](formalsymbolicprocessvirtualmachine,fspvm)验证智能合约安全性的解决方案。(yangz,leih.formalprocessvirtualmachineforsmartcontractsverification[j].internationaljournalofperformabilityengineering,2018)。编译器变量作用域特性:在编译器解释代码时,一个变量拥有其使用范围,超出使用范围的变量其读取/写入/创建等操作会受到限制。coq编译器:本发明中的coq编译器指代基于coq研发的针对c++进行解释的编译器。如图1所示,fspvm形式化验证系统可以分为:翻译器、coq解释器、虚拟内存三个部分。其基本流程如下:1、对于待验证的c++代码,翻译器将之翻译成可以被coq解释器解释运行的中间语言fvil编写成的代码。2、对于由fvil编写成的代码,coq解释器将其解释为对虚拟内存指令组成的序列。3、coq解释器执行序列中的虚拟内存指令更改虚拟内存状态。根据虚拟内存最终状态,系统给出对输入c++代码的形式化验证结果。本发明基于fspvm形式化验证系统,应用于其中的coq解释器,目的为解决coq解释器无法将含有变量作用域特性的代码正确解释为虚拟内存指令序列的问题。coq解释器正确解释含有变量作用域特性的代码这一问题可以看做,正确解释带作用域限制的变量操作方法,也即变量操作方法形式化中的目标。使用coq解释器解释目标代码等价于将目标代码在coq上形式化,这部分等价概念请参考fspvm(yangz,leih.formalprocessvirtualmachineforsmartcontractsverification[j].internationaljournalofperformabilityengineering,2018)。为了更好地实现本发明,进一步的,包括全局变量作用域表、局部变量作用域表栈结构形式化,主要包括以下步骤:步骤s1:表值结构形式化,利用inductive结构定义表值,dmt_init归纳子表示初始化表值,dmt_unit归纳子内部存储:虚拟内存地址、变量作用域标识符;步骤s2:表结构形式化,利用record数学模型模拟表结构,利用record的directlyaccess特性形式化字典结构的hash表快速查找逻辑;步骤s3:表栈结构形式化,利用inductive归纳定义栈结构,通过构造dmt_genesis归纳基形式化栈底,dmt_block归纳构造子形式化栈内元素,表栈内存储:作用域表类别、函数标识符、函数虚拟内存地址、作用域表结构;步骤s4:环境变量形式化,利用record数学模型模拟编译器环境变量,内部定义虚拟内存、全局变量表、局部变量表。为了更好地实现本发明,进一步的,包括步骤s5作用域表读写操作形式化,主要包括以下步骤:步骤s5-1:作用域表读操作形式化:s5-1-1、输入:变量作用域表、变量名;s5-1-2、输出:变量值或异常抛出;s5-1-3、定义形式化:读操作定义为变量名正常情况下返回变量名对应的值,输入非法变量名的情况下抛出异常;s5-1-4、coq形式化方法:采用match匹配形式化操作可能展开的两个分支,使用带有option限制的输出来形式化异常抛出操作;步骤s5-2:作用域表写操作形式化:s5-2-1、输入:变量作用域表、作用域表地址、待写入变量值;s5-2-2、输出:写入后更新的变量作用域表;s5-2-3、定义:写操作定义为返回指定地址的值更改为指定值的变量作用域表;s5-2-4、coq形式化方法:利用match匹配展开表结构分支,利用形式化方法s1、s2形式化全局变量作用域表结构。为了更好地实现本发明,进一步的,还包括步骤s6作用域表栈操作形式化,主要包括以下步骤:s6-1、表栈出栈操作形式化;s6-1-1、输入:局部变量作用域表栈;s6-1-2、输出:栈顶表出栈后的局部变量作用域表栈或异常抛出;s6-1-3、定义:若表栈内元素大于0则移除栈顶表返回表栈,否则抛出异常;s6-1-4、coq形式化方法:利用match匹配形式化操作可能展开的两个分支,使用带有option限制的输出来形式化异常抛出操作;s6-2、表栈入栈操作形式化:s6-2-1、输入:局部变量作用域表栈,待入栈局部变量作用域表;s6-2-2、输出:新表入栈后的局部变量作用域表栈;s6-2-3、定义:将待入栈局部变量作用域表置于表栈栈顶,返回局部变量作用域表栈;s6-2-4、coq形式化方法:利用形式化方法s3形式化局部变量作用域表,利用match匹配展开形式化方法s3构成的形式化局部变量作用域表栈;s6-3、栈顶表复制操作形式化:s6-3-1、输入:待复制局部变量作用域表、待继承变量名列表;s6-3-2、输出:复制产生的局部变量作用域表或异常抛出;s6-3-3、定义:若待集成变量名列表中的变量名都为合法变量名,则构造空白表,复制待复制局部变量作用域表中所有变量名对应地址的值至空白表,并返回该表;否则抛出异常;s6-3-4、coq形式化方法:利用match匹配形式化条件判断产生的程序分支,利用形式化方法s5-2形式化单变量写入作用域表操作,在此基础上利用fixpoint递归函数形式化多个变量值写入的重复性操作,使用带有option限制的输出来形式化异常抛出操作。为了更好地实现本发明,进一步的,包括步骤s7全局变量操作方法形式化,主要包括以下步骤:s7-1、全局变量读操作形式化:形式化方法s7-1包含以下形式化定义及coq形式化方法:s7-1-1、输入:虚拟内存、全局变量作用域表、待读取变量名、待读取变量类型;s7-1-2、输出:变量名对应的虚拟内存值或异常抛出;s7-1-3、定义:如果给出的变量名合法、对应全局变量作用域表有变量信息、对应虚拟内存地址中有合法值、该合法值与待读取变量类型一致,则返回该合法值;否则异常抛出;s7-1-4、coq形式化方法:使用fspvm中定义的内存读操作read_by_address,使用match匹配形式化条件判断产生的程序分支,使用形式化方法s5-1形式化对全局变量作用域表的读操作,使用带有option限制的输出来形式化异常抛出操作;s7-2、全局变量写操作形式化:s7-2-1、输入:虚拟内存、全局变量作用域表、待写入变量名、待写入变量值;s7-2-2、输出:写入修改后的虚拟内存或异常抛出;s7-2-3、定义:如果变量名合法、对应全局变量作用域表有变量信息、对应虚拟内存地址合法,则在虚拟内存的该地址处写入待写入变量值;否则异常抛出;s7-2-4、coq形式化方法:使用fspvm中定义的内存读操作write_by_address,使用match匹配形式化条件判断产生的程序分支,使用形式化方法s5-1形式化对全局变量作用域表的读操作,使用带有option限制的输出来形式化异常抛出操作。为了更好地实现本发明,进一步的,还包括步骤s8局部变量操作方法形式化,主要包括以下步骤:s8-1、局部变量读操作形式化:s8-1-1、输入:虚拟内存,局部变量作用域表栈,待写入变量名,待读取变量类型;s8-1-2、输出:变量名对应的虚拟内存值或异常抛出;s8-1-3、定义:如果给出的变量名合法、对应局部变量作用域表栈非空、对应局部变量作用域栈顶表有变量信息、对应虚拟内存地址中有合法值、该合法值与待读取变量类型一致,则返回该合法值;否则异常抛出;s8-1-4、coq形式化方法:使用match匹配展开inductive形式化定义的表栈结构,形式化获取栈顶表操作,使用形式化方法s7-1形式化对局部变量作用域栈顶表的读操作,使用带有option限制的输出来形式化异常抛出操作;s8-2、局部变量写操作形式化:s8-2-1、输入:虚拟内存、局部变量作用域表栈、待写入变量名、待写入变量值;s8-2-2、输出:写入修改后的虚拟内存或异常抛出;s8-2-3、定义:如果变量名合法、对应局部变量作用域表栈非空、对应局部变量作用域栈顶表有变量信息、对应虚拟内存地址合法,则在虚拟内存的该地址处写入待写入变量值;否则异常抛出;s8-2-4、coq形式化方法:使用match匹配展开inductive形式化定义的表栈结构性,形式化获取栈顶表操作,使用形式化方法s7-2形式化对局部变量作用域表栈顶表的写操作使用带有option限制的输出来形式化异常抛出操作。在本发明中包括:1、形式化定义,包括输入、输出、功能定义。2、在coq上具体如何形式化。这两部分描述如何在coq上形式化一个操作/行为/对象,也即在coq上的形式化方法。本发明使用了record数学模型形式化字典数据结构,相比传统的使用inductive形式化字典的方法,对字典值的读写行为效率极大增加。传统方法使用inductive归纳构造子,通过递归构造类似链表的结构形式化字典。由于这种递归构造,导致该方法形式化的字典读写效率十分低下。本发明使用record数学模型形式化字典结构,record结构拥有directlyaccess的特性,该特性保证了读写内部结构的效率。本发明的有益效果:(1)本发明使用了record数学模型形式化字典数据结构,较使用inductive归纳方法的传统形式化方式明显的提升了执行效率。(2)本发明实现了c++编译器变量作用域的形式化,解决了传统形式化方法无法对c++编译器变量作用域特性进行形式化验证的问题。(3)现有技术中的fspvm解释器在解释代码时,如果代码带有变量作用域特性,就会错误解释。采用本发明中的变量操作方法替代fspvm解释器里的解释变量操作方法可以让新的fspvm解释器正确解释带有作用域特性的代码。附图说明图1为fspvm形式化验证系统的结构示意图。具体实施方式实施例1:一种基于coq的c++编译器变量作用域形式化方法,采用record数学模型形式化表结构,采用inductive归纳定义形式化栈结构,采用match匹配形式化代码中引起分支的操作逻辑,采用fixpoint递归函数形式化重复行为操作逻辑。如图1所示,本发明基于fspvm形式化验证系统,应用于其中的coq解释器,目的为解决coq解释器无法将含有变量作用域特性的代码正确解释为虚拟内存指令序列的问题。coq解释器无法正确解释含有变量作用域特性的代码,即coq解释器无法正确解释带作用域限制的变量操作方法。为了解决这一问题,本发明将c++变量作用域特性形式化问题抽象为带有作用域限制的变量操作行为形式化问题。该问题核心为全局变量作用域表、局部变量作用域表栈操作形式化问题。而全局变量作用域表、局部变量作用域表栈操作形式化问题涉及全局变量作用域表、局部变量作用域表栈结构形式化问题。本发明采用record数学模型形式化表结构,inductive归纳定义形式化栈结构,match匹配形式化代码中引起分支的操作逻辑,fixpoint递归函数形式化重复行为操作逻辑等方式解决了上述问题。本发明使用了record数学模型形式化字典数据结构,相比传统的使用inductive形式化字典的方法,对字典值的读写行为效率极大增加。传统方法使用inductive归纳构造子,通过递归构造类似链表的结构形式化字典。由于这种递归构造,导致该方法形式化的字典读写效率十分低下。本发明使用record数学模型形式化字典结构,record结构拥有directlyaccess的特性,该特性保证了读写内部结构的效率。现有技术中的fspvm解释器在解释变量操作方法的时候,如果变量操作方法带有作用域特性,就会错误解释。采用本发明中的变量操作方法替代fspvm解释器里的解释变量操作方法可以使fspvm解释器正确解释带有作用域特性的代码。实施例2:一种基于coq的c++编译器变量作用域形式化方法,基于fspvm形式化验证引擎,目的为解决coq解释器无法将含有变量作用域特性的代码正确解释为虚拟内存指令序列的问题。主要包括以下步骤:1、全局变量作用域表、局部变量作用域表栈结构形式化方法:s1、表值结构形式化,利用inductive结构定义表值,dmt_init归纳子表示初始化表值,dmt_unit归纳子内部存储:虚拟内存地址、变量作用域标识符。inductivedomain_map_table_v:type:=|dmt_init:domain_map_table_v|dmt_unit:high_addres->address->dmt_sign->domain_map_table_v.s2、表结构形式化,利用record数学模型模拟表结构,利用record的directlyaccess特性形式化字典结构的hash表快速查找逻辑。recorddomain_map_table:type:=newdmt{dmt_0x00000000:domain_map_table_v;dmt_0x00000001:domain_map_table_v;…dmt_0x000000fe:domain_map_table_v;dmt_0x000000ff:domain_map_table_v;}.s3、表栈结构形式化,利用inductive归纳定义栈结构,通过构造dmt_genesis归纳基模拟栈底,dmt_block归纳构造子模拟栈内元素。inductivedmt_chain:type:=|dmt_genesis:dmt_chain|dmt_block:listdmt_address(*当前作用域变量列表*)->nat(*已占用内存地址*)->nat(*level*)->optionvariable_name(*函数名*)->dmt_type->domain_map_table->dmt_chain->dmt_chain.s4、环境变量形式化,利用record数学模型模拟编译器环境变量,内部定义虚拟内存、全局变量表、局部变量表。recordexe_environment:type:=newenv{exe_seg:memory;exe_dmts:dmt_chain;exe_global:domain_map_table;}.2、变量作用域表、变量作用域表栈操作方法形式化:s5、作用域表读写操作形式化。形式化方法s1包含以下形式化方法:s5-1、作用域表读操作形式化形式化方法s5-1包含以下形式化定义及coq形式化方法:s5-1-1、输入:变量作用域表、变量标识符;s5-1-2、输出:变量值或异常抛出;s5-1-3、定义形式化:读操作定义为变量名正常情况下返回变量名对应的值,输入非法变量名的情况下抛出异常;s5-1-4、coq形式化方法:采用match匹配形式化操作可能展开的两个分支,使用带有option限制的输出来形式化异常抛出操作。s5-2、作用域表写操作形式化形式化方法s5-2包含以下形式化定义:s5-2-1、输入:变量作用域表、作用域表地址、待写入逻辑变量值;s5-2-2、输出:更新后的变量作用域表;s5-2-3、定义:写操作定义为返回指定地址更改后的变量作用域表;s5-2-4、coq形式化方法:利用match匹配展开表结构分支,利用形式化方法s1、s2形式化全局变量作用域表结构。definitionread_dmt_basic(c:domain_map_table)(vn:variable_name):optiondomain_map_table_v:=matchnum_to_dmtaddrvnwith|none=>none|somedmt_addr=>somec.(dmt_addr)end.definitionwrite_dmt_basic(c:domain_map_table)(dmt_addr:dmt_address)(dmtv:domain_map_table_v):domain_map_table:=matchdmt_addrwith|dmtaddr_00000000=>modify_dmt_0x00000000cdmtv|dmtaddr_00000001=>modify_dmt_0x00000001cdmtv…|dmtaddr_000000fe=>modify_dmt_0x00000062cdmtv|dmtaddr_000000ff=>modify_dmt_0x00000063cdmtvend.s6、作用域表栈操作形式化形式化方法s6包含以下形式化方法:s6-1、表栈出栈操作形式化形式化方法s6-1包含以下形式化定义及coq形式化方法:s6-1-1、输入:局部变量作用域表栈;s6-1-2、输出:局部变量作用域表栈或异常抛出;s6-1-3、定义:若表栈内元素大于0则移除栈顶表返回表栈,否则抛出异常;s6-1-4、coq形式化方法:利用match匹配形式化操作可能展开的两个分支,使用带有option限制的输出来形式化异常抛出操作。s6-2、表栈入栈操作形式化形式化方法s6-2包含以下形式化定义及coq形式化方法:s6-2-1、输入:局部变量作用域表栈,待入栈局部变量作用域表;s6-2-2、输出:更新后的局部变量作用域表栈;s6-2-3、定义:将待入栈局部变量作用域表置于表栈栈顶,返回局部变量作用域表栈;s6-2-4、coq形式化方法:利用形式化方法s3形式化局部变量作用域表,利用match匹配展开形式化方法s3构成的形式化局部变量作用域表栈。s6-3、栈顶表复制操作形式化形式化方法s6-3包含以下形式化定义及coq形式化方法:s6-3-1、输入:待复制局部变量作用域表、待继承变量名列表;s6-3-2、输出:局部变量作用域表或异常抛出;s6-3-3、定义:若待集成变量名列表中的变量名都为合法变量名,则构造空白表,复制待复制局部变量作用域表中所有变量名对应地址的值至空白表,并返回该表;否则抛出异常;s6-3-4、coq形式化方法:利用match匹配形式化条件判断产生的程序分支,利用形式化方法s5-2形式化单变量写入作用域表操作,在此基础上利用fixpoint递归函数形式化多个变量值写入的重复性操作,使用带有option限制的输出来形式化异常抛出操作。(*出栈操作*)definitionpop_dmt_chain(dmtc:dmt_chain):optiondmt_chain:=matchdmtcwith|dmt_genesis=>none|dmt_block______dmtc_tail=>somedmtc_tailend.(*入栈操作*)definitionpush_dmt_chain_basic(dmtc:dmt_chain)(dmt:domain_map_table):dmt_chain:=matchdmtcwith|dmt_genesis=>dmt_blocknil00nonenamespacedmtdmtc|dmt_block_dmt_countdmt_level____=>dmt_blocknildmt_countdmt_levelnonefunspacedmtdmtcend.(*栈顶表部分复制*)fixpointpush_part_dmt_copy(dmt:domain_map_table)(vn_list:listvariable_name):optiondomain_map_table:=matchvn_listwith|nil=>someempty_dmt|consvntail=>matchread_dmt_basicdmtvnwith|none=>none|somedmt_v=>matchpush_part_dmt_copydmttailwith|none=>none|someresult_dmt=>matchdmt_vwith|dmt_init=>write_dmt_basicresult_dmtvndmt_init|dmt_unithaddrladdrsign=>write_dmt_basicresult_dmtvn(dmt_unithaddrladdrdmt_far)endendendend.3、变量操作方法形式化s7、全局变量操作方法形式化形式化方法s7包含以下形式化方法:s7-1、全局变量读操作形式化形式化方法s7-1包含以下形式化定义及coq形式化方法:s7-1-1、输入:虚拟内存、全局变量作用域表、待读取变量名、待读取变量类型;s7-1-2、输出:虚拟内存值或异常抛出;s7-1-3、定义:如果给出的变量名合法、对应全局变量作用域表有变量信息、对应虚拟内存地址中有合法值、该合法值与待读取变量类型一致,则返回该合法值;否则异常抛出;s7-1-4、coq形式化方法:使用fspvm中定义的内存读操作read_by_address,使用match匹配形式化条件判断产生的程序分支,使用形式化方法s5-1形式化对全局变量作用域表的读操作,使用带有option限制的输出来形式化异常抛出操作。s7-2、全局变量写操作形式化形式化方法s7-2包含以下形式化定义及coq形式化方法:s7-2-1、输入:虚拟内存、全局变量作用域表、待写入变量名、待写入变量值;s7-2-2、输出:虚拟内存或异常抛出;s7-2-3、定义:如果变量名合法、对应全局变量作用域表有变量信息、对应虚拟内存地址合法,则在虚拟内存的该地址处写入待写入变量值;否则异常抛出;s7-2-4、coq形式化方法:使用fspvm中定义的内存读操作write_by_address,使用match匹配形式化条件判断产生的程序分支,使用形式化方法s5-1形式化对全局变量作用域表的读操作,使用带有option限制的输出来形式化异常抛出操作。s8、局部变量操作方法形式化形式化方法s8包含以下形式化方法:形式化方法s8-1包含以下形式化定义及coq形式化方法:s8-1、局部变量读操作形式化s8-1-1、输入:虚拟内存,局部变量作用域表栈,待写入变量名,待读取变量类型;s8-1-2、输出:虚拟内存值或异常抛出;s8-1-3、定义:如果给出的变量名合法、对应局部变量作用域表栈非空、对应局部变量作用域栈顶表有变量信息、对应虚拟内存地址中有合法值、该合法值与待读取变量类型一致,则返回该合法值;否则异常抛出;s8-1-4、coq形式化方法:使用match匹配展开inductive形式化定义的表栈结构,形式化获取栈顶表操作,使用形式化方法s7-1形式化对局部变量作用域栈顶表的读操作,使用带有option限制的输出来形式化异常抛出操作。s8-2、局部变量写操作形式化形式化方法s8-2包含以下形式化定义及coq形式化方法:s8-2-1、输入:虚拟内存、局部变量作用域表栈、待写入变量名、待写入变量值;s8-2-2、输出:虚拟内存或异常抛出;s8-2-3、定义:如果变量名合法、对应局部变量作用域表栈非空、对应局部变量作用域栈顶表有变量信息、对应虚拟内存地址合法,则在虚拟内存的该地址处写入待写入变量值;否则异常抛出;s8-2-4、coq形式化方法:使用match匹配展开inductive形式化定义的表栈结构性,形式化获取栈顶表操作,使用形式化方法s7-2形式化对局部变量作用域表栈顶表的写操作使用带有option限制的输出来形式化异常抛出操作。(*读写全局变量*)definitionread_v_dmt(m:expanded_memory)(dmt:domain_map_table)(vn:variable_name)(t:type):optionvalue:=matchread_dmt_basicdmtvnwith|none=>none|somedmt_cube=>matchdmt_cubewith|dmt_init=>none|dmt_unithaddrladdrl=>read_by_addressmhaddrladdrendend.definitionwrite_v_dmt(m:expanded_memory)(dmt:domain_map_table)(vn:variable_name)(v:value):optionexpanded_memory:=matchread_dmt_basicdmtvnwith|none=>none|somedmt_cube=>matchdmt_cubewith|dmt_init=>none|dmt_unithaddrladdrl=>some(write_by_addressmvhaddrladdr)endend.(*读写局部变量*)definitionread_without_type_dmtc(m:expanded_memory)(dmtc:dmt_chain)(vn:variable_name)(t:type):optionvalue:=matchdmtcwith|dmt_genesis=>none|dmt_block_dmt_count___dmttail=>read_v_dmtmdmtvntend.definitionwrite_v_dmtc(m:expanded_memory)(dmtc:dmt_chain)(vn:variable_name)(v:value):optionexpanded_memory:=matchdmtcwith|dmt_genesis=>none|dmt_block_dmt_count___dmttail=>write_v_dmtmdmtvnvend.上述形式化方法中的read_by_address和write_by_address为fspvm体系中虚拟内存读写操作的形式化方法。expand_memory、high_address、address、value等为fspvm体系中的虚拟内存定义。本发明实现了c++编译器变量作用域的形式化,解决了传统形式化方法无法对c++编译器变量作用域特性进行形式化验证的问题。现有技术中的fspvm解释器在解释变量操作方法的时候,如果变量操作方法带有作用域特性,就会错误解释。采用本发明中的变量操作方法替代fspvm解释器里的解释变量操作方法可以让新的fspvm解释器能够解释带有作用域特性的代码。本专利将变量作用域形式化抽象为带有作用域限制的变量操作行为形式化问题。该问题核心为全局变量作用域表、局部变量作用域表栈操作形式化问题。而全局变量作用域表、局部变量作用域表栈操作形式化问题涉及全局变量作用域表、局部变量作用域表栈结构形式化问题。本专利采用record数学模型形式化表结构,inductive归纳定义形式化栈结构,match匹配形式化代码中引起分支的操作逻辑,fixpoint递归函数形式化重复行为操作逻辑等方式解决了上述问题。本发明使用了record数学模型形式化字典数据结构,相比传统的使用inductive形式化字典的方法,对字典值的读写行为效率极大增加。传统方法使用inductive归纳构造子,通过递归构造类似链表的结构形式化字典。由于这种递归构造,导致该方法形式化的字典读写效率十分低下。本发明使用record数学模型形式化字典结构,record结构拥有directlyaccess的特性,该特性保证了读写内部结构的效率。以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1