编译原理chapter6 语法分析.ppt

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理chapter6 语法分析

CNSUME 目标代码 PRDUCE 目标代码 Char *50 buf int next char c Char *80 buffer int next Cnsume 活动记录 prduce 活动记录 目标代码 静态数据 6.3.2 栈式存储分配 基于控制栈的原理:?存储空间被组织成栈,活动记录的推入和弹出分别对应于活动的开始和结束。 与静态分配不同的是,在每次活动中把局部名字和新的存储单元绑定,在活动结束时,活动记录从栈中弹出,因而局部名字的存储空间也随之消失。 ? 例6.5 图6.11表明当控制流通过图6.3的活动树时活动记录被推人或弹出运行时刻的栈中的情况,设寄存器top标记栈顶。 ? s S a:array top r r i:integer top top q(1,9) q(1,9) i:integer top p(1,9) p(1,9) i:integer top top q(1,3) q(1,3) i:integer top 图 6.11 栈式分配活动记录在栈中的变化 确定活动记录中局部数据的地址:假设 top-sp标记一个活动记录的开始的位置, dx表 示x的地址相对于top-sp的偏移量。那么, x在 过程的目标代码中的地址可写成 dx(top-sp) 在运行时刻,当把x的活动记录筑于栈顶时,寄 存器top- sp被赋于实际的地址, top- sp可以是 一个寄存器。 调用序列和返回序列 ? 通过在目标代码中生成调用序列和返回序列 实现过程的调用。激活一个过程的活动是执行 过程语句的结果。过程语句 p(e1,e2,……,en) 的目标代码(调用序列)完成任务: ??? 1. 调用者对实在参数求值,并把它们传送给 被调用过程的活动记录的参数域。 ??? 2.调用者在被调用者的活动记录中存放返 回地址和老top-sp之值。之后调用者把 top一sp之值增加到图6.12所示的位置。 ??? 3.被调用者存放寄存器值和其它状态信息。 ??? 4.被调用者初始化其局部数据并开始执行。 返回序列,return目标代码完成的任务是: ??? 1.被调用者在自己的活动记录的返回值域 中放一个返回值。 ??? 2.利用状态域中的信息,被调用者恢复 top-sp和其它寄存器,并且按返回地址转 移到调用者的代码之中。 ??? 3.调用者复制返回值到自己的活动记录中。 任务的划分,根据源语言、目标机器和操 作系统等具体情况而定。 上述任务,由运行支持子程序完成,可视为虚机指令。 ?可变长度的数据 源程序的例子 PROCEDURE exam(l,m,n:integer); VAR a:array [1..l] of real; b:array [1..m] of real; c:array [1..n] of real; BEGIN …… END; 编译时,不知 a,b,c的大小,仅对每个数组设置一个指针。 Control link ?a ?b ?c Top-sp top Array a Array b Array c top P的活动记录 P的动态数组 图6.13 动态分配的数组 活动记录的进栈和推栈 栈顶活动记录用两个指针top和top-sp指示。 top-sp指向栈顶活动记录保存机器状态域的末 端,用于访问局部数据。 top指向栈顶。 P调用q:栈[top+h]:=top-sp; top-sp:=top+h; top:=top+q的活动记录长度 从q的活动返回:top:=top-sp–q (h) top-sp:=栈[top-sp] p q top-sp top-sp top top h 6.3.3 堆式存储分配 1.局部名的值在活动结束时必须被保存。 ???2. 被调用者的活动生存期超过调用者。 用活动树不能够正确描绘这种语言的过 程之间的控制流。

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档