第三章 有穷自动机

第三章 有穷自动机
第三章 有穷自动机

第三章有穷自动机

1、教学目的及要求:

本章介绍有关有穷自动机的基本概念和理论以及正规文法、正规表达式与有穷自动机之间的相互关系。要求掌握正则文法、状态转换图、DFA、NFA、正规式和正规集的基本概念。

2、教学内容:

本章介绍有关有穷自动机的基本概念和理论以及正规文法、正规表达式与有穷自动机之间的相互关系。

3、教学重点:

状态转换图。

4、教学难点:

◇正规式的定义-如何用作单词的描述工具

◇有穷自动机的定义和分类-如何用作单词的识别系统

◇正规式到有穷自动机的转换算法-词法分析程序的自动构造原理

◇正则文法、正规集、DFA、NFA的相互转化。

5、课前思考

◇什么是有穷自动机?

◇什么是状态转换图?

6、章节内容

第一节有穷自动机的形式定义

第二节 NFA到DFA的转换

第三节正规文法与有穷自动机

第四节正规表达式与FA

第五节 DFA在计算机中的表示

3.1 有穷自动机的形式定义

有穷状态自动机(Finite-state Automata 或简称FA)在识别功能上与正规文法类等价,而且也等价于一个特殊类型的语言产生器——正规表达式(Regular Expression)。因此许多简单的程序语言都可由FA所识别。事实上,它是描述词法的有效工具,也是进行词法分析的主要理论基础。

为了构造词法分析程序,要研究构词法,每种词类的结构模式以及识别它的数学模型——有穷自动机。它的模拟程序可以作为词法分析程序的控制程序。

有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。

有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。

一、确定有穷自动机的形式定义

一个确定的有穷自动机M(记作DFA M)是一个五元组M=(K,Σ,f,S,Z),其中(a) K是一个有限状态集合。

(b) Σ是一个字母表,它的每个元素称为一个输入字符。

(c) S∈K,S 称为初始状态,唯一。

(d) Z?K,Z称为终态集合, 终态也称可接受状态或结束状态。

(e) f是转换函数,是一个从K×Σ到K的单值映射。f(k i,a)=k j(k i,k j∈Q,a∈Σ)k j称为k i的一个后继状态。

确定性的体现:初始状态唯一;转换函数为单值映射。

例:设DFA M=({S,U,V,Q},{a,b},f,S,{Q})其中

f(S,a)=U,f(S,b)=V

f(U,a)=Q,f(U,b)=V

f(V,a)=U,f(V,b)=Q

f(Q,a)=Q,f(Q,b)=Q

因为(1)初始状态唯一是S,(2)每个转换函数均为单值映射。所以该FA为确定有穷自动机。

二、状态转换表

DFA的映射关系可以由一个矩阵表示,矩阵的行标表示状态,列标表示输入字符,矩阵元素表示f(s,a)的值,这个矩阵称为状态转换表。

例:

q 1

a

a

a

b b a b

b

q 2

q 3

q 0

f(S ,a)=U

f(S ,b)=V f(U ,a)=Q f(U ,b)=V f(V ,a)=U f(V ,b)=Q

f(Q ,a)=Q

f(Q ,b)=Q

三、状态转换图

图中标有?的为开始状态,标有双圈的状态为终止状态。 若f(K i ,a)=K j ,则从状态结点K i 到状态K j 画标记为a 的弧。 四、自动机的等价性

为了讨论自动机的等价性,先对DFA 中的映射进行扩充。 1、扩充的转换函数f

(1)设Q ∈K ,函数f(Q,ε)=Q ,即如果输入字符是空串,则仍停留在原来的状态上。 (2)对?Q ∈K ,T ∈Σ,t 1∈Σ*,f(Q,Tt 1)=f(f(Q,T), t 1) 该定义是一个递归定义,说明当自动机处在状态Q 且面临某个输入串Tt 1时,则首先应用函数 f(Q,T)=P ,然后应用函数f(P,t 1)。

DFA 的确定性表现在转换函数f : K ×Σ→K 是一个单值函数,即对任何状态k ∈K 和输入符号a ∈Σ,f(k,a)唯一地确定了下一个状态,从状态转换图来看,若字母表Σ含有n 个输入字符,那么任何一个状态结点最多有n 条弧射出,且每条弧以一个不同的输入字符标记。

2、自动机接受字符串x :

如果对于某一自动机M=(K,Σ,f,S,Z),x ∈Σ*,有f(S,x)=P ,且P ∈Z ,则x 为该自动机

M所接受(识别),即自动机从开始状态开始,在读完全部输入串以后,自动机恰恰到达终止状态,则该输入串能被该自动机所接受。

例:DFA M=({S,A,B,C},{0,1},δ,S,{S}),且δ定义为δ (S,0)=B,δ (S,1)=A,δ (A,0)=C,δ (A,1)=S,δ (B,0)=S,δ (B,1)=C,δ (C,0)=A,δ (C,1)=B

状态图表示,矩阵表示:

自动机处理字符串110101和11101的轨迹

δ (S,110101)= δ (δ (S,1),10101)= δ (A,10101)= δ (δ (A,1),0101)= δ (S,0101)=

δ (δ (S,0),101)= δ (B,101)= δ (δ (B,1),01)= δ (C,01)= δ (δ (C,0),1)= δ (A,1)= S(接受)

δ (S,11101)= δ (δ (S,1),1101)= δ (A,1101)= δ (δ (A,1),101)= δ (S,101)= δ (δ (S,1),01)=

δ (A,01)= δ (δ (A,0),1)= δ (C,1)= B(拒绝)

3、所有为自动机M所能接受的串组成一个集合,称这个集合为自动机M所能接受的语言,用L(M)表示:L(M)={ t | f(S,t) ∈Z,t∈Σ*}

4、对于任何两个有穷自动机M和M’,如果L(M)=L(M’),则称M与M’是等价的。

五、非确定有穷自动机

1、NFA定义

一个不确定的有穷自动机NFA M’是一个五元组:

M’=(K, Σ,f,S,Z)

一个含有m个状态和n个输入字符的NFA可表示为一张状态转换图,该图含有m个状态结,每个结可射出若干条箭弧与别的结点相连接,每条弧用Σ*中的一个字(不一定要不同的字,且可以为空字)作标记(称输入字),整个图至少含有一个初态结以及若干个终态结。

2、NFA与DFA的区别

(1)NFA有一个开始状态集,而DFA只有一个开始状态。

(2)NFA的映射是Q×Σ→Q的子集,是一个多值映射,而DFA的映射是Q×Σ→Q,是一个单值映射。

(3)DFA是NFA的特例,对于每个NFA M,存在一个DFA M’,使得L(M)=L(M’)。

3、对于Σ*中的任何一个串t,若存在一条从某一初态结到某一终态结的道路,且这条道

路上的所有弧的标记依序连接成的串等于t,则称t可为NFA M所识别(读出或接受)。

若M的某些结既是初态结,又是终态结,或者存在一条从某个初态结到某个终态结的ε道路,则空字可为M所接受。

例:NFA M=({0,1,2,3,4},{a,b},f,{0},{2,4})

f(0,a)={0,3} f(2,b)={2} f(0,b)={0,1} f(3,a)={4} f(1,b)={2}

f(4,a)={4} f(2,a)={2} f(4,b)={4}

可用状态图或矩阵表示:

的转换

一、确定化——造表法

造表法是一种简单而有效的确定化方法。

定义:设NFA M=(Q, Σ∪{ε}, t, Q0, F),假定I是M中状态集的一个子集,定义ε_closure(I)如下:

①若q∈I,则q∈ε_closure(I);

②若q∈ε_closure(I),q’是由q出发经多条ε弧到达的状态,则q’∈ε_closure(I)。定义:假定I是NFA M中状态集的一个子集,a∈Σ,定义

