蔣立源《編譯原理》西北工業(yè)大學(xué)出版社第3版課后答案.docx
《蔣立源《編譯原理》西北工業(yè)大學(xué)出版社第3版課后答案.docx》由會(huì)員分享,可在線閱讀,更多相關(guān)《蔣立源《編譯原理》西北工業(yè)大學(xué)出版社第3版課后答案.docx(98頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
《編譯原理》課后習(xí)題答案 第一章 1. 解:源程序是指以某種程序設(shè)計(jì)語(yǔ)言所編寫的程序。目標(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)鍵字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。上述關(guān)鍵字在C語(yǔ)言中均為保留字。 4. 解:C語(yǔ)言中括號(hào)有三種:{},[],()。其中,{}用于語(yǔ)句括號(hào);[]用于數(shù)組;()用于函數(shù)(定義與調(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,a1,...,a9,aa,...,az,...,zz,a00,a01,...,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){anbmcp|n,m,p≥0} 解:對(duì)應(yīng)文法為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} 解:對(duì)應(yīng)文法為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打頭的所有奇整數(shù)所組成的集合 解: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, J1|3|5|7|9},S) (6)所有偶數(shù)個(gè)0和偶數(shù)個(gè)1所組成的符號(hào)串集合 解:對(duì)應(yīng)文法為 S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B 3.描述語(yǔ)言特點(diǎn) (1)S→10S0S→aAA→bAA→a 解:本文法構(gòu)成的語(yǔ)言集為:L(G)={(10)nabma0n|n, m≥0}。 (2)S→SS S→1A0A→1A0A→ε 解:L(G)={1n10n11n20n2 … 1nm0nm |n1,n2,…,nm≥0;且n1,n2,…nm不全為零}該語(yǔ)言特點(diǎn)是:產(chǎn)生的句子中,0、1個(gè)數(shù)相同,并且若干相接的1后必然緊接數(shù)量相同連續(xù)的0。 (3)S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε 解:本文法構(gòu)成的語(yǔ)言集為:L(G)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特點(diǎn)是具有1p1n0n 或1n0n0q形式,進(jìn)一步,可知其具有形式1n0mn,m≥0,且n+m>0。 (4)S→bAdcA→AGSG→εA→a 解:可知,S=>…=>baSndc n≥0 該語(yǔ)言特點(diǎn)是:產(chǎn)生的句子中,是以ba開頭dc結(jié)尾的串,且ba、dc個(gè)數(shù)相同。 (5)S→aSSS→a 解:L(G)={a(2n-1)|n≥1}可知:奇數(shù)個(gè)a 4.解:此文法產(chǎn)生的語(yǔ)言是:以終結(jié)符a1 、a2 …an 為運(yùn)算對(duì)象,以∧、∨、~為運(yùn)算符,以[、]為分隔符的布爾表達(dá)式串 5. 5.1解:由于此文法包含以下規(guī)則:AA→e,所以此文法是0型文法。 5.2證明:略 6.解: (1)最左推導(dǎo): <程序>T<分程序>T<標(biāo)號(hào)>:<分程序>TL:<分程序> TL:<標(biāo)號(hào)>:<分程序> T L:L:<分程序> T L:L:<無(wú)標(biāo)號(hào)分程序> T L:L:<分程序首部>;<復(fù)合尾部> T L:L:<分程序首部>;<說(shuō)明>;<復(fù)合尾部> T L:L:begin<說(shuō)明>;<說(shuō)明>;<復(fù)合尾部> T L:L:begin d;<說(shuō)明>;<復(fù)合尾部> T L:L:begin d;d;<復(fù)合尾部> T L:L:begin d;d;<語(yǔ)句>;<復(fù)合尾部> T L:L:begin d;d;s;<復(fù)合尾部. T L:L:begin d;d;s;<語(yǔ)句> end T L:L:begin d;d;s;s end 最右推導(dǎo): <程序>T<分程序>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ù)合尾部> T<標(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)>:begin d;d;s;s;end T<標(biāo)號(hào)>: L:begin d;d;s;s;end TL:L:begin d;d;s;s;end (2)句子L:L:begin d;d;s;s end的相應(yīng)語(yǔ)法樹是: 7.解: aacb是文法G[S]中的句子,相應(yīng)語(yǔ)法樹是: 最右推導(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)…dc…這樣的句子。 (5)aacabcbcccaacbca不是文法G[S]中的句子 由(1)可知:aacb可歸約為S,由文法的產(chǎn)生式規(guī)則可知,終結(jié)符c后不可能跟非終結(jié)符S,所以不可能出現(xiàn)…caacb…這樣的句子。 8.證明:用歸納法于n,n=1時(shí),結(jié)論顯然成立。設(shè)n=k時(shí),對(duì)于α1α2...αkT*b,存在βi:i=1,2,..,k,αiT*bi成立,現(xiàn)在設(shè) α1α2... αkαk+1T*b,因文法是前后文無(wú)關(guān)的,所以α1α2... αk可推導(dǎo)出b的一個(gè)前綴b,αk+1可推導(dǎo)出b的一個(gè)后綴=b"(不妨稱為b k+1)。由歸納假設(shè),對(duì)于b,存在βi :i=1,2,..,k,b=β1β2...βk,使得 αiT*bi成立,另外,我們有αk+1T*b"(=b k+1)。即n=k+1時(shí)亦成立。證畢。 9.證明:(1)用反證法。假設(shè)α首符號(hào)為終結(jié)符時(shí),β的首符號(hào)為非終結(jié)符。即設(shè):α=aω;β=Aω’且 α=>*β。 由題意可知:α=aωT …T Aω’=β,由于文法是CFG,終結(jié)符a不可能被替換空串或非終結(jié)符,因此假設(shè)有誤。得證; (2)同(1),假設(shè):β的首符號(hào)為非終結(jié)符時(shí),α首符號(hào)為終結(jié)符。即設(shè):α=aω;β=Aω’且α=aωT …T Aω’=β,與(1)同理,得證。 10.證明:因?yàn)榇嬖诰渥樱篴bc,它對(duì)應(yīng)有兩個(gè)語(yǔ)法樹(或最右推導(dǎo)): STABTAbcTabc STDCTDcTabc 所以,本文法具有二義性。 11.解: (1) STABTAaSbTAacbTbAacbTbbAacbTbbaacb 上面推導(dǎo)中,下劃線部分為當(dāng)前句型的句柄。對(duì)應(yīng)的語(yǔ)法樹為: 全部的短語(yǔ): 第一個(gè)a (a1)是句子bbaacb相對(duì)于非終結(jié)符A (A1) (產(chǎn)生式A?a)的短語(yǔ)(直接短語(yǔ)); b1a1是句子bbaacb相對(duì)于非終結(jié)符A2的短語(yǔ); b2b1a1是句子bbaacb相對(duì)于非終結(jié)符A3的短語(yǔ); c是句子bbaacb相對(duì)于非終結(jié)符S1(產(chǎn)生式S?c)的短語(yǔ)(直接短語(yǔ)); a2cb3是句子bbaacb相對(duì)于非終結(jié)符B的短語(yǔ); b2b1a1a2cb3是句子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ǔ)法樹是: (3)解:iii*i+↑對(duì)應(yīng)的語(yǔ)法樹略。 最右推導(dǎo):E TT=>F=>FP↑T FE↑T FET+↑T FEF+↑T FEP+↑T FEi+↑ TFTi+↑T FTF*i+↑TFTP*i+↑T FTi*i+↑TFFi*i+↑T FPi*i+↑ TFii*i+↑T Pii*i+↑Tiii*i+↑ 12.證明: 充分性:當(dāng)前文法下的每一符號(hào)串僅有一個(gè)句柄和一個(gè)句柄產(chǎn)生式T對(duì)當(dāng)前符號(hào)串有唯一的最左歸約T對(duì)每一步推導(dǎo)都有唯一的最右推導(dǎo)T有唯一的語(yǔ)法樹。 必要性:有唯一的語(yǔ)法樹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| bc | dAe| de 15.消除下列文法中的無(wú)用產(chǎn)生式和單產(chǎn)生式 (1)消除后的產(chǎn)生式如下: S→aB | BC B→DB | b C→b D→b | DB (2)消除后的產(chǎn)生式如下: S→SA | SB |()|(S)|[] |[S] A→() |(S)|[]|[S] B[] |[S] (3)消除后的產(chǎn)生式如下: E→E+T | T*F | (E) | P↑F | i T→T*F | (E) | P↑F | i F→P↑F | (E) | i P→(E) | i 第三章 1.從略 2. 3 假設(shè)W:表示載狐貍過河,G:表示載山羊過河,C:表示載白菜過河 用到的狀態(tài)1:狐貍和山羊在左岸2:狐貍和白菜載左岸3:羊和白菜在左岸 4:狐貍和山羊在右岸5:狐貍和白菜在右岸 6:山羊和白菜在右岸F:全在右岸 4 證明:只須證明文法G:A→αB 或A→α (A,B∈VN, α∈VT+) 等價(jià)于G1:A→aB 或A→a (a∈VT+) G1的產(chǎn)生式中 A→aB, 則B也有B→bC ,C→cD …. 所以有 A →abc…B’,a,b,c…∈VT,B’∈VN 所以與G等價(jià)。 2)G的產(chǎn)生式A→αB,α∈VT+,因?yàn)棣潦亲址?,所以肯定存在著一個(gè)終結(jié)符a, 使A→aB 可見兩者等價(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→0A,B→1C,C→1|1F,C→1|0A,F→0|0E|1A,D→0B|1C,E→1C|0B (2) 最短輸入串011 (3) 任意接受的四個(gè)串 011,0110,0011,000011 (4) 任意以1打頭的串. 8 從略。 9 (2)相應(yīng)的3型文法 (i) S →aAS→bS A→aA A→bB B→a|aB B→b|bB (ii) S→aA|a S→bB B→aB | bB A→aB A→b|bA (iii) S→aA S→bB A→bA A→aC B→aB B→bC C→a|aC C→b|bC (iv) S→bS S→aA A→aC A→bB B→aB B→bC C→a|aC C→b|bC (3)用自然語(yǔ)言描述輸入串的特征 (i) 以任意個(gè)(包括0)b開頭,中間有任意個(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開頭,中間跟aa最后由一個(gè)a,b所組成的任意串結(jié)尾或者 以任意個(gè)(包括0)b開頭,中間跟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,S→Dd,D→C,B→Db,C→Bc,B→Ab,B→ε,A→a G2等價(jià)的右線性文法: S→dD,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ì)G1’文法,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)cbd來(lái)說(shuō),G1,G1’文法都不能產(chǎn)生。 11將右線性文法化為左線性文法的算法: o (1)對(duì)于G中每一個(gè)形如A→aB的產(chǎn)生式且A是開始符,將其變?yōu)锽→a,否則若A不是開始符,B→Aa; o (2)對(duì)于G中每一個(gè)形如A→a的產(chǎn)生式,將其變?yōu)镾→Aa 12 (1) 狀態(tài)矩陣是: 記[S]=q0 [B]=q1 [A B]=q2 [S A]=q3 ,最小化和確定化后如圖 (2)記 [S]=q0, [A]=q1,[B S]=q2 最小化和確定化后的狀態(tài)轉(zhuǎn)換圖如下 13 (1)將具有ε動(dòng)作的NFA確定化后,其狀態(tài)轉(zhuǎn)換圖如圖: 記 { S0,S1,S3}=q0 {S1}=q1 {S2 S3}=q2 {S3}=q3 (2) 記{S}=q0 {Z}=q1 {U R}=q2 {S X}=q3 {Y U R}=q4 {X S U}=q5 {Y U R Z}=q6 {Z S}=q7 14(1)從略 (2)化簡(jiǎn)后S0和S1作為一個(gè)狀態(tài),S5和S6作為一個(gè)狀態(tài)。 狀態(tài)轉(zhuǎn)換圖如圖 15從略。 16從略。 (1) r*表示的正規(guī)式集是{ε,r,rr,rrr,…} (ε|r)*表示的正規(guī)式集是{ε, εε,…}∪{r,rr,rrr,…}={ε,r,rr,rrr,…} ε|rr*表示的正規(guī)式集是{ε,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{ε,sr,srsr,srsrsr,…} ={ r,rsr,rsrsr,rsrsrsr,…} 所以兩者等價(jià)。 18 寫成方程組 S=aT+aS(1) B=cB+c(2) T=bT+bB(3) 所以B=c*cT=b*bc*c S=a*ab*bc*c G1: S=aA+B(1) B=cC+b(2) A=abS+bB (3) C=D(4) D=bB+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)*(cd|b)) G2: S=Aa+B (1) A=Cc+Bb (2) B=Bb+a(3) C=D+Bab(4) D=d(5) 可得 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- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
5 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 編譯原理 蔣立源 編譯 原理 西北 工業(yè) 大學(xué)出版社 課后 答案
鏈接地址:http://m.appdesigncorp.com/p-12810059.html