




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《編譯原理》課后習(xí)題答案
第一章
1.解:源程序是指以某種程序設(shè)計(jì)語(yǔ)言所編寫(xiě)的程序。目標(biāo)程序是指編譯程序〔或解
釋程序)將源程序處理加工而得的另一種語(yǔ)言(目標(biāo)語(yǔ)言)的程序。翻譯程序是將
某種語(yǔ)言翻譯成另一種語(yǔ)言的程序的統(tǒng)稱。編邑程序與解釋程序均為翻譯程序,但
二者工作方法不同。解釋程序的特點(diǎn)是并不先將高級(jí)語(yǔ)言程序全部翻譯成機(jī)器代碼,
而是每讀入一條高級(jí)語(yǔ)言程序語(yǔ)句,就用解釋程序?qū)⑵浞g成一段機(jī)器指令并執(zhí)行
之,然后再讀入下一條語(yǔ)句繼續(xù)進(jìn)行解釋、執(zhí)行,如此反復(fù)。即邊解釋邊執(zhí)行,翻
譯所得的指令序列并不保存。編譯程序的特點(diǎn)是先將高級(jí)語(yǔ)言程序翻譯成機(jī)器語(yǔ)言
程序,將其保存到指定的空間中,在用戶需要時(shí)再執(zhí)行之。即先翻譯、后執(zhí)行。
2.解:一般說(shuō)來(lái),編譯程序主要由詞法分析程序、語(yǔ)法分析程序、語(yǔ)義分析程序、中
間代碼生成程序、代碼優(yōu)化程序、目標(biāo)代碼生成程序、信息表管理程序、錯(cuò)誤檢查
處理程序組成。
3.解:C語(yǔ)言的關(guān)鍵字有:autobreakcasecharconstcontinuedefault
dodoubleelseenuirexternfloatforgotoifintlongregisterreturnshort
signedsizeofstaticstructswitchtypedefunionunsignedvoidvolatile
whileo上述關(guān)鍵字在C語(yǔ)言中均為保存字。
4.解:C語(yǔ)言中括號(hào)有三種:{},[],0o其中,{}用于語(yǔ)句括號(hào);口用于數(shù)組;
0用于函數(shù)1定義與調(diào)用)及表達(dá)式運(yùn)算(改變運(yùn)算順序)。C語(yǔ)言中無(wú)END關(guān)
鍵字。逗號(hào)在C語(yǔ)言中被視為分隔符和運(yùn)算符,作為優(yōu)先級(jí)最低的運(yùn)算符,運(yùn)算結(jié)
果為逗號(hào)表達(dá)式最右側(cè)子表達(dá)式的值(如:(a,b,c,d)的值為d)。
5.略
第二章
1.(1)答:26*26=676
(2)答:26*10=260
(3)答:{a,b,c,...,z,a0,al,...,a9,aa,...,az,...,zz,aOO,aOl,...,zzz},共
26+26*36+26*36*36=34658個(gè)
2.構(gòu)造產(chǎn)生以下語(yǔ)言的文法
(1){anbn|n>0)
解:對(duì)應(yīng)文法為G(S)=({S},{a,b},{S-£|aSb},S)
(2){anbincp|n,m,p^O}
解:對(duì)應(yīng)文法為G(S)=({S,X,Y},{a,b,c},{S->aS|X,X->bX|Y,Y->cY|£},S)
(3)(an#bn|n^O}U{cn#dn|n'O}
解:對(duì)應(yīng)文法為G(S)=((S,X,Y),{a,b,c,d,#},{SfX,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->OWO|1W1|#},S)
(5)任何不是以0打頭的所有奇整數(shù)所組成的集合
解:G(S)=((S,A,B,I,J),{-,0,1,2,3,4,5,6,7,8,9),{S-J|IBJ,B-OB|IB|e,I-
J|2|4|6|8,Jdl|3|5|7|9},S)
(6)所有偶數(shù)個(gè)0和偶數(shù)個(gè)1所組成的符號(hào)串集合
解:對(duì)應(yīng)文法為S->OA|lB|e,A-*OS|1CB-*OC|1SC-*1A|OB
3?描述語(yǔ)言特點(diǎn)
(1)SflOSOS-aAA-bAA-a
解:本文法構(gòu)成的語(yǔ)言集為:L(G)={(10)nabmaOn|n,m2。}。
(2)S-*SSS-*lAOA-*lADA->£
解;L(G)-{InlOnlln20n2…lnmOnm|nl,n2,?,,,nm^O;且nl,n2,…nm不全為零}該
語(yǔ)言特點(diǎn)是:產(chǎn)生的句子中,0、1個(gè)數(shù)相同,并且假設(shè)干相接的1后必然緊接數(shù)量相同連
續(xù)的0。
(3)S->lASfBOA-*1AA-CBfBOB-CC-1C0C-e
解:本文法構(gòu)成的語(yǔ)言集為:L(G)為lpln0n|p21,u20}U{ln0n0q|qNl,n》0},特點(diǎn)
是具有IplnOn或InOnOq形式,進(jìn)一步,可知其具有形式InOmn,m^0,且n+m>0o
(4)SfhAdcAfAGSG—£A—a
解:可知,S=>-=>baSndcn20
該語(yǔ)言特點(diǎn)是:產(chǎn)生的句子中,是以ba開(kāi)頭de結(jié)尾的串,且ba、de個(gè)數(shù)相同。
(5)S-aSSS-a
解:解G)={a(2n-l)|n》l}可知:奇數(shù)個(gè)a
4.解:此文法產(chǎn)生的語(yǔ)言是:以終結(jié)符al、a2…an為運(yùn)算對(duì)象,以八、V、~為運(yùn)算符,
以[、]為分隔符的布爾表達(dá)式串
5.5.1解:由于此文法包含以下規(guī)則:AA->e,所以此文法是0型文法。
5.2證明:略
6.解:
(1)最左推導(dǎo):
〈程序>T<分程序〉T〈標(biāo)號(hào)〉:〈分程序)TL:〈分程序》
匚:〈標(biāo)號(hào)》:〈分程序》
TL:L:〈分程序》
TL:L:〈無(wú)標(biāo)號(hào)分程序》
TL:L:<分程序首部>;<復(fù)合尾部)
TL:L:〈分程序首部〉;〈說(shuō)明〉;〈復(fù)合尾部)
TL:L:begin〈說(shuō)明〉;〈說(shuō)明〉;〈復(fù)合尾部)
TL:L:begind;〈說(shuō)明〉;〈復(fù)合尾部)
TL:L:begind;d;<復(fù)合尾部)
TL:L:begind;d;〈語(yǔ)句);〈復(fù)合尾部〉
TL:L:begind;d;s;〈復(fù)合尾部.
TL:L:begind;d;s;〈語(yǔ)句>end
TL:L:begind;d;s;send
最右推導(dǎo):
〈程序>T〈分程序訂〈標(biāo)號(hào)》:〈分程序〉
T〈標(biāo)號(hào)〉:〈標(biāo)號(hào)》:〈分程序〉
T〈標(biāo)號(hào)〉:〈標(biāo)號(hào)):〈無(wú)標(biāo)號(hào)分程序》
T〈標(biāo)號(hào)〉:〈標(biāo)號(hào)):〈分程序首部〉;〈復(fù)合尾部)
以標(biāo)號(hào)::<標(biāo)號(hào)):<分程序首部〉;<語(yǔ)句);<復(fù)合尾部)
T(標(biāo)號(hào)):<標(biāo)號(hào)):(分程序首部>:<語(yǔ)句〉:<語(yǔ)句):end
T〈標(biāo)號(hào)):<標(biāo)號(hào)):<分程序首部》;<語(yǔ)句);s;end
T〈標(biāo)號(hào)>:<標(biāo)號(hào)):〈分程序首部);s;s;end
T〈標(biāo)號(hào)〉:〈標(biāo)號(hào)):〈分程序首部〉;說(shuō)明;s;s;end
T〈標(biāo)號(hào)》:<標(biāo)號(hào)):〈分程序首部》;d;s;s;end
T〈標(biāo)號(hào)):<標(biāo)號(hào)):begin說(shuō)明;d;s;s;end
T〈標(biāo)號(hào)):<標(biāo)號(hào)》:begind;d;s;s;end
T〈標(biāo)號(hào)):L:begind;d;s;s;end
TL:L:begind;d;s;s;end
(2)句子L:L:begind;d;s;send的相應(yīng)語(yǔ)法樹(shù)是:
7,解:
aacb是文法G[S]中的句子,相應(yīng)語(yǔ)法樹(shù)是:
最右推導(dǎo):S=>aAcB=>aAcb=>aacb
最左推導(dǎo):S=>aAcB=>aacB=>aacb
(2)aabacbadcd不是文法G[S]中的句子
因?yàn)槲姆ㄖ械木渥硬豢赡芤苑墙K結(jié)符d結(jié)尾
(3)aacbccb不是文法G[S]中的句子
可知,aacbccb僅是文法G[S]的一個(gè)句型的一局部,而不是一個(gè)句子。
(4)aacabcbcccaacdca不是文法G[S]中的句子
因?yàn)榻K結(jié)符d后必然要跟終結(jié)符a,所以不可能出現(xiàn)…de…這樣的句子。
(5)aacabcbcccaacbca不是文法G[S]中的句子
由(1)可知:aacb可歸約為S,由文法的產(chǎn)生式規(guī)則可知,終結(jié)符c后不可能跟非終結(jié)符
S,所以不可能出現(xiàn)…caacb…這樣的句子。
8.證明:用歸納法于n,n=l時(shí),結(jié)論顯然成立。設(shè)n=<時(shí),對(duì)于ci1a2...akT*b,存在B
i:aiT*bi成立,現(xiàn)在設(shè)
a1a2...akak+lT*b,因文法是前后文無(wú)關(guān)的,所以a1a2.一ak可推導(dǎo)出b的一個(gè)
前綴b',Qk+1可推導(dǎo)出b的一個(gè)后綴二b〃(不妨稱為bk+1)。由歸納假設(shè),對(duì)于b',存在
Bi:i=l,2,..,k,b'=B1B2...Bk,使得
aiT*bi成立,另外,我們有ak+lT*b〃(=bk+1)。即產(chǎn)k+1時(shí)亦成立。證畢。
9.證明:(1)用反證法。假設(shè)a首符號(hào)為終結(jié)符時(shí),B的首符號(hào)為非終結(jié)符。即設(shè):a=a
3;B二A3'且a=>*P0
由題意可知:a=asT…TAs'=B,由于文法是CFG,終結(jié)符a不可能被替換空串或非
終結(jié)符,因此假設(shè)有誤。得證;
(2)同(1),假設(shè):B的首符號(hào)為非終結(jié)符時(shí),。首符號(hào)為終結(jié)符。即設(shè):a=ao;P
二As'且a=a3T…TA。'=0,與(1)同理,得證。
10.證明:因?yàn)榇嬖诰渥樱篴bc,它對(duì)應(yīng)有兩個(gè)語(yǔ)法樹(shù)(或最右推導(dǎo)):
STABTAbcTabc
STDCTDcTabc
所以,本文法具有二義性。
11.解:
(1)STABTAaSbrAacbTbAacbTbbAacbTbbaacb
上面推導(dǎo)中,下劃線局部為當(dāng)前句型的句柄。對(duì)應(yīng)的語(yǔ)法樹(shù)為:
全部的短語(yǔ):
第一個(gè)a(al)是句子bbaacb相對(duì)于非終結(jié)符A(Al)(產(chǎn)生式A?a)的短語(yǔ)(直接短語(yǔ));
blal是句子bbaacb相對(duì)于非終結(jié)符A2的短語(yǔ);
b2blal是句子bbaacb相對(duì)于非終結(jié)符A3的短語(yǔ);
c是句子bbaacb相對(duì)于非終結(jié)符S1(產(chǎn)生式S?c)的短語(yǔ)〔直接短語(yǔ));
a2cb3是句子bbaacb相對(duì)于非終結(jié)符B的短語(yǔ);
b2blala2cb3是句子bbaacb相對(duì)于非終結(jié)符S2的短語(yǔ);
注:符號(hào)的下標(biāo)是為了描述方便加上去的。
(2)句子(((b)a(a))(b))的最右推導(dǎo):
ST(AS)T(A(b))T((SaA)(b))T[(Sa(a))(b))
T(((b)a(a))(b))
相應(yīng)的語(yǔ)法樹(shù)是:
(3)解:iii*i+t對(duì)應(yīng)的語(yǔ)法樹(shù)略。
最右推導(dǎo):ETT=>F=>FPtTFEtTFET+fTFEF+tTFEP+tTFEi+t
TFTi+tTFTF*i+tTFTP*i+tTFTi*i+tTFFi*i+tTFPi*i+t
TFii*i+tTPii*i+fTiii*i+t
12.證明:
充分性:當(dāng)前文法下的每一符號(hào)串僅有一個(gè)句柄和一個(gè)句柄產(chǎn)生式T對(duì)當(dāng)前符號(hào)串有唯一
的最左歸約T對(duì)每一步推導(dǎo)都有唯一的最右推導(dǎo)T有唯一的語(yǔ)法樹(shù)。
必要性:有唯一的語(yǔ)法樹(shù)T對(duì)每一步推導(dǎo)都有唯一的最右推導(dǎo)T對(duì)當(dāng)前符號(hào)串有唯一的最
左歸約T當(dāng)前文法下的每一符號(hào)串僅有一個(gè)句柄和一個(gè)句柄產(chǎn)生式
13.化簡(jiǎn)以下各個(gè)文法
(1)解:S->bCACdA->cSA|cCCC-cS|c
(2)解:S-aAB|fA|gA-e|dDAD^eAB^f
(3)解;S-ac
14.消除以下文法中的£產(chǎn)生式
(1)解:S-aAS|aS|bA-cS
(2)解:S-aAA|aA|aA-bAc|be|dAe|de
15.消除以下文法中的無(wú)用產(chǎn)生式和單產(chǎn)生式
(1)消除后的產(chǎn)生式如下:
S-aB|BC
B-DB|b
Ci
D-bDB
(2)消除后的產(chǎn)生式如下:
STA|SB|0|(S)|[]|[S]
A7)|(S)
Ba[]|[S]
(3)消除后的產(chǎn)生式如下:
E-E+T|T*F|(E)|PtFIi
T-T*F|(E)|PtF|i
F-PtF|(E)|i
P-(E)|i
第三章
1.從略
2.
3假設(shè)W:表示載狐貍過(guò)河,G:表示載山羊過(guò)河,C:表示載白菜過(guò)河
用到的狀態(tài)1:狐貍和山羊在左岸2:狐貍和白菜載左岸3:羊和白菜在左岸4:狐貍和山羊
在右岸5:狐貍和白菜在右岸6:山羊和白菜在右岸F:全在右岸
4證明:只須證明文法G:AfciB或A-a(A,BEVN,aeVT+)
等價(jià)于Gl:A—aB或Afa(aeVT+)
?G1的產(chǎn)生式中A-aE,則B也有B-bC,C-cD….
所以有A-abc-B,,a,b,c-eVT,B,eVN
所以與G等價(jià)。
2)G的產(chǎn)生式A-aB,aGVT+,因?yàn)閍是字符串,所以肯定存在著一個(gè)終結(jié)符a,使A
~aB
可見(jiàn)兩者等價(jià),所以由此文法產(chǎn)生的語(yǔ)言是正規(guī)語(yǔ)言。
5
6根據(jù)文法知其產(chǎn)生的語(yǔ)言是
L={ambnci|m,n,i—1}
可以構(gòu)造如下的文法VN={S,A,B,C},VT={a,b,c)
P={S->aA,A-*aA,A-*bB,B—bB,B—cC,C—cC,C-*c}
其狀態(tài)轉(zhuǎn)換圖如下:
7(1)其對(duì)應(yīng)的右線性文法是:
A->0D,B-OA,B->IC,C->1|1F,C->1|OA,F-01OE11A,D-OB|IC,E-IC|OB
(2)最短輸入串Oil
(3)任意接受的四個(gè)串
011,0110,0011,000011
(4)任意以1打頭的串.
8從略。
9
(2)相應(yīng)的3型文法
⑴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)用自然語(yǔ)言描述輸入串的特征
(i)以任意個(gè)(包括0)b開(kāi)頭,中間有任意個(gè)(大于1)a,跟一個(gè)b,還可以有一個(gè)由a,b
組成的任意字符串
(ii)以a打頭,后跟任意個(gè)(包括0)b
(iii)以a打頭,中間有任意個(gè)[包括0)b,再跟a,最后由一個(gè)a,b所組成的任意串結(jié)尾或
者
以b打頭,中間有任意個(gè)(包括0)a,再跟b,最后由一個(gè)a,b所組成的任意串結(jié)尾
(iv)以任意個(gè)(包括0)b開(kāi)頭,中間跟aa最后由一個(gè)a,b所組成的任意串結(jié)尾或者
以任意個(gè)(包括0)b開(kāi)頭,中間跟ab后再接任意(包括0)a再接b,最后由一個(gè)a,b所
組成的任意串結(jié)尾
10(1)G1的狀態(tài)轉(zhuǎn)換圖:
G2的狀態(tài)轉(zhuǎn)換圖:
(2)G1等價(jià)的左線性文法:
S-Bb,SfDd,D-C,B-Db,C-Be,B-Ab,B-e,A-*a
G2等價(jià)的右線性文法:
SfdD,S-aB,D-C,B-abC,B->bB,B—?■bA,B—*,£,C-cA,A-a
(3)對(duì)G1文法,abb的推導(dǎo)序列是:
S=>aA=>abB=>abb
對(duì)Gl'文法,abb的推導(dǎo)序列是:
S=>Bb=>Abb=>abb
對(duì)G2文法,aabca的推導(dǎo)序列是:
S=>Aa=>Cca=>Babca=>aabca
對(duì)G2'文法,aabca的推導(dǎo)序列是:
S=>aB=>aabC=>aabcA=>aabca
(4)對(duì)串a(chǎn)ebd來(lái)說(shuō),Gl,Gr文法都不能產(chǎn)生。
11將右線性文法化為左線性文法的算法:
(1)對(duì)于G中每一個(gè)形如A-aB的產(chǎn)生式且A是開(kāi)始符,將其變?yōu)閍,否
則假設(shè)A不是開(kāi)始符,B-Aa;
(2)對(duì)于G中每一個(gè)形如A-a的產(chǎn)生式,將其變?yōu)镾fAa
12(1)
a
S{S用}
A0
B{B}4)?
狀態(tài)矩陣是:
記[S]=qO[B]=ql[AB]=q2[SA]=q3,最小化和確定化后如圖
(2)記[S]=qO,[A]=ql,[BS]=q2最小化和確定化后的狀態(tài)轉(zhuǎn)換圖如下
13(1)將具有£動(dòng)作的NFA確定化后,其狀態(tài)轉(zhuǎn)換圖如圖:
記{S0,Sl,S3)=q0{Sl}=ql{S2S3}=q2{S3}=q3
(2)記{S}=qO{Z)=ql{UR}=q2{SX}=q3{YUR)=q4{XSU)=q5{YURZ}=q6{ZS}=q7
14(1)從略
⑵化簡(jiǎn)后SO和SI作為一個(gè)狀態(tài),S5和S6作為一個(gè)狀態(tài)。
狀態(tài)轉(zhuǎn)換圖如圖
15從略。
16從略。
?(1)r*表示的正規(guī)式集是{£,r,rr,rrr,…}
(£|r)*表示的正規(guī)式集是{£,£e,???}U{r,rr,rrr,-}={£,r,rr,rrr,???)
£|門(mén)'*表示的正規(guī)式集是{e,r,rr,rrr,…}
(r*)*=r*={£,r,rr,rrr,…}
所以四者是等價(jià)的。
(2)(rs)*r表示的正規(guī)式集是{£,rs,rsrs,rsrsrs,…}r={r,rsr,rsrsr,rsrsrsr,??,}
r(sr)*表示的正規(guī)式集是r{e,sr,srsr,srsrsr,…}={r,rsr,rsrsr,rsrsrsr,
所以兩者等價(jià)。
18寫(xiě)成方程組
S=aT+aS⑴
B=cB+c(2)
T=bT+bB(3)
所以B=c*cT=b*bc*c
S=a*ab*bc*c
?Gl:
S=aA+B⑴
B=cC+b(2)
A=abS+bB(3)
OD⑷
Db=B+d(5)
把(4)(5)代入(2),得B=c(bB+d)+b=cbB+cd+b得B=(cb)*(cd|b),代入(3)得
A=abS+b(cb)*(cd|b)把它打入(1)得
S=a(abS+b(cb)*(cd|b))+(cb)*(cd|b)
=aabS+ab(cb)*(cd|b)+(cb)*(cd|b)
=(aab)*(ab(cb)*(cd|b)|(cb)*(cdb))
G2:
S=Aa+B(1)
A=Cc+Bb(2)
B=Bb+a(3)
C=D+Bab(4)
D二d⑸
可得D=dB=ab*C=ab*ab|bA=(ab*ab|b)c+ab*b
S=(ab*ab|b)ca+ab*ba+ab*
=(ab*ab|b)ca|ab*ba|ab*
20
識(shí)別此語(yǔ)言的正規(guī)式是S='LABEL'd(d|,d)*;
從略。
21從略。
22構(gòu)造NFA
其余從略。
23下面舉一個(gè)能夠識(shí)別1,2,3,10,20,100的例子,讀者可以推而廣之。
%{
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#defineONI
^defineTW2
defineTHRE3
加efineTE10
#defineTWENT20
^defineHUNDRE100
defineWHITE9999
船
upper[A-Z]
%%
ONEreturnON;
TVOreturnTW;
THREEreturnTHRE;
T亦returnTE;
TWENTYreturnTWENT;
HUNDREDrcturnHUNDRE;
z/+1\treturnWHITE;
\nreturnO;
%%
main(intargc,char*argv[])
(
intc,i=0;
chartmp[30];
if(argc==2)
(
if((yyin=fopen(argv[1],vrz,))==NULL)
(
printf("can'topen%s\n,z,argv[l]);exit(0);
)
)
while((c=yylex())!=0)
(
switch(c)
(
caseON:
c=yylex();
if(c==0)goto{i+=l;label;}
c=yylex();
if(c二二HUNDRE)
i+=100;
elsei+=l;
break;
caseTW:c=yylex();
c=yylex();
if(c==HUNDRE)
i+=200;
elsei+=2;
break;
caseTWENT:i+=20;
break;
caseTE:i+=10;
break;
default:break;
)
上/*\vhi1e*/
label:printf("%d\n”,i);
return;
)
21(1)Dn表示的正規(guī)集是長(zhǎng)度為2n任意a和b組成的字符串。
?此正規(guī)式的長(zhǎng)度是2r
?用來(lái)識(shí)別Dn的DFA至多需要2n+l個(gè)狀態(tài)。
25從略。
26⑴由{}括住的,中間由任意個(gè)非{組成的字符串,如{},{}},⑻,{defg}等等。
(2)匹配一行僅由一個(gè)大寫(xiě)字母和一個(gè)數(shù)字組成的串,如A1,F8,Z2等。
(3)識(shí)別\r\n和除數(shù)字字符外的任何字符。
?由'和'括住的,中間由兩個(gè)‘'或者非'和\n組成的任意次的字符串。如‘'''
,a,,,bb','def',,,,,,,等等
270[Xx][0-9]*[a-fA-F]*|[0-9]+|(\T([a-zA-Z]|\\[Xx][0-7][0-7a-fA-F]|\\0[01][0-7
][0-7]|\\[a-z])\,)
28*[a-zA-ZJ+[0-9]*[a-zA-Z」*
29參考程序如下:
%(
Sinclude<stdio.h>
Sinclude<string.h>
^include<ctype.h>
#defineUPPER2
^defineW1HTE3
upper[A-Z]
%%
{upper}+returnUPPER;
\t|z,,z+returnWHTTE;
%%
main(intargc,char*argv[])
(
intc,i;
if(argc==2)
if((yyin=fopen(argv[1],vrz,))—NULL)
printf(〃can'topen%s\n/z,argv[l]);exit(0);
)
}
while((c=yylex())!=EOF)
(
if(c=2)
(
for(i=O;yytext[i];i++)
printf(〃%c”,tolower(yytext[i]));
yytext[0]=\000*;
)
if(c==3)
printf(〃”);
elseprintf(〃%s“,yytext);
}
return;
)
yywrap()
{
return;
)
30從略o
第四章
1.解:
(l)Sf(S)Z21|()Z21|[S]Z31|[]Z31
A->(S)Z22|()Z22|[S]Z32|[]Z32
B-(S)Z231()Z231[S]Z331口Z33
ZU-*e|AZ11|BZ21
Z12->AZ12|BZ22Z13->AZ13|BZ23
Z21-Z11Z22f£|Z12
Z23fzi3Z31fz21
Z32fz22Z33f£|Z23
(2)S->bZl11aZ21A->bZ121aZ22
Zll->£|AZ21Z12-AZ22Z21-SZ21Z22f£|SZ22
⑶S-(T)Z11|aZll|Z11S->(T)Z12|aZ12|Z12
ZU->£|Z21Z12fz22Z21-,SZ21Z22fe|,SZ22
?2.解:
SnAbBl,1.1(表示第1步,用產(chǎn)生式1.1推導(dǎo),以下同)
=CAbbB2,2.1
=>edAbbB3,4.1
=>edCAbbB4,2.1
=>ededAbbbB5,4.1
=>edaAbbbB5,4.2(不符合,改寫(xiě)第5步,用4.2)
=>edBfbbB4,2.2
=>edCSdfbbB5,3.1
=>ededSdfbbB6,4.1
=>edaSdfbbB6,4.2
=eddfbbB5,3.2
=>eddfbbCSd6,3.1
=>eddfbbedSd7,4.1
=eddfbbaSd7,4.2
=eddfbbd6,3.2
?3.解:以下Save表示savetoken_pointervalue,Restore表示restore
token_pointervalue<>
⑴文法沒(méi)有左遞歸。
FunctionP:boolean;
Begin
Save;
P:=true;
Ifnext_token=",begin”then
Ifnext_token=,d'then
Ifnext_token=,then
IfXthen
Ifnext_token=",end"thenreturn;
Restore;
P:二false;
End;
FunctionX:boolean;
Begin
Save;
X:=true;
Ifnexttoken='d'then
Ifnext_tokcn=,;'then
IfXthenreturn;
Restore;
Ifnext_token=,s'then
IfYthenreturn;
Restore;
X:=false;
End;
FunctionY:boolean;
Begin
Save;
Y=true;
Ifnext_tokcn=,then
Ifnext_token=,s'then
IfYthenreturn;
Restore;
End;
⑵消去文法左遞歸,并記為:
PfbeginSendS-ACA->V:二ECfifEthenS
E—E'E'-+VE'|£VT
FunctionP:boolean;
Begin
Save;
P:=true;
Ifnext_tokcn=",begin”then
IfSthen
Ifnext_token=",end"thenreturn;;
Restore;
P:=false;
End;
FunctionA:boolean;
Beign
Save;
A:=true;
IfVthen
Ifnext_token=,/:="then
IfEthenreturn;
Restore;
A:=flase;
End;
FunctionS:boolean;
Beign
Save;
S:=true;
IfAthenreturn;
Restore;
IfCthenreturn;
Restore;
S:=false;
End;
FunctionC:boolean;
Begin
Save;
C:=true;
Ifnext_token="/if〃then
IfEthen
Ifnext_token="/then"then
IfSthenreturn;
Restore;
C:二false;
End;
FunctionE:boolean;
Begin
Save;
E:=true;
IfVthen
IfEpthenreturn;
Restore;
E:=false;
End;
FunctionEp:boolean;
Being
Save;
ED:=true;
Ifnext_token=,+'then
IfVthen
IfE'thenreturn;
Return;
End;
?4.解:
?5.證:因?yàn)槭亲筮f歸文法,所以必存在左遞歸的非終結(jié)符A,及形如A-。|8的產(chǎn)
生式,且QT*Ad.
則first(Ad)Gfirst(B)W4),從而
first(a)Gfirsl(B)Wd),即文法不滿足LL(1)文法條件。得證。
?6.證:LL(1)文法的分析句子過(guò)程的每一步,永遠(yuǎn)只有唯一的分析動(dòng)作可進(jìn)行?,F(xiàn)
在,假設(shè)LL(1)文法G是二義性文法,則存在句子a,它有兩個(gè)不同的語(yǔ)法樹(shù)。即
存在著句子a有兩個(gè)不同的最左推導(dǎo)。從而可知,用LL(1)方法進(jìn)行句子a的分
析過(guò)程中的某步中,存在兩種不同的產(chǎn)生式替換,且均能正確進(jìn)行語(yǔ)法分析,即LL
(1)分析動(dòng)作存在不確定性。與LL(1)性質(zhì)矛盾。所以,G不是LL(1)文法。
?7.解:
(DD產(chǎn)生式兩個(gè)候選式fD和f的first集交集不為空,所以不是LL(1)的。
⑵此文法具有左遞歸性,據(jù)第5題結(jié)論,不是LL(1)的。
?8.解:
⑴消除左遞歸性,得:
S-*bZll|aZ21A-*bZ12|aZ22Zll-*bZll|eZ12fbz12
Z21fbz11|aZ21Z22fbz121az221e
消除無(wú)用產(chǎn)生式得:S->bZll|aZ21Zll->bZll|eZ21-bZll|aZ21
此文法已滿足LL(D文法的三個(gè)條件,
所以G'[S]:S->bZll|aZ21Zll->bZll|£Z21->bZll|aZ21
(2)G'文法的各非終結(jié)符的FIRST集和FOLLOW集:
產(chǎn)生式FIRST集FOLLOW集
S-bZll{#)
-aZ21{a}
Zll->bZll{#}
—£{£}
Z21fbz11{#}
-*aZ21{a}
L,(l)分析表為*
ab#
SaZ21bZll
ZllbZH£
Z21aZ21bZll
?9.解:
(1)
產(chǎn)生式first集follow集
S-*SaB
{#,a,c)
fbB
A->S
{c}
-*a(d
BfAc{a,b}{#,a,c}
⑵將S-SaB|bB改寫(xiě)為S-bBS',S'-aBS'g,可驗(yàn)證,新文法是LL(1)的。
?10.解;
?1)為方便書(shū)寫(xiě),記:〈布爾表達(dá)式>為人,<布爾因子>為13,〈布爾二次量>為(:,〈布
爾初等量》為D,原文法可以簡(jiǎn)化為:
A-AVB|BB-BAC|CC-?D|DD-*(A)|true|false,
顯然,文法含有左遞歸,消去后等價(jià)LL(1)文法為:
AfBA'A'-VBA'|coB-CB',
B'ACB'|3C-?D|DD->(A)|true|false
⑵略
?證:假設(shè)LL(1)文法G有形如B-aAAb的產(chǎn)生式,且AT+£及AT*ag,根據(jù)FIRST
集FOLLOW集的構(gòu)造算法可知,F(xiàn)IRSTS)中一切非£加到FOLLOWS)中,則aW
FOLLOW(A);又因?yàn)閍£FIRST(ag),所以兩集合相交非空,因此,G不是LL⑴文法;
與前提矛盾,假設(shè)不成立,得證。
?12o解:
(1)
SA(a)b
S==
A=<=<
(==?<
<
a>=<?
>
)>??
b?
不是簡(jiǎn)單優(yōu)先文法。
(2)
SRT()Aa,
S>=
R
T>
(<=?<<
)>>
A>>
a>>
,<=<<<
是簡(jiǎn)單優(yōu)先文法。
(3)
SR(a,)
S=?
R?
(=?
a?
,;?
)?
是簡(jiǎn)單優(yōu)先文法。
O首先消去無(wú)用產(chǎn)生式Z-E,Z-E+T
SZT#i()
S
Z二二
T>>
#=<?
T>>
(=(?
)>>
化簡(jiǎn)后的文法是簡(jiǎn)單優(yōu)先文法;
?13.解:
SA/A
S>>
A=<
<
/>>
a>>
A和/之間同時(shí)有關(guān)系二和〈,所以不是簡(jiǎn)單優(yōu)先文法;
?提示:分析教材中給出的算法,選擇一種適宜的表示給定文法的方法(盡量簡(jiǎn)單),
使得對(duì)文法的輸入比擬簡(jiǎn)單的同時(shí)(需要把輸入轉(zhuǎn)化為計(jì)算機(jī)語(yǔ)言表示,這種轉(zhuǎn)化應(yīng)
該盡量簡(jiǎn)單),能夠比擬簡(jiǎn)單地構(gòu)造3個(gè)根本關(guān)系矩陣(=,LEAD和LAST)。
?證明:設(shè)xjxj+1...xi是滿足條件xjTVxj=xj+l=...=xi>xi+l的最左子串。由二
關(guān)系的定義,可知Xjxj+l...Xi必出現(xiàn)在某產(chǎn)生式的右部中。又因xj-l<xj可知XJ-1
與xj不處于同一產(chǎn)生式,且xj是某右部的首符。同理,xi為某產(chǎn)生式的尾符號(hào)。
即存在產(chǎn)生式U-xjxj+l...xi設(shè)ST*aUb其中,aT*...xj-1,bT*xi+1...對(duì)于
aUb可構(gòu)造一語(yǔ)法樹(shù),并通過(guò)對(duì)其剪枝(歸約),直到U出現(xiàn)在句柄中。從而
xjxj+1...xi必為句柄。反之,假設(shè)xjxj+1...xi是句柄,由簡(jiǎn)單優(yōu)先關(guān)系的定義,
必滿足上述條件。
?解:為描述方便,用符號(hào)表示各非終結(jié)符:DX變量說(shuō)明》,LW變量表),V=〈變量>,T=<
類(lèi)型),a=VAR,則消去V,并采用分層法改寫(xiě)文法,得到:D->aW:T;W->LL-L,i|iT
-*rn|b|c
其全部簡(jiǎn)單優(yōu)先關(guān)系是:
DWTLair|n|b|c
D
W
T=
L>=
a=<<
:=<
,>>>=
i
r|n|b|c>
是簡(jiǎn)單優(yōu)先文法3
?證:設(shè)STna,我們對(duì)n用歸納法,證明a不含兩個(gè)非終結(jié)符相鄰情況。產(chǎn)1時(shí),STa,
即S-a是文法的產(chǎn)生式,根據(jù)定義,它不含上述情況。設(shè)"k時(shí),上述結(jié)論成立,
且設(shè)STkdAb,由歸納假設(shè),A兩側(cè)必為終結(jié)符。我們?cè)龠M(jìn)行一步推導(dǎo),得STkdAbTdub,
其中,A-u是文法中的產(chǎn)生式,由定義,u中不含兩個(gè)非終結(jié)符相鄰情況,從而dub
兩個(gè)非終結(jié)符相鄰情況。得證。
?證:由于G不是算符文法,G中至少有一個(gè)產(chǎn)生式,其右部含有兩個(gè)非終結(jié)符相鄰
的情況。不失一般性,設(shè)其形為U-xABy,%y£V*,由于文法不含無(wú)用產(chǎn)生式,則必
存在含有U的句型dUb,即存在推導(dǎo)ST*dUbTdMB_Fb.得證。
?文法為:E-*EtA|AAfA*T|A/T|TT->T+V|T-V|VV-*i|(E)
?20.解:
(1)構(gòu)造算符優(yōu)先矩陣:
i#
?
-<><>
?
>
*><X
、/
(?<=<
)?>>
I?>>
#?<<
(2)在-)、*)和(*,-)處有多重定義元素,不是算符優(yōu)先文法:
(3)改寫(xiě)方法:
?將E-E-T中的減號(hào)與I--P中的賦值運(yùn)算符強(qiáng)制規(guī)定優(yōu)先關(guān)系;
?或者將F-P中的賦值運(yùn)算符改為別的符號(hào)來(lái)表示;
?(1)證明:由設(shè)句型a二…Ua…中含a的短語(yǔ)不含U,即存在A,A=〉*ay,則a可歸約
為a=…UE…U*…UA…=b,b是G的一個(gè)句型,這與G是算符文法矛盾,所以,a中
含有a的短語(yǔ)必含U。
(2)的證明與(1)類(lèi)似,略。
?證:(1)對(duì)于a二…aU…是句型,必有ST*a(=…all…)T+…ab….即在歸約過(guò)程中,b
先于a被歸約,從而,a<b.對(duì)于⑵的情況類(lèi)似可以證明。
?證明略.
?證明略.
?證明略。
?證:(1)用反證法。設(shè)沒(méi)有短語(yǔ)包含b但是不包含a,則a,b一定同時(shí)位于某個(gè)短
語(yǔ)中,從而必使得a,b同時(shí)位于同一產(chǎn)生式的右部,所以a=b,與G是算符優(yōu)先文
法(二與〈不能并存)矛盾。
(2)、(3)類(lèi)似可證。
?證:只要證u中不含有除自身以外的素短語(yǔ)。設(shè)有這樣的素短語(yǔ)存在,即存在bx??4”
是素短語(yǔ),其中l(wèi)〈x或者y〈n之一成立。因素短語(yǔ)是短語(yǔ),根據(jù)短語(yǔ)定義,則必有:
l〈xTbxT〈bx或y<nTby>by+l,與bxT=bx及by=by+l矛盾,得證。
?提示:根據(jù)27題的結(jié)論,只要證u是句型。的短語(yǔ),根據(jù)二關(guān)系的定義容易知道u
是句型a的素短語(yǔ)。
?證:與28題的不同點(diǎn)只是aO,an+1可以是'#',不影響結(jié)論。
?證:設(shè)不能含有素短語(yǔ),則只能是含有短語(yǔ)(不能含有終結(jié)符號(hào)),則該短語(yǔ)只能
含有一個(gè)非終結(jié)符號(hào),否則不符合算符文法定義,得證。
?31.解:
(1)算符優(yōu)先矩陣:
+*fUi#
+>?<><>
*?<<><>
t?<<><>
(?<<=<
)?>>>
I?>>>
n?<<<
(2)用Floyd方法將優(yōu)先矩陣線性化得到得的優(yōu)先函數(shù)為:
+*t0i#
F3551771
G2466161
?32.解:用Floyd方法對(duì)的優(yōu)先矩陣構(gòu)造的優(yōu)先函數(shù)為:
zbMLa()
fl567747
gl654667
?33.解:
(1)優(yōu)先矩陣如下:
□a#
[>=
]>>
?
a<
?
n<?
(2)用Bell方法求優(yōu)先函數(shù)的過(guò)程如下:
[]a#
f5751
g5561
(3)顯然,文法不是算符優(yōu)先文法,所以不能線性化。
?略。
35解:
(1)識(shí)別全部活前綴的DFA如下:(以表格的形式來(lái)表示,很容易可以轉(zhuǎn)化為圖的形式,
本章中其余的題目也是采用這種形式表示。)
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
10S'-*?SSII
S-**aSba12
S一?aSc
S一?ab
11S'-S?
12S-*a?SbS13
Sfa?Sca12
Sfa?bb14
S-**aSb
Sf?aSc
S一?ab
13SfaS?bb15
S-*aS?cc16
14Sfab?
15S->aSb?
16S-aSc?
(2)識(shí)別全部活前綴的DFA如下:
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
10S'f?SSII
Sf?cAcI
S一?ccB■
11S,—S?
12S-*c?AA13
Sfc?cBc14
A一?cAaT5
A—?a
13S—cA?
14Sfcc?BB16
A-*c?AA15
B一?ccBc17
B--bb18
A-**cAa15
A-**a
15A—a?
16S-*ccB?
17Bfc-cBC19
卜一c?AA110
A一?cAa15
A-*?a
18B-*b?
19B-cc?BBIll
A—c?AA110
Bf?ccBc17
Bf?bb18
A一?cAa15
Af?a
110A-*cA?
IllBfccB?
所求的LR(O)工程標(biāo)準(zhǔn)族C={IO,II,-,111}
⑶
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
10S'-?SSII
S--aSSbc12
S--aSSSaT3
S-**c
IIS'-S?
12S-*c-
13S-*a?SSbS14
S-a?SSSc12
S-*?aSSba13
S->?aSSS
Sf?c
14S-*aS?SbS15
SfaS?SSc12
S--aSSba13
5一?aSSS
S一?c
15S-*aSS?bS17
S-*aSS-Sa13
S一?aSSbb16
S--aSSSc12
Sf?c
16S-aSSb?
17S-aSSS?
⑷
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
10S'f?sSII
S一?AAT2
Af-Aba13
A—?a
11S'fS?
12S-A?bT4
S-A?b
13A-*a?
14SfAb?
36W:
(1)是LR(O)文法,其SLR(l)分析表如下:FOLLOW(S)={#,b,c}
ACTIONGOTO
abcS
0S21
1ACC
2S2S43
3S5S6
4R3R3R3
5RIRIRI
6R2R2R2
(2)是LR(O)文法,其SLR(l)分析表如下:
FOLLOW(S)=FOLLOW(A)=FOLLOW(B)={#}
ACTIONGOTO
abcUSAB
0S21
1ACC
2S5S43
3RI
4S5S8S736
5R4
6R2
7S5S910
8R6
9S5S8S71011
10R3
11R5
⑶是LR(O)文法,其SLR(l)分析表如下:FOLLOW(S)={?,a,b,c)
ACTIONGOTO
abc#S
0S3S21
1ACC
2R3R3R3R3
3S3S24
4S3S25
5S3S6S27
6RIRIRIRI
7R2R2R2R2
(4)因?yàn)?2中含有沖突工程,所以不是LR(O)文法,其SLR(l)分析表如下:
FOLLOW(S)={#}n=。(所以可以用SLR⑴規(guī)則解決沖突),FOLLOW(A)={b,#}
ACTIONGOTO
abSA
0S312
1ACC
2S4RI
3R3R3
4R2R2
37解:
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
roS'一?sSII
Sf-(SR(12
S-**aa13
riS'fS?
12Sf(?SRS14
Sf?(SR(12
S一?aa13
13S-*a?
14S-*(S?Ra13
Sf?(SR(12
S一?aR15
Rf?,SR16
Rf?))17
15Sf(SR?
16Rf,?SRs18
Sf?(SR(12
S—?aa13
17Rf)?
18R-,S?R)17
Rf?,SR16
Rf?)R19
19Rf,SR?
LM(O)分析表如下:
ACTIONGOTO
a()nSR
0S3S21
1ACC
2S3S24
3R2R2R2R2R2
4S3S2S7S65
5RIRIRIRIRi
6S3S28
7R4R4R4R4R4
8S7S69
9R3R3R3R3R3
可見(jiàn)是LR(O)文法。
38解:
⑴
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
10S,一?SST1
Sf?Sabb12
Sf?bR
11S'fS?aacc
(沖突工程)SfS?ab13
12Si?RR14
R-?SS15
Rf?aa16
S一?Sabb12
Sf?bR
13SfSa?bb17
14S-bR-r2
T5R—S?a13
(沖突工程)SfS?ab
16R-*a?
17S-*Sab-
工程II,15同時(shí)具有移進(jìn)和歸約工程,對(duì)于15={RfS?,S-*
S-ab),follow(R)={a},follow(R)S{a}={a},所以SLR(l)規(guī)則不能解決沖突,從而該文
法不是SLR(1)文法。
⑵
狀態(tài)工程集經(jīng)過(guò)的符號(hào)到達(dá)的狀態(tài)
roS'一?sSII
S-**aSA
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 佛山科學(xué)技術(shù)學(xué)院《園林制圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 柳州城市職業(yè)學(xué)院《食品加工與保藏原理實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東外語(yǔ)外貿(mào)大學(xué)《語(yǔ)文教學(xué)設(shè)計(jì)藝術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中央司法警官學(xué)院《普通話語(yǔ)言與藝術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國(guó)地質(zhì)大學(xué)(北京)《科技文獻(xiàn)閱讀與寫(xiě)作》2023-2024學(xué)年第二學(xué)期期末試卷
- 星海音樂(lè)學(xué)院《工程招投標(biāo)與概預(yù)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧輕工職業(yè)學(xué)院《“智者生存”-現(xiàn)代災(zāi)難救援理念與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都東軟學(xué)院《軟件系統(tǒng)分析與設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 喀什職業(yè)技術(shù)學(xué)院《建筑材料》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶對(duì)外經(jīng)貿(mào)學(xué)院《當(dāng)代建筑》2023-2024學(xué)年第二學(xué)期期末試卷
- 《基于SWOT分析的企業(yè)營(yíng)銷(xiāo)策略研究(論文)6800字》
- 幼兒園繪本故事:《小熊不刷牙》 課件
- 公路路基施工規(guī)范
- 物質(zhì)安全數(shù)據(jù)表(MSDS)(車(chē)用尿素溶液)
- 華北電力大學(xué)ppt模板
- 清朝治理新疆地區(qū)系統(tǒng)性治理課件(16ppt+視頻)2022年新疆地方史讀本(中學(xué)版)
- 旅游資源分類(lèi)調(diào)查評(píng)價(jià)表 2017版
- 超聲波加工以及機(jī)床設(shè)計(jì)機(jī)械設(shè)計(jì)論文
- 綜合教學(xué)樓建筑結(jié)構(gòu)設(shè)計(jì)
- 員工分紅合作協(xié)議書(shū)54559
- 國(guó)家自然科學(xué)基金項(xiàng)目評(píng)審打分表.xls
評(píng)論
0/150
提交評(píng)論