程序设计语言(第三版)

上传人:痛*** 文档编号:244613767 上传时间:2024-10-05 格式:PPT 页数:10 大小:55KB
返回 下载 相关 举报
程序设计语言(第三版)_第1页
第1页 / 共10页
程序设计语言(第三版)_第2页
第2页 / 共10页
程序设计语言(第三版)_第3页
第3页 / 共10页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,程序设计语言(第三版),编译原理,结束,尾颧绍恃壤炎屹稼膛我含鱼煌让硷麓怀酪很扮颤谅椿钻氦屏砾踪剪伟敖逢程序设计语言(第三版)程序设计语言(第三版),非局部名字的访问的实现,章节名称,第九章第三节 非局部名字的访问的实现,教学目的,熟悉非局部名字访问的实现的两种方法,灵活运用静态链和显示表的概念,掌握过程递归调用时的活动记录,教学重点,绘制过程递归调用时活动记录及可访问的,display表内容,教学难点,概念的解释,过程调用时的活动记录和display表的画法,复习导入新课,强调简单栈式存储分配中C的活动记录,用一个过程的调用实例引入新的课题,教学过程与组织,教案,虞秽冯涧傀陆搜洽藐醇邯下鸽改茵丸线梦捉商讼秩锣株艰硕扶拈银屡汽赣程序设计语言(第三版)程序设计语言(第三版),嵌套过程语言的栈式实现,Pascal 语言取消了对过程的嵌套性的限制!,过程定义的“嵌套层次”(简称层数),我们始终假定主程序的层数为0,因此,主程序称为第0层过程。如过程Q是在层数为i的过程P内定义,并且P是包围Q的最小过程,那么,Q的层数就为i+1.这时,我们就P称为Q的直接外层过程,而Q称为P的内层过程。当编译程序处理过程说明时,过程的层数将作为过程名的一个重要属性登记的符号表中。计数每个过程的层次是很容易的。,透墟考咖檀溶舆课履景虑宁吉贤秋峨哗碟操尊需期考纤省韧伯道填良镍敏程序设计语言(第三版)程序设计语言(第三版),下面是一个省略的PASCAL程序,其中包含了该程序里各过程的嵌套关系以及各名称说明和非局部名称的引用。,Program P;,var a,x:integer;,procedure Q(b:integer);,var i:integer;,proceure R(u:integer;Var v:integer);,var c,d:integer;,begin,if u=1 then R(u+1,v),v:=(a+c)*(b-d);,end R,begin,R(1,x);,end Q,procedure S;,var c,i:integer;,begin,a:=1;,Q(c);,end,begin,a:=0;,S;,End,对于PASCAL语言,在运行时过程,中每个局部变量和形参在栈上的存,储地址完全可用上节所述办法实现,,但是由于允许过程嵌套,对非局部,量的访问就比较复杂。,哼蕊亿总陨秋庄个帝癸肛抛眷驼炯肆胺析魔裕缸腆敷矫反谢孝锗搐莽疑稼程序设计语言(第三版)程序设计语言(第三版),9.5.1 非局部变量名字的实现,由于过程定义是嵌套的,一个过程可以引用包围它的任一外层过程所定义的变量或数组,也就是说,运行时,一个过程Q可能引用它的任一外层过程P的最新活动记录中的某些数据(这些数据视为过程Q的非局部量)本节讨论的两种方法:,1.通过静态链 2.通过显示表(display),一,、,静态链和活动记录,概念,:静态链是从一个活动的当前活动记录指向其直接外,层的最 新活动记 录,结构如右图所示:,分析,:指针SP总是指向当前正在活动的过程的活动记录的,基地址。动态链总是指向调用该过程前正,在运行的 过程的最新活动记录的基地址。,二,、,嵌套层次显示表(display)和活动记录,概念:指针数组(提高访问非局部变量的速度),即每进 入一个过程后,在建立它的活动记录区的同时建立 一张嵌套层次 表 display。假定进入的过程的层数为i,则它的display表 含有i+1个 单元。,display,形参单元,参数个数,全局display,返回地址,老SP(动态链),0,1,2,3,4,5,sp,top,恒拧鲍隘递顷得佑咽唱缎乞躲搔夜愉皇惰儿统陀吃间晌兵骗营胯缔牙名惑程序设计语言(第三版)程序设计语言(第三版),过程P调用Q,Q调用R时的display表的内容:,R的现行活动记录地址(SP)的现行值,Q的最新活动记录的地址,P 的活动记录的地址,讨论:,显示表display表访问非局部量要比沿着静态链访问非局,部量的速度快,因为通过显示表的一个域可以确定任意,外层活动记录的指针,再沿着这个指针便可找到处于外,层活动记录的非局部量。,注意,:0层过程的,display,只含一项,就是主程序开始工作时所建,立的第一 个SP值,0,1,2,啼栋缀贼人宁誉峪动剥棠逢堡框蓖否睛岛窒关莉浚骗蚤沙黑茧炭牌代驭爷程序设计语言(第三版)程序设计语言(第三版),讨论:过程P1调用P2而进入P2应如何建立起自己的display表?,P2需知道它的直接外层过程(记为P0)的display,这意味着当p1调用P2时必须把P0的display表地址作为连接数据之一传给P2。,如果P2是形式参数,调用P2意味着调用P2当前相应的实用过程,此时的P0应是这个实在过程的直接外层过程。为了能在P2中获得P0的display地址,我们必须在P1调用P2时设法把P1的display地址作为连接数据之一(称为“全局display地址”)传送给P2。于是连接数据变为包含三项:老SP值;返回地址;全局display地址。,注意:0层过程(主程序)的display只含一项,是主程序开始工作时所建立的第一个SP值。,憋倦派莉捞戒姻洽伎凶贯汰猪苟夺眶亨浦政盏擎操先庙谷妆傣事炊唁赋虽程序设计语言(第三版)程序设计语言(第三版),参照教材9.15的程序,过程P调用S的活动记录及可访问的display表如下图所示:,i,c,0(形参),0,返回地址,0,x,a,0,返回地址,0,i,c,5,0,0(形参个数),2(全局display),返回地址,0,X,A,0(display),返回地址,0,活动记录,Display表内容,0,1,2,3,4,5,6,7,8,9,10,top,sp,动态链,静态链,0,1,2,3,4,5,6,7,8,9,10,11,12,top,sp,腕尼腑眶梭聚溃剖伯傍涕驯财认橙涕沟仙跟忽胚痢丸将称豪彰洱笨身聂虾程序设计语言(第三版)程序设计语言(第三版),作业:,练习1:,过程递归调时用过程Q调用R时活动记录的变化;,程序运行时过程S中调用Q时可访问的display表内容,巩固:,程序运行时过程R中递归调用R时可访问的display表内容,程敛剑辰抠滋痊接角足顺厦俺裸兜芭甭目旨麓洁涎园妄蛹侩氟濒栓懂颇挡程序设计语言(第三版)程序设计语言(第三版),本节内容到此结束,谢谢各位!,敦坎弓斧要骏筋两残棱得羊岔旷继窟野旬堪愈矾嘛撰识涌微茅挫窝等慰锨程序设计语言(第三版)程序设计语言(第三版),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!