编译原理-第10章(清华大学).ppt

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

第10章目标程序运行时的组织

;概述-代码生成解决语义gap

;概述;概述

;运行环境和存储分配

设计分析;决定运行管理复杂程度的因素——源语言本身;术语;例procedureA(m,n:integer);

beginrealz;

arrayB[m:n];

begin

·

·

·

end;

end;;数据表示(各种数据对象的存储分配);数据表示(固定长度,直接或间接表示);l;目标程序运行时的存储组织;l;简单的栈式分配方案

;嵌套过程语言的栈式

分配方案

;关键技术:解决对非局部量的引用(存取)。

设法跟踪每个外层过程的最新活动记录AR的位置。

跟踪办法:

1.用静态链(如PL/0的SL)。

2.用DISPLAY表。

;consta=10;

varb,c;

procedurep;

begin

c:=b+a;

end;

begin

read(b);

whileb#0do

begin

callp;

write(2*c);

read(b);

end

end.

;目标代码解释执行时数据栈的布局(运行栈的存储分配);目标代码的解释执行运行栈S;解决对非局部量的引用(存取)

用Display表;用Display表的方案;用Display表的方案;DISPLAY表的维护和建立

;当过程的层次为n,它的display为n+1个值。

一个过程被调用时,从调用过程的DISPLAY表中自下向上抄录n个SP值,再加上本层的SP值。

全局DISPLAY地址;分程序结构

ProcedureA(m,n);integerm,n;

B1:beginrealz;arrayB[m:n];

B2:beginreald,e;

L3:2

end;

B4:beginarrayC[1:m];1

B5:beginreale;

L6:54

end;

end;

L8:end;;分程序结构的存储

分配方案

;按照过程处理办法,意味着必须一层一层地通过“返回”来恢复所要到达的那个分程序的数据区,但不能直接到达。

例如:如果有一个从第5层分程序转出到达第1层分程序的标号L,虽然在第5层分程序工作时知道L所属的层数,我们极易从DISPLAY中获得第1层分程序的活动记录基址(SP),但是怎么知道第1层分程序进入时的TOP呢?唯一的办法是从5,4,3和2各层顺序退出。但这种办法是很浪费时间的。

;为了解决上述问题,可采取两种措施。第一,对每个过程或分程序都建立有自己的栈顶指示器TOP,代替原来仅有过程的栈顶指示器,每个TOP的值保存在各自活动记录中。这样,上述的第二个问题便可解决。第二,不把分程序看作“无参过程”,每个分程序享用包围它的那个最近过程的DISPLAY。每个分程序都隶属于某个确定的过程,分程序的层次是相对于它所属的那个过程进行编号的。

;:;3.参数个数和形式单元

4.DISPAY表。

5.过程所辖的各分程序的局部数据单元。对于每个分程序来说,它们包括:

(1)分程序的TOP值。当进入分程序时它含现行栈顶地址,以后,用来定义栈的新高度(分程序的TOP值);

(2)分程序的局部变量,数组内情向量和临时工作单元。

;B;数;参数传递

;(1)programreference(input,output);

(2)vara,b:integer;

(3)procedureswap({

您可能关注的文档

文档评论(0)

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

科技工作者

1亿VIP精品文档

相关文档