編譯原理習(xí)題與答案_第1頁
編譯原理習(xí)題與答案_第2頁
編譯原理習(xí)題與答案_第3頁
編譯原理習(xí)題與答案_第4頁
編譯原理習(xí)題與答案_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第二章2.2設(shè)有文法G[N]:N->D|ND D->0|1|…|9(1)G[N]定義的語言是什么?(2)請(qǐng)給出句子0123的最左推導(dǎo)和最右推導(dǎo)。NNDNDDNDDDDDDD0DDD01DD012D0123NNDN3ND3N23ND23N123D12301232021/3/1112.5證明下面的文法是二義性的。 S→iSeS|iS|i答:對(duì)句子iiiei對(duì)應(yīng)兩棵不同的語法樹第二章SiSSeiSiiSiSSeiSii2021/3/1122.9設(shè)有文法G[T]:T→T*F|F F→F?P|P P→(T)|i分析句型T*P?(T*F)的短語、直接短語和句柄答:句型T*P?(T*F)的語法樹:TTF*()T五棵子樹對(duì)應(yīng)五個(gè)短語T*P?(T*F),P?(T*F),P,(T*F),T*F兩層子樹(簡單子樹)的末端結(jié)點(diǎn)構(gòu)成直接短語兩棵兩層子樹對(duì)應(yīng)兩個(gè)直接短語:

P,T*F位于最左邊的兩層子樹的末端結(jié)點(diǎn)構(gòu)成句柄: P第二章PF?PTF*2021/3/113第三章3.1構(gòu)造正規(guī)式1(0|1)*101相應(yīng)的NFAX1B1C10D

YA(0|1)*X1B1C10D

YAεEε0|1X1B1C10D

YAεEε0,12021/3/114第三章3.1構(gòu)造正規(guī)式1(0|1)*101相應(yīng)的NFAX11B10C

YA(0|1)*0,1X11B10C

YAX1B1C10D

YAεEε0,12021/3/115第三章3.5給出下述文法所對(duì)應(yīng)的正規(guī)式。 G:S→aAA→bA|aB|bB→aA解:先由產(chǎn)生式得: B=aA將B代入A中得: A=bA|aaA|b=(b|aa)A|b利用規(guī)則(A->xA|y)得: A=(b|aa)*b將A代入S中得:S=a(b|aa)*b

即為所求正規(guī)式2021/3/1163.4給出文法G[S],構(gòu)造相應(yīng)最小的DFA。 G:S→aS|bA|bA→aS解:由文法到NFA的轉(zhuǎn)換有兩種方法:①由文法到正規(guī)式,再由正規(guī)式到NFA先由產(chǎn)生式得: A=aS將A代入S中得: S=aS|bA|b=aS|baS|b =(a|ba)S|b利用規(guī)則(A->xA|y)得: S=(a|ba)*b

文法G對(duì)應(yīng)的正規(guī)式為(a|ba)*b,其對(duì)應(yīng)的NFA的狀態(tài)轉(zhuǎn)換圖為:2021/3/117第三章3.4給出文法G[S],構(gòu)造相應(yīng)最小的DFA。G:S→aS|bA|bA→aS解:②由文法直接到NFA文法對(duì)應(yīng)的有自動(dòng)M=({S,A,T},{a,b},f,S,{T})其對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換圖為:產(chǎn)生式轉(zhuǎn)換函數(shù)S→aSf(S,a)=SS→bAf(S,b)=AS→bf(S,b)=TA→aSf(A,a)=S2021/3/118第三章正規(guī)式:(a|ba)*bTbSAaba產(chǎn)生式轉(zhuǎn)換函數(shù)S→aSf(S,a)=SS→bAf(S,b)=AS→bf(S,b)=TA→aSf(A,a)=S2021/3/119第三章將NFA確定化為DFA如右圖所示最小化:此狀態(tài)圖已經(jīng)為最簡了。TbSAaba{S}{S}{A,T}{A,T}{S}IbIaI0101001aba--2021/3/1110第三章1.指出與正規(guī)式匹配的串。a)(ab|b)*c與后面的那些串匹配?ababbcababcbabcaaabcb)ab*c*(a|b)c與后面的那些串匹配?acacacbbcabbcacabcaccc)(a|b)aa*(ba)*與后面的那些串匹配?babbabaaaaababa2021/3/1111第三章2.為下邊所描述的串寫正規(guī)式,字母表是{0,1}.a)以01結(jié)尾的所有串b)只包含一個(gè)0的所有串c)包含偶數(shù)個(gè)1但不含0的所有串d)包含偶數(shù)個(gè)1且含任意數(shù)目0的所有串e)包含01子串的所有串f)不包含01子串的所有串(0|1)*011*01*(11)*(0*10*10*)*(0|1)*01(0|1)*1*0*2021/3/1112第三章3.請(qǐng)描述下面正規(guī)式定義的串.字母表S={x,y}。a)x(x|y)*x 必須以x開頭和x結(jié)尾的串b)x*(yx+)*x* 每個(gè)y至少有一個(gè)x跟在后邊的串c)(x|y)*(xx|yy)(x|y)* 所有含兩個(gè)相繼的x或兩個(gè)相繼的y的串

