翻译可执行语句时,首先应根据每个源程序的语法结构和语义设计出相应的中间代码结构,找出源与中间代码的对应关系,给出对数据结构的描述方法和从源到中间代码的转换算法。
语义分析的最终目的是将源程序转换为一个等价的中间代码文件,这将用到两个辅助函数:emit()和newtemp()。
1.函数emit()
其功能是将一个新的四元式加入四元式表的末尾。若定义intertable为一个四元式表,全局变量nextquad为当前四元式的编号,则该函数可描述如下:
2.函数newtemp()
其功能是生成一个新的临时变量。由于一个四元式中只有两个参与运算的参数和一个结果,然而在表达式等运算中参与运算的数不止两个,因此需要使用临时变量来保存中间结果。假定临时变量的命名规则是T后跟一个数字,且该数字随运行过程逐步增加,于是该函数可描述如下:
在给出了函数emit()和newtemp()的实现算法之后,下面介绍简单赋值语句翻译模式的设计与实现过程。
表6-11给出了只做整数运算的简单赋值语句的翻译模式,从中可以看出,关于表达式E的计算是按照括号优先,其次是取负运算,然后是乘除,最后为加减的顺序。
表6-11 简单赋值语句的翻译模式
(www.xing528.com)
简单赋值语句的中间代码形式如下所示:
E的代码
i:=E.place
其中,“E的代码”指的是计算算术表达式的值的三地址代码序列,可以采用四元式形式予以表达,然后将最终结果赋给i。
例如,按照表6-11中所示模式对算术表达式A:=B+C*(-D)进行翻译将得到表6-12中的四元式序列(假定在执行该语句前四元式的标号已经为k)。
表6-12 A:=B+C*(-D)的四元式序列
关于简单赋值语句的翻译模式可用下述函数予以实现,所采用的方法是递归下降的语法制导翻译方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。