编译原理第4章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 词法分析
1.构造下列正规式相应的DFA :
(1) 1(0|1)* 101
(2) 1(1010* | 1(010)* 1)* 0 (3) a((a|b)*|ab *a)* b (4) b((ab)* | bb)* ab 解:
(1)1(0|1)* 101对应的NFA 为
下表由子集法将NFA 转换为DFA :
(2)1(1010* | 1(010)* 1)* 0对应的NFA 为
下表由子集法将NFA 转换为DFA :
(3)a((a|b)*|ab*a)* b (略)
(4)b((ab)* | bb)* ab (略)
2.已知NFA=({x,y,z},{0,1},M,{x},{z})其中:M(x,0)={z},M(y,0)={x,y},M(z,0)={x,z},M(x,1)={x}, M(y,1)=φ,M(z,1)={y},构造相应的DFA。
解:根据题意有NFA图如下
0,1下表由子集法将NFA转换为DFA:
下面将该DFA最小化:
(1)首先将它的状态集分成两个子集:P1={A,D,E},P2={B,C,F}
(2)区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。由于F(B,0)=F(C,0)=C, F(B,1)=D,F(C,1)=E,
而D,E不等价(见下步),从而B与C,F可以区分。有P21={C,F},P22={B}。
(3)区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11={A,E},P12={D}。
(4)由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区分。
(5)综上所述,DFA可以区分为P={{A},{B},{D},{E},
{C,F}}。所以最小化的DFA如下:
3.将图确定化:
图
解:下表由子集法将NFA转换为DFA:
1
4.把图的(a)和(b)分别确定化和最小化:
(a) (b)
解: (a):
可得图(a1),由于F(A,b)=F(B,b)=C,并且F(A,a)=F(B,a)=B,所以A,B 等价,可将DFA 最小化,即:删除B ,将
原来引向B 的引线引向与其等价的状态A ,有图(a2)。(DFA 的最小化,也可看作将上表中的B 全部替换为A ,然后删除B 所在的行。)
(a1)确定化的DFA (a2)最小化的DFA
(
b ):该图已经是DFA 。下面将该DFA 最小化:
(6) 首先将它的状态集分成两个子集:P 1={0},P 2={1,2,3,4,5}
(7) 区分P 2:由于F(4,a)=0属于终态集,而其他状态输入a 后都是非终态集,所以区分P 2如下:
P 21={4},P 22={1,2,3,5}。
(8) 区分P 22:由于F(1,b)=F(5,b)=4属于P 21,而
F(2,b)与F(3,b)不等于4,即不属于P 21,所以区分P 22如下:
P 221={1,5},P 222={2,3}
。
(9)
区分P 221:由于F(1,b)=F(5,b)=4,即F(1,a)=1,F(5,a)=5,所以1,5等价。
0,1
a
a
a
(10) 区分P 222:由于F(2,a)=1属于P 221,而F(3,a)=3属于P 222,所以2,3可区分。P 222区分为P 2221{2},P 2222{3}。 (11) 结论:该DFA 的状态集可分为:P={ {0},{1,5},{2},{3},{4} },其中1,5等价。删去状态5,将原来引向5的引
线引向与其等价的状态1,有图(b1)。
(b1)最小化的DFA
5.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。然后再构造该语言的正则文法。
解:根据题意,DFA 所对应的正规式应为:(0|(10))*。所以,接收该串的NFA 如下:
显然,A ,B 等价,所以将上述DFA 最小化后有:
对应的正规文法为: G[A]:
A1C|0A |ε C0A
6.设无符号数的正规式为θ:
θ=dd *|dd *.dd *|.dd *|dd *e(s|ε)dd *|e(s|ε)dd *|.dd *e(s|ε)dd *|dd *.dd *e(s|ε)dd *
化简θ,画出θ的DFA ,其中d={0,1,2,…9},s={+,-}
解:把原正规式的每2,3项,4,5项,6,7项分别合并后化简有:
θ=dd *|d *.dd *|d *e(s|
ε)dd *|d *.dd *e(s|
ε)dd *
=dd *|d *.dd *|(d *|d *.dd *)e(s|
ε)dd *
=(ε|d *.|(d
*|d *.dd *)e(s|ε))dd *
=(ε|d *.|d *(ε|.dd *)e(s|ε))dd *
下面构造化简后的θ对应的NFA :
7.给文法G[S]: SaA|bQ AaA|bB|b BbD|aQ QaQ|bD|b DbB|aA
EaB|bF
FbD|aE|b
构造相应的最小的DFA 。
解:由于从S 出发任何输入串都不能到达状态E 和F ,所以,状态E ,F 为多余的状态,不予考虑。这样,可以写出文法G[S]对应的NFA :
a