2021/3/1113第三章4.指出哪些串是自動(dòng)機(jī)可接受的 xyxyxxyyyyxxyyxyxyxxy2021/3/1114第三章 5.將下圖所示的非確定有限自動(dòng)機(jī)(NFA)變換成等價(jià)的確定有限自動(dòng)機(jī)(DFA)。2021/3/1115第三章解:用子集法將NFA確定化,如下圖所示。

IIaIb{X}{1}{3}{2,3,Y}{3,Y}{1}-{3,4}{3}{2,3,4,Y}{2,3,Y}{2,3,Y}{2,3,Y}{3,4}{3,Y}{3,4,Y}{3,4}{3,4}{2,3,4,Y}{2,3,4,Y}{2,3,4,Y}{2,3,4,Y}{3,4,Y}{3,4,Y}ba01213425-336435557666767重新命名2021/3/1116上圖所對(duì)應(yīng)的DFA如下所示。

第三章ba01213425-3364355576667672021/3/1117對(duì)上圖的DFA進(jìn)行最小化。首先將狀態(tài)分為非終態(tài)集和終態(tài)集兩部分:{0,1,2,5}和{3,4,6,7}。由終態(tài)集可知,對(duì)于狀態(tài)3、6、7,無論輸入字符是a還是b的下一狀態(tài)均為終態(tài)集,而狀態(tài)4在輸入字符b的下一狀態(tài)落入非終態(tài)集,故將其化為分{0,1,2,5},{4},{3,6,7}第三章ba01213425-3364355576667672021/3/1118第三章對(duì)于非終態(tài)集,在輸入字符a、b后按其下一狀態(tài)落入的狀態(tài)集不同而最終劃分為{0},{1},{2},{5},{4},{3,6,7}按順序重新命名為0、1、2、3、4、5,得到最簡DFA如下圖所示。{0,1,2,5},{4},{3,6,7}ba01213425-3364355576667672021/3/11192021/3/11206.設(shè)有L(G)={a2n+1b2ma2p+1|

n≥0,p≥0,m≥1}。(1)給出描述該語言的正規(guī)表達(dá)式;(2)構(gòu)造識(shí)別該語言的確定有限自動(dòng)機(jī)(可直接用狀態(tài)圖形式給出)。解:(1)該語言對(duì)應(yīng)的正規(guī)式為a(aa)*bb(bb)*a(aa)*。(2)a(aa)*bb(bb)*a(aa)*正規(guī)表達(dá)式對(duì)應(yīng)的NFA如下圖所示。第三章2021/3/1121第三章正規(guī)表達(dá)式:a(aa)*bb(bb)*a(aa)*2021/3/1122IIaIb用子集法將上圖確定化,如圖所示。{X}{1}{2}{1}{1}{2}{3}{4}{5}{6}-{Y}-{Y}-{3}-{4}{5}{4}-重命名X1234Y5612--3-1Y6-Y45-4-ab{Y}{6}-2021/3/1123 重新命名后的狀態(tài)轉(zhuǎn)換矩陣可化簡為(可由最小化方法得到) {X,2}{1}{3,5}{4}{6}{Y}

按順序重新命名為0、1、2、3、4、5后得到最簡的DFA,如下圖所示。

