10学习指导与习题解答9.docx
《10学习指导与习题解答9.docx》由会员分享,可在线阅读,更多相关《10学习指导与习题解答9.docx(25页珍藏版)》请在冰豆网上搜索。
10学习指导与习题解答9
第九章语言和有限状态机
§9.1基本要求
1.掌握语法结构、语言、演绎、演绎树的概念,能识别语法结构的分类,能写出一个语法的Backus-Naurform。
2.掌握带有输出的有限状态机的定义,能够使用状态图和状态表表示带有输出的有限状态机。
3.会求串联、kleene闭包,掌握没有输出的有限状态机(有限状态自动机)的概念,了解非确定的有限状态机,知道能被一个非确定的有限状态自动机是别的语言也可以被一个确定的有限状态自动机识别。
4.掌握正则表达式和正则集合的概念,了解KLEENE定理。
知道一个集合是由一个正则语法产生的当且仅当它是正则集合。
了解其他种类的有限状态机。
5.掌握Turing机的概念,知道Turing机如何识别一个符号串。
§9.2主要解题方法
9.2.1语法结构与语言的关系
1.使用语法中所有的可能使用的产生式,将从S演绎出来的符号串求出来,或者将这样的符号串的规律找出来。
这样就求出了一个语法所产生的语言。
例9.2.1设G是一个语法结构,字母表为V={S,A,a,b},终止符集合T={a,b},初始符号为S,产生式P={S→aA,S→b,A→aa},这个语法的语言L(G)是什么?
解:
用产生式S→aA可以从初始状态S演绎出aA,用产生式S→b可以演绎出b,用产生式A→aa从aA可以演绎出aaa,没有任何其它的词可以被演绎出来了,所以L(G)={b,aaa}。
例9.2.2设G是一个语法结构,字母表为V={S,0,1},终止符集合T={0,1},初始符号为S,产生式P={S→11S,S→0},这个语法的语言L(G)是什么?
解:
用产生式S→0可以从初始状态S演绎出0,用产生式S→11S可以演绎出11S,从11S可以演绎出110或者1111S,从1111S可以演绎出11110和111111S。
在演绎的过程中,我们或者在S前加两个1,或者把S替换成0而结束演绎。
所以L(G)={0,110,11110,1111110,…},这个集合中的符号串都是以偶数个1开头,然后由一个0结束。
2.给出一个语言,可以根据此语言的规律构造产生这个语言的语法结构。
同一个语言可以有多个语法结构来产生。
例9.2.3给出一个语法结构,可以产生集合{0m1n|m和n是非负整数}。
解:
我们将给出两个产生这个集合的语法G1,G2,这说明两个不同的语法可以产生同一个语言。
语法G1的字母表是V={S,0,1},终止符集合T={0,1},产生式为S→0S,S→S1,和S→λ。
这个语法就能产生我们要求的集合,因为用第一个产生式m次就可以把m个0放在串的前面,用第二个产生式n次就可以把n个1放在串的后面。
语法G2的字母表是V={S,A,0,1},终止符集合T={0,1},产生式为S→0S,S→1A,S→1,A→1A,A→1和S→λ。
这个语法也能产生我们要求的集合。
9.2.2根据语法结构产生式的特点来判断语法结构的类型
根据下面的表格就可以判断语法结构的类型。
语法的类型
类型
对于产生式的限制w1→w2
0
1
2
3
没有任何限制
w1的长度小于等于w2长度,或者w2=λ
w1=A,A是非终止符。
S→λ,或者w1=A并且w2=aB或者w2=a,其中A,B是非终止符。
例9.2.4设语法是G=(V,T,S,P),其中,V={0,1,S,A},T={0,1},S是初始符,产生式为S→0S1A;S→λ;A→1A;11A→0。
则这个语法是0型语法。
例9.2.5设语法是G=(V,T,S,P),其中V={0,1,2,S,A,B},T={0,1,2},初始状态是S,产生式是S→0SAB,S→λ,BA→AB,0A→01,1A→11,1B→12,2B→22。
则这个语法是上下文有关的语法(1型语法)。
例9.2.6设语法是G=(V,T,S,P),其中,V={0,1,S},T={0,1},S是初始符,产生式为S→0S1;S→λ。
则这个语法是上下文无关的语法(2型语法)。
例9.2.7设语法是G=(V,T,S,P),其中,V={S,A,0,1},终止符集合T={0,1},产生式为S→0S,S→1A,S→1,A→1A,A→1和S→λ。
则这个语法是正则语法(3型语法)。
9.2.3求演绎树以及判断一个词是否属于一个语法产生的语言
一个由上下文无关语法产生语言的演绎可以用一个有序的根树来表示,一个这样的演绎就对应一个有跟树。
例9.2.8给出书中例子中关于ahungrymathematicianeatswildly的演绎的演绎树。
判断一个符号串是否在一个由上下文无关语法产生的语言中,我们有两种解决办法。
第一种方法是自顶向下分析,从S开始,试图使用一系列的产生式来演绎出要判断的词;第二种方法称为自底向上的分析,在这种方法中,过程正好相反。
例9.2.9判断词cbab是否属于由语法G=(V,T,S,P)产生的语言,其中V={a,b,c,A,B,C,S},T={a,b,c},S是初始符号,产生式为
S→AB,A→Ca,B→Ba,B→Cb,B→b,C→cb,C→b
解:
第一种方法,因为只有一个产生式的左端是S,所以必须从SAB开始,接着使用唯一的一个左端是A的产生式,即A→Ca,得到SABCaB,因为cbab以字符cb开头,所以我们要使用产生式C→cb。
这样我们得到SABCaBcbaB,最后使用产生式B→b,得到SABCaBcbaBcbab。
第二种方法,因为cbab是要被演绎的符号串,我们可以用产生式C→cb,有Cabcbab,然后我们使用产生式A→Ca,有AbCabcbab,使用产生式B→b,有ABAbCabcbab,最后,使用S→AB得到了关于cbab的演绎:
SABAbCabcbab。
9.2.4求2型语法的Backus-Naurform
Backus-Naurform用来描述很多计算机语言的规则,包括Java。
在2型语法的产生式中左边都有单个的一个非终止符。
我们不把所有的产生式都分别列举出来,而是把左边有同样的非终止符的产生式结合成一个短语,在产生式中不再使用符号→,而是使用:
:
=,把所有的非终止符放在括弧<>里,并且把产生式的所有右端都放在一个短语里,用一个竖线隔开。
例9.2.10给出十进制整数的产生式的Backus-Naurform。
解:
Backus-Naurform如下:
<十进制整数>:
:
=<符号><非负整数>
<符号>:
:
=+|-
<非负整数>:
:
=<数字>|<数字><非负整数>
<数字>:
:
=0|1|2|3|4|5|6|7|8|9
9.2.5求有限状态机的输出及用状态图和状态表来表示带有输出的有限状态机
根据转换函数,一个输入的符号串可以让初始状态经过一系列的状态的变化,当我们从左向右一个符号一个符号地读输入的符号串时,每个读入的符号都让状态机从一个状态变成另一个状态。
因为每个转换都能产生一个输出,所以一个输入的符号串也能产生一个输出串。
例9.2.11对于下图所示的有限状态机,如果输入是101011,请找出对应的输出是什么?
解:
输出是001000。
连续状态和输出如下表所示。
表
输入
101011-
状态
s0s3s1s2s3s0s3
输出
001000-
例9.2.12在许多电子器件中有一个很重要的元件,称为单位延迟器,它的作用是把输入延迟一个指定的时间输出。
怎样构造一个有限状态机来把一个输入串延迟一个单位时间输出呢?
即对于给定的二进制输入串x1x2…xk,可以得到一个输出二进制串0x1x2…xk-1。
解:
我们把这个延迟器构造成有两个输入,即0和1,有一个初始状态s0,因为它要记住上一个输入是0还是1,所以还需要两个另外的状态s1,s2,如果上一个输入是1,则它有状态s1,如果上一个输入是0,则它有状态s2,对于从s0出发的第一个转换所产生的输出是0,从s1出发的转换产生一个输出1,从s2出发的转换产生一个输出0,对于给定的二进制输入串x1x2…xk,可以得到一个输出二进制串0x1x2…xk-1。
状态图如下图所示,状态表如下表所示。
状态表
状态
f
g
输入
01
输入
01
s0
s1
s2
s2s1
s2s1
s2s1
10
21
10
9.2.6求集合A 的kleene闭包
例9.2.13设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.2.14设A={1,00},请求出An其中n=0,1,2,3。
解:
由定义有:
A0={λ},A1=A0A={λ}A={1,00},A2=AA={11,100,001,0000},A3=A2A={111,1100,1001,10000,0011,00100,00001,000000}。
例9.2.15设A={0},B={0,1},C={11},问A、B、C的kleene闭包分别是什么?
解:
A*={0n|n=0,1,2,…},
设字母表V={0,1},则B*=V*。
C*={12n|n=0,1,2,…}。
9.2.7识别被有限状态自动机识别的语言
一个符号串x说是被一个自动机M=(S,I,f,s0,F)识别或被接受,如果x可以让初始状态s0变成终止状态,即f(s0,x)是F中的一个状态的时候。
被自动机M识别或接受的语言,记为L(M),是所有被M识别的符号串的集合。
例9.2.16请给出被下图所示的有限状态自动机M1,M2,M3识别的语言。
解:
M1只有一个终止状态s0,让s0变成它自己的符号串是含有零个或多个1的符号串,因此,L(M1)={1n|n=0,1,2,…}.
M2只有一个终止状态s2,让s0变成s2的符号串是1和01。
所以L(M2)={1,01}。
M3的终止状态是s0和s3,让s0变成它自己的符号串是λ,0,00,000,…即零个或多个0组成的符号串,让s0变成s3的符号串是零个或多个0,后跟10,再后跟任何符号串的符号串。
所以L(M3)={0n,0n10x|n=0,1,2,…,x是任何符号串}。
9.2.8使用KLEENE定理构造识别正则集合的有限状态自动机
要知道什么是正则表达式以及其所代表的正则集合。
例9.2.17下列正则表达式所代表的正则集合中都有哪些符号串?
10*,(10)*,0∪01,0(0∪1)*,(0*1)*。
解:
由这些正则表达式代表的正则集合如表9.4.1所示。
表9.4.1
表达式
符号串
10*
(10)*
0∪01
0(0∪1)*
(0*1)*
一个1后跟若干个0(包括零个0)
若干个10(包括空串)
符号串0或者符号串01
以0开头的任意符号串
不以0结尾的任意符号串
例9.2.18构造一个能识别正则集合1*∪01的非确定的有限状态自动机。
解:
我们先构造识别1*的自动机。
首先构造识别1的自动机,然后根据KLEENE定理证明中构造MA*的方法来构造1*的自动机。
接着构造识别01的自动机,先构造识别0和1的自动机,然后根据KLEENE定理证明中构造MAB的方法来构造01的自动机。
最后根据KLEENE定理证明中构造MA∪B的方法来构造1*∪01的自动机。
下图表示了这个构造过程。
9.2.9构造Turing机以及求出Turing机工作时的执行情况
例9.2.19下图(a)给出了一个带子,Turing机T用下面七个五元组来定义,(s0,0,s0,0,R),(s0,1,s1,1,R),(s0,B,s3,B,R),(s1,0,s0,0,R),(s1,1,s2,0,L),(s1,B,s3,B,R),(s2,1,s3,0,R),问T停止的时候,最后的带子是什么样的?
解:
T开始的状态是s0,位置在带子的最左面的非空白符号上。
第一步用五元组(s0,0,s0,0,R),状态是s0,读到的是0,在这个格子里写上0,然后右移一个格子。
第二步用五元组(s0,1,s1,1,R),状态是s0,读到的是1,进入状态s1,在这个格子里写上1,然后右移一个格子。
第三步用五元组(s1,0,s0,0,R),状态是s1,读到的是0,进入状态s0,在这个格子里写上0,然后右移一个格子。
第四步用五元组(s0,1,s1,1,R),状态是s0,读到的是1,进入状态s1,在这个格子里写上1,然后右移一个格子。
第五步用五元组(s1,1,s2,0,L),状态是s1,读到的是1,进入状态s2,在这个格子里写上0,然后左移一个格子。
第六步用五元组(s2,1,s2,0,R),状态是s2,读到的是1,进入状态s3,在这个格子里写上0,然后右移一个格子。
最后,第七步Turing机停止,因为在Turing机的定义中没有以(s3,0)开头五元组。
各个步骤如图9.5.2所示。
这个Turing机把第一次遇到的连续的两个1改成0然后停止。
例9.2.20给出一个Turing机使得它识别一个二进制符号串,这个串的第二个位置是1,即正则集合(0∨1)1(0∨1)*。
解:
我们要求的Turing机是这样的:
从带子的最左边非空白符号开始,右移一位,看第二个符号是否为1,如果第二个符号为1,则进入终止状态,如果第二个符号不是1,则它不停或者停在非终止状态。
为了构造这个Turing机,我们应该有五元组(s0,0,s1,0,R)和(s0,1,s1,1,R),这样Turing机就可以读过第一个字符,然后进入状态s1,然后还应该有五元组(s1,0,s2,0,R)和(s1,1,s3,1,R),如果读入的第二个字符是0,则Turing机进入状态s2,如果读入的是1,则它进入状态s3。
因为我们不能识别第二位是0的符号串,所以s2不能是终止状态,而s3是终止状态。
所以我们还要有五元组(s2,0,s2,0,R)。
因为我们还不能识别空串和只有一位的串,所以我们还要包括五元组(s0,B,s2,0,R)和(s1,B,s2,0,R)。
包含上面七个五元组的Turing机T停止在终止状态s3上当且仅当二进制符号串至少包含两位且第二位是1。
如果这个符号串不足两位或者第二位不是1,则T停止在状态s2。
§9.3第九章习题解答
9.3.1习题9.1解答
1.设语法G=(V,T,S,P),初始符为sentence,终止符集合为T={the,sleepy,happy,tortoise,hare,passes,runs,quickly,slowly},非终止符的集合N={sentence,nounphrase,transitiveverbphrase,intransitiveverbphrase,article,adjective,noun,transitiveverb,intransitiveverb,adverb},产生式为:
sentence→nounphrasetransitiveverbphrasenounphrase
sentence→nounphraseintransitiveverbphrase
nounphrase→articleadjectivenoun
nounphrase→articlenoun
transitiveverbphrase→transitiveverb
intransitiveverbphrase→intransitiveverbadverb
intransitiveverbphrase→intransitiveverb
article→the
adjective→sleepy
adjective→happy
noun→tortoise
noun→hare
transitiveverb→passes
intransitiveverb→runs
adverb→quickly
adverb→slowly
证明下列句子是有效的句子:
(1)thehappyhareruns.
(2)thesleepytortoiserunsquickly.
(3)thetortoisepassesthehare.
(4)thesleepyharepassesthehappytortoise.
解:
产生有效句子的过程如下:
(1)sentence
nounphraseintransitiveverbphrase
articleadjectivenounintransitiveverb
thehappyhareruns
(2)sentence
nounphraseintransitiveverbphrase
articleadjectivenounintransitiveverbadverb
thesleepytortoiserunsquickly
(3)sentence
nounphrasetransitiveverbphrasenounphrase
articlenountransitiveverbarticlenoun
thetortoisepassesthehare
(4)sentence
nounphrasetransitiveverbphrasenounphrase
articleadjectivenountransitiveverbarticleadjectivenoun
thesleepyharepassesthehappytortoise
2.语法G见1题。
除了1题中给出的句子,请再给出5个有效的句子。
解:
thesleepyhareruns
thehappytortoiserunsquickly
thesleepytortoiserunsslowly
theharepassesthetortoise
thesleepyharepassesthetortoise
3.语法G见1题。
证明:
句子theharerunsthesleepytortoise不是有效的。
解:
因为runs是intransitiveverb所以只能使用产生式sentencenounphraseintransitiveverbphrase,从而使得runs后面不会出现nounphrase,所以后面不可能出现thesleepytortoise.
4.设V={S,A,B,a,b},T={a,b},如果产生式如下,请分别找出对应的语言。
(1).S→AB,A→ab,B→bb。
(2).S→AB,S→aA,A→a,B→ba。
(3).S→AB,S→AA,A→aB,A→ab,B→b。
(4).S→AA,S→B,A→aaA,A→aa,B→bB,B→b。
(5).S→AB,A→aAb,B→bBa,A→λ,B→λ。
解:
(1)L(G)={abbb}
(2)L(G)={aba,aaba,aaaba,…,a…aba}
(3)L(G)={abb,abab}
(4)L(G)={aaaa,aaaaaa,….,b,bb,bbb,bbbb,…},从4个a开始偶数个a,以及n个b,其中n>0。
(5)L(G)={abba,aabbba,aabbbbaa,…..},n个a后跟n个b,在后跟m个b以及m个a,其中,m,n>0
5.说明例9.1.5中给出的语法产生的集合是{0n1n|n=0,1,2…}。
略。
6.用例9.1.5中给出的语法构造0313的演绎。
解:
S0S100S11000S111000111
7.构造能产生下列集合的语法结构:
(1).{012n|n=0,1,2…}。
解:
G=(V,T,S,P),
V={S,A,0,1},
T={0,1},
S是初始符,
P={S0A,A,A11A}.
(2).{0n12n|n=0,1,2…}。
解:
G=(V,T,S,P),
V={S,0,1},
T={0,1},
S是初始符,
P={S,S0A11,A,A0A11}.
(3).{0n1m0n|n,m=0,1,2…}.
解:
G=(V,T,S,P),
V={S,A,B,0,1},
T={0,1},
S是初始符,
P={S,S0A0,A0A0,A1B,A,B1B,B}.
8.构造习题1中句子的演绎树。
(1)解:
(2)
(3)
(4)
9.a).如果产生式的Backus-Naurform如下,那么语法中的产生式是什么?
<表达式>:
:
=(<表达式>)|<表达式>+<表达式>|<表达式>*<表达式>|<变量>
<变量>:
:
=x|y
b).给出这个语法中(x*y)+x的演绎树。
解:
(a)产生式为:
表达式表达式
表达式表达式+表达式
表达式表达式*表达式
表达式变量
变量x
变量y
表达式
(b)
9.3.2习题9.2解答
1.画出下面状态表所代表的有限状态机的状态图。
状态
f
g
输入
01
输入
01
s0
s1
s2
s3
s1s0
s2s0
s0s3
s1s2
00
11
11
10
状态
f
g
输入
01
输入
01
s0
s1
s2
s1s0
s0s2
s1s1
01
01
00
状态
f
g
输入
01
输入
01
s0
s1
s2
s3
s4
s0s4
s0s3
s0s2
s1s1
s1s0
11
01
10
21
10
解:
状态图分别为:
2.对于例9.2.2中给定的有限状态机,确定在下列输入的情况下的输出。
.010********
解:
a).1100b).00110110c).11111111111
3.构造一个有限状态机,它把输入延迟2个字节,输出的头两位是00。
解:
4.构造一个密码锁的有限状态机,它有从1到40的数字,当输入是10右,8两次左,37右的时候,它就被打开。
输入是一个三元组<数字,转动的方向,转动的次数>。
解:
密码锁的状态表
状态
下一个状态
输出
输入
(10,右,1)(8,左,2)(37,右,1)其它输入
输入
(10,右,1)(8,左,2)(37,右,1)其它输入
s0
s1
s2
s3
s4
s1s4s4s4
s4s2s4s4
s4s4s3s4
s3s3s3s3
s4s4s4s4
nnnn
nnnn
nnyn
yyyy
nnnn
5.构造一个收费机的有限状态机,它可以接收5分,10分,25分的硬币,只要投入的硬币一共是25分或25分以上,它的门就打开,但不找零钱,超出25分的部分也不留给下一个司机。
解:
状