编译原理第4章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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为
1101
01234
1
下表由子集法将NFA 转换为 DFA:
I I0=ε-closure(MoveTo(I,0))I1=ε-closure(MoveTo(I,1))
A[0]B[1]
B[1]B[1]C[1,2]
C[1,2]D[1,3]C[1,2]
D[1,3]B[1]E[1,4]
E[1,4]B[1]B[1]
00
1101
A B C D E
1
1
0,1
(2)1(1010 * | 1(010) * 1)* 0 对应的 NFA 为
ε
ε
1101010 01234561
εε
1
01
9
78
ε
下表由子集法将NFA 转换为 DFA:
I I
=ε-closure(MoveTo(I,0))I
1= ε-closure(MoveTo(I,1))
A[0]B[1,6]
B[1,6]C[10]D[2,5,7]
C[10]
D[2,5,7]E[3,8]B[1,6]
E[3,8]F[1,4,6,9] F[1,4,6,9]G[1,2,5,6,9,10]D[2,5,7]
G[1,2,5,6,9,10]H[1,3,6,9,10]I[1,2,5,6,7] H[1,3,6,9,10]J[1,6,9,10]K[2,4,5,7] I[1,2,5,6,7]L[3,8,10]I[1,2,5,6,7] J[1,6,9,10]J[1,6,9,10]D[2,5,7]
K[2,4,5,7]M[2,3,5,8]B[1,6]
L[3,8,10]F[1,4,6,9] M[2,3,5,8]N[3]F[1,4,6,9] N[3]O[4]
O[4]P[2,5]
P[2,5]N[3]B[1,6]
1L
11
1
1
11010
B I K
A D E F M
00
1
10 00
C11G H J
1
01
N
P O
(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图如下
1
x y
1
0z
下表由子集法将NFA 转换为 DFA:
I I
= ε-closure(MoveTo(I,0))I
1 =ε-closure(MoveTo(I,1))
A[x]B[z]A[x]
B[z]C[x,z]D[y]
C[x,z]C[x,z]E[x,y]
D[y]E[x,y]
E[x,y]F[x,y,z]A[x]
F[x,y,z]F[x,y,z]E[x,y]
110
0000
A B C D E F
01
1
1
下面将该 DFA 最小化:
(1)首先将它的状态集分成两个子集:P ={A,D,E},P ={B,C,F}
12
(2)区分 P :由于 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,
2
而 D, E 不等价(见下步),从而 B 与 C, F 可以区分。

有P ={C,F},P ={B}。

2122
(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 如下:
1
1
1
10
000
A B D E F
3.将图确定化:
V0
0,1
10, 1
S Q Z
1
1U
1

解:下表由子集法将NFA 转换为 DFA:
I I0= ε-closure(MoveTo(I,0))I1=ε-closure(MoveTo(I,1))
A[S]B[Q,V]C[Q,U]
B[Q,V]D[V,Z]C[Q,U]
C[Q,U]E[V]F[Q,U,Z]
D[V,Z]G[Z]G[Z]
E[V]G[Z]
F[Q,U,Z]D[V,Z]F[Q,U,Z] G[Z]G[Z]G[Z]
C 0
E
11
A1F1G0, 1
0, 1
B D
4.把图的 (a)和 (b)分别确定化和最小化:
b
b
023
a
a
a,b b
a
01a a b
a
145
b
a
a b
(a)(b)
解:
(a):
下表由子集法将 NFA 转换为 DFA:
I Ia= ε-closure(MoveTo(I,a))I b= ε-closure(MoveTo(I,b))
A[0]B[0,1]C[1]
B[0,1]B[0,1]C[1]
C[1]A[0]
可得图( 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 所在的行。


B a a
a
b
C
A b A
b
C a
a
( a1)确定化的 DFA( a2)最小化的 DFA
( b) :该图已经是 DFA。

下面将该DFA 最小化:
(6)首先将它的状态集分成两个子集:P1={0},P2={1,2,3,4,5}
(7)区分 P :由于 F(4,a)=0属于终态集,而其他状态输入a后都是非终态集,所以区分P如下:
22 P21={4},P22={1,2,3,5} 。

(8)区分 P22 :由于 F(1,b)=F(5,b)=4属于 P21 ,而 F(2,b) 与 F(3,b)不等于 4,即不属于 P21,所以区分P22如下:
P221 ={1,5},P222 ={2,3}。

(9)区分 P :由于 F(1,b)=F(5,b)=4,即 F(1,a)=1,F(5,a)=5,所以 1,5等价。

221
(10) 区分 P222 :由于 F(2,a)=1 属于 P221,而 F(3,a)=3 属于 P222,所以2, 3 可区分。

P222区分为 P2221{2} ,P2222 {3}。

(11) 结论:该 DFA 的状态集可分为:P={ {0},{1,5},{2},{3},{4} }, 其中 1,5等价。

删去状态5,将原来引向 5 的引
线引向与其等价的状态1,有图 (b1) 。

b
b
023
b a
a
a a
1
b
4
a b
(b1) 最小化的 DFA
5.构造一个 DFA,它接收Σ ={0,1} 上所有满足如下条件的字符串:每个 1 都有 0 直接跟在右边。

然后再构造该语言的正则文法。

解:根据题意, DFA所对应的正规式应为: (0|(10)) *。

所以,接收该串的NFA 如下:
ε
1
10
02
下表由子集法将 NFA 转换为 DFA:0
I I
= ε-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]
1
A1C 0
B
显然, A, B 等价,所以将上述DFA 最小化后有:
A1C
对应的正规文法为:
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:

d .
d
1
εeε
6
d
457 .d
s

3
2
下表由子集法将NFA 转换为 DFA:
I I d=ε-closure(MoveTo(I,d))I e=ε-closure(MoveTo(I,e))I s=ε-closure(MoveTo(I,s)) A[0,1,4,6]B[1,7]C[5,6]
B[1,7]B[1,7]
C[5,6]E[7]F[6]
D[2,6]G[3,4,7]
E[7]E[7]
F[6]E[7]
G[3,4,7]G[3,4,7]C[5,6]
C s
F
e d d d
A
d
e
E d
B
.
.
I.=ε-closure(MoveTo(I,.))
D[2,6]
D[2,6] D
d
d
G
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
a
b
S a b b
D
A B
b
b Z a b
b
Q
a
下表由子集法将NFA 转换为 DFA:
I I a=ε-closure(MoveTo(I,a))I b=ε-closure(MoveTo(I,b))
1[S]2[A]3[Q]
2[A]2[A]4[B,Z]
3[Q]3[Q]5[D,Z]
4[B,Z]3[Q]6[D]
5[D,Z]2[A]7[B]
6[D]2[A]7[B]
7[B]3[Q]6[D]
由上表可知:
(1)因为 4,5 是 DFA的终态,其他是非终态,可将状态集分成两个子集:
12
P ={1, 2, 3,6, 7}, P ={4, 5}
(2)在 P1中因为 2,3 输入 b 后是终态,而1, 6, 7 输入 b 后是非终态,所以P1可区分为:
P11={1,6, 7}, P12={2, 3}
(3)在 P11中由于 1 输入 b 后为 3, 6 输入 b 后为 7,而 3,7 分属 P11和 P12,所以 1 与 6 不等价,同理, 1 与 7 不等价。

所以 P11可区分为:
P111={1}, P112={6 ,7}
(4)查看 P ={6, 7},由于输入 a 后为2, 3,所以 6, 7 是否等价由2, 3 是否等价决定。

112
(5)查看 P12={2, 3},由于输入 b 后为 4, 5,所以2, 3 是否等价由4, 5 是否等价决定。

(6)查看 P2={4,5},显然 4,5 是否等价由 2,3与 6, 7 是否同时等价决定。

由于有(4)即 6,7 是否等
价由 2,3 是否等价决定,所以, 4,5 是否等价由2,3 是否等价决定。

由于有( 5)即 2,3 是否等价由4,5 是否等价决定,所以有 4, 5 等价,2, 3 等价 ,进而 6, 7 也等价。

(7)删除上表中的第3, 5, 7 行,并将剩余行中的3,5, 7 分别改为对应的等价状态为2, 4, 6 有下表:
I I
a I b
1[S]2[A]2[A] 2[A]2[A]4[B,Z]
4[B,Z]2[A]6[D] 6[D]2[A]6[D]
这样可得最小化的DFA如下:
a
1
a b
24
a
b
a
b
6
b
8.给出下述文法所对应的正规式:
S0A|1B
A1S|1
B0S|0
解:把后两个产生式代入第一个产生式有:
S=01|01S
S=10|10S
有 :S=01S|10S|01|10=(01|10)S|(01|10)=(01|10)* (01|10)
即 :(01|10) * (01|10) 为所求的正规式。

9.将图的DFA 最小化,并用正规式描述它所识别的语言:
c
a b
136b
d
b c
5
d b
a
a b
247
b

解:
(1)因为 6 ,7 是 DFA 的终态,其他是非终态,可将状态集分成两个子集:P1={1,2,3,4,5},P2={6,
7}。

(2)由于 F(6,b)=F(7,b)=6,而 6, 7 又没有其他输入,所以6, 7 等价。

(3)由于 F(3,c)=F(4,c)=3,F(3,d)=F(4,d)=5,F(3,b)=6,F(4,b)=7, 而 6, 7 等价,所以3,4 等价。

(1)由于 F(1,b)=F(2,b)=2,F(1,a)=3,F(2,a)=4,而 3, 4 等价,所以 1,2 等价。

(2)由于状态 5 没有输入字符 b,所以与 1, 2, 3, 4 都不等价。

(3)综上所述,上图DFA的状态可最细分解为:P={{1, 2}, {3 , 4}, {5}, {6, 7}} 。

b
c
a b
136b
该 DFA用正规式表示为:b* a(c|da)* bb*
d
a5
10 .构造下述文法G[S]的自动机:
SA0
AA0|S1|0
该自动机是确定的吗若不确定,则对它确定化。

该自动机相应的语言是什么
解:
由于该文法的产生式SA0,AA0|S1 中没有字符集V T的输入,所以不是确定的自动机。

要将其他确定化,必
须先用代入法得到它对应的正规式。

把SA0 代入产生式AS1 有: A=A0|A01|0=A(0|01)|0=0(0|01)* 。

代入SA0有该文法的正规式:0(0|01) * 0,所以,改写该文法为确定的自动机为:
00
W X Z
1Y
由于状态 A 有 3 次输入0 的重复输入,所以上图只是NFA,下面将它确定化:
下表由子集法将NFA 转换为DFA:
I I0= ε-closure(MoveTo(I,0))I b= ε-closure(MoveTo(I,1))
A[W]
B[X]
C[X,Y,Z]B[X]
C[X,Y,Z]
C[X,Y,Z]B[X]
由上表可知DFA为:
00
A B C
1。

相关文档
最新文档