X1234Y5612--3-1Y6-Y45-4-ab2021/3/1124第三章a(aa)*bb(bb)*a(aa)*Y1Xba345bbab6aa2aa510ba23abab4aa2021/3/1125 7.有一臺(tái)自動(dòng)售貨機(jī),接收1分和2分硬幣,出售3分錢一塊的硬糖。顧客每次向機(jī)器中投放≥3分的硬幣,便可得到一塊糖(注意:只給一塊并且不找錢)。 (1)寫出售貨機(jī)售糖的正規(guī)表達(dá)式; (2)構(gòu)造識(shí)別上述正規(guī)式的最簡DFA。

解:(1)設(shè)a=1,b=2,則售貨機(jī)售糖的正規(guī)表達(dá)式為 a(b|a(a|b))|b(a|b)。 (2)畫出與正規(guī)表達(dá)式a(b|a(a|b))|b(a|b)對(duì)應(yīng)的NFA,如圖所示。第三章2021/3/1126第三章正規(guī)表達(dá)式:a(b|a(a|b))|b(a|b)2021/3/1127IIaIb第三章用子集法將NFA確定化。

重新命名{Y}--{3}{Y}{Y}{2}{Y}{Y}{1}{3}{Y}{X}{1}{2}4--344244134012ab2021/3/1128由轉(zhuǎn)換矩陣可看出,非終態(tài)2和非終態(tài)3面對(duì)輸入符號(hào)a或b的下一狀態(tài)相同,故合并為一個(gè)狀態(tài)即最簡狀態(tài){0}、{1}、{2,3}、{4}。按順序重新命名為0、1、2、3,則得到最簡DFA,如下圖所示。第三章4--344244134012ab2021/3/11290312abbbaa--3233123012ab第三章2021/3/1130第四章作業(yè)4.3設(shè)有文法G[S]: S→A A→B|AiB B→C|B+CC→)A*|(

1)將文法G[S]改寫為LL(1)文法。2)求經(jīng)改寫后的文法的每個(gè)非終結(jié)符的FIRST集和FOLLOW集。3)構(gòu)造相應(yīng)的預(yù)測(cè)分析表。2021/3/1131第四章1)將文法G[S]改寫為LL(1)文法。文法G[S]為左遞歸文法,削去文法左遞歸后的文法為:S→A A→BA’A’→iBA’|εB→CB’B’→+CB’|εC→)A*|(

S→A A→B|AiBB→C|B+CC→)A*|(

2021/3/1132第四章1)將文法G[S]改寫為LL(1)文法。FIRST(C)={(,)} FIRST(B’)={+,ε}FIRST(B)={(,)} FIRST(A’)={i,ε}FIRST(A)={(,)} FIRST(S)={(,)}FOLLOW(S)={$} FOLLOW(A)={$,*}FOLLOW(A’)={$,*} FOLLOW(B)={i,$,*}FOLLOW(B’)={i,$,*} FOLLOW(C)={+,i,$,*}S→A A→BA’A’→iBA’|εB→CB’B’→+CB’|εC→)A*|(

2021/3/1133第四章SELECT(S→A)=FIRST(A)=((,))SELECT(A→BA’)=((,)) SELECT(A’→iBA’)={i}SELECT(A’→ε)=FOLLOW(A’)={$,*}SELECT(B→CB’)=((,))SELECT(B’→+CB’)={+} SELECT(B’→ε)={i,$,*}SELECT(C→)A*)={)} SELECT(C→()={(}因?yàn)橥环墙K結(jié)符的不同產(chǎn)生式的Select集交集為空,所以改寫后的文法是LL(1)文法。2)求經(jīng)改寫后的文法的每個(gè)非終結(jié)符的FIRST集和FOLLOW集。在上步中已經(jīng)求出。FIRST(C)={(,)} FIRST(B’)={+,ε}FIRST(B)={(,)} FIRST(A’)={i,ε}FIRST(A)={(,)} FIRST(S)={(,)}FOLLOW(S)={$} FOLLOW(A)={$,*}FOLLOW(A’)={$,*} FOLLOW(B)={i,$,*}FOLLOW(B’)={i,$,*} FOLLOW(C)={+,i,$,*}2021/3/11343)構(gòu)造相應(yīng)的預(yù)測(cè)分析表。B'→εB'→εC→)A*B’→+CB’B'→εC→(B’B→CB’B→CB’BA'→εA'→εA’→iBA’A’A→BA’A→BA’AS$*)+i(終極符號(hào)語法變量S→AS→ASELECT(S→A)=((,)) SELECT(A→BA’)=((,)) SELECT(A’→iBA’)={i} SELECT(A’→ε)={$,*}

