第二章习题解答1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}解:对应文法为G(S)=({S},{a,b},{S→ε|aSb},S)(2){anbmcp|n,m,p≥0}解:对应文法为G(S)=({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){an#bn|n≥0}∪{cn#dn|n≥0}解:对应文法为G(S)=({S,X,Y},{a,b,c,d,#},{S→X,S→Y,X→aXb|#,Y→cYd|#},S)(4){w#wr#|w?{0,1}*,wr是w的逆序排列}解:G(S)=({S,W,R},{0,1,#},{S→W#,W→0W0|1W1|#},S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S)=({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e,I→J|2|4|6|8,Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为S→0A|1B|e,A→0S|1CB→0C|1SC→1A|0B3.描述语言特点(1)S→10S0S→aAA→bAA→a解:本文法构成的语言集为:L(G)={(10)nabma0n|n,m≥0}。(2)S→SSS→1A0A→1A0A→ε解:L(G)={1n10n11n20n2…1nm0nm|n1,n2,…,nm≥0;且n1,n2,…nm不全为零}该语言特点是:产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。(3)S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε解:本文法构成的语言集为:L(G)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特点是具有1p1n0n或1n0n0q形式,进一步,可知其具有形式1n0mn,m≥0,且n+m0。(4)S→bAdcA→AGSG→εA→a解:可知,S=…=baSndcn≥0该语言特点是:产生的句子中,是以ba开头dc结尾的串,且ba、dc个数相同。(5)S→aSSS→a解:L(G)={a(2n-1)|n≥1}可知:奇数个a4.解:此文法产生的语言是:以终结符a1、a2…an为运算对象,以∧、∨、~为运算符,以[、]为分隔符的布尔表达式串5.5.1解:由于此文法包含以下规则:AA→e,所以此文法是0型文法。5.2证明:略6.解:(1)最左推导:程序T分程序T标号:分程序TL:分程序TL:标号:分程序TL:L:分程序TL:L:无标号分程序TL:L:分程序首部;复合尾部TL:L:分程序首部;说明;复合尾部TL:L:begin说明;说明;复合尾部TL:L:begind;说明;复合尾部TL:L:begind;d;复合尾部TL:L:begind;d;语句;复合尾部TL:L:begind;d;s;复合尾部.TL:L:begind;d;s;语句endTL:L:begind;d;s;send最右推导:程序T分程序T标号:分程序T标号:标号:分程序T标号:标号:无标号分程序T标号:标号:分程序首部;复合尾部T标号:标号:分程序首部;语句;复合尾部T标号:标号:分程序首部;语句;语句;endT标号:标号:分程序首部;语句;s;endT标号:标号:分程序首部;s;s;endT标号:标号:分程序首部;说明;s;s;endT标号:标号:分程序首部;d;s;s;endT标号:标号:begin说明;d;s;s;endT标号:标号:begind;d;s;s;endT标号:L:begind;d;s;s;endTL:L:begind;d;s;s;end(2)句子L:L:begind;d;s;send的相应语法树是:7.解:aacb是文法G[S]中的句子,相应语法树是:最右推导:S=aAcB=aAcb=aacb最左推导:S=aAcB=aacB=aacb(2)aabacbadcd不是文法G[S]中的句子因为文法中的句子不可能以非终结符d结尾(3)aacbccb不是文法G[S]中的句子可知,aacbccb仅是文法G[S]的一个句型的一部分,而不是一个句子。(4)aacabcbcccaacdca不是文法G[S]中的句子因为终结符d后必然要跟终结符a,所以不可能出现…dc…这样的句子。(5)aacabcbcccaacbca不是文法G[S]中的句子由(1)可知:aacb可归约为S,由文法的产生式规则可知,终结符c后不可能跟非终结符S,所以不可能出现…caacb…这样的句子。8.证明:用归纳法于n,n=1时,结论显然成立。设n=k时,对于α1α2...αkT*b,存在βi:i=1,2,..,k,αiT*bi成立,现在设α1α2...αkαk+1T*b,因文法是前后文无关的,所以α1α2...αk可推导出b的一个前缀b',αk+1可推导出b的一个后缀=b(不妨称为bk+1)。由归纳假设,对于b',存在βi:i=1,2,..,k,b'=β1β2...βk,使得αiT*bi成立,另外,我们有αk+1T*b(=bk+1)。即n=k+1时亦成立。证毕。9.证明:(1)用反证法。假设α首符号为终结符时,β的首符号为非终结符。即设:α=aω;β=Aω’且α=*β。由题意可知:α=aωT…TAω’=β,由于文法是CFG,终结符a不可能被替换空串或非终结符,因此假设有误。得证;(2)同(1),假设:β的首符号为非终结符时,α首符号为终结符。即设:α=aω;β=Aω’且α=aωT…TAω’=β,与(1)同理,得证。10.证明:因为存在句子:abc,它对应有两个语法树(或最右推导):STABTAbcTabcSTDCTDcTabc所以,本文法具有二义性。11.解:(1)STABTAaSbTAacbTbAacbTbbAacbTbbaacb上面推导中,下划线部分为当前句型的句柄。对应的语法树为:全部的短语:第一个a(a1)是句子bbaacb相对于非终结符A(A1)(产生式A?a)的短语(直接短语);b1a1是句子bbaacb相对于非终结符A2的短语;b2b1a1是句子bbaacb相对于非终结符A3的短语;c是句子bbaacb相对于非终结符S1(产生式S?c)的短语(直接短语);a2cb3是句子bbaacb相对于非终结符B的短语;b2b1a1a2cb3是句子bbaacb相对于非终结符S2的短语;注:符号的下标是为了描述方便加上去的。(2)句子(((b)a(a))(b))的最右推导:ST(AS)T(A(b))T((SaA)(b))T((Sa(a))(b))T(((b)a(a))(b))相应的语法树是:(3)解:iii*i+↑对应的语法树略。最右推导:ETT=F=FP↑TFE↑TFET+↑TFEF+↑TFEP+↑TFEi+↑TFTi+↑TFTF*i+↑TFTP*i+↑TFTi*i+↑TFFi*i+↑TFPi*i+↑TFii*i+↑TPii*i+↑Tiii*i+↑12.证明:充分性:当前文法下的每一符号串仅有一个句柄和一个句柄产生式T对当前符号串有唯一的最左归约T对每一步推导都有唯一的最右推导T有唯一的语法树。必要性:有唯一的语法树T对每一步推导都有唯一的最右推导T对当前符号串有唯一的最左归约T当前文法下的每一符号串仅有一个句柄和一个句柄产生式13.化简下列各个文法(1)解:S→bCACdA→cSA|cCCC→cS|c(2)解:S→aAB|fA|gA→e|dDAD→eAB→f(3)解:S→ac14.消除下列文法中的ε产生式(1)解:S→aAS|aS|bA→cS(2)解:S→aAA|aA|aA→bAc|bc|dAe|de15.消除下列文法中的无用产生式和单产生式(1)消除后的产生式如下:S→aB|BCB→DB|bC→bD→b|DB(2)消除后的产生式如下:S→SA|SB|()|(S)|[]|[S]A→()|(S)|[]|[S]Bà[]|[S](3)消除后的产生式如下:E→E+T|T*F|(E)|P↑F|iT→T*F|(E)|P↑F|iF→P↑F|(E)|iP→(E)|i第三章习题解答1.从略2.3假设W:表示载狐狸过河,G:表示载山羊过河,C:表示载白菜过河用到的状态1:狐狸和山羊在左岸2:狐狸和白菜载左岸3:羊和白菜在左岸4:狐狸和山羊在右岸5:狐狸和白菜在右岸6:山羊和白菜在右岸F:全在右岸4证明:只须证明文法G:A→αB或A→α(A,B∈VN,α∈VT+)等价于G1:A→aB或A→a(a∈VT+)G1的产生式中A→aB,则B也有B→bC,C→cD….所以有A→abc…B’,a,b,c…∈VT,B’∈VN所以与G等价。2)G的产生式A→αB,α∈VT+,因为α是字符串,所以肯定存在着一个终结符a,使A→aB可见两者等价,所以由此文法产生的语言是正规语言。56根据文法知其产生的语言是L={ambnci|m,n,i≧1}可以构造如下的文法VN={S,A,B,C},VT={a,b,c}P={S→aA,A→aA,A→bB,B→bB,B→cC,C→cC,C→c}其状态转换图如下:7(1)其对应的右线性文法是:A→0D,B→0A,B→1C,C→1|1F,C→1|0A,F→0|0E|1A,D→0B|1C,E→1C|0B(2)最短输入串011(3)任意接受的四个串011,0110,0011,000011(4)任意以1打头的串.8从略。9(2)相应的3型文法(i)S→aAS→bSA→aAA→bBB→a|aBB→b|bB(ii)S→aA|aS→bBB→aB|bBA→aBA→b|bA(iii)S→aAS→bBA→bAA→aCB→aBB→bCC→a|aCC→b|bC(iv)S→bSS→aAA→aCA→bBB→aBB→bCC→a|aCC→b|bC(3)用自然语言描述输入串的特征(i)以任意个(包括0)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成的任意字符串(ii)以a打头,后跟任意个(包括0)b(iii)以a打头,中间有任意个(包括0)b,再跟a,最后由一个a,b所组成的任意串结尾或者以b打头,中间有任意个(包括0)a,再跟b,最后由一个a,b所组成的任意串结尾(iv)以任意个(包括0)b开头,中间跟aa最后由一个a,b所组成的任意串结尾或者以任意个(包括0)b开头,中间跟ab后再接任意(包括0)a再接b,最后由一个a,b所组成的任意串结尾10(1)G1的状态转换图:G2的状态转换图:(2)G1等价的左线性文法:S→Bb,S→Dd,D→C,B→Db,C→Bc,B→Ab,B→ε,A→aG2等价的右线性文法:S→dD,S→aB,D→C,B→abC,B→bB,B→bA,B→ε,C→cA,A→a(3)对G1文法,abb的推导序列是:S=aA=abB=abb对G1’文法,abb的推导序列是:S=Bb=Abb=abb对G2文法,aabca的推导序列是:S=Aa=Cca=Babca=aabca对G2’文法,aabca的推导序列是:S=aB=aabC=aabcA=aabca(4)对串acbd来说,G1,G1’文法都不能产生。11将右线性文法化为左线性文法的算法:o(1)对于G中每一个形如A→aB的产生式且A是开始符,将其变为B→a,否则若A不是开始符,B→Aa;o(2)对于G中每一个形如A→a的产生式,将其变为S→Aa12(1)状态矩阵是:记[S]=q0[B]=q1[AB]=q2[SA]=q3,最小化