![第08講-語法分析-III_第1頁](http://file4.renrendoc.com/view/4cbabad8ed3e5eb4e9f1cc82debf553c/4cbabad8ed3e5eb4e9f1cc82debf553c1.gif)
![第08講-語法分析-III_第2頁](http://file4.renrendoc.com/view/4cbabad8ed3e5eb4e9f1cc82debf553c/4cbabad8ed3e5eb4e9f1cc82debf553c2.gif)
![第08講-語法分析-III_第3頁](http://file4.renrendoc.com/view/4cbabad8ed3e5eb4e9f1cc82debf553c/4cbabad8ed3e5eb4e9f1cc82debf553c3.gif)
![第08講-語法分析-III_第4頁](http://file4.renrendoc.com/view/4cbabad8ed3e5eb4e9f1cc82debf553c/4cbabad8ed3e5eb4e9f1cc82debf553c4.gif)
![第08講-語法分析-III_第5頁](http://file4.renrendoc.com/view/4cbabad8ed3e5eb4e9f1cc82debf553c/4cbabad8ed3e5eb4e9f1cc82debf553c5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本講綱要回顧重點:FIRST集、FOLLOW集LL(1)文法自上而下分析實現(xiàn)遞歸函數(shù)法非遞歸的預測分析方法構造預測分析表1FIRST集和FOLLOW集FIRST(
)={a|
*a…,a
VT}計算滿足的句子的所有可能開頭字符特殊情況:當
*時,規(guī)定
FIRST(
)FOLLOW(A)={a|S
*…Aa…,aVT}計算語言的句型中所有可能跟在A后面的字符特殊情況:如果A是某個句型的最右符號,那么$屬于FOLLOW(A)2FIRST集合及FOLLOW集合的計算方法FIRST集合計算方法若Xa..,則將終結符a加入FIRST(X)中若X,則將加入FIRST(X)中若XY…,且Y屬于非終結符,則將FIRST(Y)\{}加入到FIRST(X)中若XY1Y2..YK,且Y1,Y2,..Yi-1(2≤i≤k)都是非終結符,且Y1,Y2,..Yi-1的FIRST集合中均包含,則將FIRST(Yj)的所有非元素加入到FIRST(X)中,(j=1,2,..i).特別地,若Y1~YK均有產生式,則將加到FIRST(X)中。3SBAABS|dBaA|bS|cFIRST(S)=FIRST(B)FIRST(A)=FIRST(B)∪
hsdw5byFIRST(B)={a,b,c}步驟1:FIRST集和FOLLOW集FIRST(
)={a|
*a…,a
VT}計算滿足的句子的所有可能開頭字符特殊情況:當
*時,規(guī)定
FIRST(
)FOLLOW(A)={a|S
*…Aa…,aVT}計算語言的句型中所有可能跟在A后面的字符特殊情況:如果A是某個句型的最右符號,那么$屬于FOLLOW(A)4A的FOLLOW集合,是從開始符號可以導出的所有含A的文法符號序列中緊跟A之后的終結符。α的FIRST集合是從α開始可以導出的文法符號序列中的開頭終結符。FOLLOW集合的計算方法FOLLOW集合計算方法對文法開始符號S,置$于FOLLOW(S)中。若有AB,則將FIRST()\{}加入FOLLOW(B)中。(此處可以為空)若AB或AB,且*(即屬于FIRST()),則將
FOLLOW(A)加入FOLLOW(B)中(此處可以為空)。5SBAABS|dBaA|bS|cFIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW(S)=?FOLLOW(A)=?FOLLOW(B)=?FOLLOW集計算文法6SBAABS|dBaA|bS|c第1步:FOLLOW(S)<-$FOLLOW(S)={$}FOLLOW(A)={}FOLLOW(B)={a,b,c,d}第2步:FOLLOW(B)+=FIRST(A)FOLLOW(B)+=FIRST(S)FIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW集計算文法7SBAABS|dBaA|bS|c第1步:FOLLOW(S)<-$FOLLOW(S)={$}FOLLOW(A)={a,b,c,d}FOLLOW(B)={a,b,c,d}第2步:FOLLOW(B)+=FIRST(A)FOLLOW(B)+=FIRST(S)FIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW(B)中的所有元素都可以加到FOLLOW(A)中FOLLOW集計算文法8SBAABS|dBaA|bS|c第1步:FOLLOW(S)<-$FOLLOW(S)={a,b,c,d,$}FOLLOW(A)={a,b,c,d}FOLLOW(B)={a,b,c,d}第2步:FOLLOW(B)+=FIRST(A)FOLLOW(B)+=FIRST(S)FIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW(B)中的所有元素都可以加到FOLLOW(A)中FOLLOW(B)中的所有元素都可以加到FOLLOW(S)中FOLLOW集計算文法9SBAABS|dBaA|bS|c第1步:FOLLOW(S)<-$FOLLOW(S)={a,b,c,d,$}FOLLOW(A)={a,b,c,d,$}FOLLOW(B)={a,b,c,d}第2步:FOLLOW(B)+=FIRST(A)FOLLOW(B)+=FIRST(S)FIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW(B)中的所有元素都可以加到FOLLOW(A)中FOLLOW(B)中的所有元素都可以加到FOLLOW(S)中FOLLOW(S)中的所有元素都可以加到FOLLOW(A)中102023/2/2
目錄自上而下的語法分析First集合、Follow集合LL(1)文法自上而下的預測分析方法構造非遞歸預測分析表語法分析112023/2/2
句子
主語謂語賓語主語
名詞謂語
動詞
賓語
數(shù)詞|名詞
空調|導航動詞
設為|開數(shù)詞25度|A
|
(1)FIRST(
)FIRST()=(2)若
*,那么FIRST()FOLLOW(A)=FOLLOW(賓語)=FOLLOW(數(shù)詞)={$}{$}LL(1)文法2.FIRST(數(shù)詞)={25度,}FIRST(25度)={25度
}LL(1)文法LL(1)文法 任何兩個產生式A
|都滿足下列條件:FIRST(
)FIRST()=若
*,那么FIRST()FOLLOW(A)=LL(1)文法有一些明顯的性質沒有公共左因子不是二義的不含左遞歸12LL(1)文法例 E
TE E
+TE
|T
FTT
*
FT
|F
(E)|id該文法是LL(1)文法嗎?13E
+TE|和T
*FT
|是判斷的重點!LL(1)文法例 E
TE E
+TE
|T
FTT
*
FT
|F
(E)|idFIRST(+TE
)={+}FOLLOW(E)={),$}FIRST(*
FT
)={*}FOLLOW(T)={+,),$}14結論:該文法是LL(1)文法!LL(1)文法例 E
TE E
+TE
|T
FTT
*
FT
|F
(E)|id15結論:該文法是LL(1)文法!FIRST(E)=FIRST(T)=FIRST(F)={(,id}FIRST(E)={+,}FRIST(T)={*,}FOLLOW(E)=FOLLOW(E)={),$}FOLLOW(T)=FOLLOW(T)={+,),$}FOLLOW(F)={+,*,),$}162023/2/2
自上而下的語法分析自上而下的語法分析First集合、Follow集合LL(1)文法自上而下的預測分析方法構造非遞歸預測分析表語法分析172023/2/2
預測分析方法—遞歸3.句子
主語謂語賓語主語
名詞謂語
動詞
賓語
數(shù)詞|名詞
空調|導航動詞
設為|開數(shù)詞25度|句子(){主語();
謂語();
賓語();}主語(){名詞();}名詞(){ if(lookahead==“空調”){
match(“空調”);
}else{match(“導航”);}}句子
主語謂語賓語主語
名詞謂語
動詞
賓語
數(shù)詞|名詞
空調|導航動詞
設為|開數(shù)詞25度|182023/2/2
主語謂語
名詞動詞
空調設為設為25度賓語$$空調
數(shù)詞輸入:X=a$Xa,XVNXa,XVTX=a=$25度句子預測分析方法3.遞歸的分析程序19SBAABS|dBaA|bS|cS(){B();A();}A(){if(lookahead==‘a’|’b’|’c’){B();S();}elsematch(‘d’);}B(){if(lookahead==‘a’){match(‘a’);A();}elseif(lookahead==‘b’){match(‘b’);S();}elsematch(‘c’);}遞歸下降的預測分析遞歸下降的預測分析為每一個非終結符寫一個分析過程這些過程可能是遞歸的例: type
simple
|id
|array[simple]oftype simpleinteger
|char
|numdotdotnum20遞歸下降的預測分析一個輔助過程procedurematch(t:token);begin iflookahead==tthen lookahead:=nexttoken() elseerror()end;21遞歸下降的預測分析proccduretype;begin iflookaheadin{integer,char,num}then simple() elseiflookahead=thenbegin match();match(id) end elseiflookahead=arraythenbegin match(array);match([);simple(); match(]);match(of);type() end elseerror()end;22type
simple |id |array[simple]oftype遞歸下降的預測分析proceduresimple;begin iflookahead=integerthen match(integer) elseiflookahead=charthen match(char) elseiflookahead=numthenbegin match(num);match(dotdot);match(num) end elseerror()end;23simpleinteger |char |numdotdotnum242023/2/2
目錄自上而下的語法分析First集合、Follow集合LL(1)文法自上而下的預測分析方法構造非遞歸預測分析表語法分析252023/2/2
空調導航開設為25度$動詞
賓語數(shù)詞句子主語謂語
名詞句子
主語謂語賓語主語
名詞名詞
空調|導航謂語
動詞
動詞
設為|開賓語
數(shù)詞|數(shù)詞
25度|句子
主語謂語賓語句子
主語謂語賓語主語
名詞主語
名詞名詞
空調
名詞
導航謂語
動詞謂語
動詞動詞
設為動詞
開賓語
數(shù)詞賓語數(shù)詞25度數(shù)詞構造預測分析表4.262023/2/2
對每個產生式A
FIRST()的每個a,把A加入M[A,a]FOLLOW(A)的b(包括$)把A
加入M[A,b]M的其它沒有定義的條目都是error在FIRST()NY構造預測分析表4.272023/2/2
First集合、Follow集合LL(1)文法自上而下的預測分析方法構造非遞歸預測分析表遞歸下降預測分析非遞歸的預測分析A|滿足下列條件:1、FIRST()FIRST()=2、若
*,那么FIRST()FOLLOW(A)=總結實現(xiàn)first集合、follow集合程序設計實現(xiàn)非遞歸的預測分析程序針對非LL(1)文法,如何實現(xiàn)自上而下的語法分析?282023/2/2習題3.3
自上而下分析3.3.4非遞歸的預測分析29a+b$輸入預測分析程序分析表M輸出
XYZ$棧預測分析表用于驅動分析的全過程3.3
自上而下分析30非終結符輸入符號id+*...EETE
E
E
+TE
TTFT
T
T
T
*FTFFid書上57頁表3.13.3
自上而下分析31棧輸入輸出
…
…預測分析器接受輸入id*id+id的動作
$Eid*id+id$E
TE$E’Tid*id+id$T
FT$E’T’Fid*id+id$F
id$E’T’idid*id+id$一個符號被消耗*id+id$$E’T’Match(id)T’
*FT’$E’T’F**id+id$Match(*)id+id$$E’T’F預測分析表的構建(1)對文法的每個產生式A
,執(zhí)行(2)和(3)。(2)對FIRST()的每個終結符a,把A
加入M[A,a](即加入表中A行a列)。(3)如果在FIRST()中,對FOLLOW(A)的每個終結符b(包括$),把A
加入M[A,b]。(4)M的其它沒有定義的條目都是error。32文法S->ACDA->a|C->cD->d33FIRST(S)={a,c}FIRST(A)={a,}FIRST(C)={c}FIRST(D)=905s4itFOLLOW(S)={$}FOLLOW(A)={c}FOLLOW(C)=n8ziuxhFOLLOW(D)={$}預測分析表的構建非終結符輸入符號acd$SACD
34FIRST(S)={a,c}FIRST(A)={a,}FIRST(C)={c}FIRST(D)=wmo08ggFOLLOW(S)={$}FOLLOW(A)={c}FOLLOW(C)=k1130nuFOLLOW(D)={$}S->ACDS->ACDA->aA->C->cD->dERRORERRORERRORERRORERRORERROR文法S->ACDA->a|C->cD->dERRORERRORERRORERROR上下文無關文法自上而下自下而上LL(1)文法2個函數(shù)遞歸下降預測分析非遞歸的預測分析最左推導任何兩個產生式A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學九年級上冊24.2.2.1《直線與圓的位置關系》聽評課記錄
- 人教版地理八年級下冊《第四節(jié) 祖國的神圣領土──臺灣省》聽課評課記錄2
- 人教版九年級數(shù)學上冊 聽評課記錄 旋轉《中心對稱圖形》
- 招商引資傭金合同(2篇)
- 湘教版九年級數(shù)學上冊第4章銳角三角函數(shù)4.3解直角三角形聽評課記錄
- 湘教版數(shù)學七年級上冊4.2《線段的長短比較》聽評課記錄
- 部編人教版歷九年級史下冊第12課《亞非拉民族民主運動的高漲》聽課評課記錄
- 湘教版數(shù)學七年級上冊1.3《有理數(shù)的大小比較》聽評課記錄
- 蘇科版數(shù)學七年級下冊12.2《證明》聽評課記錄3
- 蘇科版數(shù)學八年級上冊3.3《勾股定理的簡單應用》聽評課記錄
- 出差報銷單-中英對照版
- 電流互感器試驗報告
- 蔣中一動態(tài)最優(yōu)化基礎
- 七年級英語閱讀理解10篇(附答案解析)
- 抖音來客本地生活服務酒旅商家代運營策劃方案
- 鉆芯法樁基檢測報告
- 【學前教育小學化成因分析及其對策10000字(論文)】
- 無線網網絡安全應急預案
- 國籍狀況聲明書【模板】
- 常用保潔綠化人員勞動合同范本5篇
- 腕管綜合征課件
評論
0/150
提交評論