編譯原理復(fù)習(xí)提綱整理要點(diǎn)_第1頁
編譯原理復(fù)習(xí)提綱整理要點(diǎn)_第2頁
編譯原理復(fù)習(xí)提綱整理要點(diǎn)_第3頁
編譯原理復(fù)習(xí)提綱整理要點(diǎn)_第4頁
編譯原理復(fù)習(xí)提綱整理要點(diǎn)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、概述.編譯方式與解釋方式區(qū)別:是否生成目標(biāo)代碼.編譯程序總框架二、詞法分析.狀態(tài)轉(zhuǎn)換圖的功能:識別(接受)一定的符號串(單詞).狀態(tài)轉(zhuǎn)換圖的程序?qū)崿F(xiàn)的思路:為每個狀態(tài)結(jié)點(diǎn)都編寫一個子程序.字母表的概念:一般用匯表示.閉包的概念:閉包 V*中的每個字都是由 V中的字經(jīng)過若干次連接而成的.正則閉包V+的概念:是V上所有符號串的集合.匯*定義:表示匯上所有字的全體,空字也包括在其中. 匯唯字不包含,非 ., , 號之間的區(qū)別.所對應(yīng)的正規(guī)集為 .正規(guī)式與正規(guī)集的定義:知道如何用正規(guī)式表示一個正規(guī)集.簡述NFA和DFA的定義與區(qū)別.若M的某些結(jié)點(diǎn)既是初態(tài)結(jié)點(diǎn)又是終態(tài)結(jié)點(diǎn),或者存在一條從某初態(tài)結(jié)點(diǎn)到某個

2、終態(tài)結(jié)點(diǎn)的通路,那么空字 可為M所識別.正規(guī)式與優(yōu)先自動機(jī)的等價性.定理2.對于匯上的每一個正規(guī)式 V,存在一個匯上的 DFA M,使得L(M)=L(V). DFA M的化簡的概念和方法:終態(tài)和非終態(tài)是可區(qū)別的,因?yàn)榻K態(tài)可以讀出空字,而非終態(tài)不能讀出空字.課后作業(yè)一個例題.構(gòu)造一個DFA,它接受萬=x, y上所有倒數(shù)第二個字符為 y的字符串三、語法分析(1)基本定義.上下文無關(guān)文法的定義.句型、句子的概念.文法和語言的對應(yīng)關(guān)系,給出文法構(gòu)造語言,文法 G產(chǎn)生的句子的全體是該文法的語言.語法分析樹與二義性:判斷文法的二義性方法:如果一個文法含有二義性的句子(對應(yīng)兩棵不同 的語法樹),則稱該文法是

3、二義性文法.3型文法是正規(guī)文法、正則文法、線性文法. 2型文法也稱為稱為上下文無關(guān)文法.若一個文法是遞歸的,則由它產(chǎn)生的語言的句子個數(shù)是無限的(2)自上而下.文法左遞歸的定義.消除文法的左遞歸的方法:直接左遞歸.消除回溯的方法:提取公共左因子.遞歸下降分析法的概念,應(yīng)滿足什么條件?.遞歸下降法對文法的每個非終結(jié)符構(gòu)造一個相應(yīng)的子程序.預(yù)測分析法:給文法構(gòu)造預(yù)測分析表:消除左遞歸、消除回溯、 First集、Follow集。舉例子時, 便成 S-a|aS| (T)(3)自下而上.短語、直接短語的概念.句柄的概念(一個句型的最左直接短語).規(guī)范歸約(最左)、規(guī)范推導(dǎo)(最右)、規(guī)范句型.規(guī)范歸約的關(guān)鍵

4、問題是尋找句柄.在規(guī)范歸約中,可歸約串必出現(xiàn)在棧頂.算符文法、算符優(yōu)先文法的概念,如何判斷.構(gòu)造算符優(yōu)先關(guān)系表、Fisrtvt、lastvt集合,可不考慮#號.素短語:算符優(yōu)先歸約的關(guān)鍵問題是尋找最左素短語.算符優(yōu)先法尤其適用于表達(dá)式的分析.給出文法G (P)X - jYjY f kZ|iZ f Yid該文法是否為算符優(yōu)先文法?請根據(jù)FIRSTVT LASTVT1合構(gòu)造算符優(yōu)先關(guān)系表說明之.欲構(gòu)造行之有效的自上而下分析器,則必須消除文法中含有的左遞歸. LR分析法屬于自底向上分析方法.從文法出發(fā)構(gòu)造LR (0)分析表的步驟四、語義分析1.綜合屬性和繼承屬性概念五、中間代碼生成.中間代碼是一種面

