編譯原理:第五章語(yǔ)法分析2_第1頁(yè)
編譯原理:第五章語(yǔ)法分析2_第2頁(yè)
編譯原理:第五章語(yǔ)法分析2_第3頁(yè)
編譯原理:第五章語(yǔ)法分析2_第4頁(yè)
編譯原理:第五章語(yǔ)法分析2_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 1. 什麼是LL(1)分析法? 5.3.1 LL(1)分析法基本概念 5.3 LL(1)分析法 LL(1) 分析法的基本要點(diǎn)有三: 利用一個(gè)分析表,登記如何選擇產(chǎn)生式的知識(shí); 利用一個(gè)分析棧,記錄分析過(guò)程; 此分析法要求文法必須是 LL(1)文法。 LL(1)分析法是指從左到右掃描、最左推導(dǎo)(LL)和只查看一個(gè)當(dāng)前符號(hào)(括號(hào)中的 1)之意; LL(1)分析法又稱預(yù)測(cè)分析法,與遞歸子程序法同屬于自頂向下確定性語(yǔ)法分析方法; 2. LL(1)分析過(guò)程示例 G(Z):Z-dAZ | bAc A-aA | 棧 當(dāng)前符號(hào) 剩余序列 棧操作 選擇推導(dǎo)產(chǎn)生式后,為什麼要逆序壓棧? 當(dāng)棧頂為A,當(dāng)前單詞為c

2、時(shí),為什么選擇 A ?討論逆序壓棧# c A# c# c A# c# c A b A aba c # 選擇 ZbAcba c #匹配 bac # 選擇AaAac #匹配 a c# 選擇A c#匹配 c#正確結(jié)束 Z查分析表 對(duì)符號(hào)串: = bac # 的分析過(guò)程: d A Z # c b a分析表: 設(shè)有文法G(Z), # 棧底標(biāo)記和結(jié)束標(biāo)記;#棧結(jié)束: 若 棧頂符=a 且 當(dāng)前符為a; 則 pop,NEXT(w);# Z 開(kāi)始:棧 ; NEXT(w);當(dāng)前符 w= # 重復(fù)執(zhí)行 、 ,直到棧中只剩 # 為止: 即:棧調(diào)整:# a# 即:棧調(diào)整:# A# a 3. LL(1)分析法算法概要 若

3、 棧頂符=A 且 當(dāng)前符 w=a 且 有產(chǎn)生式: Aa, 則 POP,PUSH(a)R ; 逆序壓棧! 否則,錯(cuò)誤處理!5.3.2 LL(1)文法及其判定1. 首符號(hào)集合、后繼符集合與選擇符集合 設(shè) G(Z)=(VN, VT, Z, P),A- P,則 first() , first()follow(A), select(A-)=*【注】 (可空), (不可空); 若 = 則 first()= ; 設(shè) #為輸入串的結(jié)束符,則 #follow(Z); =*first()= t| t,tVT =*follow(A)= t| Z At,tVT =*【注】 求 follow(A) 要點(diǎn): 查所有右部含

4、有A的產(chǎn)生式: B - A 若 不空時(shí) , 則 first()follow(A) ; 若 取空時(shí) , 則 follow(B)follow(A) ; 若 = 時(shí) , 則 follow(B)follow(A)。select()= first(dAZ)=d select()= first(bcA)=bselect()= first(aA)=a select()= first()follow(A)= b,d,# 即: B - AG(Z): Z - dAZ | bcA A - aA | 【例5.4】 求文法產(chǎn)生式的選擇集合:則有: 產(chǎn)生式序號(hào) 【定義】 LL(1)文法是指文法中,具有相同左部的各產(chǎn)生式,

