编译原理第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 为

下表由子集法将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 :

相关文档
最新文档