编译原理复习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、概念题
1、设有文法:P→P+Q|Q
Q→Q*R|R
R→(P)|i
(1)证明Q*R+Q+Q是它的一个句型。

(3分)
(2)给出Q*R+Q+Q的所有短语,直接短语和句柄。

(4分) (3)给出句子i+i*i的最右推导。

(4分)
(4)给出句子i+i*i的最左推导。

(4分)
2、设有文法:E→E+T|T T→T*F|F F→(E)|i (1)证明E+T*F是它的一个句型。

(3分)
⇒+⇒+*
答案:E E T E T F
(2)给出E+T*F的所有短语,直接短语和句柄。

(4分) 短语: E+T*F, T*F,
直接短语: T*F
句柄: T*F
(3)给出句子i+i*i的最右推导。

(4分)
3、写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。

答案:逆波兰式:(abcd-*+)
三元式序列:
OP ARG1 ARG2
(1) - c d
(2) * b (1)
(3) + a (2)
三、词法分析题
给出下面语言的相应文法
L1={a n b n a m b m|n,m≥0}
答案:S→AB|A|B|∑
A→aAb|ab
B→aBb|ab
给出下面语言的相应文法
L2={a n b n c i|n≥1,i≥0}
答案:S→AB|B
A→a|aA
B→bBc|bc
给出下面语言的相应文法
L3={a n b n c m| m,n≥1,n为奇数,m为偶数}。

答案:文法G(S):S→AC
A→aaAbb/ab
C→ccCcc/cc
四、词法分析题
1、构造下面正规式相应的DFA
((0|1)*|(11)*)*
(要求:先将正规式转化为NFA,再将NFA确定化,最小化)2、构造下面正规式相应的DFA
1(0|1)*101
答案:
I I0 I1
{X} Ф{A,B,C}
{A,B,C} { B,C} { B,C,D}
{B,C} { B,C} { B,C,D}
{B,C,D} { B,C,E} { B,C,D}
{B,C,E} { B,C} {B,C,D,y}
{B,C,D,y} {B,C,E} { B,C,D}
3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。

(要求:先将正规式转化为NFA,再将NFA确定化,最小化)答案:(一)相应的正规式为(a|b)*ab(a|b)*
(二) ①与此正规式对应的NFA为
②状态转换矩阵为:
③ 最小化:
{0,1,2} {3,4,5} {0, 2},1, {3,4,5}
④所以此等价的DFA 为:开始状态为0 ,终态集为{3} ,状态集为{0,1,3} , 输入字母表是{a,b} 状态转换图如上。

4、构造与正规式 b(a|b)*ba 等价的DFA
五、语法分析题 1、对下面的文法G: Expr →- Expr
Expr →(Expr)|Var ExprTail ExprTail →- Expr|ε Var →id VarTail VarTail →(Expr) |ε
b
a
a
0 1
b
3
b
a
(1)构造LL(1)分析表。

(12分)
答案:
(1)FIRST(Expr)={_ , ( , id } FIRST(ExprTail)={_ , ε } FIRST(Var)={id} FIRST(VarTail)={ ( , ε}
FOLLOW(Expr)={# , ) } FOLLOW(ExprTail) ={# , ) }
FOLLOW(Var) ={_ , # , ) } FOLLOW(VarTail) ={_ , # , ) }
(2)给出对句子id—id((id))的分析过程。

(8分)
步骤符号栈输入串所用产生式
0 #Expr id_ _id((id))#
1 # ExprTail Var id_ _id((id))#Expr→Var ExprTail
2 # ExprTail VarTail id id_ _id((id))#Var→id VarTail
3 # ExprTail VarTail _ _id((id))#
4 # ExprTail _ _id((id))#VarTail→ε
5 # Expr_ _ _id((id))# ExprTail→_ Expr
6 # Expr _id((id))#
7 # Expr_ _id((id))#Expr→_Expr
8 # Expr id((id))#
9 # ExprTail Var id((id))#Expr→Var ExprTail
10 # ExprTail VarTail id id((id))#Var→id VarTail
11 # ExprTail VarTail ((id))#
12 # ExprTail )Expr( ((id))#VarTail→(Expr)
13 # ExprTail )Expr (id))#
14 # ExprTail ) )Expr( (id))#Expr→(Expr)
15 # ExprTail ) )Expr id))#
16# ExprTail ) ) ExprTail Var id))#Exp→Var ExprTail
17 # ExprTail ) )
ExprTail VarTail id id))#Var→id VarTail 18 # ExprTail ) )
ExprTail VarTail ))#
19 # ExprTail ) )
ExprTail ))#VarTail→ε
20 # ExprTail ) ) ))#ExprTail→ε
21 # ExprTail ) )#
22 # ExprTail # ExprTail→ε
23 # # 分析成功
2、对下面的文法G:
E→TE’
E’→+E|ε
T→FT’
T’→T|ε
F→PF’
F’→*F’|ε
P→(E)|a|b|∧
(1)计算这个文法的每个非终结符的FIRST和FOLLOW。

