编译原理复习题答案.doc
《编译原理复习题答案.doc》由会员分享,可在线阅读,更多相关《编译原理复习题答案.doc(16页珍藏版)》请在冰豆网上搜索。
二、概念题
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|TT→T*F|FF→(E)|i
(1)证明E+T*F是它的一个句型。
(3分)
答案:
(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-*+)
三元式序列:
OPARG1ARG2
(1)-cd
(2)*b
(1)
(3)+a
(2)
三、词法分析题
给出下面语言的相应文法
L1={anbnambm|n,m≥0}
答案:
S→AB|A|B|∑
A→ aAb|ab
B→ aBb|ab
给出下面语言的相应文法
L2={anbnci|n≥1,i≥0}
答案:
S→ AB|B
A→ a|aA
B→ bBc|bc
给出下面语言的相应文法
L3={anbncm|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,它接受S={a,b}上所有包含ab的字符串。
(要求:
先将正规式转化为NFA,再将NFA确定化,最小化)
答案:
(一)相应的正规式为(a|b)*ab(a|b)*
(二)①与此正规式对应的NFA为
②状态转换矩阵为:
③最小化:
{0,1,2}{3,4,5}
{0,2},1,{3,4,5}
b
a
a
0
1
b
3
b
a
④所以此等价的DFA为:
开始状态为0,终态集为{3},状态集为{0,1,3},
输入字母表是{a,b}状态转换图如上。
4、构造与正规式b(a|b)*ba等价的DFA
五、语法分析题
1、对下面的文法G:
Expr→-Expr
Expr→(Expr)|VarExprTail
ExprTail→-Expr|ε
Var→idVarTail
VarTail→(Expr)|ε
(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 #ExprTailVar id__id((id))# Expr→VarExprTail
2 #ExprTailVarTailid id__id((id))# Var→idVarTail
3 #ExprTailVarTail __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 #ExprTailVar id((id))# Expr→VarExprTail
10 #ExprTailVarTailid id((id))# Var→idVarTail
11 #ExprTailVarTail ((id))#
12 #ExprTail)Expr( ((id))# VarTail→(Expr)
13 #ExprTail)Expr (id))#
14 #ExprTail))Expr( (id))# Expr→(Expr)
15 #ExprTail))Expr id))#
16#ExprTail)) ExprTailVar id))# Exp→VarExprTail
17 #ExprTail))
ExprTailVarTailid id))# Var→idVarTail
18 #ExprTail))
ExprTailVarTail ))#
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分)
答案:
考虑下列产生式:
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ÚaT|aT|ÚaT
T®ÙaT|Ù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
S5
r6
6
5
r4
r4
6
s7
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
16
六、语法分析题
考虑文法:
S→AS|bA→SA|a
(1)列出这个文法的所有LR(0)项目。
(5分)
答案
0. 1. 2. 3.
4. 5. 6. 7.
8. 9. 10. 11.
(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|BbBaFIRST(AaAb)={a}FIRST(BbBa)={b}
FIRST(AaAb)∩FIRST(BbBa)=Φ
所以该文法是LL
(1)文法。
(2)证明该文法不是SLR的。
文法的LR(0)项目集规范族为:
I0={S’→.SS→.AaAbS→.BbBaA→.B→.}
I1