5、其選擇集合不相交。 select()= d ;2. LL(1)文法及其判定 LL(1)文法可確保 遞歸子程序法 和 LL(1)分析法 的正確運(yùn)用?!纠?.5】 G(Z): Z - dAZ | bcA A - aA | select()= bselect()= a ;即: db= 又 ab,d,#= select()= b,d,# G(Z) 是 LL(1)文法。 LL(1)分析法示例:【例5.6】 G(Z):Z - Z b | a 【注】上述文法可進(jìn)行等價(jià)變換,消除左遞歸得: select()= a select()= a 選擇集合相交 具有左遞歸的文法,一定不是LL(1)文法! G(Z)是LL

6、(1)文法,可以用 LL(1)分析法。 select()= b select()= # 選擇集合不相交G(Z): Z - aA , A - bA | 列: 終結(jié)符 | #5.3.3 LL(1)分析器設(shè)計(jì)(實(shí)現(xiàn)) 應(yīng)用時(shí),可用下列函數(shù)查表,獲取相應(yīng)產(chǎn)生式: L(棧頂符,當(dāng)前符)= 產(chǎn)生式序號(hào)【結(jié)構(gòu)設(shè)計(jì)】. LL(1)分析表的構(gòu)造: LL(1)控制程序+LL(1)分析表LL(1)分析表是存儲(chǔ)文法選擇集合的知識(shí)表。 行: 非終結(jié)符表項(xiàng):產(chǎn)生式序號(hào) Z # a A d A Z # c b a如 G(Z):Z - aAb | AcA select()=a; 【算法設(shè)計(jì)】 A - dA | i則 L( A

7、 , a ):=A - i 求文法選擇集合,確認(rèn) LL(1)文法; 依次取產(chǎn)生式:select()=d;select()=c,d ; select()= b,c,#;是 LL(1)文法,LL(1)分析表:不相交不相交若 a select( ) i NEXT(w)ynerrnynnerr PUSH(#),PUSH(Z) POP(x)y開(kāi)始結(jié)束xVTnerryxVNw = #x = wy查L(zhǎng)L(1)分析表: L( x ,w )= ? 空?. LL(1)分析法控制程序:PUSH ( iR )把產(chǎn)生式 i 右部逆序壓棧把棧頂符彈入到變量x中! LL(1)分析法綜合示例:【例5.7】 G(E): E -

8、 T | E 1 T T - F | T 2 F F - i | ( E ) 此文法含左遞歸,不是LL(1)文法;經(jīng)文法變換(消除左遞歸)后可得:G(E): E - T E E- 1 T E | T - F T T- 2 F T | F - i | ( E ) 其中: 1( + ,- ) , 2 ( * ,/ ) 這是LL(1)文法嗎?select()=first(TE)= i,( 1.求G(E) 的選擇集合: 三對(duì)選擇集合兩兩不相交,G(E): E - T E E- 1 T E | T - F T T- 2 F T | F - i | ( E ) E -E-T -T-F -select()=

9、first(1TE)= 1 select()=follow(E)= ),# select()=first(FT)= i,( select()=first(2FT)= 2 select()=follow(T)= 1 ,),# select()=first(i)= i select()=first(E)= ( G(E)是 LL(1) 文法。(接上頁(yè)) 2.構(gòu)造 LL(1) 分析表: 花括號(hào)內(nèi)是求得的選擇集合! F T T E E ) ( # 2 1 iT- 2 FT 2 | 1,),# F - i i | (E) ( E - TE i,( E- 1 TE 1| ),# T - FT i,( G(E

10、):(接上頁(yè)) 符號(hào)串 a+b# 的LL(1)分析過(guò)程:查分析表: 操 作剩余序列 w x 分析棧# ( + 匹配成功 ) b # + 1# E T 1 : PUSH(ET1) b # + E# E : PUSH ( ) + b # + T# E T : PUSH(i) + b # a F T F ( a 匹配成功 ) + b # a i i : PUSH(TF) + b # a T E T :PUSH(ET) a + b # a E# E : PUSH(TF) b # b T# E T ok # # : PUSH ( ) # # T # E T : PUSH ( ) # E# E ( b 匹配成功) # b i i : PUSH(i) # b F T F# E# E T# E # E T練習(xí)題:【

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論