(8分)答案:FIRST(E)={(,a,b,^}
FIRST(E')={+,ε}
FIRST(T)={(,a,b,^}
FIRST(T')={(,a,b,^,ε}
FIRST(F)={(,a,b,^}
FIRST(F')={*,ε}
FIRST(P)={(,a,b,^}
FOLLOW(E)={#,)}
FOLLOW(E')={#,)}
FOLLOW(T)={+,),#}
FOLLOW(T')={+,),#}
FOLLOW(F)={(,a,b,^,+,),#}
FOLLOW(F')={(,a,b,^,+,),#}
FOLLOW(P)={*,(,a,b,^,+,),#}
(2) 证明这个文法是LL(1)的。

(6分) 答案:考虑下列产生式:
'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε
FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ
FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法.
(3) 构造它的预测分析表。

(6分)
3、已知文法G[S] 为: S->a|(T) T->T,S|S
①消除文法G[S]中的左递归,得文法G´[S]。

②文法G´[S]是否为LL(1)的?若是,给出它的预测分析表。

4、对下面的文法G:
S → S ∨ a T | a T | ∨ a T
T →∧ a T | ∧ a
(1) 消除该文法的左递归和提取左公因子;
(2) 构造各非终结符的FIRST和FOLLOW集合;
(3) 构造该文法的LL(1)分析表,并判断该文法是否是LL(1)的。

答案:
5、文法G(S)
及其LR分析表如下,请给出串baba#的分析过程。

(1) S → DbB (2) D → d (3) D →ε(4) B → a (5) B → Bba (6) B →ε
LR分析表
ACTION GOTO
b D a # S B D
0 r3 s3 1 2
1 acc
2 s4
3 r2
4 r6 S
5 r
6 6
5 r4 r4
6 s
7 r1
7 S8
8 r5 r5
答案:
步骤状态符号输入串
0 0 # baba#
1 02 #D baba#
2 024 #Db aba#
3 0245 #Dba ba#
4 0246 #DbB ba#
5 02467 #DbBb a#
6 024678 #DbBba #
7 0246 #DbB #
8 01 #S # acc
六、语法分析题 考虑文法:
S →AS|b A →SA|a
(1) 列出这个文法的所有LR(0) 项目。

(5分) 答案
0.'→⋅S S 1.'→⋅S S 2.S AS →⋅ 3.S A S →⋅ 4.S AS →⋅ 5.S b →⋅ 6.S b →⋅ 7.A SA →⋅ 8.A S A →⋅ 9.A SA →⋅ 10.A a →⋅ 11.A a →⋅
(2)给出识别文法所有活前缀的DFA 。

(5分) (3)求所有非终结符的FOLLOW 集。

(5分)
(4)文法是SLR 文法吗?若是,构造出它的SLR 分析表,否则说明理由。

(5分) 不是SLR 文法
状态3,6,7有移进归约冲突 状态3:FOLLOW(S ’)={#}不包含a,b
状态6:FOLLOW(S)={#,a,b}包含a,b,;移进归约冲突无法消解 状态7:FOLLOW(A)={a,b}包含a,b ;移进归约冲突消解 所以不是SLR 文法。

七、证明题
1、证明下面文法是LL(1)的但不是SLR(1)的。

S→AaAb|BbBa
A→ε
B→ε
首先该文法无左递归存在,没有公共左因子。

其次:对于S→AaAb|BbBa FIRST(AaAb)={a} FIRST(BbBa)={b}
FIRST(AaAb)∩FIRST(BbBa)=Φ
所以该文法是LL(1)文法。

(2)证明该文法不是SLR的。

文法的LR(0)项目集规范族为:
I0={S’→.S S→.AaAb S→.BbBa A→. B→.}
I1={ S’→ S. }
I2={ S→A.aAb }
I3={ S→B.bBa }
I4={ S→Aa.Ab A→. }
I5={ S→Bb.Ba B→. }
I6={ S→AaA.b }
I7={ S→BbB.a }
I8={ S→AaAb. }
I9={ S→BbBa. }
考察I0:
FOLLOW(A)={a,b} FOLLOW(B)={a,b} FOLLOW(A)∩FOLLOW(B)= {a,b} 产生规约-规约冲突。

所以该文法不是SLR(1)文法。

2、证明下面文法是SLR(1)但不是LR(0)的。

S→A
A→Ab|bBa
B→aAc|a|aAb
解:文法G[S]:
0:S→A
1:A→Ab
2:A→bBa
3:B→aAc
4:B→a
5:B→aAb
构造LR(0)项目集规范族:
状态项目集转换函数
0 S→·A
A→·Ab
A→·bBa GO[0,A]=1 GO[0,A]=1 GO[0,b]=2
1 S→A·
A→A·b ACCEPT
GO[1,b]=3
2 A→b·Ba
B→·aAc
B→·a
B→·aAb GO[2,B]=4 GO[2,a]=5 GO[2,a]=5 GO[2,a]=5
3 A→Ab·R1
4 A→bB·a GO[4,a]=6
5 B→a·Ac GO[5,A]=7
B→a·
B→a·Ab A→·Ab A→·bBa R4
GO[5,A]=7 GO[5,A]=7 GO[5,b]=2
6 A→bBa·R2
7 B→aA·c
B→aA·b
A→A·b GO[7,c]=8 GO[7,b]=9 GO[7,b]=9
8 B→aAc·R3
9 B→aAb·
A→Ab·R5 R1
状态5存在“归约-移进”冲突,状态9存在“归约-归约”冲突,因此该文法不是LR(0)文法。

状态5:
FOLLOW(B)={a},因此,FOLLOW(B)∩{b}=Φ
状态9:
FOLLOW(B)={a},FOLLOW(A)={#,b,c},因此FOLLOW(B)∩FOLLOW(A)=Φ
状态5和状态9的冲突均可用SLR(1)方法解决,构造SLR(1)分析表如下:
状态
ACTION GOTO
a b c # A B
0 S2 1
1 S3 ACCEPT
2 S5 4
3 R1 R1 R1
4 S6
5 R4 S2 7
6 R2 R2 R2
7 S9 S8
8 R3
9 R5 R1R1R1
该SLR(1)分析表无重定义,因此该文法是SLR(1)文法,不是LR(0)文法。

八、语义分析题
1、将语句
if ((A<0) (B>0)) then while (C>0) do C:=C-D
翻译成四元式
答案:100 (j<, A, 0, 104)
101 (j, -, -, 102)
102 (j>, B, 0, 104)
103 (j, -, -, 109)
104 (j>, C, 0, 106)
105 (j, -, -, 109)
106 (-, C, D, T1)
107 (:=, T1, -, C)
108 (j, -, -, 104)
109
2、写出下面语句经语法制导翻译后所生成的四元式代码序列。

if x<y then while e>c do c:=c+1 else x:=x+5
答案:假设初始为100,则四元式代码序列为
100 if x<y goto 102
101 goto 107
102 if e>c goto 104
103 goto 109
104 M:=C+1
105 C:=M
106 goto 102
107 N:=X+5
108 X:=N
109。

相关文档
最新文档