
严禁用于商业用途
1
/
53
第二版前言
:
加入
2010
年试题类型提示
,
并将有把握的
2009
年的试题答案予以补充
。
略微修改了答
案明显有错误的题目
。
由于
2010
年编译原理题目太长
,
本人记忆力有限
,
所以只记住了题
型与变化的地方
。
编译原理比离散数学简单的多
,
而且难道不大
。
主要是记忆的成分比较多
,
所以大家
一定要加强训练
,
多做点题目
。
编译原理试题和南大
CS
本科的期末试题有很大联系
,
故同
学们复习的时候能够找到南大
CS
本科试卷
,
这样复习一定能够事半功倍
!
特别感谢冷城学长提供原始文档
。
希望大家能够南大
CS
金榜题名
!
Zyszys3
2010
年
8
月
19
日

严禁用于商业用途
2
/
53
前言
本文收集了
1997
年到
2007
年和
2009
年南京大学研究生入学考试
科目
《
编译原理
》
的
试卷
、
1997
年到
2007
年编译原理参考答案
以及
04
、
05
、
06
年南京大学计算机系
《
编译原
理
》
期末考试试卷
。
2008
年试题未找到
,
1997
年到
2007
年试题给出本人所做的答案
,
答
案
在考研复试准备中与同学进行核对过
,
可以确保大部分答案的正确性
,
2009
年试题答案
未与同学
核对
,
不能确保答案正确性
,
故不在此给出
。
南京大学在
1997
至
200
4
年
《
编译原理
》
作为初试的一部分
,
200
5
年开始作为复试
科
目
,
满分一般为
70
分
。
编译原理作为复试
主要考理解能力和分析能力
。
重点在于文法的分析
、
翻译方案和优
化方案
。
其中翻译方案
刚接触时
难度较大
,
深入理解后则很容易解决
。
复习的推荐书目为吕映芝的
《
编译原理
》,
清华大学出版社
。
张幸儿的书用来参考
,
了
解南大的编译原理中符号的书写规则
。
对于翻译方案一章则主要以张幸儿的书为主
,
吕映
芝的讲解深奥难懂
,
而且不对应南大试卷的重点
。
翻译方案一章中回溯的
方案一般不会考
(
只是一般不会考
,
如果要考到也没办法
)。
冷城
2009
年
7
月

严禁用于商业用途
3
/
53
1997
年
六
.
填空
1.
语言
L
的形式定义是
L(G[2]) = ______________________________
2.
当把
=>+
看作关系时
,
=>+
是关系
=>
的
________________________
3.
扫描程序自动生成的实质是
________________________________
4.
对原程序进行编译室
,
可以有以下几种中间表示
:
_______
、
_______
、
______
与
_______
等
。
5.
算符优先分析技术分析过程中
,
每步直接归约的是当前句型中的
________________
七
.
简要回答下列问题
1.
试简述二义性文法的概念
。
2.
试简要说明栈在编译实现中的作用
,
并列举至少
3
种不同的用途
。
3.
试简要说明运行时刻存储管理的策略
,
对照某种程序设计语言
,
说明策略的特点
。
八
.
试为下列状态转换图的相应的
NFA
确定化
,
要求写出关键步骤
。
九
.
试用某种高级程序设计语言为下列文发
G[M]
:
G[M]
:
M ::= Mab | Mac | dM | e
B ::= bB | b
写出递归下降识别程序
,
要求
:
指名所用程序设计语言
,
变量说明等
,
说明性信息可
以省略不写
,
但所写程序必须符合所用程序设计语言的语法规则
。
十
.
试对下列程序片断进行源程序级的优化
,
指名何处进行何种优化
。
s := 0;
for i := 1 to 100 do
begin
a := ( x + y ) * i;
b := ( x
-
y )
* i;
s := s + a + 2 * b;
end;
十一
.
试应用
LR
分析技术识别输入符号串
ababa
b
是否下列文法
G[
Z
]
的句子
。
按下列格式写
出分析步骤
。
步骤
栈
其余输入符号
动作
说明
G[Z]:
1. Z ::= CbBA
2. A ::= Aab
3.A ::= ab
4.B ::= c
5.B ::= Db
6.C ::= a
7.D ::= a
分析表见下页

严禁用于商业用途
4
/
53
ACTION
GOTO
a
b #
Z A B
C D
0
S3
1 2
1
acc
2
S4
3
r6
4
S8
5 6 7
5
S11
10
6
r
4
7
S9
8
r
6 r7
9
r
5
10
S13 r1
11
S12
12
r
3
r
3
13
S14
14
r
2 r2

严禁用于商业用途
5
/
53
1997
年答案
:
六
.
1. {x|s=>*x,
其中
S
为文法识别符号
,
且
x
∈
V
T
}
2.
传递性闭包
3. LR(k)
分析表的自动生成
4.
逆波兰式
,
三元式
,
抽象语法树
,
四元式
5.
最左素短语
七
.
1.
如果对于某文法的同一个句子
,
存在两个不同的语法树
,
则称该句子试二义性的
,
包括二义性句子的文法成为二义性文法
。
2.
提供一个后进先出数据结构实现类型
。
用途
1
:
存放标示符
,
实现静态作用域法则和最接近套嵌约定
。
用途
2
:
实现递归下降分析技术
。
用途
3
:
实现简单优先分析技术与算符优先分析技术
。
用途
4
:
实现
LR
分析技术
。
用途
5
:
作为整个程序数据空间
,
用于可变数据及管理过程的控制信息
。
3.
运行时存储管理策略有
:
静态存储分配
、
栈式分配和堆式分配
。
静态存储分配
:
在编译时能确定目标程序运行中所需全部数据空间大小
,
编译时安
排好运行时全部数据空间
,
确定每个数据对象的存储位置
。
栈式分配
:
将整个程序数据空间设计为一个栈
,
每当调用一个过程时
,
它所需要的
数据空间就分配在栈顶
,
每当过程工作结束时就释放这部分空间
。
堆式分配
:
程序运行时有一个大的存储空
间
,
每当需要时从这片空间中借用一块
,
不用时再退还
。
数据对象随即创建和消亡
。
每当过程调用结束时
,
局部变量值可保
存
,
被调用生存周期可比调用生存周期更长
。
八
.
1.
子集法构造
DFA
a
b
c
d
AB[1]
ABC[2]
BD[3]
E[4]
/
ABC[2]
ABC[2]
BD[3]
BDE[5]
/
BD[3]
AB[1]
D[6]
E[4]
CE[7]
E[4]
/
/
/
/
BDE[5]
AB[1]
D[6]
E[4]
CE[7]
D[6]
/
/
/
CE[7]
CE[7]
/
/
BD[3]
/