Intermediate-Code Generation
Intermediate-Code Generation
Intermediate-Code Generation
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%的其他同学的中间代码效