编译原理课件17.ppt

编译原理课件17.ppt

ID:51593207

大小:198.00 KB

页数:21页

时间:2020-03-25

编译原理课件17.ppt_第1页
编译原理课件17.ppt_第2页
编译原理课件17.ppt_第3页
编译原理课件17.ppt_第4页
编译原理课件17.ppt_第5页
资源描述:

《编译原理课件17.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、5.8过程说明和过程调用的翻译过程说明和过程调用是一种常见的语法结构,绝大多数语言都含有这方面的定义。其形式随语言的不同而有所不同。过程说明方式有些语言过程说明由关键字(PROCEDURE,FUCTION)引导,有些语言则可直接定义。过程调用方式对于子程序过程,通常须使用过程语句或CALL语句;对于函数过程,一般把它们作为表达式中的一个初等量来引用。尽管过程说明和过程调用的形式因不同的语言而异,但在功能上和需做的语义处理工作上仍较类似。应当指出,过程说明和过程调用的翻译,还依赖于形式参数与实在参数结合的

2、方式以及数据存储空间的分配方式。5.8.1过程说明的翻译过程说明的翻译需要做如下的工作:1.在符号表中新登记一项,并填入有关的属性这些属性通常有:种属(过程或函数等)、是否为外部过程、数据类型(对函数而言)、形参个数、形参的信息(供语义检查用,如种属、类型等)、过程的入口地址等等。由于每个过程的登记项所需填写的信息较多,所以编译程序往往设置专门的过程名表,或者为过程名再建立一个附属的“过程信息向量”(见P229).过程信息向量的内容主要是形参的信息,并以某种方式和过程名的登记项连接起来.为每个形式参数分

3、配相应的存储单元,称为形式单元,供形实结合时传递信息之用.并将形参的名字、相应形式单元的地址,以及此形参的其它一些属性记入符号表。需要指出的是,对于具有嵌套结构的语言,为确保程序中全局量和局部量都能得到正确的引用,符号表及各量的数据空间是按嵌套的层次建立、分配的.有关这方面的问题将在第六章和第七章进行讨论。过程说明的翻译(续)2.当扫描到过程说明中的过程体时,产生执行过程体的代码.此时需完成:(1)产生将返回地址推入堆栈的代码(因过程调用可以嵌套和递归,所以应将各返回地址按调用的嵌套或递归层次依次压入栈

4、保存,若转子指令能自动完成将返回地址送入堆栈,此项工作可省去)。(2)产生形实结合的代码,即产生将实参的信息(实参的值或地址,它们在过程语句相应的代码序列中给出)分别送入相应形式单元的代码。接着,再产生执行过程体的代码.(3)产生有关从过程返回的代码(对于函数,在此之前应产生将函数值送入寄存器或指定地址的代码).闭说明过程的处理对于某些将过程说明写成闭说明的程序语言,在产生过程体的代码时,通常都把它处理为一个闭子程序的形式。因此,在每一过程体的代码之前,应有一条跳过过程体的无条件转移指令.但是,在产生此

5、指令时,过程体的代码尚未生成,故只能产生一条不完全的转移指令,并记录此指令的位置,待以后回填.显然,对于过程说明可以嵌套的语言,为了记录这些待回填位置,需使用一个指令地址栈。progp;proca;procb;procc;begin{c}…end;begin{b}…end;begin{a}…end;begin{p}…end.L1:GOTOL1;GOTOL2;L2:L3:L4:GOTOL3;GOTOL4;过程说明语句的文法下面,我们给出经过拆分的过程说明语句的文法,它包括函数、有参过程和无参过程的定义.相

6、应的属性翻译文法,可根据上述处理方案和相应的文法自行设计.ProcDefStatement→ProcName

7、ProcArgMSG)ProcArgMSG→ProcName(iden

8、ProcArgMSG,idenProcName→ProcKeyidenProcKey→procedure

9、function5.8.2实参和形参间的信息传递在执行过程调用时,首先应把实在参数传送给被调过程,以便被调过程能对实参执行相应的过程体。所谓把实参传送给被调过程,就是把实参的信息(如实参的值或地址)送入相应的形参单元之中

10、,在执行过程体时,就能从形参的形式单元中取得对应实参的值或地址。可采用两种不同的代码结构来传递实参的信息:1.先结合,后调用在控制转入被调过程前,将各实参的信息送入相应形参单元;2.先调用,后结合将实参的信息依次排列在转子指令前,当执行转子指令而进入过程后,被调过程根据返回地址,找到存放实参信息的单元位置,再把各实参信息送入相应形参的形式单元,然后再执行过程的目标代码.形实结合的方式1.引用调用(Callbyreference)控制转入被调过程后,由被调过程将实参的地址写入相应的形式单元.过程体中对形式

11、参数的任何引用或赋值,都按对相应形式单元间接访问的寻址方式为其产生代码。显然,执行过程时,对形参的赋值将会影响相应实参之值(右值).例如,PROCEDURESWAP(VARx,y:INTEGER);VARt:INTEGER;BEGINt:=x;x:=y;y:=t;END;若按引用调用方式,则执行过程语句SWAP(i,A[i])相当于执行如下操作:(x、y是指针变量)x=&i;y=&A[i];t=*x;*x=*y;*y=t;执行上述操作之后,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。