




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本講綱要回顧重點(diǎn):FIRST集、FOLLOW集LL(1)文法自上而下分析實(shí)現(xiàn)遞歸函數(shù)法非遞歸的預(yù)測(cè)分析方法構(gòu)造預(yù)測(cè)分析表1FIRST集和FOLLOW集FIRST(
)={a|
*a…,a
VT}計(jì)算滿足的句子的所有可能開頭字符特殊情況:當(dāng)
*時(shí),規(guī)定
FIRST(
)FOLLOW(A)={a|S
*…Aa…,aVT}計(jì)算語言的句型中所有可能跟在A后面的字符特殊情況:如果A是某個(gè)句型的最右符號(hào),那么$屬于FOLLOW(A)2FIRST集合及FOLLOW集合的計(jì)算方法FIRST集合計(jì)算方法若Xa..,則將終結(jié)符a加入FIRST(X)中若X,則將加入FIRST(X)中若XY…,且Y屬于非終結(jié)符,則將FIRST(Y)\{}加入到FIRST(X)中若XY1Y2..YK,且Y1,Y2,..Yi-1(2≤i≤k)都是非終結(jié)符,且Y1,Y2,..Yi-1的FIRST集合中均包含,則將FIRST(Yj)的所有非元素加入到FIRST(X)中,(j=1,2,..i).特別地,若Y1~YK均有產(chǎn)生式,則將加到FIRST(X)中。3SBAABS|dBaA|bS|cFIRST(S)=FIRST(B)FIRST(A)=FIRST(B)∪
z3jilz61osysFIRST(B)={a,b,c}步驟1:FIRST集和FOLLOW集FIRST(
)={a|
*a…,a
VT}計(jì)算滿足的句子的所有可能開頭字符特殊情況:當(dāng)
*時(shí),規(guī)定
FIRST(
)FOLLOW(A)={a|S
*…Aa…,aVT}計(jì)算語言的句型中所有可能跟在A后面的字符特殊情況:如果A是某個(gè)句型的最右符號(hào),那么$屬于FOLLOW(A)4A的FOLLOW集合,是從開始符號(hào)可以導(dǎo)出的所有含A的文法符號(hào)序列中緊跟A之后的終結(jié)符。α的FIRST集合是從α開始可以導(dǎo)出的文法符號(hào)序列中的開頭終結(jié)符。FOLLOW集合的計(jì)算方法FOLLOW集合計(jì)算方法對(duì)文法開始符號(hào)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集計(jì)算文法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集計(jì)算文法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集計(jì)算文法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集計(jì)算文法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)文法自上而下的預(yù)測(cè)分析方法構(gòu)造非遞歸預(yù)測(cè)分析表語法分析112023/2/2
句子
主語謂語賓語主語
名詞謂語
動(dòng)詞
賓語
數(shù)詞|名詞
空調(diào)|導(dǎo)航動(dòng)詞
設(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)文法 任何兩個(gè)產(chǎn)生式A
|都滿足下列條件:FIRST(
)FIRST()=若
*,那么FIRST()FOLLOW(A)=LL(1)文法有一些明顯的性質(zhì)沒有公共左因子不是二義的不含左遞歸12LL(1)文法例 E
TE E
+TE
|T
FTT
*
FT
|F
(E)|id該文法是LL(1)文法嗎?13E
+TE|和T
*FT
|是判斷的重點(diǎn)!LL(1)文法例 E
TE E
+TE
|T
FTT
*
FT
|F
(E)|idFIRST(+TE
)={+}FOLLOW(E)={),$}FIRST(*
FT
)={*}FOLLOW(T)={+,),$}14結(jié)論:該文法是LL(1)文法!LL(1)文法例 E
TE E
+TE
|T
FTT
*
FT
|F
(E)|id15結(jié)論:該文法是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)文法自上而下的預(yù)測(cè)分析方法構(gòu)造非遞歸預(yù)測(cè)分析表語法分析172023/2/2
預(yù)測(cè)分析方法—遞歸3.句子
主語謂語賓語主語
名詞謂語
動(dòng)詞
賓語
數(shù)詞|名詞
空調(diào)|導(dǎo)航動(dòng)詞
設(shè)為|開數(shù)詞25度|句子(){主語();
謂語();
賓語();}主語(){名詞();}名詞(){ if(lookahead==“空調(diào)”){
match(“空調(diào)”);
}else{match(“導(dǎo)航”);}}句子
主語謂語賓語主語
名詞謂語
動(dòng)詞
賓語
數(shù)詞|名詞
空調(diào)|導(dǎo)航動(dòng)詞
設(shè)為|開數(shù)詞25度|182023/2/2
主語謂語
名詞動(dòng)詞
空調(diào)設(shè)為設(shè)為25度賓語$$空調(diào)
數(shù)詞輸入:X=a$Xa,XVNXa,XVTX=a=$25度句子預(yù)測(cè)分析方法3.遞歸的分析程序19SBAABS|dBaA|bS|cS(){B();A();}A(){if(lookahead==‘a(chǎn)’|’b’|’c’){B();S();}elsematch(‘d’);}B(){if(lookahead==‘a(chǎn)’){match(‘a(chǎn)’);A();}elseif(lookahead==‘b’){match(‘b’);S();}elsematch(‘c’);}遞歸下降的預(yù)測(cè)分析遞歸下降的預(yù)測(cè)分析為每一個(gè)非終結(jié)符寫一個(gè)分析過程這些過程可能是遞歸的例: type
simple
|id
|array[simple]oftype simpleinteger
|char
|numdotdotnum20遞歸下降的預(yù)測(cè)分析一個(gè)輔助過程procedurematch(t:token);begin iflookahead==tthen lookahead:=nexttoken() elseerror()end;21遞歸下降的預(yù)測(cè)分析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遞歸下降的預(yù)測(cè)分析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)文法自上而下的預(yù)測(cè)分析方法構(gòu)造非遞歸預(yù)測(cè)分析表語法分析252023/2/2
空調(diào)導(dǎo)航開設(shè)為25度$動(dòng)詞
賓語數(shù)詞句子主語謂語
名詞句子
主語謂語賓語主語
名詞名詞
空調(diào)|導(dǎo)航謂語
動(dòng)詞
動(dòng)詞
設(shè)為|開賓語
數(shù)詞|數(shù)詞
25度|句子
主語謂語賓語句子
主語謂語賓語主語
名詞主語
名詞名詞
空調(diào)
名詞
導(dǎo)航謂語
動(dòng)詞謂語
動(dòng)詞動(dòng)詞
設(shè)為動(dòng)詞
開賓語
數(shù)詞賓語數(shù)詞25度數(shù)詞構(gòu)造預(yù)測(cè)分析表4.262023/2/2
對(duì)每個(gè)產(chǎn)生式A
FIRST()的每個(gè)a,把A加入M[A,a]FOLLOW(A)的b(包括$)把A
加入M[A,b]M的其它沒有定義的條目都是error在FIRST()NY構(gòu)造預(yù)測(cè)分析表4.272023/2/2
First集合、Follow集合LL(1)文法自上而下的預(yù)測(cè)分析方法構(gòu)造非遞歸預(yù)測(cè)分析表遞歸下降預(yù)測(cè)分析非遞歸的預(yù)測(cè)分析A|滿足下列條件:1、FIRST()FIRST()=2、若
*,那么FIRST()FOLLOW(A)=總結(jié)實(shí)現(xiàn)first集合、follow集合程序設(shè)計(jì)實(shí)現(xiàn)非遞歸的預(yù)測(cè)分析程序針對(duì)非LL(1)文法,如何實(shí)現(xiàn)自上而下的語法分析?282023/2/2習(xí)題3.3
自上而下分析3.3.4非遞歸的預(yù)測(cè)分析29a+b$輸入預(yù)測(cè)分析程序分析表M輸出
XYZ$棧預(yù)測(cè)分析表用于驅(qū)動(dòng)分析的全過程3.3
自上而下分析30非終結(jié)符輸入符號(hào)id+*...EETE
E
E
+TE
TTFT
T
T
T
*FTFFid書上57頁表3.13.3
自上而下分析31棧輸入輸出
…
…預(yù)測(cè)分析器接受輸入id*id+id的動(dòng)作
$Eid*id+id$E
TE$E’Tid*id+id$T
FT$E’T’Fid*id+id$F
id$E’T’idid*id+id$一個(gè)符號(hào)被消耗*id+id$$E’T’Match(id)T’
*FT’$E’T’F**id+id$Match(*)id+id$$E’T’F預(yù)測(cè)分析表的構(gòu)建(1)對(duì)文法的每個(gè)產(chǎn)生式A
,執(zhí)行(2)和(3)。(2)對(duì)FIRST()的每個(gè)終結(jié)符a,把A
加入M[A,a](即加入表中A行a列)。(3)如果在FIRST()中,對(duì)FOLLOW(A)的每個(gè)終結(jié)符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)=z3jilz61osysFOLLOW(S)={$}FOLLOW(A)={c}FOLLOW(C)=z3jilz61osysFOLLOW(D)={$}預(yù)測(cè)分析表的構(gòu)建非終結(jié)符輸入符號(hào)acd$SACD
34FIRST(S)={a,c}FIRST(A)={a,}FIRST(C)={c}FIRST(D)=z3jilz61osysFOLLOW(S)={$}FOLLOW(A)={c}FOLLOW(C)=z3jilz61osysFOLLOW(D)={$}S->ACDS->ACDA->aA->C->cD->dERRORERRORERRORERRORERRORERROR文法S->ACDA->a|C->cD->dERRORERRORERRORERROR上下文無關(guān)文法自上而下自下而上LL(1)文法2個(gè)函數(shù)遞歸下降預(yù)測(cè)分析非遞歸的預(yù)測(cè)分析最左推導(dǎo)任何兩個(gè)產(chǎn)生式A
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年天津市和平區(qū)面向甘肅白銀會(huì)寧籍招聘事業(yè)單位工作人員模擬試卷帶答案詳解
- 2025廣東東莞市謝崗鎮(zhèn)政府第一食堂招聘廚師長、副廚2人考前自測(cè)高頻考點(diǎn)模擬試題有答案詳解
- 2025年4月四川成都紡織高等??茖W(xué)校招聘事業(yè)編制人員7人模擬試卷參考答案詳解
- 2025江蘇連云港市灌南縣招聘事業(yè)單位人員43人考前自測(cè)高頻考點(diǎn)模擬試題附答案詳解(考試直接用)
- 火鍋店入股合作合同協(xié)議書范本6篇
- 2025河南駐馬店市新蔡縣公益性崗位招聘7人模擬試卷及答案詳解(奪冠系列)
- 2025年醴陵市法院系統(tǒng)招聘真題
- 2025年河北承德辰飛供電服務(wù)有限公司招聘101人模擬試卷附答案詳解(黃金題型)
- 2025江蘇南通市海門區(qū)民政局招聘包場(chǎng)鎮(zhèn)民政公益性崗位人員招聘2人考前自測(cè)高頻考點(diǎn)模擬試題及一套參考答案詳解
- 2025甘肅特崗教師招聘考試幾月份發(fā)布?考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(名師系列)
- 北京市大興區(qū)2024-2025學(xué)年高二上學(xué)期期中檢測(cè)數(shù)學(xué)試題(解析版)
- 中建二測(cè)考試真題及答案
- 礦業(yè)權(quán)評(píng)估全參數(shù)確定指導(dǎo)意見
- 渝22TS02 市政排水管道附屬設(shè)施標(biāo)準(zhǔn)圖集 DJBT50-159
- 2024年鐵路運(yùn)輸項(xiàng)目營銷策劃方案
- 茉莉花常見病蟲害及其防治
- 保潔巡查記錄表
- 我的家鄉(xiāng)湖南永州宣傳簡介
- 服裝概論高職PPT完整全套教學(xué)課件
- 認(rèn)識(shí)國旗(課堂PPT)
- 小兒危重癥的早期識(shí)別與處理課件
評(píng)論
0/150
提交評(píng)論