5、向語法,易于翻譯成目標(biāo)代碼的代碼.后綴式(逆波蘭式)的概念.逆波蘭式中各運(yùn)算法出現(xiàn)的順序與實(shí)際運(yùn)算順序一致.后綴式與抽象語法樹(表達(dá)式樹)的關(guān)系. DAG的含義.四元式表示方法,聯(lián)系時通過臨時變量,可以翻譯各種語句.將賦值語句表示成后綴式和四元式六、代碼優(yōu)化.簡述代碼優(yōu)化的原則與優(yōu)化的級別,并列舉三種常用的優(yōu)化技術(shù).基本塊、流圖的概念,如何畫、節(jié)點(diǎn)對應(yīng)基本塊.局部優(yōu)化的方法,DAG是對基本塊進(jìn)行優(yōu)化的有效工具.不變運(yùn)算的代碼外提的條件.循環(huán)優(yōu)化中的強(qiáng)度削弱的含義七、目標(biāo)代碼生成1.編譯程序生成的目標(biāo)程序種類 (309)一:概述.編譯方式與解釋方式區(qū)別在于是否生成目標(biāo)代碼,編譯方式生成了目標(biāo)代碼

6、.編譯程序總框架目標(biāo)程序二:詞法分析.狀態(tài)轉(zhuǎn)換圖的功能:識別(接受)一定的符號串(單詞)0通過X弧可以轉(zhuǎn)換到狀態(tài)1,通過上圖是一個很簡單的狀態(tài)轉(zhuǎn)換圖。上圖代表:狀態(tài)丫弧可以轉(zhuǎn)換到狀態(tài) 2.字母表的概念:一個由有限元素組成的集合,每個元素稱為一個符號或一個字,一般用表示一個字母表例:E = a , b , c)元素:a, b, c字母表中的字可拼接在一起構(gòu)成一個序列,如aa,ab,bc,bbc等,符號的順序不同所代表的序列也不同。不包含任何字符的序列稱為空字,用來表示另外有幾個概念必須先了解:字(符號串)的連接設(shè)x和y是兩個字(符號串),則定義xy為他們的連接例:ab和ba連接是abba注:(1

7、)(空字)是連結(jié)運(yùn)算的恒等元素(2)字(符號串)的n次連接xn = xxxx規(guī)定X0 = X1= X, X2=XX, X3= XXX 集合的(連接)積 設(shè)U和V是兩個“字(符號串)的集合”, 則定義UV為他們的(連接)積UV=Xy|X U 且 y 6 V 例:設(shè) U=a, ab, V=b, ba, 則 UV=ab, aba, abb, abba 集合V的n次(連接)積記為:Vn = V V V V n個 規(guī)定 V0 = 例:設(shè)V=a, b,那么J= 1= a,b2=VV=aa,ab,ba,bb3=VVV=V2V=aaa,aba,baa,bba, aab,abb,bab,bbb.閉包的概念:設(shè)V

8、是一個字(符號串)的集合, 一 一、., 、 * 則V的閉包定義為V,江=Ju V1U V2U 注:閉包V*中的每個字都是由V中的字經(jīng)過有限次連接而成的正則閉包V+的定義為V+ = VV閉包與正則閉包的差別在于,閉包里是含有的,因?yàn)殚]包里有集合V0 ,而正則閉包由于在閉包的基礎(chǔ)上又連接了一個V,所以正則閉包里是沒有空字的。匯*定義:表示匯上所有字的全體,空字 e也包括在其中 匯+表示匯上所有字的全體,但不包括. , , 之間的區(qū)別(小題)空字:表不包含任示何字符的序列稱 :表示一個空集。:表示含有空字的集合.正規(guī)式與正規(guī)集的定義:我們可以把具有相同特征的字放在一起組成一個集合,即所謂的正規(guī)集