SELECT(B→CB’)=((,)) SELECT(B’→+CB’)={+}SELECT(B’→ε)={i,$,*}

SELECT(C→)A*)={)}SELECT(C→()={(}C2021/3/1135第四章作業(yè)4.5設(shè)有表格結(jié)構(gòu)文法G[S]:S→a|∧|(T)T→T,S|S

1)計(jì)算文法的FIRSTVT集和LASTVT集。2)構(gòu)造其優(yōu)先關(guān)系表,并判斷其是否為算符優(yōu)先文法。3)計(jì)算其優(yōu)先函數(shù)。2021/3/1136第四章1)計(jì)算文法的FIRSTVT集和LASTVT集。FIRSTVT(S)={a,∧,(}FIRSTVT(T)={,,a,∧,(}LASTVT(S)={a,∧,)}LASTVT(T)={,,a,∧,)}2)構(gòu)造其優(yōu)先關(guān)系表,并判斷其是否為算符優(yōu)先文法。S→a|∧|(T)T→T,S|S∧=><<<$a(a,>>>>>>>><<<)>>>=<<<<($,)∧2021/3/1137第四章3)計(jì)算其優(yōu)先函數(shù)。用逐次加1法構(gòu)造優(yōu)先函數(shù)∧=><<<$a(a,>>>>>>>><<<)>>>=<<<<($,)∧1111111111迭代函數(shù)函數(shù)a∧,()fg0(初值)fg122213233313331344241fg2<,<<<2021/3/1138第四章例文法G[S]S→EE→aA|bBA→cA|dB→cB|d

1)構(gòu)造識(shí)別文法活前綴的DFA2)構(gòu)造其LR(0)分析表3)輸入串a(chǎn)abab是否為文法G定義的句子2021/3/11390:S→·EE→·aAE→·bB4:A→c·AA→·cAA→·dc5:B→c·BB→·cBB→·dc3:E→b·BB→·cBB→·db1:S→E·E2:E→a·AA→·cAA→·da11:B→d·d8:A→cA·Accd10:A→d·dd9:B→cB·B6:E→aA·A7:E→bB·B2021/3/1140LR(0)分析表為:s2s31accs4s106s5s117s4s108s5s11r1r1r1r1r19r2r2r2r2r2r3r3r3r3r3r5r5r5r5r5r4r4r4r4r4r6r6r6r6r6狀態(tài)ACTIONGOTOabcd#EAB01234567891011S→E E→aA|bBA→cA|dB→cB|d2021/3/1141(0)S→E (1)E→aА (2)E→bB (3)A→cА(4)A→d (5)B→cB (6)B→d輸入串bccd$的分析過程步驟狀態(tài)棧符號(hào)棧輸入串ACTIONGOTO1

2

3

4

56789

