编译原理期末复习题汇总.docx
《编译原理期末复习题汇总.docx》由会员分享,可在线阅读,更多相关《编译原理期末复习题汇总.docx(33页珍藏版)》请在冰豆网上搜索。
编译原理期末复习题汇总
3.2 是非判断,对下面的陈述,正确的在陈述后的括号内写T,否则写F。
(1)有穷自动机接受的语言是正则语言。
()
(2)若r1和r2是Σ上的正规式,则r1|r2也是。
()
(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。
()
(4)令Σ={a,b},则Σ上所有以b为首的字构成的正规集的正规式为b*(a|b)*。
()
(5)对任何一个NFAM,都存在一个DFAM',使得L(M')=L(M)。
()
(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。
()
答案
(1) T
(2) T (3) F
(4) F (5) T (6)T
3.3 描述下列各正规表达式所表示的语言。
(1) 0(0|1)*0
(2) ((ε|0)1*)*
(3) (0|1)*0(0|1)(0|1)
(4) 0*10*10*10*
(5) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)*
答案
(1) 以0开头并且以0结尾的,由0和1组成的符号串。
(2) {α|α∈{0,1}*}
(3) 由0和1组成的符号串,且从右边开始数第3位为0。
(4) 含3个1的由0和1组成的符号串。
{α|α∈{0,1}+,且α中含有3个1}
(5) {α|α∈{0,1}*,α中0和1为偶数}
3.4 对于下列语言分别写出它们的正规表达式。
(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。
(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。
(3) Σ={0,1}上的含偶数个1的所有串。
(4) Σ={0,1}上的含奇数个1的所有串。
(5) 具有偶数个0和奇数个1的有0和1组成的符号串的全体。
(6) 不包含子串011的由0和1组成的符号串的全体。
(7) 由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。
答案
(1) 令Letter表示除这五个元音外的其它字母。
((letter)*A(letter)*E(letter)*I(letter)*O(letter)*U(letter))*
(2) A*B*....Z*
(3) (0|10*1)*
(4) (0|10*1)*1
(5) [分析]
设S是符合要求的串,|S|=2k+1(k≥0)。
则S→S10|S21,|S1|=2k(k>0),|S2|=2k(k≥0)。
且S1是{0,1}上的串,含有奇数个0和奇数个1。
S2是{0,1}上的串,含有偶数个0和偶数个1。
考虑有一个自动机M1接受S1,那么自动机M1如下:
和L(M1)等价的正规表达式,即S1为:
((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*
类似的考虑有一个自动机M2接受S2,那么自动机M2如下:
和L(M2)等价的正规表达式,即S2为:
((00|11)|(01|10)(00|11)*(01|10))*
因此,S为:
((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*0|
((00|11)|(01|10)(00|11)*(01|10))*1
(6)1*|1*0(0|10)*(1|ε)
(7)接受w的自动机如下:
对应的正规表达式:
(1(01*0)1|0)*
3.6 给出接受下列在字母表{0,1}上的语言的DFA。
(1) 所有以00结束的符号串的集合。
(2) 所有具有3个0的符号串的集合。
答案
(a)DFA M=({0,1},{q0,q1,q2},q0,{q2},δ)
其中δ定义如下:
δ(q0,0)=q1 δ(q0,1)=q0
δ(q1,0)=q2 δ(q1,1)=q0
δ(q2,0)=q2 δ(q2,1)=q0
(b)正则表达式:
1*01*01*01*
DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},δ)
其中δ定义如下:
δ(q0,0)=q1 δ(q0,1)=q0
δ(q1,0)=q2 δ(q1,1)=q1
δ(q2,0)=q3 δ(q2,1)=q2
δ(q3,1)=q3
3.7构造等价于下列正规表达式的有限自动机。
(1)10|(0|11)0*1
(2)((0|1)*|(11))*
答案
(1)DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},δ)
其中δ定义如下:
(2)δ(q0,0)=q1 δ(q0,1)=q2
(3)δ(q1,0)=q1 δ(q1,1)=q3
(4)δ(q2,0)=q3 δ(q2,1)=q1
(5)
(6)
(2)DFA M=({0,1},{q0},q0,{q0},δ)
(7)其中δ定义如下:
(8)δ(q0,0)=q0 δ(q0,1)=q0
(9)
3.8给定右线性文法G:
S->0S|1S|1A|0B
A->1C|1
B->0C|0
C->0C|1C|0|1
试求一个于G等价的左线性文法G'
3.9试对于下列正规表达式使用证明定理3。
5的构造算法构造非确定的有限自动机。
请给出每个自动机在处理输入符号串ababbab的过程中的动作序列。
(1)(a|b)*
(2)(a*|b*)*
(3)((ε|a)b*)*
3.10转换练习3.9中的每个NFA为DFA。
并给出每个DFA在处理输入符号串ababbab的过程中的动作序列。
3.11试把练习3.10中得到的DFA的状态给以最小化。
答案
(1),
(2),(3)的DFAM相同,化简结果为:
(4)
3.12我们可以证明两个正规表达式是等价的,如果它们的最小状态DFA是相同的(除了状态的名字以外)。
利用这一结论,请说明下列正规表达式都是等价的。
(1)(a|b)*
(2)(a*|b*)*
(3)((ε|a)b*)*
答案
根据3.11的结果知这几个正规表达式是等价的。
3.13对于下列正规表达式构造最小状态的DFA。
(1)(a|b)*a(a|b)
(2)(a)b)*a(a|b)(a|b)
5.对如下文法:
G[S]:
SabS|aaB|ad
BbbB|b
分别给出句子abaabbb和ad的句柄
句子ad的语法分析树为:
句子abaabbb的语法分析树为:
所以句子abaabbb的句柄是b;句子ad的句柄是ad.
二、(10分)说明如下文法是否是LL
(1)文法,若不是,将其转换为LL
(1)文法。
最后给出该文法的LL
(1)分析表。
G[A]:
ABe
BBb|a
文法中有左递归,不是LL
(1)文法。
转换为G′:
ABe
BaB′
B′bB′|λ
Predict(ABe)={a}
Predict(BaB′)={a}
Predict(B′bB′)={b}
Predict(B′λ)={e}
LL
(1)分析表:
a
b
e
A
Be
B
aB′
B′
bB′
λ
4.给出识别正则表达式((a|bc)*d)+的NFA。
5.已知文法G[S]:
S→S;G│G
G→G(T)│H
H→a│(S)
T→T+S│S
找出句型:
a(T+S);H;(S)的短语、简单短语和句柄。
短语:
a,T+S,a(T+S),H,a(T+S);H,(S)
简单短语:
a,T+S,H,(S)句柄是a.
6.已知文法G[S]为:
S→AB|bCA→b|λ
B→aD|λC→AD|b
D→aS|c
对其每一个非终级符求First集和Follow集。
First(S)={b,a,λ}
First(A)={b,λ}
First(B)={a,λ}
First(C)={b,a,c}
First(D)={a,c}
Follow(S)={#}
Follow(A)={a,c,#}
Follow(B)={#}
Follow(C)={#}
Follow(D)={#}
二、(10分)设有文法G[A]:
AiB*e
BSB|
S[eC]|.i
CeC|
判定该文法是否为LL
(1)文法?
若是则给出它的LL
(1)分析表,否则说明理由。
先计算各个产生式的Predict集:
Predict(A->iB*e)={i};
Predict(B->SB)={[,.}
Predict(B->)={*}
Predict(S->[eC])={[}
Predict(S->.i)={.}
Predict(C->eC)={e}
Predict(C->)={]}
因为Predict集没有冲突,所以是LL
(1)文法。
LL
(1)分析表如下:
i
*
e
[
]
.
A
->iB*e
->
B
->SB
->SB
S
->[eC]
->.i
C
->eC
->
1、证明下面文法是LL
(1)的但不是SLR
(1)文法
S→AaAb|BbBaA→εB→ε
解:
对于产生式S→AaAb|BbBa来说
FIRST(AaAb)∩FIRST(BbBa)={a}∩{b}=Φ而A,B∈VN仅有一条候选式。
因此,这个文法是LL
(1)的。
下面构造这个文法的识别活前缀的DFA。
系专业班级学号姓名
………………………………………密……………………………………封…………………………………线…………………………………………
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·}
由于FOLLOW(A)=FOLLOW(B)={a,b}
因此项目集I0中存在归约-归约冲突。
在I0状态下,当输入符号是a或是b时,不知用A→ε还是B→ε进行归约。
故此文法不是SLR
(1)的。
但是,此文法是LR
(1)的。
五、已知文法G[S],其产生式如下:
S→(L)|aL→L,S|S
从G[S]中消除左递归,并为之构造一个非递归预测分析器LL
(1)分析表。
请说明在句子(a,(a,a))上的分析器的动作。
(20分)解:
将所给文法消除左递归得G':
S→(L)|aL→SL'L'→,SL'|ε
实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:
根据文法G'有
FIRST(s)={(,a)FOLLOW(S)={},',',$}
FIRST(L)={(,a)FOLLOW(L)={}}FIRST(L’)={','}FOLLOW(L’)={}}
按以上结果,构造预测分析表M如下:
文法G’是LL
(1)的,因为它的LL
(1)分析表不含多重定义入口。
预测分析器对输入符号串(a,(a,a))做出的分析动作如下:
例5.3的文法G3[S]为:
S→aA
S→d
A→bAS
A→ε
不难看出由定义5.3可得:
SELECT(S→aA)={a}
SELECT(S→d)={d}
SELECT(A→bAS)={b}
SELECT(A→ε)={a,d,#}
所以SELECT(S→aA)∩SELECT(S→d)={a}∩{d}=
SELECT(A→bAS)∩SELECT(A→ε)={b}∩{a,d,#}=
由定义5.4知例5.3文法是LL
(1)文法,所以可用确定的自顶向下分析。
而对例5.5文法G5[S]为:
S→aAS
S→b
A→bA
A→ε
则SELECT(S→aAS)={a}
SELECT(S→b)={b}
SELECT(A→bA)={b}
SELECT(A→ε)={a,b}
所以SELECT(S→aAS)∩SELECT(S→b)={a}∩{b}=
SELECT(A→bA)∩SELECT(A→ε)={b}∩{a,b}≠
因此,例5.5文法不是LL
(1)文法,因而也就不可能用确定的自顶向下
表达式文法为:
E→E+T|T
T→T*F|F
F→i|(E)
构造步骤:
(1)判断文法是否为LL
(1)文法
4.5已知文法G[S],其产生式如下:
S→(L)|aL→L,S|S从G[S]中消除左递归,并为之构造一个非递归预测分析器LL
(1)分析表。
请说明在句子(a,(a,a))上的分析器的动作。
解:
将所给文法消除左递归得G':
S→(L)|a L→SL' L'→,SL'|ε
实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:
根据文法G'有
FIRST(s)={(,a)
FOLLOW(S)={),',',$}
FIRST(L)={(,a)
FOLLOW(L)={)}
FIRST(L’)={','}
FOLLOW(L’)={)}
按以上结果,构造预测分析表M如下:
文法G’是LL
(1)的,因为它的LL
(1)分析表不含多重定义入口。
预测分析器对输入符号串(a,(a,a))做出的分析动作如下:
4.6对于练习4.1的文法,构造它的LL
(1)分析表。
解:
从练习4.1得到文法的产生式如下:
R→R'|'T|T T→TF|F
F→F*|C C→(R)|a|b
①消除上面文法中的左递归
R→TR'
R'→'|'TR'|ε
T→FT'
T'→FT'|ε
F→CF'
F→*F'|ε
C→(R)|a|b
②计算FIRST(α)和FOLLOW(A)
③构造LL
(1)分析表。
4.9对于文法G[S],其产生式如下S→(L)|a(4.22)L→L,S|S
(1)给出句子(a,((a,a),(a,a)))的一个最右推导,并指出右句型的句柄。
(2)按照(a)的最右推导,说明移进-归约分析器的工作步骤。
解:
(1)S=>(L)=>(L,S)=>(L,(L))=>(L,(L,S))=>(L,(L,(L)))=>(L,(L,(L,S)))
=>(L,(L,(L,a)))=>(L,(L,(S,a)))=>(L,(L,(a,a)))=>(L,(S,(a,a)))
=>(L,((L),(a,a)))=>(L,((L,S),(a,a)))=>(L,((L,a),(a,a)))=>(L,((S,a),(a,a)))
=>(L,((a,a),(a,a)))=>(S,((a,a),(a,a)))=>(a,((a,a),(a,a)))
右句型的句柄为每个右句型中用下划线标识出的部分。
(2)对于(a)的最右推导,移进-规约分析器的工作步骤如下:
4.11下列文法是否为SLR
(1)文法?
若是,请构造相应的分析表。
若不是,请说明理由。
(a)S→Sab|bRR→S|a
解:
该文法的拓广文法G'为
(0)S'→S
(1)S→Sab
(2)S→bR
(3)R→S
(4)R→a
其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0={S'→·S,S→·Sab,S→·bR}I1={S'→S·,S→S·ab}
I2={S→b·R,R→·S,R→·a,S→·Sab,S→·bR}I3={S→Sa·b}I4={S→bR·}
I5={R→S·,S→S·ab}I6={R→a·}I7={S→Sab·}
求FOLLOW集:
FOLLOW(S')={$} FOLLOW(R)=FOLLOW(S)={a,$}
在I5中,出现移进-归约冲突,且FOLLOW(R)∩{a}={a}因此,此文法不是SLR
(1)文法。
b)S→aSAB|BAA→aA|BB→b
解:
该文法的拓广文法G'为
(0)S'→S
(1)S→aSAB
(2)S→BA
(3)A→aA
(4)A→B
(5)B→b
其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0={S'→·S,S→·aSAB,S→·BA,B→·b}I1={S'→S·}I2={B→b·}
I3={S→a·SAB,S→·aSAB,S→·BA,B→·b}I4={S→B·A,A→·aA,A→·B,B→·b}
I5={S→aS·AB,A→·aA,A→·B,B→·b}I6={S→aSA·B,B→·b}
I7={A→a·A,A→·aA,A→·B,B→·b}I8={A→B·}I9={S→BA·}I10={S→aSAB·}
I11={A→aA·}
求FOLLOW集:
FOLLOW(S')={$} FOLLOW(S)={a,b,$} FOLLOW(A)={a,b,$}
FOLLOW(B)={a,b,$}
4.12证明下面文法是SLR
(1)文法,并构造其SLR分析表。
E→E+T|TT→TF|FF→F*|a|b
解:
该文法的拓广文法G'为
(0)E'→E
(1)E→E+T
(2)E→T
(3)T→TF
(4)T→F
(5)F→F*
(6)F→a
(7)F→b
其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0={E'→·E,E→·E+T,E→·T,T→·TF,T→·F,F→·F*, F→·a,F→·b}
I1={E'→E·,E→E·+T}I2={E→T·,T→T·F,F→·F*,F→·a,F→·b}
I3={T→F·,F→F·*}I4={F→a·}I5={F→b·}
I6={E→E+·T,T→·TF,T→·F,F→·F*,F→·a,F→·b}I7={T→TF·,F→F·*}I8={F→F*·}
I9={E→E+T·,T→T·F,F→·F*,F→·a,F→·b}
求FOLLOW集:
FOLLOW(E)={+,$} FOLLOW(T)={+,$,a,b}
FOLLOW(F)={+,$,a,b,*}
构造的SLR分析表如下:
显然,此分析表无多重定义入口,所以此文法是SLR文法。
4.13下面文法属于哪类LR文法?
试构造其分析表。
S→(SR|aR→,SR|)
解:
该文法的拓广文法G'为
(0)S'→S
(1)S→(SR
(2)S→a
(3)R→,SR
(4)R→)
构造其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0={S'→·S,S→·(SR,S→·a}
I1={S'→S·}I2={S→(·SR,S→·(SR,S→·a}I3={S→a·}I4={S→(S·R,R→·,SR,R→·)}
I5={S→(SR·}I6={R→)·}I7={R→,·SR,S→·(SR,S→·a}
I8={R→,S·R,R→·,SR,R→·)}I9={R→,SR·}
每个LR(0)项目集中没有冲突。
因此,此文法是LR(0)文法。
其分析表如下:
4.14设文法G为S→AA→BA|εB→aB|b
(1)证明它是LR
(1)文法。
(2)构造它的LR
(1)分析表。
(3)给出输入符号串abab的分析过程。
解:
(1)构造其拓广文法G'的产生式为
(0)S'→S
(1)S→A
(2)A→BA
(3)A→ε
(4)B→aB
(5)B→b
构造其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0={[S'→·S,$],[S→·A,$],[A→·BA,$],[A→·,$], [B→·aB,a/b/$],[B→·b,a/b/$]}
I1={[S'→S·,$]}I2={[S→A·,$]}
I3={[A→B·A,$],[A→·BA,$],[A→·,$], [B→·aB,a/b/$],[B→·b,a/b/$]}
I4={[B→b·,a/b/$]}I5={[B→a·B,a/b/$],[B→·aB,a/b/$], [B→·b,a/b/$]}
I6={[A→BA·,$]}I7={[B→aB·,a/b/$]}
该文法的LR
(1)项目集规范族中没有冲突,所以该文法是LR
(1)文法。
(2)构造LR
(1)分析表如下:
以上分析表无多的定义入口,所以该文法为LR
(1)文法。
(3)对于输入串abab,其分析过程如下:
4.15为下面的文法构造LALR
(1)分析表S→EE→E+T|TT→(E)|a
解:
其拓广文法G':
(0)S'→S
(1)S→E
(2)E→E+T
(3)E→T
(4)T→(E)
(5)T→a
构造其LR
(1)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0={[S’→·S,$],[S→·E,$],[E→·E+T,