正在加载图片...
1046 计算机研究与发展2013,50(5) 最后,本文介绍我们所设计并实现的基于上述 是按形状分析的需求所作的语言扩展,所允许的形 方法的PointerC语言的程序验证器的原型.它不仅 状有单链表、循环单链表、双向链表、循环双向链表 能自动验证操作易变数据结构程序的性质,也能自 和二叉树等.在图1的文法中,有关表达式的部分产 动验证使用一维数组程序的性质 生式被略去,assertion的语法在用到时再解释。 在PointerC中,指针类型的变量只能用于赋 1 PointerC语言和形状图逻辑简介 值、相等比较、存取指向对象等运算以及作为函数的 参数:指针算术和取地址运算(&)被禁止,并且没有 本节介绍验证器面向的编程语言PointerC和 指向指针类型的指针类型.malloc和free被看成是 验证器所依赖的形状图逻辑(shape graph logic)). PointerC预定义的函数,并且满足安全程序的最基 1.1 PointerC语言 本要求,例如malloc任何一次调用都能成功并且所 PointerC是一种强调指针类型并增加形状声明 分配空间同尚未释放空间无任何重叠。 的类C小语言,语法的主要产生式如图1所示.在 1.2形状图和形状图逻辑 结构体声明中,通过指针域指向形状的声明来确定 程序验证之前需要先基于形状图逻辑对程序进 这种结构体用来构造什么形状的数据结构.这同时 行形状分析为每个程序点构建形状图,这些形状图 也限定了该结构体类型的指针所能指向的形状.这 构成了程序验证所需要的指针信息.在此通过举例 program::=struct_def_list var_dec_list fun_def_list 来介绍形状图,形状图的严格定义请见文献[14幻. struct_def_list::=struct_def_list struct_defle 图2(a)是用形状图给出的单链表的归纳定义 struct_def::=typedef struct id field_dec_list)type_name; list(s).圆节点称为声明节点,代表指针型的声明变 var_dec_list::=var_dec_list var_decle var_dec::=type id_list: 量,唯一的出边上的标记是该变量的名字.框中没有 field_dec_list::=field_dec_list field_declfield_dec 标记的实线矩形称为结构节点,代表用malloc生成 field_dec::=field_type id; 的结构体变量,其出边代表它的指针域,边上的标记 id_list::=id_list,idid 是域名.框中有标记P的实线矩形称为谓词节点, fun_def_list::=fun_def_list fun_def\fun_def fun_def::=type id(param_list)bodyltype id()body 框的下方是该谓词的名字,谓词节点没有出边.框中 Param_list::=param_type id param_list.param_type id 有标记W的虚线矩形称为NULL节点,表示指向 body::=(entry_assertion var_dec_list stmt_list exit_assertion 它的边代表NULL指针.类似地,有标记的D虚线 type::=simple_typelelement_type [number]type_nameIvoid type_name::=id 矩形称为悬空节点,表示指向它的边代表悬空指针. element_type::=simple_type 图2(a)的谓词定义list(s)表示单链表分成空表(s field_type::=simple_typeltype_name":shape 是NULL指针)和非空(s指向一个结构节点,该节 param_type::=simple_typeltype_name" simple_type::=boollint GG9G巴 shape:=LISTIDLISTIC_LISTIC_DLISTITREEI.. list list entry_assertion::=assertion assertion:e (a)Definition of list (s) exit_assertion::=assertion assertion:e stmt_list:=stmt_list stmtlstmt stmt::=lval=exp:lval=malloc(type_name):if(exp)block lif(exp)block else block while(exp)loop_invariant block list,n.a n,a Ilval=id(exp_list):lid(exp_list):lal=id():lid(): (b)Definition of list (s,n,a) return:Ireturn exp:free(lval): block::=stmtlstmt_list) loop_invariant::=loop_invariant assertion:le exp::=numberl lval|NULLItruelfalse c dlist.n,a l-expl!explexp op expl(exp) (a→(n==0) (a→(n≥1) lval::=id\lval->id id Lexp] (c)Definition of c dlist (s,n,a) Fig.I Representative syntax of PointerC language. Fig.2 Three definitions of linked list. 图1 PointerC语言的语法(部分) 图2链表的几种定义ºæ$abcdÎϚj!¥CÈS/¿Í …†S -/G2891*<;SVÓDƒÞS*’H•¨¡ Ÿ+¤Dƒ±²³ò´µ¶¦VÓSc«$HŸ+ ¤DƒÙmm{´ÐVÓSc«H ; *%("$.+0GH9IJBKLMN aÑcdDƒÞ.ÒSPV<; -/G2891* K DƒÞšTUS›iÎÏ!;=379J137=4/JG<"H ;<; *%("$.+0GH -/G2891*nmÓÔrsՒ¥Yց›×Ý SÕ *»<;$<†SnqåN‚èi$š H¯ ¶¦þ×Ý6$rsArҁ›S×ÝÃ^~ ®¶¦þmæ§Øف›S´µ¶¦H®FG H u~uI¶¦þՒSrsšŸrÒS›H® )-$3-0(%Z7+-*"+-1,&-%.7+60--1,"-%.7+&*/-1,&-%.7+ 7+-*"+-1,&-%.7+%Z7+-*"+-1,&-%.7+7+-*"+-1,&&# 7+-*"+-1,&%Z8M79>95;810<8.1)&.,%1-1,"-%.7+*+4),-/0(,% 60--1,"-%.7+%Z60--1,"-%.7+60--1,"&# 60--1,"%Z+4),.1-%.7+% &.,%1-1,"-%.7+%Z&.,%1-1,"-%.7+&.,%1-1,"&&.,%1-1," &.,%1-1,"%Z&.,%1-+4),.1% .1-%.7+%Z.1-%.7+$ .1&.1 &*/-1,&-%.7+%Z&*/-1,&-%.7+&*/-1,&&&*/-1,& &*/-1,&%Z+4),.1!)0-0(-%.7+";$14&+4),.1!";$14 )0-0(-%.7+%Z)0-0(-+4),.1&)0-0(-%.7+$)0-0(-+4),.1 ;$14%Z),/+-4-077,-+.$/60--1,"-%.7+7+(+-%.7+,G.+-077,-+.$/* +4),%Z7.()%,-+4),&,%,(,/+-+4),'/*(;,-(&+4),-/0(,"&@/G> +4),-/0(,%Z.1 ,%,(,/+-+4),%Z7.()%,-+4), &.,%1-+4),%Z7.()%,-+4),&+4),-/0(," #7#0), )0-0(-+4),%Z7.()%,-+4),&+4),-/0(," 7.()%,-+4),%ZQ//4&G28 7#0),%Z:=!2&H:=!2&'-:=!2&'-H:=!2&2IFF&, ,/+-4-077,-+.$/%Z3;;918G/2077,-+.$/%&# ,G.+-077,-+.$/%Z3;;918G/2077,-+.$/%&# 7+(+-%.7+%Z7+(+-%.7+7+(+&7+(+ 7+(+%Z%60%Z,G)%&%60%Z(0%%$"!+4),-/0(,"%&G5!,G)";%$"J &G5!,G)";%$"J94;9;%$"J&R=G49!,G)"%$$)-./60-.0/+;%$"J &%60%Z.1!,G)-%.7+"%&.1!,G)-%.7+"%&%60%Z.1!"%&.1!"% &198012%&198012,G)%&&-,,!%60%"% ;%$"J%Z7+(+&)7+(+-%.7+* %$$)-./60-.0/+%Z4//7-G2@31G328077,-+.$/%&# ,G)%Z/*(;,-&%60%&#[KK&8109&534;9 &C,G)&+,G)&,G)$),G)&!,G)" %60%%Z.1&%60%C$.1&.1 ',G)( OGJH$ :9719;92838G@9;M283\/5-/G2891*432J03J9H i$ -/G2891*<;S<†!ßà" n~›àXS¹ùš²S<;º($šxyS ›‹¨Æ=&9:¨Æ=&ÚÒÆ=&9:ÚÒÆ= KÛÜÝfD¯i$Sb†6$‹h=>‚Sßàå N‚ˆÞ$077,-+.$/S<†¯müG¢…ßD ¯ -/G2891* 6$r s Õ ’ S ò Å à Ÿ m ¿  €&áf³´&Š«rÒPöfâ"Tì²1É´S ã´%rs"8K«‰Žâ"!]"äå$¥Øæ‹ rÒrsՒSrsՒD(0%%$"K&-,,tn -/G2891*ç~šSÉ´$¥Ø©ªABVÓSº/ aqù$­è (0%%$"èjm½ÔmDŸté¥Øš àžF$êß띞%èjpìD ;<= IJB9IJBKL VÓDƒíƒ¹q/¿›iÎÏPVÓ¢ £›àX1îçVÓ¸¦e›i$®é›i ¦tuVÓDƒš¹qSrss[D¯ïð­ Ãcd›i$›iSÖ×~šñòbp'$B(D OGJH' ,=199>95G2G8G/2;/54G2W9>4G;8H i' Æ=Só~š i'!3"nm›iô"S¨Æ=Sõö~š %.7+!7"D÷ѸÄ1×ÝѸ$É=rs’S×Ýò Å$ømS"ùÍSÃúnIòÅS6vDû6æ‹ ÃúSCüýÄ1¶¦Ñ¸$É=m (0%%$"Nt S¶¦þòÅ$¶"ùÉ=•SrsA$ùÍSÃú nA6Dû6‹Ãú ! SCüýÄ1¾®Ñ¸$ ûSz…nI¾®S6v$¾®Ñ¸æ‹"ùDû6 ‹Ãú " SþüýÄ1 #[KK Ѹ$= rÒ •SùÉ= #[KKrsDÕÿ‰$‹ÃúS # þü ýÄ1!Ñ¸$= rҕSùÉ=!rsD i'!3"S¾®~š%.7+!7"= ¨Æ=àt=!7 n #[KKrs"K"!7rÒm綦Ѹ$IÑ $%BD !"#$%&'( '%$($A%!A"
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有