正在加载图片...
1050 计算机研究与发展2013,50(5) 生两个验证条件:循环人口点的断言蕴涵循环不变 到相应程序点的形状图G上的信息,因此验证条件 式和循环体最后一个语句之后的那个程序点的断言 应该是G∧Q→Q,但G上的信息必须符号化.把G 蕴涵循环不变式。 上的指针相等(包括指针等于NULL)断言符号化, 下面介绍把生成的验证条件提交给Z3时碰到 再加上浓缩节点下方的约束断言、链表长度断言(在 的3个问题及其解决办法 验证条件中出现链表长度断言时需要),形成符号断 1)把结构体的域名看成函数名,结构体的指针 言P,因此实际的验证条件是P∧Q→Q'.若G是空 看成函数的变元,以此克服Z3不具备有关访问路 图(如不涉及指针类型的程序),则验证条件直接就 径的知识带来的困难。 是Q→Q'. Bornat在考虑指针程序的证明时,把数据堆看 在把指针相等信息符号化时,为避免冗余,给出 成由指针索引的一群对象[门,把对象看成由名字索 G上相邻两个静态声明指针变量之间的关系,剩下 引的一组成员. 的相等关系可以推导.例如对于图3(b)的第1种情 在此采用类似的方式,把结构体的域名看成整 况,指针之间的相等关系转换成的符号断言如下: 数域上的一元函数名,把结构体的指针当成整型,作 ptrl==head(->next)A ptr==ptrl-> 为函数的变元.例如,第4节例1的结构体类型有两 next A ptrl(>next)"-==NULL, 个域ne.xt和data,它们分别被看成函数.验证条件 其中,第3个子断言不用给出,因为经过一个浓缩节 中可能有的head->next,ptr->data和ptrl-> 点再指向NULL节点的信息对验证条件的证明通 next->data这样的访问路径分别被翻译成next 常没有用处 (head),data(ptr)data (next(ptr1)).Z3 next 对于双向链表,相邻两个节点之间指向对方的 和data当成未解释函数[1町,就是不知其定义的函 指针形成一个等式,若域名分别是right和left,则 数.若有head==ptrl,则从编程语言的语义知道 有p>right>left==p或p>left>right-== head->next==tr1l->ext;在Z3中,若有head== p.那么,代表n个节点的浓缩节点之间就有很多个 ptr1,则从函数的性质也会得出ext(head)== 等式,好在一般来说,当这n个节点在G上被浓缩, next(ptrl). 验证条件就不会涉及其中的指针相等关系,所以在 2)引入辅助的二元函数来克服带上角标的访 将G符号化时不用给出这些相等关系。 问路径引起的困难。 断言中会出现像p(->next)”->data这样带 4 系统原型 上角标n并且n可以是线性表达式的访问路径,由 于n的值一般不能静态确定,因此该访问路径不可 基于形状图逻辑和程序分析的支持,我们实现 能翻译成data(next(…next(p)…)并且其中函数 了PointerC语言的一个程序验证器[a町,它能够验证 next的应用次数确定的表达式. 不涉及易变数据结构的程序,也能验证涉及各种链 可以把p(->next)"翻译成nextn(p,n),并引 表和二叉树的构建、插入和删除等的程序.除了验证 入一个二元函数nextn(p,n),它基于函数next来定 形状外,还能验证节点上数据的一些性质。 义(其中n≥0) 该验证器无需程序员提供有关数据结构形状的 p,n=0: 函数前后条件和循环不变式,但要求提供非指针型 extn(p,n)=df了ext(p),n=1; 数据的函数前后条件和循环不变式. (next(nextn(p,n-1)),n>1. 4.1系统流程及验证条件的生成 显然,nextn(p,n)表达的意思就是p(一> 该验证器分成下面几个模块,按所列次序顺序 next)".在访问路径的表示中,p(->next)+1就是 执行 p(>next)"->next;Z3有了函数extn的定义 1)普通编译器的前端 后,很容易推出nextn(p,n+1)==next(nextn(p, 对源程序进行词法分析、语法分析和静态语义 n)). 检查后生成抽象语法树, 3)将形状图上的信息用符号断言表示,以支持 2)形状分析 验证条件的证明. 遍历抽象语法树,根据形状声明和形状图逻辑 符号断言形式的验证条件Q→Q'的证明需要用 来生成各程序点的形状图.其中在遇到循环语句时,NŒçDƒ€@#9:‰n¸S8;op9:¨ò ‚K9:þºæmç<£íæSçVÓ¸S8; op9:¨ò‚D z.cdŒNtSDƒ€@„½ô I(Gqü S(ç(©ì¶…†‡†D $"Œ¶¦þSA6tÉ´6$¶¦þSrs tÉ´Sò|$Tïrs I(¨ýt‹h3(4 S6uªÃS/0H ^/1238¯JKrsVÓSƒÝG$Œ´µž t;rsvˆSmwPö'$+($ŒPöt;6vv ˆSmÐt¼D ¯ïÒmÕÿS…‚$Œ¶¦þSA6t1 ´AÍSm|É´6$Œ¶¦þSrs•t1’$² 1É´Sò|D­è$BÑ­$S¶¦þՒ‹Œ çA/,G+K10+0$•Ïà5tÉ´DDƒ€@ 6aŸ‹S#,01C$/,G+$)+-C$10+0 K)+-$C$ /,G+C$10+0 ®ÜS3(4à5xyt/,G+ !#,01"$10+0!)+-"K10+0!/,G+!)+-$""DI(Œ/,G+ K10+0 •tê…ßÉ´'$E($An¨6¶~šSÉ ´D}‹#,01ZZ)+-$$¤ôPV<;S<š6z #,01C$/,G+ZZ)+-$C$/,G+%¯I(6$}‹#,01ZZ )+-$$¤ ô É ´ S c « H J û " /,G+!#,01"ZZ /,G+!)+-$"D '"ˆ‰ÇÈSÛ|É´ÃrsªÍ¹ÃS3 (4ˆgS/0D 8;6J"ÈÚ)!C$/,G+"/ C$10+0®Üª ͹Ã/ ¥Ø/ aTnüc=>‚S3(4$; ¿/S€mh¨Ÿ{œ^~$+ïI3(4¨a Ÿxyt10+0!/,G+!,/,G+!)",""¥Ø¶6É´ /,G+Slm½´^~S=>‚D aTŒ)!C$/,G+"/ xyt/,G+/!)$/"$¥ˆ ‰mçÛ|É´/,G+/!)$/"$•/¿É´/,G+Ã~ š!¶6/*%"# /,G+/!)$/"A1& )$/A%% /,G+!)"$/A$% /,G+!/,G+/!)$/O$""$/$$ + , - D | ,$/,G+/!)$/"= > S } ~ A n )!C$ /,G+"/ D¯3(4S= 6$)!C$/,G+"/_$ An )!C$/,G+"/ C$/,G+%I( ‹ u É ´ /,G+/ S ~ š æ$_`³Ð"/,G+/!)$/_$"ZZ/,G+!/,G+/!)$ /""D ("’›iÍSs[mêë8;= $T\w Dƒ€@SƒÝD êë8;‚SDƒ€@@.@LSƒÝ¹qm üálVÓ¸S›iK ÍSs[$+ïDƒ€@ lInK#@.@L$#K ÍSs[¦êë@DŒK ÍSrsáf!_`rsf¿ #[KK"8;êë@$ ¢ÖÍ'(Ѹz…S238;&Æ=ZW8;!¯ Dƒ€@6"ÈÆ=ZW8;G¹q"$têë8 ;P$+ïCSDƒ€@nP#@.@LD}K n i!è¨VìrsՒSVÓ"$¤Dƒ€@€­A n@.@LD ¯Œrsáfs[êë@G$1íî$$ô" K Íá*Œç{œ×ÝrsòÅížShQ$#z SáfhQaTÐCD­èP¿i(!Q"S$¿ À$rsížSáfhQiótSêë8;èz# )+-$ZZ#,01!C$/,G+"QC$ #)+-ZZ)+-$C$ /,G+#)+-$!C$/,G+"(CQC$ZZ#[KK$ ¶6$(ç8;¨mô"$+1xmç'(Ñ ¸¢rÒ #[KKѸSs[PDƒ€@SƒÝ Mæ‹m]D P¿ÚÒÆ=$á*ŒçѸížrÒP…S rstmçf‚$}A6à5n-.3#+K%,&+$¤ ‹)C$-.3#+C$%,&+ZZ)Û)C$%,&+C$-.3#+ZZ )DÙ$É=/çѸS'(ѸížA‹_Hç f‚$‚¯mhÊ$•®/çѸ¯K ͏'($ Dƒ€@A¨JVì¶6SrsáfhQ$šT¯ ’K êë@G¨mô"®éáfhQD ? ]pqr /¿›iÎÏKVÓàXS\w$ÎÏCÈ u -/G2891*<;SmçVÓDƒÞ'$)($•Ÿ Dƒ ¨Vì³ò´µ¶¦SVÓ$HŸDƒVìhÆ =KÛÜÝS¦e&ƒ‰KUVfSVÓHVuDƒ ›-$ñŸDƒÑ¸Í´µSméc«H IDƒÞ%¹VÓ¼„&‹h´µ¶¦›S É´ƒæ€@K9:¨ò‚$#qù„&"rs’ ´µSÉ´ƒæ€@K9:¨ò‚H ?<; ]ps1t34uv6wx IDƒÞàtz.ó瑟$~š.½Ó„Ó …£H $"·PyÞSƒ† P-VÓ¢£®†àX&<†àXK{œ<š ‡æNtõö<†ÝH '"›àX ™õö<†Ý$,µ›×ÝK›iÎÏ ÃNthVÓ¸S›iH¶6¯ˆü9:<£G$ $%A% !"#$%&'( '%$($A%!A"
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有