四元式序列转换虚拟机目标代码.doc

想预览更多内容,点击预览全文

申明敬告:

本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。如果您已付费下载过本站文档,您可以点击这里二次下载

文档介绍

四元式序列转换虚拟机目标代码

一、实验目的

1、熟悉和掌握四元式序列转换成目标代码的原理

2、设计一个程序,能使给定的任一四元式转换成虚拟目标代码。

二、实验步骤

1、需求分析

(1)、产生四元式序列翻译方案设计

对于产生四元式序列的翻译方案的设计,以下面的作为例子

关于赋值语句的四元式序列的翻译方案 S::=id=E{p:=lookup(id.name); if p≠NULL then genquad('::',E.place,''*p.place) else error} E::=E1+E2{E.place:=newtemp; Fenquad('+', E1 .place, E2 .place,E.place)} E::= E1 * E2 { E.place:=newtemp; Fenquad('*', E1 .place, E2 .place,E.place)}

   E::= - E1 {E.place:=newtemp; Genquad('NEG', E1.place,'',E.place)} E::=( E1){E.place:= E1 .place} E::=id{p:=lookup(id.name); if p≠NULL then E.place:=*p.place else error} 其中,过程genquad(op,x,y,z)功能是生成四元式:

op

x

y

z

(2)、四元式生成目标代码 从四元式序列生成目标代码的工作的主要问题是运算分量与计算结果的存取问题,在生成目标指令时,要考虑四元式中运算分量是在寄存器中还是在内存中。当在寄存器中时,以后还会被使用否,等等。例如,对于四元式 - x y z

如果x和y都不在寄存器中,则可生成下列目标指令: MOV x, Ri SUB y, Ri

计算结果z在寄存器Ri中。如果寄存器Ri与寄存器Rj分别包含x与

您可能关注的文档

最近下载