首页 理论教育 编译原理与实践:L语言控制语句翻译指南

编译原理与实践:L语言控制语句翻译指南

时间:2023-11-17 理论教育 版权反馈
【摘要】:L语言的控制语句主要包括if-then-else语句、while-do语句、repeat-until语句以及for-to-do语句等四种,与布尔表达式的翻译模式构建方法相同,每种控制语句的翻译模式都是在表6-16翻译模式的基础上做了稍许修改得到的。因此,本节将在直接给出各控制语句的翻译模式基础上,重点讨论翻译模式的具体实现算法。

编译原理与实践:L语言控制语句翻译指南

L语言的控制语句主要包括if-then-else(含if-then)语句、while-do语句、repeat-until语句以及for-to-do语句等四种,与布尔表达式的翻译模式构建方法相同,每种控制语句的翻译模式都是在表6-16翻译模式的基础上做了稍许修改得到的。因此,本节将在直接给出各控制语句的翻译模式基础上,重点讨论翻译模式的具体实现算法

1.if-then-else(含if-then)语句

该语句的自下而上翻译模式如表6-17所示。

下面是与表6-17中的翻译模式相对应的语法制导翻译程序,是在语法分析程序的基础上添加了语义分析代码得到的。

表6-17 条件语句的翻译模式

2.for-to-do语句

假设循环步长为1,则for语句的产生式定义如下:

S→for i:=E1 to E2 do S1

执行该语句时,首先计算循环变量i的初值E1,然后计算终值E2,并将E2的值存放到临时变量T1中,进而根据i和T1的比较结果决定是否执行S1的代码。当S1的代码执行完毕或S1中出现跳出动作时,循环变量i应增加1,且重新判断循环条件是否成立。因此,for语句的中间代码结构如图6-21所示。

图6-21 for语句的中间代码结构

从图中可以看出,首次执行循环时循环变量i不增加1,此时语义动作goto over将跳过i:=i+1来执行。显然,在生成goto over这条三地址代码语句时,over的值可以直接给出,即比该语句的地址大2。但是,在重新循环时为使循环变量i增1,应该执行i:=i+1,因此,需要记录其地址,这里用again标记,以便在S1的代码生成之后能够回填S1.next,并且确定S1之后的那个无条件转移语句的转移目标。基于上述考虑,可以得出如表6-18所示的for语句的自下而上翻译模式。

应该注意的是,i在符号表中的入口entry(i)首先被保存在F.place中,这样做的好处是可以避免每次引用i时重复的查表动作。至于S.next的转向目标,则只有待目标位置确定之后才能回填。

与表6-18中的翻译模式相对应的语法制导翻译程序描述如下:

表6-18 for语句的翻译模式

(www.xing528.com)

3.repeat-until语句

repeat循环语句的产生式定义如下:

S→repeat S1 until E

该语句的执行顺序是,首先执行一遍S1的代码,进而判断条件E。若E为真,则结束循环,否则,应重复执行S1。因此,repeat语句的中间代码结构可用图6-22表示。

图6-22 repeat语句的中间代码结构

从图中可以看出,条件E的真出口E.true指向整个repeat语句的后面,目前无法确定;E的假出口E.false指向S1的第一条语句,该语句的地址用begin来标记,以便在E归约出来后能够进行回填。另外,由于S1本身也可能含有控制语句,当某种条件不满足时需要从S1中跳出并重新判断条件E,因此,S1.next应能够转到E的开始位置以判断是否继续循环。

基于上述考虑,可以得出如表6-19所示的repeat语句的自下而上翻译模式。

在翻译过程中,当扫描到关键字repeat时,表示将要开始生成S1的四元式,此时用语义变量R.begin记录下S1的入口。另外,E的开始位置也是一个转移目标,在扫描到until时,要执行回填S1.next的操作,这将由语义动作backpatch(S1.next,nextquad)来完成。当对产生式S→UE进行归约时,应回填E的假出口,并建立S语句对外的接口S.next,这是E为真时的待填转移链,其转向目标只有待目标位置确定之后才能回填。

与表6-19中的翻译模式相对应的语法制导翻译程序描述如下:

表6-19 repeat语句的语义规则

4.while-do语句

有关while语句的翻译模式和语法制导翻译程序可以参照repeat语句自行完成,这里不再赘述。

此外,需要补充说明的是,在遇到程序头部“program program id;”的时候,应该生成一个关于程序头部的四元式,定义为(program,id,_,_);而在遇到程序结束标记“end.”时,则应生成一个四元式(sys,_,_,_),用来处理与程序结束相关的工作。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