编译原理(王晓斌)第十三章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、只含半静态变量的栈式分配 仅允许递归调用 变量及活动记录长度可静态确定 一个单元可多次激活而有多个实例,每个活动记录是在单元每次激活时动态建立并与代码段建立绑定关系的 1.特点 2.处理方法 (1)current:表示当前活动记录的开始位置 (2)free:表示数据存储器下一个可用单元 (3)变量绑定于它在活动记录中的常数位移I 变量通过current变址访问 (4)A调用B时:在A活动记录的栈顶之上建立起绑定 于B的当前实例的活动记录 (5)从B返回时,释放其活动记录 3.动态连接和动态链 动态连接:A调用B时,B的活动记录中保存的A的活动记录地址 动态链:由动态连接组成的一个调用链 F G F E A A call E; E call F; F call G; G call F; ... ... ... ... ... 4.CALL P 的处理 返回地址 动态连接 返回地址 动态连接 A的活动记录 即将建立的 P的活动记录 current free A … CALL p … (1)保存返回地址 D[ free ] := ? (2)保存主调过程的current D[free + 1] := current (3)建立P的current current := free (4)调整free free := free + L (5)转子 ip := P的代码段首地址 CALL P 返回地址 动态链 返回地址 动态链 A的活动记录 P的活动记录 current free 进入过程P以后 5.RETURN语句的处理 (1)恢复free free := current (2)恢复主调过程的current current := D[current + 1] (3)返回 ip := D [free] 二、半动态变量的栈式分配 1. 活动记录内容 临时变量 返回指针 动态链接 静态链接 现场保护 参数个数 形式单元 局部变量 数组存储区 允许动态数组 2. 动态数组空间的分配 (1)编译时,分配内情向量表区,并产生在运行时动态建立内情向量和分配数组空间的指令。 (2)一个单元激活后(进入该单元),遇到动态数组说明时,调用上述指令(填内情向量,分配数组空间),并调整free := free + L 非局部环境的引用必须考虑变量的作用域 1. 静态作用域规则——最近嵌套规则 最外层单元为0层,若P是Q的直接外层, 则Q的层次 = P的层次 + 1 (1)嵌套的层次 三、允许过程嵌套定义的栈式分配 非局部环境引用规则 unit A; y: int; unit B; end B; y: int; unit C; end D; end C; …... unit D; …… …... end E; z: int; unit F; end G; unit G; x,y: int; …... …… …... unit E; z:=x+y; end F; …… …... end A; x: int; A B C D E F G (2)最近嵌套规则 (I)变量x在单元U1中被说明,则x的作用 域局部于U1,或称x在U1中是可见的 (II)变量x在U1中没有被说明,则x的作用域 是包围U1的说明了x的最小外层单元 2.动态作用域规则 最近活动规则 对非局部变量的引用:最近外层中说明的 动态作用域的最近外层:指的是动态调用外层 如A-E-F-G-F的调用序列:当前F的调用外层为G 对非局部环境的引用 1. 静态作用域规则 对非局部变量,引用的应是最近的“嵌套外层”中说明的变量 静态连接: 指向嵌套直接外层的最新活动记录的指针,它处于活动记录位移为2的存储单元中 静态链: 各嵌套程序单元的活动记录中,静态连接的序列构成一个静态链 (1)静态连接和静态莲 返回地址 动态链 current free 静态链 CALL P 内容回顾 1.静态分配 2.栈式分配 3.堆分配 变量与存储区域的绑定关系在编译时便可建立,并完成存储分配 当一个程序单元被激活时, 在栈顶分配其活动记录;当程序单元退出时,在栈顶将其活动记录撤销 动态变量的首地址、长度、类型等在编译时无法确定,在执行过程中也可能改变 内容回顾 1.静态分配 2.栈式分配 3.堆分配 分配方式 递归调用 动态数组 过程嵌套定义 只含半静态变量的栈式分配 返回地址 current free 动态链接 。。。。 CALL P D[ free ] := IP+5 D[free + 1] := current current := free free := free + L ip :=

文档评论(0)

seunk + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档