I a=ε_closure(J)

其中J是所有那些可从子集I中的任一状态出发,经过一条a连线(跳过a连线前的ε连线)而到达的状态(结)的全体。

造表法的具体步骤:

假定给定的NFA M中(仅含两个符号a,b。可用如下方法将M确定化:采用造表的方式,该表的每一行有三列(若(中含有n个符号,则该表有n+1列),第一列记为I,第二、三列分别记为I a ,I b。

①置该表的第一行第一列为(_closure(Q0),即一列包含M初态集Q0 的ε_闭包。然后计算它的Ia 和Ib,分别填入第二、三列上,一般,若某一行的第一列上的I已确定,便

可根据前述定义求出这一行的第二、第三列上的Ia 和Ib。

②检查Ia 和Ib,看它们是否已在表的第一列中出现,把未曾出现者之一填入下一空行的第一列上,再计算该行的第二、第三列上的Ia 和Ib。

③重复第二步,直至表中所有第二、第三列上的元素全部再第一列出现为止。

因为M中的状态(子集)的个数是有限的,所以上述三步必定在有限步骤内终止。

④将由上述过程得到的最终形式的表看作一个状态转换表,即把其中第一列中的

元素作为状态,把I

a ,I

b

分别看作是输入符号a,b,把其余信息看作是状态转换函数之

值。这个表唯一地刻画了一个确定的有穷状态自动机M’,其初态是该表第一行第一列的元素,其终态是该表中所有那些含有原终态的元素。可以证明,这个DFA M’和NFA M 是等价的。

例:有一NFA M如下,用造表法使其确定化。

解:构造M’状态转换表

M’最终状态转换表

二、确定的有穷自动机的化简

1、所谓一个确定的有穷自动机M 的化简是指:

寻找一个状态数比M 少的DFA M ’, 使得L(M)=L(M ’),可通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有穷自动机。 2、消除多余状态

多余状态是指从该自动机的开始状态出发,任何输入串也不能到达的状态。

3、合并等价状态

等价状态:若 s 和 t 是M 的两个不同状态,称 s 和 t 等价:如果从状态 s 出发能读出某个字α而停于终态,同样从t 出发也能读出同一个字α而停于终态;反之若从t 出发能读出某个字α而停于终态,则从s 出发也能读出同一个字α而停于终态。

如果DFA M 的两个状态s 和t 不等价,则称这两个状态是可区别的。 DFA 中,状态s 和t 等价的条件是:

一致性条件:状态s 和t 必须同时为可接受状态(终态)或不可接受状态(非终态)。 蔓延性条件:对于所有输入符号,状态s 和t 必须转换到等价的状态里。

4、分割法合并等价状态

一个DFA M 的状态化简过程就是把M 的状态集划分成一些不相交的子集,使得任何不同的两子集的状态都是可区分的,而同一子集的任何两个状态都是等价的。最后,从每个子集选出一个代表(代表该子集),同时消去其它等价状态。

对M 的状态集S 进行划分的步骤:

①把S 的终态与非终态分开,分成两个子集,形成基本划分Π,属于这两个不同子集的状态是可区别的。

②假定某个时候Π已含m 个子集,记Π={I(1) , I(2) , …,I(m) }且属于不同子集的状态是可区别的,再检查Π中的每个I 能否进一步划分,对于某个I(i) ,令I(i) ={S1,S2,…,Sk},若存在一个输入字符使得move(I(i) ,a)不包含在现行Π的某一子集 I(i) 中,则将I(i)一分为二。

例:将图示的 解:

1、将M 状态分为两个子集:

P 0=({1,2,3,4},{5,6,7})

2、{1,2,3,4}读入a 后划为: P 1=({1,2},{3,4},{5,6,7})

3、进一步划分:

P 2=({1,2},{3},{4},{5,6,7})

4、考察{5,6,7},将P 2划分为: P 3=({1,2},{3},{4},{5},{6,7}) P3不可再划分,从而1

三、从化简后的DFA 到程序表示

识别标识符的DFA (图 (a))需改为图 (b)所示状态,其中,l 代表字母,d 代表数字。

图 (a ) 图(b )

若赋予状态q 0、q 1与q 2一定的操作,则可得识别单词标识符的程序流程图(见下图)。

3.3正规文法与有穷自动机

正规文法与有穷自动机FA 有着特殊的关系。可以证明:对任何正规文法G ,可以构造一个FA ,它能而且只能识别语言L(G);反过来,对任何FA ,可以构造一个相应的正规文法G ,它能生成由该FA 所识别的语言。 一、从正规文法到FA

设正规文法G 有形如U →aV(a ∈V T , V ∈V N 或V=ε)的产生式。由正规文法G 可以直接构造一个有穷自动机A(简称自动机A),使L(A)=L(G)。构造步骤如下:

① 令正规文法G 的终结符号集作为有穷自动机A 的字母表;

② 文法G 的每一个非终结符都作为自动机A 的一个状态,特别是文法G 的开始符作为自动机A 的开始状态;

③ 在自动机A 中增加一个新状态z 作为自动机的终止状态;

④ 对于文法G 的形如U →aV(a ∈V T , 或a=ε,V ∈V N )的产生式,在自动机A 中构造形如t(U, a)=V 的映射;

⑤ 对文法G 的形如U →a(a ∈V T )的产生式,在自动机A 中构造形如t(U,a)=z 的映射。 二、从FA 到正规文法

从正规文法可直接构造其自动机,反之,由自动机也可直接构造其正规文法。构造步骤如下:

① 自动机每一个状态的标记,均作为正规文法的非终结符,其中,自动机开始状态的标记将作为正规文法的开始符号。自动机的输入字母表中的所有符号,作为正规文

法的终结符。

②对于自动机的映射t(U, a)=V(其中,U、V为自动机的状态标记;a为输入符号),构造文法的一条产生式

U→aV

U、V为文法的非终结符,a为终结符。

③对于自动机的终止状态Z,在正规文法中增加一条产生式

Z→ε

3.4 正规表达式与FA

正规式也称正规则式、正规表达式,与正规文法的功能一样,正规式也可用以描述程序设计语言的单词符号。

一、正规表达式的操作符

1、连接

假定有两个正规表达式e1和e2,它们分别产生语言L1和L2,于是定义正规表达式的连接操作为

e1?e2={x ?y|x∈L1,y∈L2} 其中?可省略

2、选择

可用|或+表示,定义为e1|e2={x |x∈L1或x∈L2}

3、重复

用*表示,表示*中的表达式的0次到若干次的自重复连接,即e*={x| x∈L1*}

例:正规表达式110由数字1,1,0连接在一起组成,且表示的语言为L={110} 表达式0|1所表示的语言为L={0,1}

表达式1*所表示的语言为L={1i|i=0,1,2...}

例:用正则表达式表示

{标识符}=字母(字母|数字)*

{实数}=((|+|-)(数字* .数字数字*)

二、正规表达式的定义

所有正规表达式都可由下列规则构造出来:

①Φ是一个表示空集的正规表达式

②ε是一个正规表达式,它所表示的语言仅包含一个空符号串,即{ε}

③a是一个正规表达式,a∈V T它所表示的语言(它所表示的正规集)是单个符号a 所组成,即{a}

④如果e1和e2是正规表达式,其表示的语言分别为L1和L2,

(e1 )|(e2)是一个表示语言L1∪L2的正规表达式

(e1 )((e2)是一个表示语言L1L2的正规表达式

(e1 )*是一个表示语言L1*的正规表达式

⑤正规表达式中操作符的优先级顺序为*,连接,|

例:正规表达式a*b*表示的正规集是{a m b n|m≥0,n≥0}

正规表达式(ab)*表示的正规集是{(ab)m|m≥0}

正规表达式(a|b)*表示的正规集是{x|x∈{a,b}*}

表达式(aa|ab|ba|bb)*表示在V T={a,b}上的所有偶长度的串

三、正规表达式的等价性

如果两个正规表达式表示相同的语言,则这两个正规表达式相等或等价,故有

00*=000*|0

四、正规表达式的性质

r|s=s|r 或满足交换律

r|(s|t)=(r|s)|t 或满足结合律

(rs)t= r(st) 连接满足结合律

r(s|t)=rs|rt (s|t)r=sr|tr 分配律

εr=r,rε=r ε是连接的恒等元素

例:程序设计语言中的单词都能用正规式来定义,如:

∑={字母,数字}上的正规式e1=字母(字母|数字)*表示的是所有标识符的集合

正规式e=dd*定义了无符号整数

令∑={d,.,e,+,-},则∑上的正规式(d*.dd*| dd*)(e(+|-|ε)dd*|ε)表示的是无符号数。

五、正规文法与正规式

一个正规语言可以由正规文法定义,也可以由正规式定义,对任意一个正规文法,存在一个定义同一个语言的正规式;反之,对每个正规式,存在一个生成同一语言的正规文法。

1、正规式转换成正规文法

将∑上的一个正规式转换成文法G=(V N,V T,P,S),令其中的V T=∑,确定产生式和V N 的元素用如下方法:

①对任何正规式r,选择一个非终结符S,生成产生式S→r,并将S定为G的识别符号。

②若x和y都是正规式,对形如A→xy的产生式,重写为A→xB,B→y两产生式,其中B是新选择的非终结符,即B∈V N。

③对已转换的文法中的形如A→x*y的产生式,重写为A→xA,A→y

④对形如A →x|y 的产生式重写为A →x ,A →y

不断利用上述规则作变换,直到每个产生式最多含有一个V N 为止。 例:将R=a(a|d)*转换成相应的正规文法。 令S 是识别符号,首先形成S →a(a|d)*,下一步, S →aA, A →(a|d)*,重写为: A →(a|d)A ,A →ε

进而转变为:S →aA ,A →aA ,A →dA ,A →ε

2、正规文法转换成正规式

上述过程的逆过程,最后只剩下一个开始符号定义的产生式,并且该产生式的右部不含非终结符,转换规则:

例:文法G[S]:S →aA ,S →a S=aA|a ,A=aA|dA|a|d=(a|d)A|(a|d) A=(a|d)*(a|d)

S=a(a|d)*(a|d)|a=a((a|d)*(a|d)| ε)= a (a|d)*

练习:有文法G[S]:S →aS ,S →aB ,B →bC ,C →aC ,C →a 六、正规式和有穷自动机的等价性

正规表达式与有穷自动机等价,是指若给定一正则表达式,也即相应地给定了正则集合L(e),那么就可构造NFA M ,并有L(M)= L(e);反之,若给定一个DFA M ,M 接受的语言为L(M),则必然存在一正则表达式e ,且L(e)=L(M)。

正规表达式和FA 是定义语言(符号串集)的两种不同形式。同一个语言,既可用FA 描述,也可用正规表达式描述。 七、正规表达式到NFA 的转换

先构造一个NFA M 的一个广义转换图,其中,只有S 与Z 两个状态,S 是开始状态,Z 是终止状态,弧上是正规表达式e 。然后,按照下图所示的替换规则对正规表达式e 逐步进行分解,直到转换图中所有的弧上都是∑中的单个符号或ε为止。

(1) 替换成

(2 替换成

(3

替换成

例:有∑={a,b}

上的正规式R=(a|b)*abb 构造NFA M 使L(M)=L(e)。 练习:构造与∑={a,b}上的正规式(a|b)*(aa|bb)(a|b)*等价的自动机。 八、NFA 到正规表达式的转换

对于一个具有输入字母表∑的NFA M ,在∑上也可以构造一个正规表达式e

,使L(e)=L(M)。具体操作如下:

①首先,对NFA M 进行拓广,在M 的状态转换图中,新设置一个唯一的开始状态S 和唯一的终止状态Z ,并允许状态转换图中弧上可以为正规表达式。

②然后,从开始状态S 到原来所有的开始状态连接ε弧,再从原来所有的终止状态到Z 状态也连接ε

弧。修改后,构成了一个新的NFA ,它只有一个初态结点S 和一个终态结点Z ,这个新的NFA M ′显然和原NFA M 等价。

③接着,利用下图所示的替换规则,逐步消去M ′中属于M 的所有结点和有关连线,

直到状态转换图中只剩下状态S 和Z 为止(这个过程称为消结)。在消结过程中,用相应的正规表达式标记连线。

(1

替换成

(2) 替换成

(3) 替换成

例:NFA M=({0,1,2,3,4},{a,b},f,{0},{2,4}),状态图如下,构造正规式R 使L(R)=L(M)。

3.5 DFA在计算机中的表示

对于一个DFA=(Q, ∑, t, q0, F),如果给出了它的映射t:Q×∑→Q,那么,这个DFA 实际上也就确定了。因此,要在计算机中表示一个DFA,只需在计算机中表示它的映射。

一、矩阵表示法

DFA的映射t:Q×∑→Q,可表示成t(q, a)=q’,其中,q,q’∈Q,a∈∑。映射t(q, a)=q’,在计算机中自然可用矩阵来表示,其中,状态q作为矩阵的行,输入字母a作为矩阵的列,映象q’作为矩阵元素t(q, a)的值。将状态集Q中的所有状态排一个序:q0, q1, q2,…, q n;输入字母表∑中的所有字母也排一个序:a1, a2,…, a m。设M是一个二维数组,若t(q i, q j)=q k,则令M[i ,j]=k,其中,i,k=0,1,2,…, n;j=1, 2,…, m。

二、表结构

DFA的映射t:Q×∑→Q,在计算机中可表示成一种表结构。在这个表结构中,每一个状态对应一个表,表中包括该状态的状态名、从该状态发出的弧数、每条弧上的标记(输入字母)以及弧达到的状态所在表的首地址。

若给定一个状态和输入符号,则可以直接在表中先查找到该状态所在的表项,进而在该表项中找到输入符号,按照其对应的(语义)动作的链接,前进到下一个状态。

DFA在计算机中的表结构

三、程序表示法

我们也可以用程序来表示DFA。

例:C语言的注释/*…*/,其有穷自动机

if the next characterr is “/”then

advance the input; {State 2}

if the next character is “*” then

advance the input; {State 3}

done:=false;

while not done do

while the next input character is not “*”do

advance the input;

end while;

advance the input; {State 4}

while the next input character is “*” do

advance the input;

end while;

if the next input character is “/” then

done:=true ;

end if;

advance the input;

end while;

accept; {State 5}

else {other processing} end if

else {other processing} end if

State:=1; {Start}

while state=1,2,3 or 4 do

case state of

1:case input character of

“/”:advance the input state:=2;

else state:=...{Error or Other}

end case

2:case input character of

“*”:advance the input; state:=3;

else state=... {Error or Other}

end case

3:case input character of

“*”:advance the input; state:=4;

else advance the input{and stay in State 3}

end case

4:case input character of

“/”:advance the input; state:=5;

“*”:advance the input;{and stay in State 4}

else advance the input; state:=3;

end case

end case

end while

if state=5 then accept else error

本章小结

1、自动机是一种能进行运算并能实现自我控制的装置。它是描述符号串处理的强有力的工具,是研究扫描器的理论基础。有穷自动机(FA)分为确定有穷自动机(DFA)和非确定有穷自动机(NFA)。

2、DFA=(Q,∑,t,q0,F),Q是状态集,∑是输入字母表,t:Q×∑→Q,q0∈Q 是开始状态,F?Q是终止状态集。

3、NFA=(Q,∑,t,Q0,F),t:Q×∑→Q的子集,Q0?Q是开始状态集。

4、对NFA可采用子集法和造表法进行确定化,将其转化为等价的DFA。对DFA则可进行最小化(化简),对DFA化简的基本思想是将状态集分解成若干个互不相交的子集,使每个子集中的状态都是等价的,而不同子集的状态是可区分的。

5、正规文法与FA有着特殊的关系。从正规文法可直接构造其自动机,反之,由自动机也可直接构造其正规文法。

6、正规表达式与FA也有着特殊的关系。对于字母表∑上的任意一个正规表达式e,一定可以构造一个NFA M,使L(M)=L(e)。反之,对于一个具有输入字母表∑的NFA M,在∑上也可构造一个正规表达式e,使L(e)=L(M)。

7、正规语言可用正规文法描述,也可用正规表达式描述。

8、DFA在计算机中有三种表示,一种是矩阵表示,一种是表结构,还有一种是程序表示。

作业:P58 3.1单数题,3.2双数题,3.3,3.4,3.6,3.7,3.8,3.9,3.10

编译原理-第三版-何炎祥-第三章习题答案

编译原理作业三 T3-1构造自动机A ,使得它能识别形式如±dd*·d*E ±dd 的实数,其中,d ∈{0,1,2,3,4,5,6,7,8,9} T3-4将图所示NFA 确定化和最小化。 解:依据该NFSA 的状态图构造DFSA 如下表所示。 I I x I y [q 0] 0 [q 1] 1 [q 2] 2 [q 1] 1 [q 2,q 3] 3 [q 2] 2 [q 1,q 3] 4 [q 2,q 3] 3 [q 3,q 4] 5 [q 1,q 3] 4 [q 1,q 3] 4 [q 2,q 3,q 4] 6 [q 3] 7 [q 3,q 4] 5 [q 3,q 4] 5 [q 3] 7 [q 2,q 3,q 4] 6 [q 3,q 4] 5 [q 1,q 3] 4 [q 3] 7 [q 3,q 4] 5 [q 3] 7 DFSA 相应的状态图如下图所示: 6 1 2 3 4 5 7 X X y y y X X X X X y y y y S 3 1 4 2 5 6 7 ± d E d d d d ±

对DFSA 进行最小化: 已知K={0,1,2,3,4,5,6,7},K 可分为两个子集 K1={0,1,2,3,4,7}(非终态集) K2={5,6}(终态集) 在K1中,因为状态1只有x 输入,状态2只有y 输入,其他状态均有x ,y 输入,所以可以将K1分割为K11={0,3,4,7} K12={1} K13={2} 在K11中 {0}x=1∈K12 {3,4,7}x={5,6}?K2 故可将K11分割为 K111={0} K111={3,4,7} {3,4,7}x={5,6}?K2 {3,4,7}y={4,7}?K111 因此状态3,4,7是否等价取决于对K2的划分结果 在状态K2={5,6}中 {5,6}x=5∈K2 {5,6}y={4,7}?K111 所以状态5,6等价,所以状态3,4,7等价 所以,将原状态集合划分为{0}、{3,4,7}、{1}、{2}、{5,6} 最小化后的状态图为: S 1 2 3 5 X X X X y y y y

有限自动机三章答案

第三章 ******************************************************* ************************ 1.构造下列语言的DFA ( 陶文婧 02282085 ) (1){0,1}* ,1 (2){0,1}+ ,1 (3){x|x{0,1}+且x中不含00的串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态) (4){ x|x{0,1}*且x中不含00的串} (可接受空字符串,所以初始状态也是接受状态) (5){x|x{0,1}+且x中含形如10110的子串} (6){x|x{0,1}+且x中不含形如10110的子串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态)

(7){x|x{0,1}+且当把x看成二进制时,x模5和3同余,要求当x为0时,|x|=1,且x0时,x的首字符为1 } 1.以0开头的串不被接受,故设置陷阱状态,当DFA在启动状态读入的符号为0,则进 入陷阱状态 2.设置7个状态:开始状态q s,q0:除以5余0的等价类,q1:除以5余1的等价类,q2:除以5 余2的等价类,q3:除以5余3的等价类,q4:除以5余4的等价类,接受状态q t (8){x|x{0,1}+且x的第十个字符为1} (设置一个陷阱状态,一旦发现x的第十个字符为0,进入陷阱状态) (9){x|x{0,1}+且x以0开头以1结尾} (设置陷阱状态,当第一个字符为1时,进入陷阱状态)

(10){x|x{0,1}+且x中至少含有两个1} (11){x|x {0,1}+且如果x以1结尾,则它的长度为偶数;如果x以0结尾,则它的长度为奇数} 可将{0,1}+的字符串分为4个等价类。 q0:[]的等价类,对应的状态为终止状态 q1:x的长度为奇且以0结尾的等价类 q2:x的长度为奇且以1结尾的等价类 q3: x的长度为偶且以0结尾的等价类 q4: x的长度为偶且以1结尾的等价类 (12){x|x是十进制非负数}

编译原理作业集-第三章-修订版

第三章词法分析 本章要点 1.词法分析器设计, 2.正规表达式与有限自动机, 3.词法分析器自动生成。 本章目标: 1.理解对词法分析器的任务,掌握词法分析器的设计; 2.掌握正规表达式与有限自动机; 3.掌握词法分析器的自动产生。 本章重点: 1.词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。应重点掌握词法分析器的任务与设计,状态转换图等内容。 2.掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。 (1)非形式描述的语言?正规式 (2)正规式→ NFA(非确定的有限自动机) (3)NFA → DFA(确定的有限自动机) (4)DFA →最简DFA 本章难点 (1)非形式描述的语言?正规式 (2)正规式→ NFA(非确定的有限自动机) (3)NFA → DFA(确定的有限自动机) (4)DFA →最简DFA

作业题 一、单项选择题 (按照组卷方案,至少15道) 1. 程序语言下面的单词符号中,一般不需要超前搜索 a. 关键字 b. 标识符 c. 常数 d. 算符和界符 2. 在状态转换图的实现中,一般对应一个循环语句 a. 不含回路的分叉结点 b. 含回路的状态结点 c. 终态结点 d. 都不是 3. 用了表示字母,d表示数字, ={l,d},则定义标识符的正则表达式可以是:。 (a)ld*(b)ll*(c)l(l | d)*(d)ll* | d* 4. 正规表达式(ε|a|b)2表示的集合是 (a){ε,ab,ba,aa,bb} (b){ab,ba,aa,bb} (c){a,b,ab,aa,ba,bb} (d){ε,a,b,aa,bb,ab,ba} 5. 有限状态自动机可用五元组(V T,Q,δ,q0,Q f)来描述,设有一有限状态自动机M的定义如下: V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为: δ(q0,0)=q1δ(q1,0)=q2 δ(q2,1)=q2δ(q2,0)=q2 M所对应的状态转换图为。

形式语言与自动机课后习题答案

形式语言与自动机课后作业答案 第二章 4.找出右线性文法,能构成长度为1至5个字符且以字母为首的字符串。 答:G={N,T,P,S} 其中N={S,A,B,C,D} T={x,y} 其中x∈{所有字母} y∈{所有的字符} P如下: S→x S→xA A→y A→yB B→y B→yC C→y C→yD D→y 6.构造上下文无关文法能够产生 L={ω/ω∈{a,b}*且ω中a的个数是b的两倍} 答:G={N,T,P,S} 其中N={S} T={a,b} P如下: S→aab S→aba S→baa S→aabS S→aaSb S→aSab S→Saab S→abaS S→abSa S→aSba S→Saba S→baaS S→baSa S→bSaa S→Sbaa 7.找出由下列各组生成式产生的语言(起始符为S) (1)S→SaS S→b (2)S→aSb S→c (3)S→a S→aE E→aS 答:(1)b(ab)n /n≥0}或者L={(ba)n b/n≥0} (2) L={a n cb n /n≥0} (3)L={a2n+1 /n≥0} 第三章 1.下列集合是否为正则集,若是正则集写出其正则式。 (1)含有偶数个a和奇数个b的{a,b}*上的字符串集合 (2)含有相同个数a和b的字符串集合 (3)不含子串aba的{a,b}*上的字符串集合 答:(1)是正则集,自动机如下 (2) 不是正则集,用泵浦引理可以证明,具体见17题(2)。

(3) 是正则集 先看L’为包含子串aba的{a,b}*上的字符串集合 显然这是正则集,可以写出表达式和画出自动机。(略) 则不包含子串aba的{a,b}*上的字符串集合L是L’的非。 根据正则集的性质,L也是正则集。 4.对下列文法的生成式,找出其正则式 (1)G=({S,A,B,C,D},{a,b,c,d},P,S),生成式P如下: S→aA S→B A→abS A→bB B→b B→cC C→D D→bB D→d (2)G=({S,A,B,C,D},{a,b,c,d},P,S),生成式P如下: S→aA S→B A→cC A→bB B→bB B→a C→D C→abB D→d 答:(1) 由生成式得: S=aA+B ① A=abS+bB ② B=b+cC ③ C=D ④ D=d+bB ⑤ ③④⑤式化简消去CD,得到B=b+c(d+bB) 即B=cbB+cd+b =>B=(cb)*(cd+b) ⑥ 将②⑥代入① S=aabS+ab(cb)*(cd+b)+(cb)*(cd+b) =>S=(aab)*(ab+ε)(cb)*(cd+b) (2) 由生成式得: S=aA+B ① A=bB+cC ② B=a+bB ③ C=D+abB ④ D=dB ⑤ 由③得 B=b*a ⑥ 将⑤⑥代入④ C=d+abb*a=d+ab+a ⑦ 将⑥⑦代入② A=b+a+c(d+b+a) ⑧ 将⑥⑧代入① S=a(b+a+c(d+ab+a))+b*a =ab+a+acd+acab+a+b*a 5.为下列正则集,构造右线性文法: (1){a,b}* (2)以abb结尾的由a和b组成的所有字符串的集合

编译原理 第3章习题解答

第三章习题参考解答 3.1 构造自动机A,使得 ① ② ③当从左至右读入二进制数时,它能识别出读入的奇数; ④它识别字母表{a, b}上的符号串,但符号串不能含两个相邻的a,也不含两个相邻的b; ⑤它能接受字母表{0, 1}上的符号串,这些符号串由任意的1、0和随后的任意的11、00对组成。 ⑥它能识别形式如 ±dd*? d*E ±dd 的实数,其中,d∈{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。 3.2 构造下列正规表达式的DFSA: ① xy*∣yx*y∣xyx; ② 00∣(01)*∣11; ③ 01((10∣01)*(11∣00))*01; ④ a(ab*∣ba*)*b。 3.3 消除图3.24所示自动机的空移。 b ε q 1 q 2 q 3 a b a,b q a q 6 q 4 q 5 a b ε ε ε 图3.24 含空移的自动机 3.4 将图3.25所示NDFSA确定化和最小化。 x y q q 1 q 2 q 4 q 3 x y x y x,y x 图3.25 待确定化的NDFSA

3.5 设e、e1、e2是字母表∑上的正规表达式,试证明 ① e∣e=e;② {{e}}={e};③ {e}=ε∣e{e};④ {e1 e2} e1= e1{e2 e1}; ⑤ {e1∣e2}={{e1}{e2}}={{e1}∣{e2}}。 3.6 构造下面文法G[Z]的自动机,指明该自动机是不是确定的,并写出它相应的语言: G[Z]: Z→A0 A→A0∣Z1∣0 3.7 设NDFSA M=({x, y},{a, b},f, x, {y}), 其中,f(x, a)={x, y}, f(x, b)={y}, f(y, a)=?, f(y, b)={x, y}。试对此NDFSA确定化。 3.8 设文法G[〈单词〉]: 〈单词〉→〈标识符〉∣〈无符号整数〉 〈标识符〉→〈字母〉∣〈标识符〉〈字母〉∣〈标识符〉〈数字〉 〈无符号整数〉→〈数字〉∣〈无符号整数〉〈数字〉 〈字母〉→a∣b 〈数字〉→1∣2 试写出相应的有限自动机和状态图。 3.9 图3.29所示的是一个NDFSA A,试构造一个正规文法G,使得L(G)= L(A)。 A B b S a a,b C a D b 图3.29 FSA A 3.10 构造一个DFSA,它接受∑={a, b}上的符号串,符号串中的每一个b都有a直接跟在右边;然后,再构造该语言的正规文法。 参考答案 3.1 解 (1) (2) (3) 依题意,当二进制数的末尾为1时,表示此二进制数为奇数。因此自动机接收由0、1构成的一个二进制串,且串的最后一位必为1(特殊情况下,接收数字1)。构造的自动机如下: z S 1 0,1

第三章 有穷自动机

第三章有穷自动机 1、教学目的及要求: 本章介绍有关有穷自动机的基本概念和理论以及正规文法、正规表达式与有穷自动机之间的相互关系。要求掌握正则文法、状态转换图、DFA、NFA、正规式和正规集的基本概念。 2、教学内容: 本章介绍有关有穷自动机的基本概念和理论以及正规文法、正规表达式与有穷自动机之间的相互关系。 3、教学重点: 状态转换图。 4、教学难点: ◇正规式的定义-如何用作单词的描述工具 ◇有穷自动机的定义和分类-如何用作单词的识别系统 ◇正规式到有穷自动机的转换算法-词法分析程序的自动构造原理 ◇正则文法、正规集、DFA、NFA的相互转化。 5、课前思考 ◇什么是有穷自动机? ◇什么是状态转换图? 6、章节内容 第一节有穷自动机的形式定义 第二节 NFA到DFA的转换 第三节正规文法与有穷自动机 第四节正规表达式与FA 第五节 DFA在计算机中的表示

3.1 有穷自动机的形式定义 有穷状态自动机(Finite-state Automata 或简称FA)在识别功能上与正规文法类等价,而且也等价于一个特殊类型的语言产生器——正规表达式(Regular Expression)。因此许多简单的程序语言都可由FA所识别。事实上,它是描述词法的有效工具,也是进行词法分析的主要理论基础。 为了构造词法分析程序,要研究构词法,每种词类的结构模式以及识别它的数学模型——有穷自动机。它的模拟程序可以作为词法分析程序的控制程序。 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。 有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。 一、确定有穷自动机的形式定义 一个确定的有穷自动机M(记作DFA M)是一个五元组M=(K,Σ,f,S,Z),其中(a) K是一个有限状态集合。 (b) Σ是一个字母表,它的每个元素称为一个输入字符。 (c) S∈K,S 称为初始状态,唯一。 (d) Z?K,Z称为终态集合, 终态也称可接受状态或结束状态。 (e) f是转换函数,是一个从K×Σ到K的单值映射。f(k i,a)=k j(k i,k j∈Q,a∈Σ)k j称为k i的一个后继状态。 确定性的体现:初始状态唯一;转换函数为单值映射。 例:设DFA M=({S,U,V,Q},{a,b},f,S,{Q})其中 f(S,a)=U,f(S,b)=V f(U,a)=Q,f(U,b)=V f(V,a)=U,f(V,b)=Q f(Q,a)=Q,f(Q,b)=Q 因为(1)初始状态唯一是S,(2)每个转换函数均为单值映射。所以该FA为确定有穷自动机。 二、状态转换表 DFA的映射关系可以由一个矩阵表示,矩阵的行标表示状态,列标表示输入字符,矩阵元素表示f(s,a)的值,这个矩阵称为状态转换表。 例:

形式语言与自动机理论-蒋宗礼-第三章参考答案

第三章作业答案 1.已知DFA M1与M2如图3-18所示。 (敖雪峰 02282068) (1) 请分别给出它们在处理字符串1011001的过程中经过的状态序列。 (2) 请给出它们的形式描述。 S q q 1 图3-18 两个不同的DFA 解答:(1)M1在处理1011001的过程中经过的状态序列为q 0q 3q 1q 3q 2q 3q 1q 3; M2在处理1011001的过程中经过的状态序列为q 0q 2q 3q 1q 3q 2q 3q 1; (2)考虑到用形式语言表示,用自然语言似乎不是那么容易, 所以用图上作业法把它们用正则表达式来描述: M1: [01+(00+1)(11+0)][11+(10+0)(11+0)]* M2: (01+1+000){(01)*+[(001+11)(01+1+000)]*} ******************************************************************************* 2.构造下列语言的DFA ( 文婧 02282085 ) (1){0,1}* ,1 ( 2){0,1} + ,1 (3){x|x {0,1}+ 且x 中不含00的串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态)

(4){ x|x∈{0,1}*且x中不含00的串} (可接受空字符串,所以初始状态也是接受状态) (5){x|x∈{0,1}+且x中含形如10110的子串} (6){x|x∈{0,1}+且x中不含形如10110的子串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态) (7){x|x∈{0,1}+且当把x看成二进制时,x模5和3同余,要求当x为0时,|x|=1,且x≠0时,x的首字符为1 } 1.以0开头的串不被接受,故设置陷阱状态,当DFA在启动状态读入的符号为0,则进入 陷阱状态 2.设置7个状态:开始状态q s,q0:除以5余0的等价类,q1:除以5余1的等价类,q2:除以 5余2的等价类,q3:除以5余3的等价类,q4:除以5余4的等价类,接受状态q t

编译原理作业集-第三章-修订版

编译原理作业集-第三章-修 订版 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

第三章词法分析 本章要点 1.词法分析器设计, 2.正规表达式与有限自动机, 3.词法分析器自动生成。 本章目标: 1.理解对词法分析器的任务,掌握词法分析器的设计; 2.掌握正规表达式与有限自动机; 3.掌握词法分析器的自动产生。 本章重点: 1.词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。应重点掌握词法分析器的任务与设计,状态转换图等内容。 2.掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。 (1)非形式描述的语言正规式 (2)正规式 NFA(非确定的有限自动机) (3)NFA DFA(确定的有限自动机) (4)DFA 最简DFA 本章难点 (1)非形式描述的语言正规式 (2)正规式 NFA(非确定的有限自动机) (3) NFA DFA(确定的有限自动机) (4) DFA 最简DFA

作业题 一、单项选择题 (按照组卷方案,至少15道) 1. 程序语言下面的单词符号中,一般不需要超前搜索 a. 关键字 b. 标识符 c. 常数 d. 算符和界符 2. 在状态转换图的实现中,一般对应一个循环语句 a. 不含回路的分叉结点 b. 含回路的状态结点 c. 终态结点 d. 都不是 3. 用了表示字母,d表示数字, ={l,d},则定义标识符的正则表达式可以是:。 (a)ld* (b)ll* (c)l(l | d)* (d)ll* | d* 4. 正规表达式(ε|a|b)2表示的集合是 (a){ε,ab,ba,aa,bb} (b){ab,ba,aa,bb} (c){a,b,ab,aa,ba,bb} (d){ε,a,b,aa,bb,ab,ba} 5. 有限状态自动机可用五元组(V T,Q,δ,q0,Q f)来描述,设有一有限状态自动机M的定义如下: V T={0, 1},Q={q0, q1, q2},Q f={q2},δ的定义为: δ(q0,0)=q1δ(q1,0)=q2 δ(q2,1)=q2δ(q2,0)=q2

形式语言与自动机理论-蒋宗礼-第三章参考答案

第三章作业答案 1 已知 DFA M1与M2如图3- 18所示。 (1) 请分别给出它们在处理字符串 (2) 请给出它们的形式描述。 图3- 18 两个不同的DFA 解答:(1)M1在处理1011001的过程中经过的状态序列为 M2在处理1011001的过程中经过的状态序列为 q °q 2q 3q 1q 3q 2q 3q 1; ⑵考虑到用形式语言表示,用自然语言似乎不是那么容易,所 以用图上作业法把它们用正则 表达式来描述 M1: [01+(00+1)(11+0)][11+(10+0)(11+0)]* M2: (01 + 1+000){(01)*+[(001 + 11)(01 + 1+000)]*} ******************************************************************************* 2. 构造下列语言的 DFA (陶文婧 02282085 ) (1) {0 , 1} (3) {x|x {0, 1}+ 且x 中不含00的串} (设置一个陷阱状态,一旦发现有 00的子串,就进入陷阱状态) 0 * 1 0 0 1 0 0 1 0 1 1 0 1 (敖雪峰 02282068) 1011001的过程中经过的状态序列。 q o q 3q 1q 3q 2q 3q 1q 3; (2) 0, 1 + {0 , 1}

(4) { x|x ? {0 , 1}*且x 中不含00的串} (可接受空字符串,所以初始状态也是接受状态) (5) {x|x ?{0, 1}+ 且x 中含形如10110的子串} (6) {x|x^{0, 1}+ 且x 中不含形如10110的子串} (设置一个陷阱状态,一旦发现有 00的子串,就进入陷阱状态) (7) {x|x {0,1}+且当把x 看成二进制时,x 模5和3同余,要求当x 为0时,|x|=1,且x=0 时,x 的 首字符为1 } 1. 以0开头的串不被接受,故设置陷阱状态,当 DFA 在启动状态读入的符号为 0,则进 入陷阱状态 2. 设置7个状态:开始状态q s ,q °:除以5余0的等价类,除以5余1的等价类口2:除以5 余2的等价类,q 3:除以5余3的等价类,q 4:除以5余4的等价类,接受状态 q t 状态 0 1 q 0 q 1 q 2 q 1 q 3 q 2 q 2 q 0 q 4 q 3 q 1 q 2 1

第3章参考答案

第3章习题解答: 1. 解答: (1) √(2) √ (3) ×(4) ×(5) √(6)√ 2. [分析] 有限自动机分为确定有限自动机和非确定有限自动机。确定有限自动机的确定性表现在映射δ:Q×V T-->q是单值函数,也就是说,对任何状态 q∈Q和输入字符串a∈V T,δ(q,a)唯一确定下一个状态。显然,本题给出的是一个确定的有限自动机,它的状态转换图是C 中的②。 它所接受的语言可以用正则表达式表示为00(0|1)*,表示的含义为由两个0开始的后跟任意个(包含0个)0或1组成的符号串的集合。 2. 解答:A:④ B:③ C:② D:② E: ④ 3,4.解答:略! 5.解答: 6.解答: (1) (0|1)*01 (2) ((1|2|…|9)(0|1|2|…|9)*| ε)(0|5) (3) (0|1)*(011)(0|1)* (4) 1*|1*0(0|10)*(1|ε) (5) a*b*c*…z* (6) (0|10*1)*1 (7) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* (8) [分析] 设S是符合要求的串,|S|=2k+1 (k≥0)。 则 S→S10|S21,|S1|=2k (k>0),|S2|=2k (k≥0)。 且S1是{0,1}上的串,含有奇数个0和奇数个1。 S2是{0,1}上的串,含有偶数个0和偶数个1。 考虑有一个自动机M1接受S1,那么自动机M1如下: 和L(M1)等价的正规式,即S1为: ((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)* 类似的考虑有一个自动机M2接受S2,那么自动机M2如下:

编译原理第3章 习题解答

第3章习题解答 1.构造正规式1(0|1)*101相应的DFA. [答案] 先构造NFA ============================================================== 2.将下图确定化:

[答案] 重新命名,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。 ================================================================ 3.把下图最小化: [答案] (1)初始分划得Π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},所以得新分划 (2)Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: ∵{1,5} b {4} {2,3} b {1,2,3,5},故得新分划 (3)Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5} {2,3} a {1,3},故状态2和状态3不等价,得新分划 (3)Π3:{0},{2},{3},{4},{1, 5} 这是最后分划了 (4)最小DFA : ======================================= 4.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。并给出该语言的正规式和正规文法。 [答案] 按题意相应的正规表达式是0*(100*)*0* 构造相应的DFA ,首先构造NFA 为 用子集法确定化 可最小化,终态组为G1={C, D},非终态组为G2={S, A, B} 对于G2分析:f(S,0)=A, f(A,0)=A, 后继状态均属于G2 而f(B,0)=C, 后继状态属于G1 将G2分割成G21={S ,A}, G22={B}

第三章习题解答

第四次作业: P74 2. 什么叫超前搜索?扫描缓冲区的作用是什么? 词法分析程序在识别单词的时候,为进一步判明情况,确定下一步要做什么,一般采用超前读字符的方法,称超前搜索,扫描缓冲区的作用是为了识别单词符号。 P74 4. 画出下列文法的状态图: Z::=Be B::=Af A::=e|Ae 并使用该状态图检查下列句子是否该文法的合法句子:f, eeff, eefe。 由状态图可知只有eefe是该文法的合法句子。 P74 5. 设右线性文法G=({S, A, B}, {a, b}, S, P),其中P组成如下: S::=bA A::=bB A::=aA A::=b B::=a 画出该文法的状态转换图。 第五次作业: P74 6. 构造下述文法G[Z]的自动机,该自动机是确定的吗?它相应的语言是什么? Z::=A0 A::=A0|Z1|0 解1:将左线性文法转换为右线性文法,由于在规则中出现了识别符号出现在规则右部的情形,因此不能直接使用书上的左右线性文法对应规则,可以引入非终结符号B,将左线性文法变为Z::=A0 A::=A0|B1|0 B::=A0,具体为: A := Z1 A := B1 A := A01 Z := A0 B := A0

将所得的新左线性文法转换成右线性文法: 此时利用书上规则,其对应的右线性文法为:A ::=0A|0B|0 Z ::=0A B ::=1A 解2:先画出该文法状态转换图: NFA=({S ,A ,Z},{0,1},M ,{S},{Z}) 其中M : M (S ,0)={A} M (S ,1)=? M (A ,0)={A ,Z} M (A ,1)=? M (Z ,0)=? M (Z ,1)={A} 显然该文法的自动机是非确定的;它相应的语言为:{0,1}上所有满足以00开头以0结尾且每个1必有0直接跟在其后的字符串的集合;也可以通过求解正规表达式得到A=0(0|01)*,Z=0(0|01)*0 ) P74 7. 构造一个DFA ,它接受{0,1}上所有满足下述条件的字符串,其条件是:字符串中每个1都有0直接跟在右边,然后,再构造该语言的正规文法。【其它解法可参考P41-26题】 解(一):其状态转换图为 (状态S 表示空串开始,状态A 表明串的末尾是1,状态Z 表示串的末尾是0) DFA=({S ,A ,Z},{0,1},M ,S ,{Z}) 其中M : M (S ,0)=Z M (S ,1)= A M (A ,0)=Z M (Z ,0)=Z M (Z ,1)=A

编译原理第三章答案

第3章文法和语言 第1题 文法G=({A,B,S},{a,b,c},P,S)其中P为: S→Ac|aB A→ab B→bc 写出L(G[S])的全部元素。 答案: L(G[S])={abc} 第2题 文法G[N]为: N→D|ND D→0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? 答案: G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD.... =>NDDDD...D=>D......D 或者:允许0开头的非负整数? 第3题 为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。答案: G[S]: S->S+D|S-D|D D->0|1|2|3|4|5|6|7|8|9 第4题 已知文法G[Z]: Z→aZb|ab 写出L(G[Z])的全部元素。 答案: Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb L(G[Z])={a n b n |n>=1} 第5题 写一文法,使其语言是偶正整数的集合。要求: (1) 允许0打头; (2)不允许0打头。 答案: (1)允许0开头的偶正整数集合的文法E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8 (2)不允许0开头的偶正整数集合的文法E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→D|0 第6题

已知文法G: <表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子> <因子>::=(<表达式>)|i 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)i+i*i

第三章 编译原理参考答案(1)

一:有语言L={w|w∈{0,1}*,并且w中至少有两个1,又在任何两个1之间有偶数个0 },试写出该语言的正规表达式。 对于语言L,w中至少有两个1,且任意两个1之间必须有偶数个0;也即在第一个1之前和最后一个1之后,对0的个数没有要求。据此我们求出L的正规式为0*1(00(00)*1)*00(00)*10* 二:设语言L是满足下述条件的符号串构成的语言:若出现 a ,则其后至少紧跟两个 c ;请给出识别L 的正规表达式。其中字母表为{a,b,c} (acc|b|c)* 三:写出下面NFA识别的正规式 (a|b)ab* 三:已知文法G1: S→aB|ε B→bC|bD C→cB|c D→d 试构造其对应的最小DFA,并给出状态转换图和构造过程。 确定化:

最小化: {1,5,4} {2,3} {1}{5}{4}{2}{3} 上图即为最小DFA 四:设有L(G)={a 2n+1b 2m a 2p+1| n ≥0,p ≥0,m ≥1}。 (1) 给出描述该语言的正规表达式; (2) 构造识别该语言的确定有限自动机(可直接用状态图形式给出)并化简。 该语言对应的正规表达式为a(aa)*bb(bb)*a(aa)*,正规表达式对应的NFA 如图: 确定化:(按照定义,上图已经是DFA ,所以下面确定化不做也是可以的,直接最小化) 由最小化方法得到 {0,2} {1} {3,5} {4,6} {7} 最简的DFA : a 重新命名

五: 将图所示的非确定有限自动机(NFA)变换成等价的确定有限自动机(DFA)并化简。其中,X 为初态,Y 为终态。然后根据最小DFA ,写出对应的正规文法(右线性) b 重新命名

第3章练习答案

概率论与数理统计第三章习题 0.7一射手对某目标进行了三次独立射击,现将观察这些次射击是否命中作为试验,试写出此试验的样本空间;试在样本空间上定义一个函数以指示射手在这三次独立射击中命中目标的次数;设已知射手每次射击目标的命中率为,试写出命中次数的概率分布。 1231231231231231231231231234567812345671,2,3 {(,,),(,,),(,,),(,,),(,,), (,,),(,,),(,,)}{,,,,,,,}()3()()()2()()()1 i A i i A A A A A A A A A A A A A A A A A A A A A A A A ωωωωωωωωξξωξωξωξωξωξωξωξ==Ω=========解:设“第次射中”,则令代表击中目标的次数,则 ,,83112323412356712338123()0 (3)()()(0.7)0.343(2)()()()3() 30.70.7(10.7)0.441 (1)()()()3() 30.7(10.7)(10.7)0.189 (0)(0)()(10.7)0.0P P P A A A P P P P P A A A P P P P P A A A P P P A A A ωξωξωωωξωωωξω========++==???-===++==??-?-======-=270 123.0.0270.1890.4410.343ξ?? ??? 所以,的分布列为 ξ 服从~(3,0.7)B ξ,在Excel 依次输入: =binomdist (0,3,0.7,0), =binomdist (1,3,0.7,0), =binomdist (2,3,0.7,0), =binomdist (3,3,0.7,0), 2.9311一批零件中有个合格品、个废品,安装机器时从这批零件中任取个来使用,若取得废品就不再放回而再取个,求在取得合格品之前已取出的废品数的概率分布。

形式语言与自动机理论-蒋宗礼-第三章参考答案

形式语言与自动机理论-蒋宗礼-第三章参考答案

第三章作业答案 1.已知DFA M1与M2如图3-18所示。 (敖雪峰 02282068) (1) 请分别给出它们在处理字符串1011001的过程中经过的状态序列。 (2) 请给出它们的形式描述。 10 10 S q q q 2 q 3 1 11 q 2 q 3 1 1 图3-18 两个不同的 DFA 解答:(1)M1在处理1011001的过程中经过的状态序列为q 0q 3q 1q 3q 2q 3q 1q 3;

M2在处理1011001的过程中经过的状态序列为q0q2q3q1q3q2q3q1; (2)考虑到用形式语言表示,用自然语言似乎不是那么容易,所以用图上作业法把它们用正则表达式来描述: M1: [01+(00+1)(11+0)][11+(10+0)(11+0)]* M2: (01+1+000){(01)*+[(001+11)(01+1+000)]*} ***************************************** ************************************** 2.构造下列语言的DFA ( 陶文婧 02282085 ) (1){0,1}* ,1 (2){0,1}+ 0,1 0,1 S (3){x|x {0,1}+且x中不含00的串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态)

1 1 S 01 0,1 (4){ x|x∈{0,1}*且x中不含00的串} (可接受空字符串,所以初始状态也是接受状态) 1 1 S 01 0,1 (5){x|x∈{0,1}+且x中含形如10110的子串} 1 S 010 0,1 101 (6){x|x∈{0,1}+且x中不含形如10110的子串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态) 1 010 0,1 ,101 1 (7){x|x∈{0,1}+且当把x看成二进制时,x模

北京邮电大学 自动机 课后习题答案

形式语言与自动机 第二章 4.找出右线性文法,能构成长度为1至5个字符且以字母为首的字符串。 答:G={N,T,P,S} 其中N={S,A,B,C,D} T={x,y} 其中x∈{所有字母} y∈{所有的字符} P如下: S→x S→xA A→y A→yB B→y B→yC C→y C→yD D→y 6.构造上下文无关文法能够产生 L={ω/ω∈{a,b}*且ω中a的个数是b的两倍} 答:G={N,T,P,S} 其中N={S} T={a,b} P如下: S→aab S→aba S→baa S→aabS S→aaSb S→aSab S→Saab S→abaS S→abSa S→aSba S→Saba S→baaS S→baSa S→bSaa S→Sbaa 7.找出由下列各组生成式产生的语言(起始符为S) (1)S→SaS S→b (2)S→aSb S→c (3)S→a S→aE E→aS 答:(1)b(ab)n /n≥0}或者L={(ba)n b/n≥0} (2) L={a n cb n /n≥0} (3)L={a2n+1 /n≥0} 第三章 1.下列集合是否为正则集,若是正则集写出其正则式。 (1)含有偶数个a和奇数个b的{a,b}*上的字符串集合 (2)含有相同个数a和b的字符串集合 (3)不含子串aba的{a,b}*上的字符串集合 答:(1)是正则集,自动机如下 (2) 不是正则集,用泵浦引理可以证明,具体见17题(2)。

(3) 是正则集 先看L’为包含子串aba的{a,b}*上的字符串集合 显然这是正则集,可以写出表达式和画出自动机。(略) 则不包含子串aba的{a,b}*上的字符串集合L是L’的非。 根据正则集的性质,L也是正则集。 4.对下列文法的生成式,找出其正则式 (1)G=({S,A,B,C,D},{a,b,c,d},P,S),生成式P如下: S→aA S→B A→abS A→bB B→b B→cC C→D D→bB D→d (2)G=({S,A,B,C,D},{a,b,c,d},P,S),生成式P如下: S→aA S→B A→cC A→bB B→bB B→a C→D C→abB D→d 答:(1) 由生成式得: S=aA+B ① A=abS+bB ② B=b+cC ③ C=D ④ D=d+bB ⑤ ③④⑤式化简消去CD,得到B=b+c(d+bB) 即B=cbB+cd+b =>B=(cb)*(cd+b) ⑥ 将②⑥代入① S=aabS+ab(cb)*(cd+b)+(cb)*(cd+b) =>S=(aab)*(ab+ε)(cb)*(cd+b) (2) 由生成式得: S=aA+B ① A=bB+cC ② B=a+bB ③ C=D+abB ④ D=dB ⑤ 由③得 B=b*a ⑥ 将⑤⑥代入④ C=d+abb*a=d+ab+a ⑦ 将⑥⑦代入② A=b+a+c(d+b+a) ⑧ 将⑥⑧代入① S=a(b+a+c(d+ab+a))+b*a =ab+a+acd+acab+a+b*a 5.为下列正则集,构造右线性文法: (1){a,b}* (2)以abb结尾的由a和b组成的所有字符串的集合

形式语言与自动机理论-蒋宗礼-第三章参考答案

第三章作业答案 1.已知DFA M1与M2如图3-18所示。 (敖雪峰 02282068) (1) 请分别给出它们在处理字符串1011001的过程中经过的状态序列。 (2) 请给出它们的形式描述。 S q q 1 图3-18 两个不同的DFA 解答:(1)M1在处理1011001的过程中经过的状态序列为q 0q 3q 1q 3q 2q 3q 1q 3; M2在处理1011001的过程中经过的状态序列为q 0q 2q 3q 1q 3q 2q 3q 1; (2)考虑到用形式语言表示,用自然语言似乎不是那么容易,所以用图上作业法把它们用正则表达式来描述: M1: [01+(00+1)(11+0)][11+(10+0)(11+0)]* M2: (01+1+000){(01)*+[(001+11)(01+1+000)]*} ******************************************************************************* 2.构造下列语言的DFA ( 陶文婧 02282085 ) (1){0,1}* ,1 (2){0, 1} + ,1 (3){x|x {0,1}+且x 中不含00的串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态)

(4){ x|x∈{0,1}*且x中不含00的串} (可接受空字符串,所以初始状态也是接受状态) (5){x|x∈{0,1}+且x中含形如10110的子串} (6){x|x∈{0,1}+且x中不含形如10110的子串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态) (7){x|x∈{0,1}+且当把x看成二进制时,x模5和3同余,要求当x为0时,|x|=1,且x≠0时,x的首字符为1 } 1.以0开头的串不被接受,故设置陷阱状态,当DFA在启动状态读入的符号为0,则进 入陷阱状态 2.设置7个状态:开始状态q s,q0:除以5余0的等价类,q1:除以5余1的等价类,q2:除以5 余2的等价类,q3:除以5余3的等价类,q4:除以5余4的等价类,接受状态q t

编译原理第三章答案

第3章 文法和语言 第1题 文法G =({A,B,S},{a,b,c},P,S)其中P 为: S→Ac|aB A→ab B→bc 写出L(G[S])的全部元素。 答案: L(G[S])={abc} 第2题 文法G[N]为: N →D|ND D →0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? 答案: G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD.... =>NDDDD...D=>D......D 或者:允许0开头的非负整数? 第3题 为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。 答案: G[S]: S->S+D|S-D|D D->0|1|2|3|4|5|6|7|8|9 第4题 已知文法G[Z]: Z →aZb|ab 写出L(G[Z])的全部元素。 答案: Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb L(G[Z])={a n b n |n>=1} 第5题 写一文法,使其语言是偶正整数的集合。 要求: (1) 允许0打头; (2)不允许0打头。 答案: (1)允许0开头的偶正整数集合的文法 E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8 (2)不允许0开头的偶正整数集合的文法 E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→D|0 第6题

已知文法G: <表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子> <因子>::=(<表达式>)|i 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)i+i*i

相关文档
最新文档