1、第 2 章 习题 2-1 设有字母表 A1 =a,b,c,z,A 2 =0,1,9,试回答下列问题:(1) 字母表 A1上长度为 2 的符号串有多少个? (2) 集合 A1A2含有多少个元素?(3) 列出集合 A1(A1A 2)*中的全部长度不大于 3 的符号串。2-2 试分别构造产生下列语言的文法:(1)a nbn|n0;(2)a nbmcp|n,m,p0;(3)a n#bn|n0c n#dn|n0;(4)w#w r# | w0,1 *,wr是 w 的逆序排列 ;(5)任何不是以 0 打头的所有奇整数所组成的集合;(6)所有由偶数个 0 和偶数个 1 所组成的符号串的集合。2-3 试描述由下
2、列文法所产生的语言的特点:(1)S10S0 SaA AbA Aa (2)SSS S1A0 A1A0 A(3)S1A SB0 A1A AC BB0 BC C1C0 C(4)SaSS Sa2-4 试证明文法SAB|DC AaA|a BbBc|bc CcC|c DaDb|ab为二义性文法。2-5 对于下列的文法SAB|c AbA|a BaSb|c试给出句子 bbaacb 的最右推导,并指出各步直接推导所得句型的句柄;指出句子的全部短语。2-6 化简下列各个文法(1) SaABS|bCACd AbAB|cSA|cCC BbAB|cSB CcS|c(2) SaAB|E AdDA|e BbE|f CcAB
3、|dSD|a DeA EfA|g(3) Sac|bA AcBC BSA CbC|d2-7 消除下列文法中的 -产生式(1) SaAS|b AcS|(2) SaAA AbAc|dAe|2-8 消除下列文法中的无用产生式和单产生式(1) SaB|BC AaA|c|aDb BDB|C Cb DB(2) SSA|SB|A AB|(S)|( ) BS| (3) EE+T|T TT*F|F FPF|P P(E)|i第 2 章 习题答2-1 答:(1) 26*26=676(2) 26*10=260(3) a,b,c,.,z, a0,a1,.,a9, aa,.,az,.,zz, a00,a01,.,zzz,共
4、有 26+26*36+26*36*36=34658 个2-2 解:(1) 对应文法为 G(S)=(S,a,b, S| aSb ,S) (2) 对应文法为 G(S)=(S,X,Y,a,b,c,SaS|X, XbX|Y, YcY| ,S)(3)对应文法为 G(S)=(S,X,Y,a,b,c,d,#, SX, SY, XaXb|#, YcYd|# ,S)(4)G(S)=(S,W,R,0,1,#, SW#, W0W0|1W1|# ,S)(5)G(S)=(S,A,B,I,J,0,1,2,3,4,5,6,7,8,9,SJ|IBJ, B0B|IB|, IJ|2|4|6|8, J1|3|5|7|9,S)(6)
5、对应文法为 S0A|1B|,A0S|1C , B0C|1S, C1A|0B2-3 解:(1) 本文法构成的语言集为:L(G)=(10) nabma0n|n,m0。(2) L(G)=1n0n |n0 +,该语言特点是:产生的句子中,0、1个数相同,并且若干相接的 1 后必然紧接数量相同的连续的 0。(3) 本文法构成的语言集为:L(G)=1 p1n0n|p1,n01 n0n0q|q1,n0,特点是具有 1p1n0n 或 1n0n0q形式,进一步,可知其具有形式1 n0m|n,m0,且 n+m0。(4)由 L(G)=a2n-1|n1可知,该语言特点是:产生的句子是奇数个 a。2-4 证明:因为存在
6、句子:abc,它对应两个最右推导:S AB Abc abcS DC Dc abc所以,本文法具有二义性。2-5 解:句子 bbaacb 的最右推导为:S AB AaSb Aacb bAacb bbAacb bbaacb上面推导中,下划线部分为当前句型的句柄。与句子 bbaacb 相应的语法树为:全部的短语为:第一个 a(a (1))是句子 bbaacb 相对于非终结符 A (A(1) (产生式 Aa)的短语(直接短语);b(1)a(1)是句子 bbaacb 相对于非终结符 A(2)的短语;b(2)b(1)a(1)是句子 bbaacb 相对于非终结符 A(3)的短语;c 是句子 bbaacb 相
7、对于非终结符 S(1)(产生式 Sc)的短语(直接短语);a(2)cb(3)是句子 bbaacb 相对于非终结符 B 的短语;b(2)b(1)a(1)a(2)cb(3)是句子 bbaacb 相对于非终结符 S(2)的短语;注:符号的上标是为了描述方便加上去的。2-6 解:(1) 因为由非终结符号 B 推导不出终结符号串,因此 B 是无用符号,含有 B 的产生式 BBab,BcSB, SaABS 和 AbAB 都是无用产生式,应予以删除。因此我们最后得到与原文法等价且不含无用符号及无用产生式的文法为SbCACd AcSA|cCC CcS|c(2) 因为由文法的开始符号推导不出含有非终结符号 C
8、的句型,因此 C 是无用符号,含有 C 的产生式 CcAB|dSD|a 都是无用产生式,也应予以删除。因此我们最后得到与原文法等价且不含无用符号及无用产生式的文法为SaAB|E AdDA|e Bf DeA EfA|g(3) 因为由非终结符号 A,B 推导不出终结符号串,因此 A,B 是无用符号,删除含有 A,B 的产生式 SBa, AcBC 和 BSA 后得到文法 GS:Sac CbC|d又因为由文法 GS的开始符号 S 推导不出含有非终结符号 C 的句型,因此 C 是无用符号,含有 C 的产生式 CbC|d 都是无用产生式,也应予以删除。因此我们最后得到与原文法等价且不含无用符号及无用产生式
9、的文法 GS为Sac2-7 解:(1) 对于 G,我们可得到 W=A;再按如下步骤得到产生式集P:对于产生式 SaAS,将产生式 SaAS 及 SaS 放入 P;对于产生式 Sb,直接将产生式 Sb 放入 P;对于产生式 AcS,将产生式 AcS 放入 P。于是得到消除 -产生式后的文法为:SaAS|aS|b AcS(2) 对于 G,我们可得到 W=A;再按如下步骤得到产生式集P:对于产生式 SaAA,将产生式 SaAA 及 SAa 和 Sa 放入P;对于产生式 AbAc,将产生式 AbAc 及 Abc 放入 P;对于产生式 AdAe,将产生式 AdAe 及 Ade 放入 P。于是得到消除 -
10、产生式后的文法为:SaAA|aA|a AbAc|bc|dAe|de2-8 解:(1) 首先求出如下集合W(S)=S, W(A)=A, W(B)=B,C, W(C)=C, W(D)=D,B,C然后按如下步骤得到产生式集 P:将 P 中的所有非单产生式添加到 P中:SaB|BC AaA|c|aDb BDB Cb因为 CW(B),故将 C 的所有非单产生式的右部作为 B-产生式的右部添加到 P中:Bb因为 BW(D),故将 B 的所有非单产生式的右部作为 D-产生式的右部添加到 P中:DDB因为 CW(D),故将 C 的所有非单产生式的右部作为 D-产生式的右部添加到 P中:Db由此得到消除单产生式
11、后的文法如下:SaB|BCAaA|c|aDbBDB|bCbDb|DB因为由文法的开始符号推导不出含有非终结符号 A 的句型,因此A 是无用符号,含有 A 的产生式 AaA|c|aDb 都是无用产生式,应予以删除。于是得到消除无用产生式和单产生式后的文法如下:SaB|BCBDB|bCbDb|DB(2) 首先求出如下集合W(S)=S,A,B, W(A)=A,B, W(B)=B然后按如下步骤得到产生式集 P:将 P 中的所有非单产生式添加到 P中:SSA|SB A(S)|( ) BS| 因为 AW(S),故将 A 的所有非单产生式的右部作为 S-产生式的右部添加到 P中:S(S)|( ) 因为 BW
12、(S),故将 B 的所有非单产生式的右部作为 S-产生式的右部添加到 P中:SS| 因为 BW(A),故将 B 的所有非单产生式的右部作为 A-产生式的右部添加到 P中:AS| 由此得到消除单产生式后的文法如下:SSA|SB|(S)|( )|S| A(S)|( )|S| BS| (3) 首先求出如下集合W(E)=E,T,F,P, W(T)=T,F,P, W(F)=F,P, W(P)=P然后按如下步骤得到产生式集 P:将 P 中的所有非单产生式添加到 P中:EE+T TT*F FPF P(E)|i因为 T,F,PW(E),故将 T,F,P 的所有非单产生式的右部作为 E-产生式的右部添加到 P中
13、:ET*F EPF E(E)|i 因为 F,PW(T),故将 F,P 的所有非单产生式的右部作为 T-产生式的右部添加到 P中:TPF T(E)|i 因为 PW(F),故将 P 的所有非单产生式的右部作为 F-产生式的右部添加到 P中:F(E)|i由此得到消除单产生式后的文法如下:EE+T|T*F|PF|(E)|iTT*F|PF|(E)|i FPF|(E)|i P(E)|i第 3 章 习题 3-1 试构造一右线性文法,使得它与如下的文法等价SAB AUT UaU|a DbT|b BcB|c 并根据所得的右线性文法,构造出相应的状态转换图。3-2 对于如题图 3-2 所示的状态转换图(1) 写出
14、相应的右线性文法;(2) 指出它接受的最短输入串;(3) 任意列出它接受的另外 4 个输入串;(4) 任意列出它拒绝接受的 4 个输入串。3-3 对于如下的状态转换矩阵:(1) 分别画出相应的状态转换图;(2) 写出相应的 3 型文法;(3) 用自然语言描述它们所识别的输入串的特征。3-4 将如下的 NFA 确定化和最小化:3-5 将如题图 3-5 所示的具有 动作的 NFA 确定化。题图 3-5 具有 动作的 NFA3-6 设有文法 GS:SaA AaA|bB BbB|cC|c CcC|c试用正规式描述它所产生的语言。3-7 分别构造与如下正规式相应的 NFA。(1) (0* |1)(1*
15、0)*(2) b|a(aa*b)*b3-8 构造与正规式(a|b) *(aa|bb)(a|b)*相应的 DFA。第 3 章 习题答案3-1 解:根据文法知其产生的语言是:LG=ambnci| m,n,i1可以构造与原文法等价的右线性文法:SaA AaA|bB BbB|cC|c CcC|c其状态转换图如下:3-2 解:(1) 其对应的右线性文法是 GA:A 0D B0A|1C C0A|1F|1D0B|1C E0B|1C F1A|0E|0(2) 最短输入串为 011(3) 任意接受的四个输入串为:0110,0011,000011,00110(4) 任意拒绝接受的输入串为:0111,1011,110
16、0,10013-3 解:(1) 相应的状态转换图为:(2) 相应的 3 型文法为:() SaA|bS AaA|bB|b BaB|bB|a|b() SaA|bB|a AbA|aC|a|b BaB|bC|b CaC|bC|a|b() SaA|bB|b AaB|bA|a BaB|bB|a|b () SbS|aA AaC|bB|a BaB|bC|b CaC|bC|a|b(3) 用自然语言描述的输入串的特征为:() 以任意个(包括 0 个)b 开头,中间有任意个(大于 1)a,跟一个 b,还可以有一个由 a,b 组成的任意字符串。() 以 a 打头,中间有任意个(包括 0 个)b,再跟 a,最后由一个
17、a,b 所组成的任意串结尾;或者以 b 打头,中间有任意个(包括0 个)a,再跟 b,最后由一个 a,b 所组成的任意串结尾。() 以 a 打头,后跟任意个(包括 0 个)b ,再跟 a,最后由一个 a,b 所组成的任意串结尾;或者以 b 打头,由一个 a,b 所组成的任意串结尾。() 以任意个(包括 0 个)b 开头,中间跟 aa,最后由一个 a,b所组成的任意串结尾;或者以任意个(包括 0 个)b 开头,中间跟ab 后,再接任意个(包括 0 个)a,再接 b,最后由一个 a,b 所组成的任意串结尾。3-4 解:(1) 将 NFA M 确定化后得 DFA M,其状态转换矩阵如答案图 3-4-
18、(1)之(a)所示,给各状态重新命名,即令:S=1, S,A=2, A,B=3, B=4且由于 3 及 4 的组成中均含有 M 的终态 B,故 3 和 4 组成了 DFA M的终态集 Z。于是,所构造之 DFA M的状态转换矩阵和状态转换图如答案图 3-4-(1)之(b)及(c)所示。现将 DFA M最小化:()初始分划由两个子集组成,即 0:1,2, 3,4()为得到下一分划,考察子集1,2。因为2b =33,4但 1 b =故 1 和 2 可区分,于是便得到下一分划 1: 1, 2, 3,4()又因 1 0 ,再考虑3,4,因为3b =33,4而 4 b =故 3 和 4 可区分,从而又得
19、到 2: 1, 2, 3, 4此时子集已全部分裂,故最小化的过程宣告结束,M即为状态数最小的 DFA。(2) 将 NFA M 确定化后得 DFA M,其状态转换矩阵如答案图 3-4-(2)之(a)所示,给各状态重新命名,即令:S=1, A=2, B,C=3且由于 3 的组成中含有 M 的终态 C,故 3 为 DFA M的终态。于是,所构造之 DFA M的状态转换矩阵和状态转换图如答案图 3-4-(2)之(b)及(c)所示。现将 DFA M最小化:()初始分划由两个子集组成,即 0:1,2, 3()为得到下一分划,考察子集1,2。因为2b =21,2但 1 b =故 1 和 2 可区分,于是便得
20、到下一分划 1: 1, 2, 3此时子集已全部分裂,故最小化的过程宣告结束,M即为状态数最小的 DFA。(3) 将 NFA M 确定化后得 DFA M,其状态转换矩阵如答案图 3-4-(3)之(a)所示,给各状态重新命名,即令:S=1, A=2, S,B=3且由于 3 的组成中含有 M 的终态 B,故 3 为 DFA M的终态。于是,所构造之 DFA M的状态转换矩阵和状态转换图如答案图 3-4-(3)之(b)及(c)所示。现将 DFA M最小化:()初始分划由两个子集组成,即 0:1,2, 3()为得到下一分划,考察子集1,2。因为2b =3但 1 b =故 1 和 2 可区分,于是便得到下
21、一分划 1: 1, 2, 3此时子集已全部分裂,故最小化的过程宣告结束,M即为状态数最小的 DFA。(4) 将 NFA M 确定化后得 DFA M,其状态转换矩阵如答案图 3-4-(4)之(a)所示,给各状态重新命名,即令:A=1, B,C=2, B=3, C=4且由于 2 和 4 的组成中含有 M 的终态 C,故 2 和 4 组成了 DFA M的终态集 Z。于是,所构造之 DFA M的状态转换矩阵和状态转换图如答案图 3-4-(4)之(b)及(c)所示。现将 DFA M最小化:()初始分划由两个子集组成,即 0:1,3, 2,4()为得到下一分划,考察子集1,3。因为1a =22,4但 3
22、a =11,3故 1 和 3 可区分,于是便得到下一分划 1: 1, 3, 2,4()又因 1 0,再考虑2,4,因为2a =4a =1, 2b =4b =4所以 2 和 4 不可区分,故子集S,B已不能再分裂。此时 2 = 1 ,子集分裂的过程宣告结束。() 现选择状态 2 作为2,4的代表,将状态 4 从状态转换图中删去,并将原来引至 4 的矢线都引至 2,这样,我们就得到了最小化后的 DFA M如答案图 3-4-(4)之(d)所示。3-5 解:(1) 将具有 动作的 NFA M 确定化后得 DFA M,其状态转换矩阵如答案图 3-5-(1)之(a)所示,给各状态重新命名,即令:S,B,C
23、=1, A=2, B,C =3, C=4且由于 1,3 和 4 的组成中均含有 M 的终态 C,故 1,3 和 4 组成了 DFA M的终态集 Z。于是,所构造之 DFA M的状态转换矩阵和状态转换图如答案图 3-5-(1)之(b)及(c)所示。(2) 将具有 动作的 NFA M 确定化后得 DFA M,其状态转换矩阵如答案图 3-5-(2)之(a)所示,给各状态重新命名,即令:S=1, Z=2, R,U =3, S,X=4,R,U,Y=5, S,U,X=6, S,Z=7, R,U,Y,Z=8且由于 2,7 和 8 的组成中均含有 M 的终态 Z,故 2,7 和 8 组成了 DFA M的终态集
24、 Z。于是,所构造之 DFA M的状态转换矩阵和状态转换图如答案图 3-5-(2)之(b)及(c)所示。3-6 解:首先将文法写成方程组:(1)S=aA (2)A=aA+bB (3)B=bB+cC+c (4)C=cC+c 将(4)代入(3),得:(5)B=bB+C 由论断 3.1,方程(4)的解为:C=c*c将上式代入(5),得:B=bB+c*c由论断 3.1,得:B=b*c*c将上式代入(2),得:A=aA+b*bc*c由论断 3.1,得:A=a*b*bc*c将上式代入(1),得:S=a*ab*bc*c即文法所产生的语言可用正规式 a*ab*bc*c 表示。3-7 解:(1) 构造与正规式(
25、0 * |1)(1* 0)*相应的 NFA 的步骤如答案图3-7-(1)所示:(2) 构造与正规式 b|a(aa*b)*b 相应的 NFA 的步骤如答案图 3-7-(2)所示:答案图 3-7-(2) 正规式 b|a(aa *b)*b 的 NFA3-8 解:首先,构造与正规式(a|b) *(aa|bb)(a|b)*相应的 NFA M,其构造步骤如答案图 3-8(a)所示:其次,将答案图 3-8(a)所示的具有 动作的 NFA M 确定化后得到 DFA M,其状态转换矩阵如答案图 3-8(b)所示,给各状态重新命名,即令:S,3,1=S, 3,1,5=A, 3,1,6 =B, 3,1,5,2,4,
26、Z=C, 3,1,6,2,4,Z=D, 3,1,6,4,Z=E, 3,1,5,4,Z=F且由于 C,D,E 和 F 的组成中均含有 NFA M 的终态 Z,故 C,D,E 和 F组成了 DFA M的终态集 Z。于是,将 NFA M 确定化后所得 DFA M的状态转换矩阵和状态转换图如答案图 3-8(c)及(d)所示。(e) 对 DFA M最小化后所得的 DFA M的状态转换图答案图 3-8最后,将所得 DFA M最小化:()初始分划由两个子集组成,即 0:S,A,B, C,D,E,F()为得到下一分划,考察子集S,A,B。因为S,Ba =AS,A,B但 A a =CC,D,E,F故 S,B 和
27、 A 可区分,于是便得到下一分划 1: S,B, A, C,D,E,F()因 1 0 ,考虑S,B,因为Sb =BS,B但 B b =DC,D,E,F故 S 和 B 可区分,于是便得到下一分划 2: S, B, A, C,D,E,F() 又因 2 1 ,再考虑C,D,E,F,因为Ca =Fa =C, Cb =Fb =E所以 C 和 F 等价;同理可得 D 和 E 等价。又因为Ca =C, Da =F, Cb =E, Db =D而 C 和 F 等价,D 和 E 等价,所以 C 和 D 也等价,故 C,D,E,F 这 4个状态等价。此时 3 = 2 ,子集分裂的过程宣告结束。()现选择状态 C 作
28、为C,D,E,F的代表,将状态 D,E,F 从状态转换图中删去,并将原来引至 D,E,F 的矢线都引至 C,这样,我们就得到了最小化后的 DFA M如答案图 3-8(e)所示,此 DFA M即为所求的与正规式(a|b) *(aa|bb)(a|b)*相应的 DFA。第 4 章 习题 14-1 消除下列文法的左递归性。(1)SSA|A ASB|B|(S)|( ) BS| (2) SAS|b ASA|a(3) S(T)|a| TS|T,S4-2 对于如下文法,求各候选式的 FIRST 集和各非终结符号的FOLLOW 集。SaAB|bA| AaAb| BbB| 4-3 验证下列文法是否为 LL(1)文
29、法。(1) SAB|CDa Aab|c BdE|CeC| DfD|f EdE|(2) SaABbCD| AASd| BSAc|eC| CSf|Cg| DaBD|4-4 对于如下的文法 GS:SSb|Ab|b AAa|a(1) 构造一个与 G 等价的 LL(1)文法 GS;(2) 对于 GS,构造相应的 LL(1)分析表;(3) 利用 LL(1)分析法判断符号串 aabb 是否是文法 GS的合法句子。4-5 设已给文法SSaB|bB AS|a BAc(1) 构造一个与 G 等价的 LL(1)文法 GS;(2) 对于 GS,构造相应的 LL(1)分析表;(3) 利用 LL(1)分析法判断符号串 b
30、acabc 是否是文法 GS的合法句子。第 4 章 习题答案4-1 解: (1) 文法 GS中的 S,A 都是间接左递归的非终结符号。将 A 产生式的右部代入产生式SA中,得到与原文法等价的文法 GS:SSA|SB|B|(S)|( ) ASB|B|(S)|( ) BS| 文法 GS中的 S 是直接左递归的非终结符号,则消除 S 产生式的直接递归性后,我们便得到了与原文法等价且无任何左递归性的文法 G“S:SBS|(S)S|( )S SAS|BS|ASB|B|(S)|( ) BS| (2) 文法 GS中的 S,A 都是间接左递归的非终结符号。将 A 产生式代入产生式SAS中,得到与原文法等价的文
31、法 GS:SSAS|aS|b ASA|a文法 GS中的 S 是直接左递归的非终结符号,则消除 S 产生式的直接递归性后,我们便得到了与原文法等价且无任何左递归性的文法 G“S:SaSS|bS SASS|ASA|a(3) 文法 GS中的 T 是直接左递归的非终结符号。则消除 T 产生式的直接递归性后,我们便得到了与原文法等价且无任何左递归性的文法 GS:S(T)|a| TSTT,ST|4-2 解: 文法 GS的各候选式的 FIRST 集和各非终结符号的 FOLLOW 集如答案表 4-2 所示。答案表 4-2 文法 GS的各个 FIRST 集和 FOLLOW 集产 生 式FIRST FOLLOWSa aABSbASb#AaAbA ab,#BbBBb#4-3 解:(1) 因为 D 产生式的两个候选式 fD 和 f 的 FIRST 集交集为 f,不为空,所以该文法不是 LL(1)的。(2) 因为文法中含有左递归的非终结符号 A,故此文法具有左递归性,不是 LL(1)的。4-4 解: (1) 文法中含有直接左递归的非终结符号 S 和 A,则消除直接递归性后,我们便得到了与原文法等价且无任何左递归性的文法GS: