版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本講綱要回顧重點:FIRST集、FOLLOW集LL(1)文法自上而下分析實現(xiàn)遞歸函數(shù)法非遞歸的預測分析方法構(gòu)造預測分析表1FIRST集和FOLLOW集FIRST(
)={a|
*a…,a
VT}計算滿足的句子的所有可能開頭字符特殊情況:當
*時,規(guī)定
FIRST(
)FOLLOW(A)={a|S
*…Aa…,aVT}計算語言的句型中所有可能跟在A后面的字符特殊情況:如果A是某個句型的最右符號,那么$屬于FOLLOW(A)2FIRST集合及FOLLOW集合的計算方法FIRST集合計算方法若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)∪
imaygmsFIRST(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之后的終結(jié)符。α的FIRST集合是從α開始可以導出的文法符號序列中的開頭終結(jié)符。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)文法自上而下的預測分析方法構(gòu)造非遞歸預測分析表語法分析112023/2/2
句子
主語謂語賓語主語
名詞謂語
動詞
賓語
數(shù)詞|名詞
空調(diào)|導航動詞
設(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)文法 任何兩個產(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
|是判斷的重點!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)文法自上而下的預測分析方法構(gòu)造非遞歸預測分析表語法分析172023/2/2
預測分析方法—遞歸3.句子
主語謂語賓語主語
名詞謂語
動詞
賓語
數(shù)詞|名詞
空調(diào)|導航動詞
設(shè)為|開數(shù)詞25度|句子(){主語();
謂語();
賓語();}主語(){名詞();}名詞(){ if(lookahead==“空調(diào)”){
match(“空調(diào)”);
}else{match(“導航”);}}句子
主語謂語賓語主語
名詞謂語
動詞
賓語
數(shù)詞|名詞
空調(diào)|導航動詞
設(shè)為|開數(shù)詞25度|182023/2/2
主語謂語
名詞動詞
空調(diào)設(shè)為設(shè)為25度賓語$$空調(diào)
數(shù)詞輸入:X=a$Xa,XVNXa,XVTX=a=$25度句子預測分析方法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’);}遞歸下降的預測分析遞歸下降的預測分析為每一個非終結(jié)符寫一個分析過程這些過程可能是遞歸的例: 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)文法自上而下的預測分析方法構(gòu)造非遞歸預測分析表語法分析252023/2/2
空調(diào)導航開設(shè)為25度$動詞
賓語數(shù)詞句子主語謂語
名詞句子
主語謂語賓語主語
名詞名詞
空調(diào)|導航謂語
動詞
動詞
設(shè)為|開賓語
數(shù)詞|數(shù)詞
25度|句子
主語謂語賓語句子
主語謂語賓語主語
名詞主語
名詞名詞
空調(diào)
名詞
導航謂語
動詞謂語
動詞動詞
設(shè)為動詞
開賓語
數(shù)詞賓語數(shù)詞25度數(shù)詞構(gòu)造預測分析表4.262023/2/2
對每個產(chǎn)生式A
FIRST()的每個a,把A加入M[A,a]FOLLOW(A)的b(包括$)把A
加入M[A,b]M的其它沒有定義的條目都是error在FIRST()NY構(gòu)造預測分析表4.272023/2/2
First集合、Follow集合LL(1)文法自上而下的預測分析方法構(gòu)造非遞歸預測分析表遞歸下降預測分析非遞歸的預測分析A|滿足下列條件:1、FIRST()FIRST()=2、若
*,那么FIRST()FOLLOW(A)=總結(jié)實現(xiàn)first集合、follow集合程序設(shè)計實現(xiàn)非遞歸的預測分析程序針對非LL(1)文法,如何實現(xiàn)自上而下的語法分析?282023/2/2習題3.3
自上而下分析3.3.4非遞歸的預測分析29a+b$輸入預測分析程序分析表M輸出
XYZ$棧預測分析表用于驅(qū)動分析的全過程3.3
自上而下分析30非終結(jié)符輸入符號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預測分析表的構(gòu)建(1)對文法的每個產(chǎn)生式A
,執(zhí)行(2)和(3)。(2)對FIRST()的每個終結(jié)符a,把A
加入M[A,a](即加入表中A行a列)。(3)如果在FIRST()中,對FOLLOW(A)的每個終結(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)=smmagmkFOLLOW(S)={$}FOLLOW(A)={c}FOLLOW(C)=mgcagesFOLLOW(D)={$}預測分析表的構(gòu)建非終結(jié)符輸入符號acd$SACD
34FIRST(S)={a,c}FIRST(A)={a,}FIRST(C)={c}FIRST(D)=ousqekyFOLLOW(S)={$}FOLLOW(A)={c}FOLLOW(C)=gmkeayoFOLLOW(D)={$}S->ACDS->ACDA->aA->C->cD->dERRORERRORERRORERRORERRORERROR文法S->ACDA->a|C->cD->dERRORERRORERRORERROR上下文無關(guān)文法自上而下自下而上LL(1)文法2個函數(shù)遞歸下降預測分析非遞歸的預測分析最左推導任何兩個產(chǎn)生式A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌運營門店管理制度
- 污水運營延誤管理制度
- 商務ktv運營管理制度
- 子公司運營管理制度
- 劇場運營規(guī)則制度范本大全
- 運營部部門職責以及制度
- 客運運營服務管理制度
- 2026湖南張家界桑植縣第一季度縣直事業(yè)單位選調(diào)工作人員9人備考題庫有完整答案詳解
- 2026福建省汽車工業(yè)集團有限公司招聘160人備考題庫(含答案詳解)
- 邛崍市白鶴小學教師招聘備考題庫及答案詳解(新)
- 2026年及未來5年市場數(shù)據(jù)中國民間美術(shù)文化遺產(chǎn)行業(yè)市場競爭格局及發(fā)展趨勢預測報告
- 2026西藏自治區(qū)教育考試院招聘非編工作人員11人備考考試試題及答案解析
- 江西省南昌市2025-2026學年上學期期末八年級數(shù)學試卷(含答案)
- 2026內(nèi)蒙古鄂爾多斯市伊金霍洛旗九泰熱力有限責任公司招聘熱電分公司專業(yè)技術(shù)人員16人筆試模擬試題及答案解析
- 2025至2030中國現(xiàn)代物流業(yè)智慧化轉(zhuǎn)型與多式聯(lián)運體系構(gòu)建研究報告
- 馬年猜猜樂(猜地名)打印版
- 2026江蘇省人民醫(yī)院消化內(nèi)科工勤人員招聘2人考試備考題庫及答案解析
- 《大學生創(chuàng)新創(chuàng)業(yè)指導(慕課版第3版)》完整全套教學課件-1
- 2025年浙江省嘉興市嘉善縣保安員考試真題附答案解析
- AFP急性弛緩性麻痹培訓課件
- GDPR框架下跨境醫(yī)療數(shù)據(jù)治理策略
評論
0/150
提交評論