14.07.2013 Views

Intermediate-Code Generation

Intermediate-Code Generation

Intermediate-Code Generation

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

上述所有的关键字(例如 CALL、IF、DEC 等)也都必须大写,否则虚拟机会将其看作一个<br />

变量名。<br />

在本次实习中,你可能需要在前一次实习的代码中做如下更改:<br />

s 在符号表中预先添加 read()和 write()两个预定义的函数。其中 read()函数没有任何参数,返<br />

回值为 int 型(代表读入的整数值);write()函数包含一个 int 类型的参数(代表要输出的整数<br />

值),返回值也为 int 型(固定返回 0)。添加这两个函数的目的是让 C--程序拥有可以和控制<br />

台进行交互的函数接口,在具体翻译的过程中 read()函数可以直接对应 READ 操作,write()<br />

函数可以直接对应 WRITE 操作。<br />

在本次实习中,你可以对输入文件做如下假设:<br />

s 假设 1:输入文件中不会出现浮点类型的常数或者变量<br />

s 假设 2:输入文件中不会出现类型为结构体或者高于 1 维的数组的变量<br />

s 假设 3:任何参数都只能为简单变量,也就是说,数组和结构体不会作为参数传入某个函数<br />

中<br />

s 假设 4:所有变量的存储空间都放到该变量所在的函数的活动记录中,不存在一段全局的存<br />

储空间对变量进行存放<br />

s 假设 5:函数不会返回一个数组类型或者结构体类型的值<br />

与上次实习一样,尝试去掉上面假设 2 或者假设 3 并加以实现将会作为选做内容:<br />

s 你的程序能够对出现结构体类型的输入文件进行正确翻译(选做内容 1)<br />

s 你的程序能够对出现高维数组的输入文件进行正确翻译(选做内容 2)<br />

s 你的程序可以处理数组和结构体作为参数传入某个函数的情况。对于数组和结构体而言,如<br />

果它们作为某个参数,则该参数代表这个数组/结构体的首地址(选做内容 3)<br />

由于目前理论课的进度还没有跟上,故代码的运行效率不在本次实验的考虑范围之内。不过,作<br />

为选做内容,你可以自行考虑一些启发式的方法对代码进行简单的优化:<br />

s 你所生成的中间代码在我们专门设计的 benchmark 上能够比 50%的其他同学的中间代码效<br />

率都要高(选做内容 4)<br />

s 你所生成的中间代码在我们专门设计的 benchmark 上能够比 80%的其他同学的中间代码效

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!