欢迎来到天天文库
浏览记录
ID:51591851
大小:179.00 KB
页数:45页
时间:2020-03-24
《北大编译原理讲义chapter6_2.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、6.4对非局部名字的访问讨论基于活动记录的栈式分配。一个语言所规定的作用域规则决定了如何处理对非局部名字的引用。有静态和动态两种作用域规则。静态:考查程序正文来决定引用的名字是哪一个名字说明,如Pascal,C和Ada是众多语言中使用带有“最近嵌套”规定的词法作用域规则的语言;动态:在运行时刻考查最近的活动来决定应用到一个名字上的说明,如LISP和APL。16.4.1块一个块(Block)是一个含有局部数据说明的语句。{declarationsstatements}一个块与另一个块要么是独立的,要么一个块完全嵌入在另一个块之中,这种嵌套的性质有时称作块结构。在块结构语言中,说明
2、的作用域由最近嵌套规则给出:1.在块B中的一个说明的作用域包括B。2.如果名字x在块B中没有说明,那么,2x在B中的出现是在一个外围块B中的x的说明的作用域之内,并且使得: (a)B中有x的说明, (b)B是包围B的,相对于其它任何具有名字x的说明且包围B的块而言,B是离B最近的。对于pascal语言来说,一个过程是一个块,一个程序是一个块结构。而对于c语言来说,每个函数是一个块结构,而函数之间是不嵌套的。3main(){inta=0;/*B0-B2*/intb=0;/*B0-B1*/{intb=1;/*B1-B3*/{inta=2;printf(“
3、%d%d/n”,a,b);}{intb=3;printf(“%d%d/n”,a,b);}printf(“%d%d/n”,a,b);}printf(“%d%d/n”,a,b);}B0B1B2B34a0b0b1a2,b3图6.16函数main局部数据在活动记录中的按排块结构语言可以采用栈式分配。函数main的每个块可看成一个无参过程,块中的块可被看成一个语句。控制从块开始进入,遇块结束退出。B2和B3的生存期不相交,它们的局部数据可占用同一块存储空间。56.4.2不含嵌套过程的词法作用域C中过程定义不能嵌套(l)inta[11];(2)readarray(){…a…}(3)intp
4、artition(y,z)inty,z;{…a…}(4)quicksort(m,n)intm,n;{.…..}(5)main(){...a...}图6.17带有a的非局部出现的C程序6目标代码inta[11]栈堆1.函数外的数据和函数内的静态数据,静态分配于静态数据域。2.函数内的数据(out)栈式分配,运行进入任一函数,使用的数据,要么在当前的活动记录中;要么在静态数据域中。76.4.3含有嵌套过程的词法作用域图6.18带有嵌套过程的一个Pascal程序程序的静态嵌套结构:sortreadarrayexchangequicksortpartition8(1)programso
5、rt(input,output);(2)vara:array[0..10]ofinteger;(3)x:integer;(4)procedurereadarray;(5)vari:integer;(6)begin…a…end{readarray};(7)procedureexchange(i,j:integer);(8)begin(9)x:=a[i];a[i]:=a[j];a[j]:=x(10)end{exchange};9(11)procedurequicksort(m,n:integer);(12)vark,v:integer;(13)functionpartit
6、ion(y,z:integer):integer;(14)vari,j:integer;(15)begin…a…(16) …V…(17)…exchange(i,j);…(18)end{partition};(19)begin…end{quicksort};(20)begin…end.{sort}10程序的静态嵌套结构决定程序中每个过程中访问哪些外围过程中的数据。每个过程静态嵌套在哪些过程中,可用静态链static(p)表示:static(sort)=sortstatic(readarray)=sortreadarraystatic(exchange
7、)=sortexchangestatic(quichsort)=sortquichsortstatic(partition)=sortquichsortpartition运行时,过程的数据被组织成活动记录,为了实现非局部访问,过程的活动记录之间必须维持静态链反映程序的静态嵌套结构。116.4.3.1嵌套深度用过程的嵌套深度来表达一个过程在程序中的嵌套层次。令主程序的嵌套深度为1;从一个过程进入到一个被包围过程时嵌套深度加1。如图6.18中的位于(11)行上的过程quicksort的嵌套深度为
此文档下载收益归作者所有