9、然后使用一種形式化的方法來表示正規(guī)集,即所謂的正規(guī)式 正規(guī)式是描述單詞結(jié)構(gòu)的一種形式; 正規(guī)集是該類單詞的全集。舉例對于下面的例子,大家應(yīng)1好好思考一下后面4個的含義,對做大題是很有幫助的。做大題時,題目通常會給你一個實(shí)際問題,你需要先把他要實(shí)現(xiàn)的功能抽象成一個正規(guī)集,正規(guī)式a ba|b ab(ajb)(alb)a*(a|bfba*再用正規(guī)式表達(dá)出來,才能繼續(xù)做后面的步驟。正規(guī)集ab的ab) aa.ab.ba.bb )e, a, aa,.任意個a的串, a, b, aa, ab,所有a,b組成的串b, ba, baa, baaa,afalfer(a|b)*(aa|bb)(a|bre所對應(yīng)的正規(guī)

10、集為&上以a為首的字的全體g上含有aa或bb的字的全體6.簡述有限自動機(jī)NFA和DFA的定義與區(qū)別NFA代表非確定的有限自動機(jī);DFA代表確定的有限自動機(jī)所謂的有限自動機(jī),其實(shí)他并不代表任何實(shí)體的機(jī)器,只是一種數(shù)學(xué)模型而已。就像函數(shù)、數(shù)列是一種數(shù)學(xué)模型一樣。函數(shù)通過函數(shù)表達(dá)式實(shí)現(xiàn)他的功能:你給他一個自變量,他能根據(jù)表達(dá)式求出因變量的值。而有限自動機(jī)是通過狀態(tài)轉(zhuǎn)換圖來實(shí)現(xiàn)功能,你給他一個初始狀態(tài)和一個輸入符號,他能根據(jù)你輸入的這個符號將原狀態(tài)轉(zhuǎn)換到另一個狀態(tài),用他來模擬計算機(jī)的識別功能。下面簡單介紹一下 DFA (確定的有限自動機(jī))的五元式表示法:(重要)定義:一個確定有限自動機(jī)(DFA) M是

11、一個五元式:M = (S,a, fFS,其中S是一個有限的狀態(tài)集合,它的每個元素我們稱為一個狀態(tài)2是一個有窮的輸入符號的字母表,它的每個元素我們稱為一 個輸入字符f是從SX版單值部分映射S0是S的一個元素,為初始狀態(tài),它是唯一的5)狀態(tài)集合F是終止?fàn)顟B(tài)的集合,它是S的子集(可空)一個非確定有限自動機(jī)(NFA) M是一個五元式M = (S, E, f, S0, F) ,其中S是一個有限的狀態(tài)集合,它的每個元素我們稱為一個狀態(tài)匯是一個有限的輸入符號的字母表,它的每個元素我們稱為一個輸入字符f是從SX匯*-2S的部分映射,其中,2s表示S的募集合(所有 S的子集組成的集合)(f是非單彳t的M是非確定

12、)狀態(tài)集合S0是初始狀態(tài)集合,它是S的子集狀態(tài)集合F是終止?fàn)顟B(tài)的集合,它是 S的子集注:DFA和NFA的區(qū)別在于(3)和(4),其他幾點(diǎn)都差不多,這是有可能出簡答題的大家要記住他們的區(qū)別和聯(lián)系7.DFA的識別功能對于匯*中任何字a ,如果存在一條從初態(tài)結(jié)點(diǎn)到某個終態(tài)結(jié)點(diǎn)的道路,這條路上所有 的標(biāo)識符連成的字等于 a ,則a可被DFA M所識別(接受,讀出)若M的某些結(jié)點(diǎn)既是初態(tài)結(jié)點(diǎn)又是終態(tài)結(jié)點(diǎn),或者存在一條從某初態(tài)結(jié)點(diǎn)到某個終態(tài)結(jié)點(diǎn)的通路,那么空字 可為M所識別8.狀態(tài)轉(zhuǎn)換圖的分裂規(guī)則(大題步驟)V2例子:(這里Y有兩個圈圈代表他是最終狀態(tài)的點(diǎn) _1劃到最后要求每條弧上都只有一個字母或者數(shù)字9

13、. CLOSURE 和Ia = e _CLOSURE(J)的構(gòu)造方法(大題步驟)這里先需要了解幾個定義我們假設(shè)有某個狀態(tài)集I,這個集合中含有不同的狀態(tài)。定義1 狀態(tài)集I的a弧轉(zhuǎn)換:move( I, a )是一個狀態(tài)集,是從 I中的狀態(tài)出發(fā)經(jīng)過一條a弧到達(dá)的狀態(tài)的全體定義2 狀態(tài)集I的交字)閉包: 、CLOSURE( I )是一個狀態(tài)集,由兩部分組成:狀態(tài)集I中的所有原狀態(tài)。J從I中的狀態(tài)出發(fā)經(jīng)過任意條弧,所能到達(dá)的狀態(tài)的全體。定義 3Ia = _CLOSURE( move( I, a )是一個狀態(tài)集。下面給出一個實(shí)例:例:有如下一個狀態(tài)轉(zhuǎn)換圖假定I=1, 2,求Ia = ?J=move(I,a

14、)=5,4,3Ia= e _CLOSURE(J) = 5,4,3,6,2,7,8(即先做a弧轉(zhuǎn)換,將求得的狀態(tài)再求空字閉包)本知識點(diǎn)旨在讓大家掌握在知道了I這個狀態(tài)集合后,怎樣求 Ia.如何用子集法將非確定的有限自動機(jī)確定化(大題步驟)方法:先畫一張表IIaIb& _CLOSURE(SA0)BCBDECFG.這張表的首行上首列上固定是大寫字母I.表格后面有幾列,取決于這個有限自動機(jī)的輸入符號數(shù)量,有幾個輸入符號就有幾列, 這里假設(shè)Ia Ib 的下標(biāo)a b代表這個有限自動機(jī)的輸入符號.第二行的第一列也是固定的,S0代表的是這個有限自動機(jī)的初始狀態(tài),即求S0的空字閉包,我們假設(shè)求出來的狀態(tài)集合是A

15、.將A所對應(yīng)的Ia Ib分別求出來,我們假設(shè)是 B和C.如果B和C都分別于A不同,需要將B, C作為新的狀態(tài)集合加入到第一列中.繼續(xù)求出B和C所對應(yīng)的Ia Ib,再檢驗(yàn):對于DEFG這四個狀態(tài)集合,有沒有與ABC 是不同的,如果有,加入到第一列的下面,再繼續(xù)計算,如果與前面的ABC相同就不再需要加入了。.按照這樣的方法一直進(jìn)行下去,知道第一列不再有新的狀態(tài)集合加入了,這個表就構(gòu) 造好了。.再畫一張表,與上面的表相對應(yīng)Sab01213424332149.對于上面這種表的構(gòu)造方法很簡單,大家也可以不另外畫表,而直接標(biāo)在原來的表中這種表來源是,在原來表的第一列上分別表上S01234 一,a和b不變,

16、然后按照第一列中數(shù)字所對應(yīng)的狀態(tài)集,依次對應(yīng)在后面的列上標(biāo)上相應(yīng)數(shù)字。例如第一列中 B對應(yīng)C對應(yīng)2,那么將第二列第二行中的 B也標(biāo)上1,第三列第二行中的 C標(biāo)上2,等等。 10.畫出下面的這個表或在原表中標(biāo)好后,就可以按照這個表畫出狀態(tài)轉(zhuǎn)換圖了,例如,0狀態(tài)通過a弧轉(zhuǎn)換成1狀態(tài),通過b弧轉(zhuǎn)換成2狀態(tài);1狀態(tài)通過a弧轉(zhuǎn)換成3狀態(tài), 通過b弧轉(zhuǎn)成4狀態(tài),等等。畫出這個狀態(tài)轉(zhuǎn)換圖后,就完成了一個非確定有限自動機(jī)的確定化。.有限自動機(jī)DFA的化簡整體的思路如下:.將第10步中得到的已經(jīng)確定的 DFA中的所有狀態(tài)分為兩組,一組為終態(tài)節(jié)點(diǎn),一組為非終態(tài) 節(jié)點(diǎn)。需要補(bǔ)充的是,在上一步構(gòu)造的表格中,s那一列的

17、節(jié)點(diǎn)哪些是終態(tài)哪些是非終態(tài)呢?這需要看你最初構(gòu)造的正規(guī)式中的哪個是終態(tài)節(jié)點(diǎn)了。例如在下面的12中,丫為終態(tài)節(jié)點(diǎn),那么在以上的表格中只要是含有 Y元素的狀態(tài)集合都將成為終態(tài)集。.將每個分組檢驗(yàn),看他們是否還能分割,檢驗(yàn)的方法實(shí)在難以用文字描述清楚,請大家看下面 的實(shí)際例題,自己領(lǐng)會。.每個分組都不能再分割后,若還含有大于2個元素的分組,則這個分組中的所有狀態(tài)都是等價 的,可以用其中的一個代替他們,代替的方法是:假設(shè)用狀態(tài)1代替狀態(tài)2,則把狀態(tài)2及其引出去的弧全部刪去,并把原來指向狀態(tài)2的弧指向狀態(tài)1下面是老師復(fù)習(xí)PPT上的一個例子,這是一個較為復(fù)雜的例子,可能會看不懂,大家多問一問 周圍會的同學(xué)

18、,期末考試時,肯定不會出這么復(fù)雜,通常在將終態(tài)節(jié)點(diǎn)和非終態(tài)節(jié)點(diǎn)區(qū)分開后, 剩下的就已經(jīng)快分好了, 所以大家不用太擔(dān)心,化簡也是有可能不考察的,大家看清題目要求。例:把DFA M,進(jìn)行化簡解:r i ji)o把M狀態(tài)集分為兩組:終態(tài)結(jié)點(diǎn)5非終態(tài)結(jié)點(diǎn)0, 1, 2, 3, 4)、考察0, 1, 2, 3, 4)因?yàn)椋?, 1, 2, 3, 4。= 2,4 c0,1,2,3,4 J=2,40, 1, 2, 3, 4i = 1,3,520,2,3,4 j=1,3,5 所以,(0, 1, 2, 3, 4可再分,分成0,1,2,3和4 考察(0, 1, 2,3 因?yàn)椋?,1,2,3)0= 2, 4a0,

