编译原理期末试卷(含答案)
- 格式:doc
- 大小:164.00 KB
- 文档页数:7
编译原理试题
计算机学院2001级 班 学号 姓名
题号 一 二 三 四 五 六 七 八 九 十
十一 十二 总分
满分 12 6 8 7 8 8 12
12 7 6 6 8
100
得分
一 选择题(12分)
【 】1.词法分析器的输入是 。
A.符号串 B.源程序 C.语法单位
D.目标程序
【 】2.两个有穷自动机等价是指它们的
。
A.状态数相等 B.有向弧数相等
C.所识别的语言相等 D.状态数和有向弧数相等
【 】3.文法G:S → xSx | y 所识别的语言是
。
A.xy*x B.(xyx)* C.xx*yxx* D.x*yx*
【 】4.设a,b,c为文法的终结符,且有优先关系ab和bc,则 。
A.必有ac B.必有ca
C.必有ba D.选项A、B和C都不一定成立
【 】5.若状态k含有项目“A→α.”,且仅当输入符号a∈FOLLOW(A)时,才用规则“A →α”归约的语法分析方法是 。
A.ALR分析法 B.LR(0)分析法
C.LR(1)分析法 D.SLR(1)分析法
【 】6.生成中间代码时所依据的是 。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则
【 】7.表达式(┐a∨b)∧(c∨d)的逆波兰表示为 。
A.┐ab∨∧cd∨ B.a┐b∨cd∨∧
C.ab∨┐cd∨∧ D.a┐b∨∧cd∨
【 】8.基本块 。
A.只有一个入口语句和一个出口语句 B.有一个入口语句和多个出口语句
C.有多个入口语句和一个出口语句 D.有多个入口语句和多个出口语句 二 判断题(6分。认为正确的填“T”,错的填“F”)
【T 】1.同心集的合并有可能产生“归约/归约”冲突。
【T 】2.一个文法所有句子的集合构成该文法定义的语言。
【 】3.非终结符可以有综合属性,但不能有继承属性。
【T 】4.逆波兰表示法表示表达式时无需使用括号。
【 】5.一个有穷自动机有且只有一个终态。
【】6.若过程p第k次被调用,则p的DISPLAY表中就有k+1个元素。
三 填空题(8分)
1.最常用的两类语法分析方法是 自顶向下
和
自低向上
分析法。
2.对于文法G[E]:E→T|E+T T→F|T*F F→P↑F|P P→(E)|i,句型T+T*F+i的直接短语为 ,句柄为 。
3.在LR(0)分析法中,若,βV*且aTV则称“A .”为 规约 项目,称“S .aβ”为 移进 项目。
4.在PL/0的目标代码解释执行时,寄存器B总是指向当前执行过程活动记录的
起始地址
,而寄存器T总是指向 栈顶
。
四(7分)有穷自动机M接受字母表={0,1}上所有满足下述条件的串:串中至少包含两个连续的0或两个连续的1。请写出与M等价的正规式。
五(8分)构造下列文法相应的有穷自动机。
G[S]: S → aA | bQ
A → aA | bB | b
B → bD | aQ
Q → aQ | bD | b
D → bB | aA E → aB | bF
F → bD | aE | b
六(8分)写一个文法,使其语言是:
L = { ambmanbn | m,n≥0 }
七(12分)已知文法
G[A]: A → aAB | a
B → Bb | d
(1)构造与G[A]等价的LL(1)文法;
(2)构造G’[A]的预测分析表。
八(12分)考虑文法
G[S]: S → AS | b
A → SA | a
(1)构造文法的可归前缀图(活前缀的DFA);
(2)判断文法是否是LR(0)文法,并说明理由。
九(7分)将下面程序段翻译成四元式序列。
while A
if A=1 then C:=C+1
else while A
A:=A+2;
十(6分)设有以下程序段
program main;
var a,b:integer;
procedure p(x,y,z:integer);
begin
y:=y+1;
z:=z+x
end;
begin
a:=2; b:=3; p(a+b,a,a); write(a)
end.
对于下列参数传递方式,分别写出执行程序后a的输出值。 (1)传名;
(2)传地址。
十一(6分)有一语法制导翻译如下所示:
S → bAb { print(”1”) }
A →(B { print(”2”) }
A → a { print(”3”) }
B → Aa) { print(”4”) }
若对输入序列b(((aa)a)a)b 进行自底向上分析,请写出输出序列。34242421
十二(8分)对PL/0语言扩充ELSE子句:
::= IF THEN [ ELSE ]
请在空缺处填空,完成条件语句的编译算法:
switch (SYM) {
„„
case IFSYM:
GetSym()
;
CONDITION(SymSetUnion(SymSetNew(THENSYM),FSYS),LEV,TX);
if (SYM==THENSYM) GetSym();
else Error(16);
CX1=CX; GEN(JPC,0,0);
STATEMENT(SymSetUnion(SymSetNew(ELSESYM),FSYS),LEV,TX);
if ( SYM!=ELSESYM ) CODE[CX1].A=CX;
else {
CX2=CX; GEN(JMP,0,0);
CODE[CX1].A=
cx (或者cx2+1)
;
STATEMENT(FSYS,LEV,TX);
CODE[cx2].A=cx
;
}
break; „„
}
CP_sample答案
题号 一 二 三 备 注
1 B ○ 自顶向下 自底向上
2 C ○ T,T*F , i T
3 D ╳ 归约 移进
4 D ○ 起始地址 栈顶
5 D ╳
6 C ╳
7 B
8 A
四.
五. 六.G: S→AB
**1) | 11)(0 | 00(1) | 0( A→aAb|ε
B→aBb|ε
七.修改后的文法G’[A] :
A→aA’ Select (A→aA’)={a}
A’→AB|ε Select (A’→AB)={a} Select(A’→ε)={#,d}
B→dB’ Select(B→dB’)={d}
B’→bB’|ε Select(B’→bB’)={b} Select(B’→ε)={#}
Select(A’→AB) Select(A’→ε)=
Select(B’→bB’) Select(B’→ε)=
G’[A]为LL(1)文法
预测分析表:
a b d # Z S A
B
D
Q a
b
a a
b
b b
b b b
a a A A→aA’
A’ A’→AB A’→ε A’→ε
B B→dB’
B’ B’→bB’ B’→ε
八.(1)可归前缀图 (2)因为存在冲突,所以不是LR(0)文法。
I0:S’.S
S.AS
S.b
A.SA
A.a I1:S’S.
AS.A
A.SA
A.a
S.AS
S.b
I2:Aa.
I3:Sb.
I4:SA.S
S.AS
S.b
A.SA
A.a I5:AS.A
A.SA
A.a
S.AS
S.b
I6:SAS.
AS.A
A.SA
A.a
S.AS
S.b I7:ASA.
SA.S
S.AS
S.b
A.SA
A.a SbSaAabAAabSabS AbaASSAba
九.100(J<, A, C, 102) 或: 100 if A
101(J, , , 113) 101 goto 113
102(J<, B, D, 104) 102 if B
103(J, , , 113) 103 goto 113
104(J=, A, 1, 106) 104 if A=1 goto 106
105(J, , , 108) 105 goto 108
106(+, C, 1, C) 106 C:=C+1
107(J, , , 112) 107 goto 112 (或goto 100)