0$bccd$S303$bccd$S8038$bccd$S80388$bccd$S903889$bccd$$$$$r6110388$bccr511038$bcr5703$br210$accB(11)B(11)B7E12021/3/1142第四章8086/8088匯編語言對(duì)操作數(shù)域的檢查可以用LR分析表實(shí)現(xiàn)。設(shè)m代表存儲(chǔ)器,r代表寄存器,i代表立即數(shù);并且為了簡單起見,省去了關(guān)于m、r和i的產(chǎn)生式,暫且認(rèn)為m、r、i為終結(jié)符,則操作數(shù)域P的文法G[P]為 G[P]:P→m,r∣m,i∣r,r∣r,i∣r,m試構(gòu)造能夠正確識(shí)別操作數(shù)域的LR分析表。2021/3/1143(1)將文法G[S]拓廣為文法G'[S']:(0)S'→P(1)P→m,r(2)P→m,i(3)P→r,r(4)P→r,i(5)P→r,m第四章G[P]:P→m,r∣m,i∣r,r∣r,i∣r,m2021/3/1144文法G'[S']的DFA0:S→·PP→·m,rP→·m,iP→·r,rP→·r,iP→·r,m(0)S'→P (1)P→m,r (2)P→m,i(3)P→r,r (4)P→r,i (5)P→r,m1:S→P·P2:P→m·,rP→m·,i3:P→r·,rP→r·,iP→r·,m5:P→m,·rP→m,·i4:P→r,·rP→r,·iP→r,·m,mr,r6:P→m,r·i7:P→m,i·r8:P→r,r·i9:P→r,i·m10:P→r,m·2021/3/1145LR(0)分析表狀態(tài)ACTIONGOTOmri,$P0s2s3

1

1

acc

2

s5

3

s4

4s10s8s9

5

s6s7

6r1r1r1r1r1

7r2r2r2r2r2

8r3r3r3r3r3

9r4r4r4r4r4

10r5r5r5r5r5r12021/3/1146(0)S'→P (1)P→m,r (2)P→m,i(3)P→r,r (4)P→r,i (5)P→r,m輸入串m,i$的分析過程步驟狀態(tài)棧符號(hào)棧輸入串ACTIONGOTO1

2

3

4

5

0$m,i$S202$m,i$S5025$m,i$S70257$m,i$r20$$acc1P12021/3/1147例:請(qǐng)指出下圖中的LR分析表(a)、(b)、(c)分屬LR(0)、SLR(1)和LR(1)中的哪一種,并說明理由。2021/3/1148我們知道,LR(0)、SLR(1)和LR(1)分析表構(gòu)造的主要差別是構(gòu)造算法。其區(qū)別如下: (1)對(duì)LR(0)分析表來說,若項(xiàng)目A→α·屬于Ik(狀態(tài)),則對(duì)任何終結(jié)符a(包括$),置ACTION[k,a]為“用產(chǎn)生式A→α進(jìn)行歸約(A→α為第j個(gè)產(chǎn)生式)”,簡記為“rj”。表現(xiàn)在ACTION子表中,則是每個(gè)歸約狀態(tài)所在的行全部填滿“rj”;并且,同一行的“rj”其下標(biāo)j相同,而不同行的“rj”其下標(biāo)j是不一樣的。

2021/3/1149(2)對(duì)SLR(1)分析表來說,若項(xiàng)目A→α·屬于Ik,則對(duì)任何輸入符號(hào)a,僅當(dāng)a∈FOLLOW(A)時(shí)置ACTION[k,a]為“用產(chǎn)生式A→α進(jìn)行歸約(A→α為第j個(gè)產(chǎn)生式)”,簡記為“rj”。表現(xiàn)在ACTION子表中,則存在某個(gè)歸約狀態(tài)所在的行并不全部填滿rj,并且不同行的“rj”其下標(biāo)j不同。第四章2021/3/1150(3)對(duì)LR(1)來說,若項(xiàng)目[A→α·,a]屬于Ik(狀態(tài)),則置ACTION[k,a]為“用產(chǎn)生式A→α進(jìn)行歸約”,簡記為“rj”。LR(1)是在SLR(1)狀態(tài)(項(xiàng)目集)的基礎(chǔ)上,通過狀態(tài)分裂的辦法(即分裂成更多的項(xiàng)目集),使得LR分析器的每個(gè)狀態(tài)能夠確切地指出當(dāng)α后跟哪些終結(jié)符時(shí)才容許把α歸約為A。例如,假定[A→α·,a]屬于Ik(狀態(tài)),則置ACTION[k,a]欄目為rj(A→α為第j個(gè)產(chǎn)生式);而[A→α·,b]屬于Im(狀態(tài)),則同樣置ACTION[m,b]欄目為rj。表現(xiàn)在ACTION子表中,則在不同的行(即不同的狀態(tài))里有相同的rj存在。2021/3/1151因此,圖3-12(a)的分析表為LR(1)分析表(在不同行有相同的r2存在);圖3-12(b)為LR(0)分析表(有rj的行是每行都填滿了rj且同一行rj的j相同,不同行rj的j不同);而圖3-12(c)為LR(0)分析表(存在并不全部填滿rj的行,且不同行rj的j不同)。第四章2021/3/1152第五章1、表達(dá)式(┐A∨B)∧(C∨D)的逆波蘭表示為

。

2、有一語法制導(dǎo)翻譯如下所示:

S→bAb{print″1″} A→(B{print″2″} A→a{print″3″

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論