BUAA编译期末

OWPETER Lv4

介绍

能搜到的往年编译期末上机题似乎很少,本着造福后人的想法,在这里将我记得的内容传上来共大家复习时练手

考试题目分为三部分:

  1. 修改文法
  2. 课下强测+竞速排序
  3. 简答题

修改文法

  1. 增加Stmt -> 'cin' '>>' Lval ';',可能出现i,h错误
  2. 修改MulExp的产生式:MulExp -> UnaryExp | MulExp ('*' | '/' | '%' | '->') UnaryExp

说明:

  • cin只用于对可赋值左值Lval进行输入,语义等价于原先的getint()赋值输入,但以cin形式出现
  • ->含义为 ,保证
  • 新的Stmt需要

可通过的做法

  1. 主要修改llvm部分,先call一个getint(),然后把读到的值storeLval
  2. 也是主要修改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