编译原理第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 为 1
0,1
下表由子集法将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 图如下
下表由子集法将NFA 转换为DFA :
0,1
下面将该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.将图确定化:
1
1
01
1
1
1
解:下表由子集法将NFA 转换为DFA :
4.把图的(a)和(b)分别确定化和最小化:
(a) (b)
解: (a):
下表由子集法将NFA 转换为DFA :
0,1
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等价。
(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)。
a
a
(b1)最小化的DFA
5.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。然后再构造该语言的正则文法。
解:根据题意,DFA 所对应的正规式应为:(0|(10))*
。所以,接收该串的NFA 如下:
下表由子集法将NFA 转换为DFA :
I
I 0 = ε-closure(MoveTo(I,0))
I 1 =
ε-closure(MoveTo(I,1))
A[0] B[0,2] C[1] B[0,2] B[0,2] C[1] C[1] B[0,2]
显然,A ,B 等价,所以将上述DFA 最小化后有:
对应的正规文法为: G[A]:
A 1C|0A |ε C
0A
1
1
2
0 ε
A
C 1
B
1
A
C
1 0
θ=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 :
下表由子集法将NFA 转换为DFA :