§9.4语言识别
9.4.1正则集合
有限状态自动机可以用作语言识别器,什么样的集合可以被这些自动机识别呢?1956年,美国数学家Stephen Kleene给出证明,存在一个可以识别集合的有限状态自动机,当且仅当这个集合可以由空集、空串、单个字符的串以任何顺序通过串联、并集和Kleene闭包运算得到。通过这种方式建立起来的集合称为正则集合。
定义9.4.1.集合I上的正则表达式可以递归定义如下:符号ϕ是正则表达式;符号λ是正则表达式;符号x是正则表达式,其中x∈I;符号(AB),(A∪B),和A ∗ 是正则表达式,其中A和B是正则表达式。
每个正则表达式根据下面的规则代表一个集合:ϕ代表空集合,即没有任何符号的集合;λ代表集合{λ},即含有空串的集合;x代表集合{x},即含有一个符号的符号串;(AB)代表由A代表的集合和由B代表的集合的串联;(A∪B)代表由A表的集合和由B代表的集合的并集;A ∗ 代表由A代表的集合的Kleene闭包。
由正则表达式代表的集合称为正则集合。因此,正则表达式用来描述正则集合,当我们提到正则集合A的时候,我们指的是正则表达式A所代表的集合。
例9.4.1.下列正则表达式所代表的正则集合都有那些符号串?
10 ∗ ,(10) ∗ ,0∪01,0(0∪1) ∗ ,(0 ∗ ) ∗ 。
解:由这些正则表达式代表的正则集合如下表所示。
表达式 | 符号串 |
---|---|
10 ∗ | 一个1后跟若干个0(包括零个0) |
(10) ∗ | 若干个10(包括空串) |
0∪01 | 符号串0或者符号串01 |
0(0∪1) ∗ | 以0开头的任意符号串 |
(0 ∗ ) ∗ | 不以0结尾的任意符号串 |
9.4.2KLEENE定理
定理9.4.1.KLEENE定理:一个集合是正则的当且仅当它被一个有限状态自动机识别。
KLEENE定理是自动机理论中的一个中心结论,我们将只证明这个定理的必要部分,即任何一个正则集合被一个有限状态自动机识别。
证明:正则集合都是用正则表达式来表示的,而正则表达式是递归定义的,如果我们能证明下面的结论,我们就可以证明任何正则集合可以被一个有限状态自动机识别:1.证明:ϕ被一个有限状态自动机识别;2.证明:{λ}被一个有限状态自动机识别;3.证明:{a}被一个有限状态自动机识别,其中a是I中的一个符号;4.证明:AB被一个有限状态自动机识别,其中A和B被有限状态自动机识别;5.证明:A∪B被一个有限状态自动机识别,其中A和B被有限状态自动机识别;6.证明:A ∗ 被一个有限状态自动机识别,其中A被有限状态自动机识别。
(1)我们证明ϕ被一个非确定的有限状态自动机识别,只要有一个终止状态的自动机就可以做到这一点,如图(a)所示。
(2)我们来证明{λ}被一个非确定的有限状态自动机识别,我们需要一个只识别空串λ的有限状态自动机,我们可以让初始状态是终止状态,而且没有任何转换,如图(b)所示。
(3)我们来证明{a}被一个非确定的有限状态自动机识别,为了做到这一点,这个自动机需要两个状态,一个初始状态s 0 和一个终止状态s 1 ,当输入是a时,有一个转换是从s 0 到s 1 ,没有其它的转换。这个自动机只识别符号串a。如图(c)所示。
下面我们证明,如果A和B被一个有限状态自动机识别的语言,那么AB和A∪B可以被一个有限状态自动机识别。设A被M A =(S A ,I,f A ,s A ,F A )识别,B被M B =(S B ,I,f B ,s B ,F B )识别。
(4)我们来构造能识别A和B的串联AB的有限状态自动机M AB =(S AB ,I,f AB ,s AB ,F AB ),通过自动机M A 和自动机M B 的串行结合来构造这个自动机,A中的符号串把这个结合的自动机的状态从M A 的初始状态s A 变到M B 的初始状态s B ,B中的符号串把这个结合的自动机的状态从s B 变到它的一个终止状态。这样,我们有如下构造,设S AB 为S A ∪S B ,初始状态s AB 是s A ,终止状态集合F AB 是M B 的终止态集合,以及s AB 当且仅当λ∈A∩B。M AB 的转换包括所有的M A 的转换和所有的M B 的转换以及一些新的转换。对于每一个转换成M A 中的终止状态的转换,对于同样的输入我们构造一个M AB 中的一个从同样状态出发到状态s B 的转换。利用这种方法,A中的一个符号串把M AB 的状态从s AB 变到s B ,B中的一个符号串把s B 变到M AB 的终止状态。另外,对于任何从s B 出发的转换,我们构造一个M AB 中从s AB 到同样状态的转换。下图(a)表明了这种构造。
(5)现在来构造能识别A∪B的有限自动机M A∪B =(S A∪B ,I,f A∪B ,s A∪B ,F A∪B ),
通过自动机M A 和自动机M B 的并行结合来构造这个自动机,它使用一个包含s A 和s B
的所有转换的新的初始状态。设S A∪B =S A ∪S B ∪{s A∪B },其中s A∪B 是新的M A∪B
的初始状态。如果λ∈A∪B,则令终止状态集合F A∪B 为F A ∪F B ∪{s A∪B },否则令
终止状态集合F A∪B 为F A ∪F B 。M A∪B 中的转换包括所有M A 和M B 中的转换,以及如
果对于输入i原来有转换从s A 到s,则有转换从s A∪B 到s,如果对于输入i原来有转换从
s B 到s,则有转换从s A∪B 到s。这样,A中的串和B中的串都能让这个新的自动机从状态
s A∪B 到一个终止状态。图(b)表明了这种构造。
初始状态s A∪B 是一个新的状态,当s A 或s B 都是终止状态时,它也时终止状态。
终止状态是M B 和M B 的所有终止状态。
(6)最后,我们构造能识别A的Kleene的闭包A ∗ 的自动机M A ∗ =(S A ∗ ,I,f A ∗ ,s A ∗ ,F A ∗ ),令S A ∗ 包括所有的S A 的状态以及一个附加的状态s A ∗ ,这个附加的状态是新自动机的初始状态,终止状态集合F A ∗ 包含F A 的所有状态以及初始状态s A ∗ ,因为λ必须被识别。为了识别A中的任意符号串的串联,新自动机要包括M A 中的所有转换以及从s A ∗ 出发的与s A 一样的转换。有了这个转换集合,A中符号串的串联将在第一个A中符号串被读入的时候把状态从s A ∗ 变到一个终止状态,当第二个A中的符号串被读入的时候,又变到一个终止状态,以此类推。图(c)表明了这种构造。
S A ∗ 是一个新的状态,它是一个终止状态,终止状态包括M A 的所有终止状态。
例9.4.2.构造一个能识别正则集合1 ∗ ∪01的非确定的有限状态自动机。
解:我们先构造识别1 ∗ 的自动机。首先构造识别1的自动机,然后根据定理中构造M A ∗ 的方法来构造1 ∗ 的自动机。接着构造识别01的自动机,先构造识别0和1的自动机,然后根据定理证明中构造M AB 的方法来构造01的自动机。最后根据定理证明中构造M A∪B 的方法来构造1 ∗ ∪01的自动机。下图表示了这个构造过程。其中我们给状态标上了这个构造过程。其中我们给状态标上了不同的标号。值得注意的是,这里得到的自动机不是最简单的自动机,(b)给出了识别1 ∗ ∪01的更简单的自动机。
定理9.4.2.一个集合是由一个正则语法产生的当且仅当它是正则集合。
证明:首先我们来证明正则语法产生的集合是正则集合。设G=(V,T,S,P)是正则语法,产生的集合是L(G),为了证明L(G)是正则集合,我们构造一个可以识别L(G)的非确定的有限状态自动机。M=(S,I,f,s 0 ,F)。设状态集合S包括对应每个G中的非终止符号A的状态s A 以及一个附加的终止状态s F ,初始状态是对应初始符号S的状态s 0 ,M的转换是以下列方式由G的产生式得到,如果有产生式A→a,则有对于输入a从状态s A 到s F 的转换,如果有产生式A→aB,则有对于输入a从状态s A 到s B 的转换,如果有产生式S→λ,则终止于状态集合包括S F ,也包括s 0 。不难证明被M识别的语言和语法G产生的语言是一样的,即L(M)=L(G)。
在证明充分性之前,我们先来看一个列子,这个例子说明了如何构造一个识别与正则语法产生的集合一样的集合的非确定的有限状态自动机。
例9.4.3.构造一个非确定的有限状态自动机能识别由正则语法G=(V,T,S,P)产生的语言,其中V={,0,1,A,S},T={0,1},P={S→1A,S→0,S→λ,A→0A,A→1A,A→1}。
解:识别L(G)的非确定的有限状态自动机如下图所示。其中,s 0 是对应的S的状态,s 1 是对应A的状态,s 2 是终止状态。
下面证明定理的充分性。即证明,如果一个集合是正则的,就有一个正则语法能产生它。设M是识别这个集合的自动机且M具有如下一条性质:M的初始状态s 0 不是任何转换函数的函数值。则语法G=(V,T,S,P)定义如下,给S的每一个状态和输入I中的每一个输入都对应一个符号,把这些符号作为V的元素,G的终止符号集合T中的元素为V中对应I中的符号,初始符号S是对应初始状态s 0 的符号,G的产生式集合P根据M的转换来形成,如果一个状态s在输入a下变到一个终止状态,则产生式A s →a属于P,其中A s 对应状态s的非终止符号。如果一个状态s在输入a下变到一个状态t,则产生式A s →aA t 属于P,产生式S→λ属于P当且仅当λ属于L(M)。因为G的产生式对应M的转换,并且得到终止符的产生式对应得到终止符的转换,所以不难证明,L(G)=L(M)。
下面的例子说明如何从一个自动机求得产生同样语言的语法。
例9.4.4.给出一个正则语法,使它产生的语言被下图所示的有限状态自动机识别。
解:语法G=(V,T,S,P)即为所求,其中V={S,A,B,0,1},S,A,B分别对应状态s 0 ,s 1 ,s 2 ,T={0,1},S是初始符,产生式是S→0A,S→1B,S→1,S→λ,A→0A,A→1B,A→1,B→0A,B→1B,B→1。