哈工大编译原理 第7章 运行时刻环境.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机学院 辛明影 第七章 运行时刻环境 16 i 15 b(形参) 14 1( 形参个数) 13  0(访问链) 12  返回地址 11  5(控制链) 过程S调用Q时 过程Q的活动记录 Top? Sp ? 控 24   d 23 c 22 v (形参) 21 u(形参) 20 2( 形参个数) 19  11(访问链) 18  返回地址 17  11(控制链) 过程Q调用R 过程R的活动记录 Top? Sp ? 过程R递归调用R 32   d 31 c 30 v (形参) 29 u(形参) 28 2( 形参个数) 27  11(访问链) 26  返回地址 25  17(控制链) 过程R的活动记录 Top? Sp ? 2.2 活动记录 对于pascal语言来说,运行过程中,当调用一个过程时,在栈顶构筑它的活动记录; 一个活动所需要的信息的每个数据项有相同的生存期,因此,组织成一个活动记录是很自然的。 当这个过程的活动执行完后,把它从栈顶弹出。 把过程的一个活动所需要的信息组织成一块连续的存储单元,称为活动记录。 源语言不同,实现方法不同,组成活动记录的域不同。常见语言的活动记录如后图所示。 返回值 实在参数 控制链 访问链 保存机器状态 局部变量 临时变量 临时变量:编译产生。 保存机器状态:调用过程的活动在调用点的机器状态,包括计数器,各种寄存器的值。 局部数据:过程中定义的 局部量。 访问链:指向本活动要访问的非局部数据所在的活动记录. 控制链:指向主调过程的活动记录的首地址。 形式单元 内情向量 连接数据 局部数据 sp top 2.3 编译时刻的局部数据的设计 局部数据域是编译时刻在编译过程中分配的。例如: PROCEDURE sub(x,y:real); VAR i ,j:integer; a:ARRAY[1..5] OF real; e, f : real; BEGIN ? f :=e+i*j; ? END; 名字所需的存贮空间的数量是由它的类型确定的 多字节对象存放于连续的字节中, 以第一个字节的地址作为该对象的地址 f 符号表 名字 形 类型 偏移量 活动记录布局=  老SP (sp,0) x 形 real 3 返回地址 (sp,1) y 形 real 4 2 (sp,2) (sp,3) (sp,5) i int 5 i (sp,9) j int 9 j (sp,13) a ?array 13 a (sp,53) e e real 53 (sp,61) f real 61 (sp,4) x y t1 t2 t3 (sp,62) (sp,63) (sp,64) 中间代码 * i j t1 * (sp ,5) (sp ,9) (sp ,62) + e t1 t2 + (sp ,53) (sp ,62) (sp ,63) itor t2 – t3 itor (sp ,63) – (sp ,64) := t3 – f := (sp ,64) – (sp ,61) 确定活动记录中局部数据的地址:假设 sp标记一个活动记录的开始的位置, dx表 示x的地址相对于sp的偏移量。那么, x在 过程的目标代码中的地址可写成

文档评论(0)

***** + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档