19、1, 2, 3J=2,4所以,0,1,2,3必可再分 看圖,把0,123分割為0,1,2和3考察(0,1,2因?yàn)椋?,1,20=2= 0,1,2J=20,1,2b =1,3仁0,1,2J=1,3所以,0,1,2必可再分看圖,把0,1,2分割為0, 1,2考察1,2因?yàn)椋?,2。= 2 c 1,2J=21,2產(chǎn)3u3J=3所以1,2不可再分所以,最終把M分割為0, 1,2, 3, 4 , 5用狀態(tài)2代替狀態(tài)1,把引向狀態(tài)1的箭弧都引向狀態(tài)2, 把1消去,得到一個DFAM,2010、01例題:構(gòu)造一個 DFA,它接受=x , y上所有倒數(shù)第二個字符為y的字符串說明一下這道題的解題思路和步驟,希望大

20、家能真正明白整個解題的過程,讓大家真正明白這樣的一道大題是應(yīng)該怎么做的 .上面這道題的分析思路是.根據(jù)他所描述的功能,構(gòu)造出一個正規(guī)式,正規(guī)式先給大家:(x|y) *y (x|y)(其實(shí)對于這樣的大題最關(guān)鍵就是構(gòu)造對正規(guī)式,大家一定把老師最后的PPT上所有的例題是如何構(gòu)造正規(guī)式的都記下來!這一步做不出來后面的都沒分了?。?構(gòu)造一個初始狀態(tài) X和和最終狀態(tài)Y,將正規(guī)式寫在他們的轉(zhuǎn)換弧上。.按照第8點(diǎn)中的分裂規(guī)則對他進(jìn)行分裂,分裂直到每一條轉(zhuǎn)換弧上都只含有一個字符.分裂結(jié)束得到的一個狀態(tài)轉(zhuǎn)換圖實(shí)際上就是一個NFA (非確定的有限自動機(jī)).在掌握了第9點(diǎn)知識的前提下,就可以按照第 10點(diǎn)說的步驟,將

21、求得的 NFA確定化.得到確定化之后的狀態(tài)轉(zhuǎn)換圖,剩下的事情就是化簡了。也就是第11點(diǎn)當(dāng)中的只是看到這里強(qiáng)烈建議大家先動筆試一試上面這道例題,相信只要你認(rèn)真學(xué)習(xí)了前面的知識,做出來 是沒有問題的,祝大家成功!三:語法分析(1)基本定義.上下文無關(guān)文法的定義文法:是描述語言的語法結(jié)構(gòu)的形式規(guī)則(或稱語法規(guī)則)上下文無關(guān)文法概念:它所定義的語法范疇(或語法單位)是完全獨(dú)立于這種范疇可能出現(xiàn)的環(huán)境的(與它所在的上下文無關(guān))(重要!以下的概念一定要理解熟知!)上下文無關(guān)文法 G可定義為一個四元式 (VVn, S, P)Vt是終結(jié)符號集合,它的每個元素稱為終結(jié)符號,用小寫字母表示。Vn是非終結(jié)符號集合,

22、它的每個元素稱為非終結(jié)符號,用大寫字母表示。S是一個開始符號,是一個非終結(jié)符,至少在一個產(chǎn)生式作為左部出現(xiàn)P是一個產(chǎn)生式的集合,它的每個元素稱為一條產(chǎn)生式,可以表示為:P- a| b,其中P是非終結(jié)符,叫做產(chǎn)生式的左部,a和b分別叫做這個產(chǎn)生式的一個侯選式 ,他們既可以是終結(jié)符,也 可以是非終結(jié)符,也可以是他們的組合。.句型、句子的概念(小題)t設(shè)G是一個文法,S是它的開始符號,如果 S a,目. a6 (VnV Vt) 貝!a G, .i , _ _k一 一 _一*的一個句型;如果 S二 a,且aC Vt ,則稱a是G的一個句子;句子實(shí)際上是僅含 有終結(jié)符號的句型.文法和語言的對應(yīng)關(guān)系:(了

23、解)一個文法G所產(chǎn)生的句子的全體就是一個語言。給定一個文法,就能從結(jié)構(gòu)上唯一確 定其語言;給定一種語言,能找到其文法,但該文法不是唯一的.語法分析樹與二義性:(了解)用一棵樹來表示句型的推導(dǎo),簡稱語法樹。若一個文法的一個句子對應(yīng)兩棵不同的 語法樹,則稱該句子是二義性句子如果一個文法含有二義性的句子,則稱該文法是 二義性文法。(5,6,7均可能出填空判斷選擇等小題)3型文法是正規(guī)文法、正則文法、線性文法(用于詞法分析)2型文法也稱為上下文無關(guān)文法(用于語法分析)1型文法也稱為上下文有關(guān)文法若一個文法是遞歸的,則由它產(chǎn)生的語言的句子個數(shù)是無限的。(2)自上而下文法左遞歸的定義一個文法中如果存在某個

24、產(chǎn)生式PPa(即有某個侯選式的最左邊的符號是這個產(chǎn)生式左部非終結(jié)符本身),則此文法是有左遞歸的。消除文法的左遞歸的方法:只要求消除直接左遞歸,方法見下面的例子。設(shè)有產(chǎn)生式Pa | B其中0不以P開頭,a不為,那么,我彳門可以把 P的規(guī)則改為如下的非直接左遞歸形式:Pf B PP - a P | e這樣就消除了 Pa | B這個式子的左遞歸。(提示:在做題時,要把整個文法的每個產(chǎn)生式都逐一檢驗(yàn),有時含有左遞歸的產(chǎn)生式是不只一個的,需要逐個消除。)First集合Follow集的構(gòu)造方法(較抽象)First集的構(gòu)造方法:對于任意一個符號 X,構(gòu)造他的frist集的方法是:(1)若 XCVt (終結(jié)符

25、),則 FIRST(X)=X.(2)若XCVn (非終結(jié)符),且有產(chǎn)生式 X-a(小寫a代表任意一個終結(jié)符號,他是侯選式左邊的第一個字符 ),則把a(bǔ)加入到FIRST(XW;若X- 也是一條產(chǎn)生式,則把 也加到 FIRST(X 片。若有產(chǎn)生式 X- Y(大寫Y代表任意一個非終結(jié)符號,他曷侯詵式左邊的第一個字符), 則把FIRST(Y滬所有非元素都加到FIRST(XW;FOLLOW集的構(gòu)造方法:(書上的表述很難懂,這里我用自己的水話表述)(1)對于文法中給定的開始符號S,置#與FOLLOW(S卉;(2)將所有產(chǎn)生式侯選式中的非終結(jié)符都標(biāo)出來,并從前往后挨個檢查為方便討論,我們假設(shè)A- aBC是一個

26、產(chǎn)生式,(這里B和C代表非終結(jié)符,a代表終結(jié)符).先檢驗(yàn)這個非終結(jié)符的右邊還有沒有別的符號(不管這個符號是終結(jié)符還是非終結(jié)符),在這,B是我們檢查的第一個非終結(jié)符,它右邊是有符號C的,如果檢驗(yàn)到的某個非終結(jié)符右邊有別的符號,例如這里的B,那么檢驗(yàn)他右邊符號的FIRST集合,這里是FIRST( C)。先將FIRST( C)中非空字的元素加入到 FOLLOW(B井;注意,如果FIRST (C)中含有空字 ,還要把FOLLOW (A)中的元素也加入到 FOLLOW ( B)中(如果不含空字 就不這么做).如果檢驗(yàn)到的終結(jié)符右邊沒有別的符號了,例如這里的C,那么,直接將 FOLLOW (A)中的元素加

27、入到 FOLLOW ( C)中。在這里,a的存在是無關(guān)痛癢的。也就是說,我們在檢驗(yàn)?zāi)硞€非終結(jié)符時只要看他的右邊就好了,左邊有沒有有什么都是無所謂的。大家按照上面的方法,將每一個侯選式中的非終結(jié)符都這樣檢查一遍,最后就能求得所有非終結(jié)符的FOLLOW集了.遞歸下降分析法的概念,應(yīng)滿足什么條件?大家不必知道概念,只須知道能夠用遞歸下降分析法分析的文法是LL (1)文法,要成為這種文法,必須滿足以下條件:(1)文法不含左遞歸(在這里提一句:欲構(gòu)造行之有效的自上而下分析器,則必須消除文法中含有的左遞歸,請大家記住這句話,有可能考 小題)(2)對于文法中每一個非終結(jié)符A的各個產(chǎn)生式的候選式的FIRST集

28、兩兩不相交。即,若A-卻 0C2| rtX則 FIRSTQ i)n FIRSTS 戶(i w)j(3)對于文法中的每個非終結(jié)符A,若它的某個候選式的FIRST集中包含則必須滿足FIRST(Ap FOLLOW(A)R.預(yù)測分析表的構(gòu)造構(gòu)造預(yù)測分析表的算法是:(這里需要先畫一張表格,代入題中很容易理解,光看步驟比較抽象,大家可以看第 13中的大題,邊看邊理解)(1)先畫一張表格,表的首行是文法中所有的終結(jié)符號,首列是所有產(chǎn)生式的左部)(2)檢驗(yàn)文法中每個產(chǎn)生式的每一個侯選式。我們先假設(shè)這里有一個產(chǎn)生式為A- a |b ,若FIRST(a )中含有終結(jié)符 a,則把“ Af a ”寫入(1)中構(gòu)造的表

29、中的 MA,a項(xiàng)(MA,a 表示以產(chǎn)生式左部 A為行,終結(jié)符a為列所對應(yīng)的表格);若FIRST(b中含有終結(jié)符0 , 則把“A- 0 ”寫入(1)中構(gòu)造的表中的 MA, 0項(xiàng)(MA, 0表示以產(chǎn)生式左部 A為行, 終結(jié)符B為列所對應(yīng)的表格);按照這樣的方法依次執(zhí)行下去,直到把每一個產(chǎn)生式的 每一個侯選式都檢驗(yàn)完并對應(yīng)填入表格。(3)特別地,若某個產(chǎn)生式侯選式的FIRST集中包含有空子 :我們接著引用上例進(jìn)行說明。在A-a|b中,假設(shè)FIRSTS )里還包含有 ,則找出FOLLOW(A沖的所有終結(jié)符元素, 我們假設(shè)其中一個是 B,那么把“ A- a ”寫入MA, 0 中,按照此方法將 FOLLO

30、W(A)中的 所有元素逐一檢驗(yàn),并將“A- a ”填入對應(yīng)的表格中去即可。.實(shí)際大題給出一個文法,要你最終構(gòu)造出他的預(yù)測分析表,整個過程的步驟如下:1.消除文法左遞歸2.構(gòu)造每個產(chǎn)生式左部(即-符號左邊的非終結(jié)符)的 First集、Follow集3.構(gòu)造每個產(chǎn)生式的每個侯選式的first集4.證明文法是一個 LL(1)文法5.構(gòu)造出預(yù)測分析表。在812點(diǎn)當(dāng)中,已經(jīng)介紹了這些步驟的實(shí)現(xiàn)方法,以下是老師給的復(fù)習(xí)用的PPT上的例題,我對步驟做了一些補(bǔ)充說明例:設(shè)有文法 G(Vt, Vn, S, P),其中 VT=a,A ,(,); Vn=S,T; S = SP:S - a | A | (T)T f

31、T,S | S(1)消除其產(chǎn)生式的左遞歸.(2)經(jīng)改寫后的文法是否是LL(1)的?給出它的預(yù)測分析表解:(1)消除其產(chǎn)生式的直接左遞歸對于T - T,S | S (按照第9點(diǎn)中介紹的知識,這里P=T, a=,S , ”S所以變成TfSTT - ,ST,| 所以文法改寫后變?yōu)椋篠 - a | A | (T) Tf STT - ,ST,| 經(jīng)改寫后的文法是否是LL(1)的?給出它的預(yù)測分析表。(這里的整體思路是按照第十點(diǎn)的知識構(gòu)造出相應(yīng)的FIRST集和FOLLOW集再按照第H一點(diǎn)的知識證明他是一個 LL (1)文法,最后再用第十二點(diǎn)中知識求出預(yù)測分析表)解:(先求所有產(chǎn)生式左部那個非終結(jié)符號的FI

32、RST集,用的是第十點(diǎn)中關(guān)于FIRST集求法的(2)中的方法) TOC o 1-5 h z FIRST( S )= a A (;FIRST( T )= a A (;FIRST( T )=;(緊接著求所有的侯選式的FIRSTS,方法是:如果這個侯選式的開頭字符是終結(jié)符,也就是某個小寫字母,又或者是空字,那么這個侯選式的FIRST集就是那個小寫字母或者空字;如果侯選式開頭是非終結(jié)符,就將那個非終結(jié)符的FIRST集中除空字以外的元素變?yōu)楹钸x式本身FIRST(ST 掃八FIRST(,ST )=FIRST(a)= aFIRST公尸AFIRST(T)= (FIRST( ) = FIRST集的元素)(; (

33、S的FIRST集中除空字以外的元素)(,本身)(a本身)(接著求所有產(chǎn)生式左部那個非終結(jié)符號的(沐身)FOLLOW集,方法在第十點(diǎn)中已經(jīng)說得很清楚了,這里我再說明一下。大家做題時,可以在所有的侯選式中把出現(xiàn)非終結(jié)符的位置都標(biāo)出來,然后挨個按照規(guī)則檢查,就不會錯了。有時在求某個非終結(jié)符的FOLLOW集時,發(fā)現(xiàn)其中還包含著其他非終結(jié)符FOLLOW集的元素,但那個FOLLOW集卻還沒有求出來,此時可先記下來,接著往下做,做到最后一定會找到某個終結(jié)符的FOLLOW集時與其他 TOC o 1-5 h z 非終結(jié)符是無關(guān)的,把他寫出來后,再回頭把前面空出來的填完就好了。)FOLLOW(T)=);FOLLO

34、W (T )= );FOLLOW (S)= # ,;完事之后要證明他是LL (1)文法,用到第十一點(diǎn)中的知識。證明:S - a | A | (T)Tf ST丁 f ,ST,| (1)文法已經(jīng)消除了左遞歸FIRST(a) n FIRST() AFIRST(T)=apA (=FIRST(,ST FIRSTIU ):(3)在丁 - ,ST中號FIRST( ) = ,里面含有空字,所以需要檢驗(yàn):FIRST( T ) n FOLLOW (T, )= A=步接下來構(gòu)造他的預(yù)測分析表aA()#SSaS f AS - (T)TTfSTTf STTfSTT,T f eT f ,ST(3)自下而上.短語、直接短語

35、的概念在這里請大家了解一下歸約的概念:歸約是指根據(jù)文法的產(chǎn)生式規(guī)則,把產(chǎn)生式的右部替換成左部符號。實(shí)際上,我們在(2)中研究的自上而下是從產(chǎn)生式左部推導(dǎo)到右部的過程。也就是說,推導(dǎo)和歸約其實(shí)是兩個相逆的過程.句柄的概念一個句型的 最左直接短語 是這個句型的句柄.規(guī)范歸約、規(guī)范推導(dǎo)、規(guī)范句型規(guī)范歸約(最左歸約)是一個關(guān)于 規(guī)范推導(dǎo)(最右推導(dǎo))的逆過程(提示:在(2)自上而下的討論中,事實(shí)上我們一直使用的是最左推導(dǎo),即總是先把侯選式最左邊的非終結(jié)符推導(dǎo)為終結(jié)符,請大家回想FIRST集的求法,事實(shí)上就是最左推導(dǎo)的過程)由規(guī)范推導(dǎo)推出的句型稱為規(guī)范句型。由于規(guī)范句型是由規(guī)范推導(dǎo)推出的句型,故該句型的句

36、柄右邊只含有終結(jié)符號(因?yàn)樗亲钣彝茖?dǎo),右邊的非終結(jié)符一定被推導(dǎo)成終結(jié)符了)規(guī)范歸約的關(guān)鍵問題是尋找句柄在規(guī)范歸約中,可歸約串必出現(xiàn)在棧頂.算符文法、算符優(yōu)先文法的概念,如何判斷一個文法,如果它的任一產(chǎn)生式的右部都不含兩個相繼(并列)的非終結(jié)符,即不含如下形式的產(chǎn)生式右部:QR 則我們稱該文法為算符文法,也稱 OG文法算符之間的優(yōu)先關(guān)系表示:(重要). a =. b當(dāng)且僅當(dāng)文法 G中含有形如 Pfab或PfaQb的產(chǎn)生式;.a b或R-Qb;.a.b當(dāng)且僅當(dāng) G中含有形如 Pf Rb的產(chǎn)生式,而R-a或R-aQ(這里大家先不必記住三種情況需要滿足的條件,在后面求FIRSTV有口 LASTVT集

37、合時大家自然會看到是和這些規(guī)則對應(yīng)上的。這里需要注意的是, 算符之間的優(yōu)先級關(guān)系有三種,請注意=.這三個符號右下角的那一點(diǎn)是不能少的,(正確的寫法應(yīng)該是將點(diǎn)寫在那三個符號的里面,word不好弄,大家可以看看課本上的正確寫法)這不同等于數(shù)學(xué)上簡單的等于大于和小于,出現(xiàn)a.a的情況都是可能的,而且即使有 a .a,這看起來很荒謬,但是做題時卻非常重要,這里大家一定要記住,以后如果求得算符之間的優(yōu)先關(guān)系是 a .a,否則就全錯了,切記切記?。┤绻粋€算符文法 G中的任何終結(jié)符對(a, b)至多只滿足下述三關(guān)系之一:a=.ba.b a.b則稱G是一個算符優(yōu)先文法(OPG文法)。如果有某兩個算符之間的關(guān)

38、系不只一種,那么它就不是一個算符優(yōu)先文法.素短語素短語是指一個句型的短語,它至少包括有一個終結(jié)符號且除去它本身之外不再含任何更 小的素短語(了解)最左素短語:處在句型最左端那個素短語成為最左素短語(了解)請大家記下面兩句話,有可能出小題:算符優(yōu)先歸約的關(guān)鍵問題是尋找最左素短語算符優(yōu)先法尤其適用于表達(dá)式的分析. Firstvt集合和lastvt集合的構(gòu)造方法Firstvt集合構(gòu)造方法:若有產(chǎn)生式 Pa或PQa,貝ij a FIRSTVT(P)(2)若 aFIRSTVT(Q)且有產(chǎn)生式 PQ -,貝ij a FIRSTVT(P)lastvt集合的構(gòu)造方法若有產(chǎn)生式 4a或4aQ , 貝ij a L

39、ASTVT(P)(2)若aw LASTVT(Q)且有產(chǎn)生式Q ,貝ij a 三 LASTVT(P)(解析:個人認(rèn)為這兩個集合的構(gòu)造方法要比FIRSTS FOLLOW集合簡單得多。針對以上的書面說法,說一些我個人的理解和方法。構(gòu)造某個產(chǎn)生式左部的Fisrtvt或者lastvt集合,其實(shí)都是從他的產(chǎn)生式里去找。對于firstvt,無非兩種情況,1.他的某個侯選式的第一個字母就是終結(jié)符,如 P- a,或者第一個字母是非終結(jié)符而第二個字母是終結(jié)符如P- Qa,那么就把這個 a加入到P的firstvt集合中去;2.他的某個侯選式中的第一個字 母就是非終結(jié)符,如 P-Q-,那么就把 Q的firstvt中的元素加入到 P中去(請注意,這 里沒有除去這一說,與FIRST集的構(gòu)造方法是不同的)。對應(yīng)的LASTVT集的構(gòu)造其實(shí) 是和firstvt是剛好相反的,大家想想就很容易明白,這里不贅述了。需

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論