§9.3没有输出的有限状态机
有限状态机的一个重要应用是语言识别。这个应用在程序语言编译器的设计和构造中起着最基本的作用。在上一节中我们看到,有输出的有限状态机可以用来识别一个语言,然而,有另外一些类型的有限状态机是专门为语言识别设计的,它没有输出,但有许多终止状态,一个被识别的串可以让这个状态机从初始状态到某个终止状态。再讨论没有输出的有限状态机之前,我们先引入一些重要概念。我们要定义的一些运算将在讨论语言识别中广泛地被用到。
定义9.3.1.设A和B是V ∗ 的子集,其中V是字母表,A和B的串联,记为AB,是所有形为xy的串的集合,其中x是来自A中的串,y是来自B中的串。
例9.3.1.设A={0,11},B={1,10,110},请给出AB和BA。
解:集合AB包含所有A中的串和B中的串的串联,因此,AB={01,010,0110,111,1110,11110},集合BA包含所有B中的串和A中的串的串联,所以,BA={10,111,100,1011,1100,11011}。
从例9.3.1中我们看出,AB≠BA。根据符号串集合的串联的定义,我们可以递归地定义A n 如下:A 0 ={λ},A n+1 =A n A,n=0,1,2,⋯
例9.3.2.设A={1,00},求A n 其中n=0,1,2,3.
解:由定义有:A 0 ={λ},A 1 =A 0 A={λ}A={1,00},A 2 =AA={11,100,001,0000},A 3 =A 2 A={111,1100,1001,10000,0011,00100,00001,000000}。
定义9.3.2.设A是V ∗ 的子集,A的kleene闭包,记为A ∗ ,是A中任意多个符号串的串联。即A ∗ =⋃ k=0 ∞ A k 。
例9.3.3.设A={0},B={0,1},C={11},问A、B、C的kleene闭包分别是什么?
解:A ∗ ={0 n |n=0,1,2,⋯},设字母表V={0,1},则B ∗ =V ∗ 。C ∗ ={1 2n |n=0,1,2,⋯}。
现在我们给出没有输出的有限状态机的定义,这种状态机也称有限状态自动机。
定义9.3.3.一个有限状态自动机M=(S,I,f,s 0 ,F),包含一个有限状态机集合S,一个有限输入字母表I,一个转换函数f,它为任意一个状态和输入对,给出下一个状态。一个初始状态s 0 ,一个S的子集F,它包含所有终止状态。
我们既可以用状态来表来表示有限状态自动机,也可以用状态图来表示有限状态自动机。在状态图中,终止状态用双圈来表示。
例9.3.4.构造有限状态自动机M=(S,I,f,s 0 ,F)的状态图,其中S={s 0 ,s 1 ,s 2 ,s 3 },I={0,1},F={s 0 ,s 3 },转换函数f在表9.3.1.中给出。
解:状态图如图9.3.1所示。注意因为输入0和1都能使状态s 2 变到状态s 0 ,所以我们在从s 2 到s 0 的边上标着0,1.
表9.3.1 | ||
状态 | f | |
输入 0 1 | ||
s 0 s 1 s 2 s 3
|
s 0 s 0 s 0 s 2 s 1 s 2 s 0 s 1
|
转换函数f可以被扩展,可以定义在所有的状态和输入符号串的对上。设x=x 1 x 2 ⋯x k 是I ∗ 中的一个符号串,那么f(s 1 ,x)是从s 1 开始,依次从左到右读入x的每个符号后的状态。从s 1 开始,我们得到s 2 =f(s 1 ,x 1 ),然后得s 3 =f(s 2 ,x 2 ),依次类推,有f(s 1 ,x)=f(s k ,x k )。一个符号串x说是被一个自动机M=(S,I,f,s 0 ,F)识别或接受,如果x可以让初始状态s 0 变成终止状态,即f(s 0 ,x)是F中的一个状态的时候。被自动机M识别或接受的语言,记为L(M),是所有被M识别的符号串的集合。两个有限状态机说是等价的,如果它们识别同样的语言。
例9.3.5.请给出被下图所示的有限状态自动机M 1 ,M 2 ,M 3 识别的语言。
解:M 1 只有一个终止状态s 0 ,让s 0 变成它自己的符号串是含有零个或多个1的符号串,因此,L(M 1 )={1 n |n=0,1,2,⋯}.M 2 只有一个终止状态s 2 ,让s 0 变成s 2 的符号串是1和01。所以L(M 2 )={1,01}。M 3 的终止状态是s 0 和s 3 ,让s 0 变成它自己的符号串是λ,0,00,000,⋯,即零个或多个0组成的符号串,让s 0 变成s 3 的符号串是零个或多个0,后跟10,再后跟任何符号串的符号串。所以L(M 3 )={0 n ,0 n 10x|n=0,1,2,⋯,x是任何符号串}。
到现在为止我们所讨论的有限状态自动机是确定的,因为给定一个状态和输入对,转换函数都给出一个唯一确定的下一个状态做为函数值。还有另外一种重要的有限状态自动机,它为一个状态和输入对可以给出几个状态做为函数值。这样的自动机称为非确定的。非确定的自动状态机在确定是否一个语言被一个有限自动机所识别方面非常重要。
定义9.3.4.一个非确定的有限状态自动机M=(S,I,f,s 0 ,F),包含一个有限状态集合S,一个有限输入字母表I,一个转换函数f,它为任意一个状态和输入对,给出一个状态集合。一个初始状态s 0 ,一个S的子集F,它包含所有终止状态。
我们仍然可以用状态表和状态图来表示确定的有限状态自动机。用状态表时,为每一个状态和输入的对,都给出一个所有可能的下一个状态列表。在状态图中,包括从一个状态到所有可能的下一个状态的边,边上标着所有导致这些转换的输入。
例9.3.6.给出下列表所示的非确定的有限状态自动机的状态图,终止状态是s 2 和s 3 .
状态表 | ||
状态 | f | |
输入0 1 | ||
s 0
s 1 s 2 s 3 |
s 0 ,s 1
s 0 s 0 ,s 1 ,s 2 |
s 3
s 1 ,s 3 s 0 ,s 2 s 1 |
例9.3.7.请给出下图所示的非确定有限状态自动机的状态表。
解:状态表如下表所示。
例9.3.7的状态表 | ||
状态 | f | |
输入0 1 | ||
s 0
s 1 s 2 s 3 s 4 |
s 0 ,s 2
s 3 s 3 s 3 |
s 1
s 4 s 4 s 3 |
一个非确定的有限状态自动机识别了一个符号串x=x 1 x 2 ⋯x k 是什么意思呢?第一个输入的符号x 1 让初始状态s 0 变成了一个状态集合s 1 ,下一个输入的符号x 2 让状态集合s 1 的每个状态又变成了一个状态集合,设s 2 是这些集合的并集,反复进行这个过程。如果读入符号串x后,最后得到的状态集合中有终止状态,那么我们就称识别了符号串x,被一个非确定的有限状态自动机识别的语言是所有被自动机识别的符号串的集合。
例9.3.8.请给出被下图所示的有限自动机识别的语言。
解:因为s 0 是一个终止状态,并且当输入是0时,有一个转换将状态s 0 变成它自身,所以这个自动机能识别零个或多个连续的0.另外因为s 4 是一个终止状态,所以能让初始状态变成的状态集合里包含s 4 的符号串也能被这个自动机识别,满足这个条件的符号串是零个或多个连续的0后跟01或11。因为终止状态只有s 0 ,s 4 ,所以这个自动机识别的语言是{0 n ,0 n 01,0 n 11|n≥0}。
定理9.3.1.如果一个语言L能被一个非确定的有限状态自动机M 0 识别,那么它也能被一个确定定有限状态自动机M 1 识别。
证明:我们将说明如何构造一个确定的有限状态自动机M 1 ,使得它能识别一个非确定的有限状态自动机M 0 识别的语言L。M 1 中的状态是由M 0 中的状态集形成的,M 1 的初始状态是包含M 0 的初始状态的集合{s 0 },M 1 的输入集合与M 0 的输入集合一样,对于M 1 的一个状态{s i1 ,s i2 ,⋯,s ik },输入符号x把这个状态变成{s i1 ,s i2 ,⋯,s ik }的元素的下一个状态集合的并集,即集合f(s i1 ),f(s i2 ),⋯,f(s ik )的并集。M 1 的状态是所有用这种方法藏s 0 得到的M 0 的状态集S的子集。(在确定的有限状态自动机中最多有2 n 个状态,这里n是非确定的自动机的状态数)。M 1 的终止状态是包含M 0 的终止状态的集合。设一个输入符号串被M 0 识别,那么这个符号串使状态从s 0 变成的状态中有一个是终止状态。这就说明在M 1 中,这个输入串使得状态从{s 0 }变成包含一个终止状态M 0 的状态的集合,这个子集是M 1 的一个终止状态,所以这个符号串也被M 1 识别。同理,不被M 0 识别的符号串,不能得到任何M 0 的终止状态,因此,这个输入串在M 1 中,也不能从初始状态开始得到M 1 的终止状态。
例9.3.9.请给出与下图中非确定的有限状态自动机识别同样语言的确定的有限状态自动机。
解:确定的有限状态自动机的状态是所有非确定的有限状态自动机的一些子集,当输入一个符号时,一个子集的下一个状态包含这个子集中所有元素在非确定的有限自动机中的下一个状态的子集。例如,对于输入0,{s 0 }变成{s 0 ,s 2 },因为在非确定的有限自动机中,s 0 变成它自己和s 2 ,对于输入1,{s 0 ,s 2 }变成{s 1 ,s 4 },因为在非确定的有限自动机中,在输入是1的情况下,s 0 变成s 1 ,s 2 变成s 4 ,等等。确定的有限状态自动机包含所有用这种方法得到的子集。值得注意的是空集合也是这个自动机的一个状态,因为它是包含状态{s 3 }在输入是1的所有的下一个状态的子集。初始状态是{s 0 },终止状态是所有包含s 0 或者s 4 的集合。