BUAA编译期末
介绍
能搜到的往年编译期末上机题似乎很少,本着造福后人的想法,在这里将我记得的内容传上来共大家复习时练手
考试题目分为三部分:
- 修改文法
- 课下强测+竞速排序
- 简答题
修改文法
- 增加
Stmt -> 'cin' '>>' Lval ';',可能出现i,h错误 - 修改
MulExp的产生式:MulExp -> UnaryExp | MulExp ('*' | '/' | '%' | '->') UnaryExp
说明:
cin只用于对可赋值左值Lval进行输入,语义等价于原先的getint()赋值输入,但以cin形式出现->含义为,保证 - 新的
Stmt需要
可通过的做法
- 主要修改llvm部分,先call一个
getint(),然后把读到的值store进Lval - 也是主要修改
MulExp的llvm,可以使用等差数列求和公式进行计算
简答题
选择llvm、pcode和选择mips的简答题不太一样,我只看了mips的。
会给你一个具体的testcase,让你结合testcase以及自己的代码说明:
- 函数传参时,如果参数超过4个你是如何处理的
- 调用函数前你是否会对正在使用的寄存器进行保护,说明你是如何保护的
- 某个函数有一个参数是数组
int a[],说明你的目标代码如何通过局部变量j访问a[j] - 结合具体代码实现,说明你的编译器对某两个函数进行了哪些优化
总之就是考的很细,因为我发现前面改文法一般不会涉及到mips层,所以就在这里考。
竞速排序
不会展示排名,如果课下没bug直接过
- Title: BUAA编译期末
- Author: OWPETER
- Created at : 2026-01-11 21:44:41
- Updated at : 2026-01-11 22:01:47
- Link: https://owpeter.github.io/2026/01/11/编译期末/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments