《编译原理》课后习题答案第四章
第4章 词法分析
第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) 先构造NFA: 用子集法将NFA确定化
.
0
1
X
.
A
A
A
AB
AB
AC
AB
AC
A
ABY
ABY
AC
AB
除X,A外,重新命名其他状态,令AB为B、AC为C、ABY为D,因为D含有Y(NFA的终态),所以D为终态。
.
0
1
X
.
A
A
A
B
B
C
B
C
A
D
D
C
B
DFA的状态图:: 盛威网( www.snwei.com)专业的计算机学习网站 1
《编译原理》课后习题答案第四章
(2)先构造NFA:
XA1Bε1C0D1E0εF1G0H1I0J1KLεε0Yεεεε
用子集法将NFA确定化
ε
0
1
X
X
T0=X
A
A
ABFL
T1= ABFL
Y
CG
Y
Y
CG
CGJ
T2= Y
T3= CGJ
DH
K
DH
DH
K
ABFKL
T4= DH
EI
EI
ABEFIL
T5= ABFKL
Y
CG
T6= ABEFIL
EJY
CG
EJY
ABEFGJLY
T7= ABEFGJLY
EHY
CGK
EHY
ABEFHLY
CGK
ABCFGJKL
T8= ABEFHLY
EY
CGI
EY
ABEFLY
CGI
CGJI
T9= ABCFGJKL
DHY
CGK
DHY
DHY
T10= ABEFLY
EY
CG
T11= CGJI
DHJ
K
DHJ
DHJ
T12= DHY
EI
T13= DHJ
EIK
EIK
ABEFIKL
T14= ABEFIKL
EJY
CG
盛威网( www.snwei.com)专业的计算机学习网站 2
《编译原理》课后习题答案第四章
将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、1、2、3、4、5、6、7、8、9、10、11、12、13、14表示。因为2、7、8、10、12中含有Y,所以它们都为终态。
0
1
0
1
1
2
3
2
3
4
5
4
6
5
2
3
6
7
3
7
8
9
8
10
11
9
12
9
10
10
3
11
13
5
12
6
13
14
14
7
3
01012127810345691113141 10 10 10 110 1101 01100 1 01
盛威网( www.snwei.com)专业的计算机学习网站 3
《编译原理》课后习题答案第四章
(3) 先构造NFA:
先构造NFA:
XAaBεa,bεDaEaFCεYεεbεb
用子集法将NFA确定化
ε
a
b
X
X
T0=X
A
A
ABCD
T1=ABCD
BE
BY
BE
ABCDE
BY
ABCDY
T2=ABCDE
BEF
BEY
BEF
ABCDEF
BEY
ABCDEY
T3=ABCDY
BE
BY
T4=ABCDEF
BEF
BEY
T5=ABCDEY
BEF
BEY
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5表示。因为3、5中含有Y,所以它们都为终态。
a
b
0
1
1
2
3
2
4
5
3
2
3
4
4
5
5
4
5
0ab132a 54ab ababab
盛威网( www.snwei.com)专业的计算机学习网站 4
《编译原理》课后习题答案第四章
(4) 先构造NFA:
XAbBεa FbGbHEεYaεCDb εIbεεεε
用子集法将NFA确定化:
ε
a
b
X
X
T0=X
A
A
ABDEF
T1=ABDEF
CI
G
CI
CI
G
G
T2=CI
DY
DY
ABDEFY
T3=G
H
H
ABEFH
T4=ABDEFY
CI
G
T5=ABEFH
CI
G
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5表示。因为4中含有Y,所以它为终态。
a
b
0
1
1
2
3
2
4
3
5
4
2
3
5
2
3
DFA的状态图: 盛威网( www.snwei.com)专业的计算机学习网站 5
《编译原理》课后习题答案第四章
0bb12a 453b b a b a b
盛威网( www.snwei.com)专业的计算机学习网站 6
《编译原理》课后习题答案第四章
第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。
答案:
先构造其矩阵
0
1
x
z
x
y
x,y
z
x,z
y
用子集法将NFA确定化:
0
1
x
z
x
z
xz
y
xz
xz
xy
y
xy
xy
xyz
x
xyz
xyz
xy
将x、z、xz、y、xy、xyz重新命名,分别用A、B、C、D、E、F表示。因为B、C、F中含有z,所以它为终态。
0
1
A
B
A
B
C
D
C
C
E
D
E
E
F
A
F
F
E
DFA的状态图:
盛威网( www.snwei.com)专业的计算机学习网站 7
A010 FED0 B1 0 10 1 0 1 C
《编译原理》课后习题答案第四章
第3题
将下图确定化:
答案:
用子集法将NFA确定化:
.
0
1
S
VQ
QU
VQ
VZ
QU
QU
V
QUZ
VZ
Z
Z
V
Z
.
QUZ
VZ
QUZ
Z
Z
Z
重新命名状态子集,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。
.
0
1
S
A
B
A
C
B
B
D
E
C
F
F
D
F
.
E
C
E
F
F
F
DFA的状态图: 盛威网( www.snwei.com)专业的计算机学习网站 8
《编译原理》课后习题答案第四章
第4题
将下图的(a)和(b)分别确定化和最小化:
答案:
初始分划得 Π0:终态组{0},非终态组{1,2,3,4,5} 对非终态组进行审查: {1,2,3,4,5}a {0,1,3,5} 而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5} {4} a ∵{0},所以得到新分划 Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: {1,5} b ∵{4} {2,3} b {1,2,3,5},故得到新分划 Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5} {2,3} a {1,3},故状态2和状态3不等价,得到新分划 Π3:{0},{2},{3},{4},{1, 5} 这是最后分划了 盛威网( www.snwei.com)专业的计算机学习网站 9
《编译原理》课后习题答案第四章
最小DFA:
第5题
构造一个DFA,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。并给出该语言的正规式。
答案:
按题意相应的正规表达式是(0*10)*0*,或0*(0 | 10)*0* 构造相应的DFA,首先构造NFA为 用子集法确定化:
I
I0
I1
{X,0,1,3,Y} {0,1,3,Y} {2} {1,3,Y}
{0,1,3,Y} {0,1,3,Y} {1,3,Y} {1,3,Y}
{2} {2} {2}
重新命名状态集:
S
0
1
1 2 3 4
2 2 4 4
3 3 3
DFA的状态图: 盛威网( www.snwei.com)专业的计算机学习网站 10
《编译原理》课后习题答案第四章
可将该DFA最小化: 终态组为{1,2,4},非终态组为{3},{1,2,4}0 {1,2,4},{1,2,4}1 {3},所以1,2,4为等价状态,可合并。
第6题
设无符号数的正规式为θ:
θ=dd*|dd*.dd*|.dd*|dd*10(s|ε)dd*
|10(s|ε)dd*|.dd*10(s|ε)dd*
|dd*.dd*10(s|ε)dd*
化简θ,画出θ的DFA,其中d={0,1,2,…,9},s={+,-}
答案:
先构造NFA:
XdB.d FGdH10d AεC10dDsεEd Yd sεd
用子集法将NFA确定化:
盛威网( www.snwei.com)专业的计算机学习网站 11
《编译原理》课后习题答案第四章
ε
·
s
10
d
X
XA
T0=XA
B
F
A
B
B
F
FG
A
A
T1=B
C
C
C
T2=FG
G
H
G
G
H
H
T3=A
B
F
A
T4=C
D
C
D
DE
T5=G
H
T6=H
H
T7=DE
E
Y
E
E
Y
Y
T8=E
Y
T9=Y
Y
将XA、B、FG、A、C、G、H、DE、E、Y重新命名,分别用0、1、2、3、4、5、6、7、8、9表示。终态有0、3、4、6、9。
·
s
10
d
0
1
2
3
1
4
2
5
6
3
1
2
3
4
7
4
5
6
6
6
7
8
9
8
9
9
9
DFA的状态图:
盛威网( www.snwei.com)专业的计算机学习网站 12
《编译原理》课后习题答案第四章
·d652d 3d d 47890110ds·1010dd sddd
第7题
给文法G[S]:
S→aA|bQ
A→aA|bB|b
B→bD|aQ
Q→aQ|bD|b
D→bB|aA
E→aB|bF
F→bD|aE|b
构造相应的最小的DFA。
答案:
先构造其NFA:
SaAa ZQ bBD a EbFbba b aabbbbab
用子集法将NFA确定化: 盛威网( www.snwei.com)专业的计算机学习网站 13
《编译原理》课后习题答案第四章
a
b
S
A
Q
A
A
BZ
Q
Q
DZ
BZ
Q
D
DZ
A
B
D
A
B
B
Q
D
将S、A、Q、BZ、DZ、D、B重新命名,分别用0、1、2、3、4、5、6表示。因为3、4中含有z,所以它们为终态。
a
b
0
1
2
1
1
3
2
2
4
3
2
5
4
1
6
5
1
6
6
2
5
DFA的状态图:
0aa52b 3a a b 416ba a b b b a b
令P0=({0,1,2,5,6},{3,4})用b进行分割:
P1=({0,5, 6},{1,2},{3,4})再用b进行分割:
P2=({0},{5, 6},{1,2},{3,4})再用a、b 进行分割,仍不变。
再令{0}为A,{1,2}为B,{3,4}为C,{5,6}为D。
最小化为:
盛威网( www.snwei.com)专业的计算机学习网站 14
《编译原理》课后习题答案第四章
Aa , b DCa a Bb abb
第8题
给出下述文法所对应的正规式:
S→0A|1B
A→1S|1
B→0S|0
答案:
解方程组S的解:
S=0A|1B
A=1S|1
B=0S|0
将A、B产生式的右部代入S中
S=01S|01|10S|10=(01|10)S|(01|10)
所以:S= (01|10)*(01|10)
第9题
将下图的DFA最小化,并用正规式描述它所识别的语言。
1a 26c 3cb 547b b a b b b d d a
盛威网( www.snwei.com)专业的计算机学习网站 15
《编译原理》课后习题答案第四章
答案:
令P0=({1,2,3,4,5},{6,7})用b进行分割:
P1=({1,2},{3,4},{5},{6,7})再用a、b、c、d进行分割,仍不变。
再令{1,2}为A,{3,4}为B,{5}为C,{6,7}为D。
最小化为:
Aa CDb d Bbc ab
r=b*a(c|da)*bb*=b*a(c|da)*b+
盛威网( www.snwei.com)专业的计算机学习网站 16
《编译原理》课后习题答案第四章
附加题
问题1:
为下边所描述的串写正规式,字母表是 {a,b}.
a) 以ab 结尾的所有串
b) 包含偶数个b但不含a的所有串
c) 包含偶数个b且含任意数目a的所有串
d) 只包含一个a的所有串
e) 包含ab子串的所有串
f) 不包含ab子串的所有串
答案:
注意 正规式不唯一
a) (a|b)*ab
b) (bb)*
c) (a*ba*ba*)*
d) b*ab*
e) (a|b)*ab(a|b)*
f) b*a*
问题2:
请描述下面正规式定义的串. 字母表 {0,1}.
a) 0*(10+)*0*
b) (0|1)*(00|11) (0|1)*
c) 1(0|1)*0
答案:
a) 每个 1 至少有一个 0 跟在后边的串
b) 所有含两个相继的0或两个相继的1的串
c) 必须以 1 开头和0结尾的串
问题3:
构造有穷自动机.
a) 构造一个DFA,接受字母表? {0, 1} 上的以01 结尾的所有串
b) 构造一个DFA,接受字母表? {0, 1} 上的不包含01 子串的所有串.
c) 构造一个NFA,接受字母表? { x,y}上的正规式x(x|y)*x描述的集合
d) 构造一个NFA,接受字母表? {a, b} 上的正规式(ab|a)*b+描述的集合并将其转换为等价的DFA.以及最小状态DFA
盛威网( www.snwei.com)专业的计算机学习网站 17
《编译原理》课后习题答案第四章
答案:
b)
c)
盛威网( www.snwei.com)专业的计算机学习网站 18
《编译原理》课后习题答案第四章
最小化的DFA
问题4:
设有如图所示状态转换图,求其对应的正规表达式。
可通过消结法得出正规式
R=(01)*((00|1)(0|1)*|0)
也可通过转换为正则文法,解方程得到正规式。
问题5:
已知正规式:
(1)((a|b)*|aa)*b;
(2)(a|b)*b.
试用有限自动机的等价性证明正规式(1)和(2)是等价的,并给出相应的正规文法。
分析:
基本思路是对两个正规式,分别经过确定化、最小化、化简为两个最小DFA,如这两个最小DFA一样,也就证明了这两个正规式是等价的。
答案:
盛威网( www.snwei.com)专业的计算机学习网站 19
《编译原理》课后习题答案第四章
状态转换表1
a
b
X124
1234
124Y
1234
1234
124Y
124Y
1234
124Y
状态转换表2
a
B
1
2
3
2
2
3
3
2
3
由于2与3完全一样,将两者合并,即见下表
a
b
1
2
3
2
3
a
b
X12
12
12Y
12
12
12Y
12Y
12
12Y
盛威网( www.snwei.com)专业的计算机学习网站 20
《编译原理》课后习题答案第四章
可化简得下表
a
b
1
2
3
2
2
3
得DFA图
两图完全一样,故两个自动机完全一样,所以两个正规文法等价。
对相应正规文法,令A对应1,B对应2
故为:
A→aA|bB|b
B→aA|bB|b
即为S→aS|bS|B,此即为所求正规文法。
问题6:
考虑正规表达式r = a*b(a | b) ,构造可以生成语言 L(r) 的一个正规文法。
答案:
S → a*b(a | b)
变换为 S → aA, S → b(a | b) , A → aA , A → b(a | b)
变换为 S → aA, S → bB, B → (a | b) , A → aA , A → bC, C → (a | b)
变换为 S → aA, S → bB, B → a, B → b , A → aA , A → bC, C → a, C → b
所以,一个可能的正规文法为G[S]:
S → aA, S → bB, B → a, B → b , A → aA , A → bC, C → a, C → b
或表示为:
S → aA | bB, B → a | b , A → aA | bC, C → a | b
(适当等价变换也可以,但要作说明,即要有步骤)
盛威网( www.snwei.com)专业的计算机学习网站 21
《编译原理》课后习题答案第四章
问题7:
考虑下图所示的NFA N,构造可以生成语言L(N) 的一个正规文法。
答案:
G[P]:
P → 0 P ?1 P ?1 Q
Q → 0 R ?1 R
R → ε
问题8:
考虑如下文法G[S]:
S → 0S?1S?1A
A→ 0B?1B
B → ε
a) 试构造语言为 L(G) 的一个正规表达式。
b) 试构造语言为 L(G) 的一个有限自动机。
答案:
a)
由 A→ 0B , B → ε 得 A→ 0 ;
由 A→ 1B , B → ε 得 A→ 1 ;
由 A→ 0,A→ 1 得 A→ 0 ?1 ;
由 S→ 1A,A→ 0 ?1 得 S→ 1( 0 ?1 ) ;
由 S→ 1A,A→ 0 ?1 得 S→ 1( 0 ?1 ) ;
由 S→ 0S,S→ 1( 0 ?1 ) 得 S→ 0*1( 0 ?1 ) ;
由 S→ 1S,S→ 1( 0 ?1 ) 得 S→ 1*1( 0 ?1 ) ;
由 S→ 0*1( 0 ?1 ),S→ 1*1( 0 ?1 ) 得 S→ 0*1( 0 ?1 ) ? 1*1( 0 ?1 ) ;
所以,一个可能的正规表达式为: 盛威网( www.snwei.com)专业的计算机学习网站 22
《编译原理》课后习题答案第四章
0*1( 0 ?1 ) ? 1*1( 0 ?1 )
b)
盛威网( www.snwei.com)专业的计算机学习网站 23
第4章 词法分析
第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) 先构造NFA: 用子集法将NFA确定化
.
0
1
X
.
A
A
A
AB
AB
AC
AB
AC
A
ABY
ABY
AC
AB
除X,A外,重新命名其他状态,令AB为B、AC为C、ABY为D,因为D含有Y(NFA的终态),所以D为终态。
.
0
1
X
.
A
A
A
B
B
C
B
C
A
D
D
C
B
DFA的状态图:: 盛威网( www.snwei.com)专业的计算机学习网站 1
《编译原理》课后习题答案第四章
(2)先构造NFA:
XA1Bε1C0D1E0εF1G0H1I0J1KLεε0Yεεεε
用子集法将NFA确定化
ε
0
1
X
X
T0=X
A
A
ABFL
T1= ABFL
Y
CG
Y
Y
CG
CGJ
T2= Y
T3= CGJ
DH
K
DH
DH
K
ABFKL
T4= DH
EI
EI
ABEFIL
T5= ABFKL
Y
CG
T6= ABEFIL
EJY
CG
EJY
ABEFGJLY
T7= ABEFGJLY
EHY
CGK
EHY
ABEFHLY
CGK
ABCFGJKL
T8= ABEFHLY
EY
CGI
EY
ABEFLY
CGI
CGJI
T9= ABCFGJKL
DHY
CGK
DHY
DHY
T10= ABEFLY
EY
CG
T11= CGJI
DHJ
K
DHJ
DHJ
T12= DHY
EI
T13= DHJ
EIK
EIK
ABEFIKL
T14= ABEFIKL
EJY
CG
盛威网( www.snwei.com)专业的计算机学习网站 2
《编译原理》课后习题答案第四章
将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、1、2、3、4、5、6、7、8、9、10、11、12、13、14表示。因为2、7、8、10、12中含有Y,所以它们都为终态。
0
1
0
1
1
2
3
2
3
4
5
4
6
5
2
3
6
7
3
7
8
9
8
10
11
9
12
9
10
10
3
11
13
5
12
6
13
14
14
7
3
01012127810345691113141 10 10 10 110 1101 01100 1 01
盛威网( www.snwei.com)专业的计算机学习网站 3
《编译原理》课后习题答案第四章
(3) 先构造NFA:
先构造NFA:
XAaBεa,bεDaEaFCεYεεbεb
用子集法将NFA确定化
ε
a
b
X
X
T0=X
A
A
ABCD
T1=ABCD
BE
BY
BE
ABCDE
BY
ABCDY
T2=ABCDE
BEF
BEY
BEF
ABCDEF
BEY
ABCDEY
T3=ABCDY
BE
BY
T4=ABCDEF
BEF
BEY
T5=ABCDEY
BEF
BEY
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5表示。因为3、5中含有Y,所以它们都为终态。
a
b
0
1
1
2
3
2
4
5
3
2
3
4
4
5
5
4
5
0ab132a 54ab ababab
盛威网( www.snwei.com)专业的计算机学习网站 4
《编译原理》课后习题答案第四章
(4) 先构造NFA:
XAbBεa FbGbHEεYaεCDb εIbεεεε
用子集法将NFA确定化:
ε
a
b
X
X
T0=X
A
A
ABDEF
T1=ABDEF
CI
G
CI
CI
G
G
T2=CI
DY
DY
ABDEFY
T3=G
H
H
ABEFH
T4=ABDEFY
CI
G
T5=ABEFH
CI
G
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5表示。因为4中含有Y,所以它为终态。
a
b
0
1
1
2
3
2
4
3
5
4
2
3
5
2
3
DFA的状态图: 盛威网( www.snwei.com)专业的计算机学习网站 5
《编译原理》课后习题答案第四章
0bb12a 453b b a b a b
盛威网( www.snwei.com)专业的计算机学习网站 6
《编译原理》课后习题答案第四章
第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。
答案:
先构造其矩阵
0
1
x
z
x
y
x,y
z
x,z
y
用子集法将NFA确定化:
0
1
x
z
x
z
xz
y
xz
xz
xy
y
xy
xy
xyz
x
xyz
xyz
xy
将x、z、xz、y、xy、xyz重新命名,分别用A、B、C、D、E、F表示。因为B、C、F中含有z,所以它为终态。
0
1
A
B
A
B
C
D
C
C
E
D
E
E
F
A
F
F
E
DFA的状态图:
盛威网( www.snwei.com)专业的计算机学习网站 7
A010 FED0 B1 0 10 1 0 1 C
《编译原理》课后习题答案第四章
第3题
将下图确定化:
答案:
用子集法将NFA确定化:
.
0
1
S
VQ
QU
VQ
VZ
QU
QU
V
QUZ
VZ
Z
Z
V
Z
.
QUZ
VZ
QUZ
Z
Z
Z
重新命名状态子集,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。
.
0
1
S
A
B
A
C
B
B
D
E
C
F
F
D
F
.
E
C
E
F
F
F
DFA的状态图: 盛威网( www.snwei.com)专业的计算机学习网站 8
《编译原理》课后习题答案第四章
第4题
将下图的(a)和(b)分别确定化和最小化:
答案:
初始分划得 Π0:终态组{0},非终态组{1,2,3,4,5} 对非终态组进行审查: {1,2,3,4,5}a {0,1,3,5} 而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5} {4} a ∵{0},所以得到新分划 Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: {1,5} b ∵{4} {2,3} b {1,2,3,5},故得到新分划 Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5} {2,3} a {1,3},故状态2和状态3不等价,得到新分划 Π3:{0},{2},{3},{4},{1, 5} 这是最后分划了 盛威网( www.snwei.com)专业的计算机学习网站 9
《编译原理》课后习题答案第四章
最小DFA:
第5题
构造一个DFA,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。并给出该语言的正规式。
答案:
按题意相应的正规表达式是(0*10)*0*,或0*(0 | 10)*0* 构造相应的DFA,首先构造NFA为 用子集法确定化:
I
I0
I1
{X,0,1,3,Y} {0,1,3,Y} {2} {1,3,Y}
{0,1,3,Y} {0,1,3,Y} {1,3,Y} {1,3,Y}
{2} {2} {2}
重新命名状态集:
S
0
1
1 2 3 4
2 2 4 4
3 3 3
DFA的状态图: 盛威网( www.snwei.com)专业的计算机学习网站 10
《编译原理》课后习题答案第四章
可将该DFA最小化: 终态组为{1,2,4},非终态组为{3},{1,2,4}0 {1,2,4},{1,2,4}1 {3},所以1,2,4为等价状态,可合并。
第6题
设无符号数的正规式为θ:
θ=dd*|dd*.dd*|.dd*|dd*10(s|ε)dd*
|10(s|ε)dd*|.dd*10(s|ε)dd*
|dd*.dd*10(s|ε)dd*
化简θ,画出θ的DFA,其中d={0,1,2,…,9},s={+,-}
答案:
先构造NFA:
XdB.d FGdH10d AεC10dDsεEd Yd sεd
用子集法将NFA确定化:
盛威网( www.snwei.com)专业的计算机学习网站 11
《编译原理》课后习题答案第四章
ε
·
s
10
d
X
XA
T0=XA
B
F
A
B
B
F
FG
A
A
T1=B
C
C
C
T2=FG
G
H
G
G
H
H
T3=A
B
F
A
T4=C
D
C
D
DE
T5=G
H
T6=H
H
T7=DE
E
Y
E
E
Y
Y
T8=E
Y
T9=Y
Y
将XA、B、FG、A、C、G、H、DE、E、Y重新命名,分别用0、1、2、3、4、5、6、7、8、9表示。终态有0、3、4、6、9。
·
s
10
d
0
1
2
3
1
4
2
5
6
3
1
2
3
4
7
4
5
6
6
6
7
8
9
8
9
9
9
DFA的状态图:
盛威网( www.snwei.com)专业的计算机学习网站 12
《编译原理》课后习题答案第四章
·d652d 3d d 47890110ds·1010dd sddd
第7题
给文法G[S]:
S→aA|bQ
A→aA|bB|b
B→bD|aQ
Q→aQ|bD|b
D→bB|aA
E→aB|bF
F→bD|aE|b
构造相应的最小的DFA。
答案:
先构造其NFA:
SaAa ZQ bBD a EbFbba b aabbbbab
用子集法将NFA确定化: 盛威网( www.snwei.com)专业的计算机学习网站 13
《编译原理》课后习题答案第四章
a
b
S
A
Q
A
A
BZ
Q
Q
DZ
BZ
Q
D
DZ
A
B
D
A
B
B
Q
D
将S、A、Q、BZ、DZ、D、B重新命名,分别用0、1、2、3、4、5、6表示。因为3、4中含有z,所以它们为终态。
a
b
0
1
2
1
1
3
2
2
4
3
2
5
4
1
6
5
1
6
6
2
5
DFA的状态图:
0aa52b 3a a b 416ba a b b b a b
令P0=({0,1,2,5,6},{3,4})用b进行分割:
P1=({0,5, 6},{1,2},{3,4})再用b进行分割:
P2=({0},{5, 6},{1,2},{3,4})再用a、b 进行分割,仍不变。
再令{0}为A,{1,2}为B,{3,4}为C,{5,6}为D。
最小化为:
盛威网( www.snwei.com)专业的计算机学习网站 14
《编译原理》课后习题答案第四章
Aa , b DCa a Bb abb
第8题
给出下述文法所对应的正规式:
S→0A|1B
A→1S|1
B→0S|0
答案:
解方程组S的解:
S=0A|1B
A=1S|1
B=0S|0
将A、B产生式的右部代入S中
S=01S|01|10S|10=(01|10)S|(01|10)
所以:S= (01|10)*(01|10)
第9题
将下图的DFA最小化,并用正规式描述它所识别的语言。
1a 26c 3cb 547b b a b b b d d a
盛威网( www.snwei.com)专业的计算机学习网站 15
《编译原理》课后习题答案第四章
答案:
令P0=({1,2,3,4,5},{6,7})用b进行分割:
P1=({1,2},{3,4},{5},{6,7})再用a、b、c、d进行分割,仍不变。
再令{1,2}为A,{3,4}为B,{5}为C,{6,7}为D。
最小化为:
Aa CDb d Bbc ab
r=b*a(c|da)*bb*=b*a(c|da)*b+
盛威网( www.snwei.com)专业的计算机学习网站 16
《编译原理》课后习题答案第四章
附加题
问题1:
为下边所描述的串写正规式,字母表是 {a,b}.
a) 以ab 结尾的所有串
b) 包含偶数个b但不含a的所有串
c) 包含偶数个b且含任意数目a的所有串
d) 只包含一个a的所有串
e) 包含ab子串的所有串
f) 不包含ab子串的所有串
答案:
注意 正规式不唯一
a) (a|b)*ab
b) (bb)*
c) (a*ba*ba*)*
d) b*ab*
e) (a|b)*ab(a|b)*
f) b*a*
问题2:
请描述下面正规式定义的串. 字母表 {0,1}.
a) 0*(10+)*0*
b) (0|1)*(00|11) (0|1)*
c) 1(0|1)*0
答案:
a) 每个 1 至少有一个 0 跟在后边的串
b) 所有含两个相继的0或两个相继的1的串
c) 必须以 1 开头和0结尾的串
问题3:
构造有穷自动机.
a) 构造一个DFA,接受字母表? {0, 1} 上的以01 结尾的所有串
b) 构造一个DFA,接受字母表? {0, 1} 上的不包含01 子串的所有串.
c) 构造一个NFA,接受字母表? { x,y}上的正规式x(x|y)*x描述的集合
d) 构造一个NFA,接受字母表? {a, b} 上的正规式(ab|a)*b+描述的集合并将其转换为等价的DFA.以及最小状态DFA
盛威网( www.snwei.com)专业的计算机学习网站 17
《编译原理》课后习题答案第四章
答案:
b)
c)
盛威网( www.snwei.com)专业的计算机学习网站 18
《编译原理》课后习题答案第四章
最小化的DFA
问题4:
设有如图所示状态转换图,求其对应的正规表达式。
可通过消结法得出正规式
R=(01)*((00|1)(0|1)*|0)
也可通过转换为正则文法,解方程得到正规式。
问题5:
已知正规式:
(1)((a|b)*|aa)*b;
(2)(a|b)*b.
试用有限自动机的等价性证明正规式(1)和(2)是等价的,并给出相应的正规文法。
分析:
基本思路是对两个正规式,分别经过确定化、最小化、化简为两个最小DFA,如这两个最小DFA一样,也就证明了这两个正规式是等价的。
答案:
盛威网( www.snwei.com)专业的计算机学习网站 19
《编译原理》课后习题答案第四章
状态转换表1
a
b
X124
1234
124Y
1234
1234
124Y
124Y
1234
124Y
状态转换表2
a
B
1
2
3
2
2
3
3
2
3
由于2与3完全一样,将两者合并,即见下表
a
b
1
2
3
2
3
a
b
X12
12
12Y
12
12
12Y
12Y
12
12Y
盛威网( www.snwei.com)专业的计算机学习网站 20
《编译原理》课后习题答案第四章
可化简得下表
a
b
1
2
3
2
2
3
得DFA图
两图完全一样,故两个自动机完全一样,所以两个正规文法等价。
对相应正规文法,令A对应1,B对应2
故为:
A→aA|bB|b
B→aA|bB|b
即为S→aS|bS|B,此即为所求正规文法。
问题6:
考虑正规表达式r = a*b(a | b) ,构造可以生成语言 L(r) 的一个正规文法。
答案:
S → a*b(a | b)
变换为 S → aA, S → b(a | b) , A → aA , A → b(a | b)
变换为 S → aA, S → bB, B → (a | b) , A → aA , A → bC, C → (a | b)
变换为 S → aA, S → bB, B → a, B → b , A → aA , A → bC, C → a, C → b
所以,一个可能的正规文法为G[S]:
S → aA, S → bB, B → a, B → b , A → aA , A → bC, C → a, C → b
或表示为:
S → aA | bB, B → a | b , A → aA | bC, C → a | b
(适当等价变换也可以,但要作说明,即要有步骤)
盛威网( www.snwei.com)专业的计算机学习网站 21
《编译原理》课后习题答案第四章
问题7:
考虑下图所示的NFA N,构造可以生成语言L(N) 的一个正规文法。
答案:
G[P]:
P → 0 P ?1 P ?1 Q
Q → 0 R ?1 R
R → ε
问题8:
考虑如下文法G[S]:
S → 0S?1S?1A
A→ 0B?1B
B → ε
a) 试构造语言为 L(G) 的一个正规表达式。
b) 试构造语言为 L(G) 的一个有限自动机。
答案:
a)
由 A→ 0B , B → ε 得 A→ 0 ;
由 A→ 1B , B → ε 得 A→ 1 ;
由 A→ 0,A→ 1 得 A→ 0 ?1 ;
由 S→ 1A,A→ 0 ?1 得 S→ 1( 0 ?1 ) ;
由 S→ 1A,A→ 0 ?1 得 S→ 1( 0 ?1 ) ;
由 S→ 0S,S→ 1( 0 ?1 ) 得 S→ 0*1( 0 ?1 ) ;
由 S→ 1S,S→ 1( 0 ?1 ) 得 S→ 1*1( 0 ?1 ) ;
由 S→ 0*1( 0 ?1 ),S→ 1*1( 0 ?1 ) 得 S→ 0*1( 0 ?1 ) ? 1*1( 0 ?1 ) ;
所以,一个可能的正规表达式为: 盛威网( www.snwei.com)专业的计算机学习网站 22
《编译原理》课后习题答案第四章
0*1( 0 ?1 ) ? 1*1( 0 ?1 )
b)
盛威网( www.snwei.com)专业的计算机学习网站 23