版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
3.2
語言和文法
3.2.7
提左因子有左因子的文法
A
1|2提左因子
A
A A
1|2
3.2
語言和文法
例
懸空else的文法
stmt
ifexprthenstmtelsestmt
|ifexprthenstmt |other
3.2
語言和文法
例
懸空else的文法
stmt
ifexprthenstmtelsestmt
|ifexprthenstmt |other
提左因子
stmt
ifexprthenstmt
optional_else_part |other optional_else_partelsestmt |3.2
語言和文法
3.2.8
非上下文無關(guān)的語言結(jié)構(gòu)L1={wcw|w屬于(a|b)*}
標(biāo)識符的聲明應(yīng)先于其引用的抽象
L2={anbmcndm|n0,m0}形參個數(shù)和實參個數(shù)應(yīng)該相同的抽象
L3={anbncn|n0}早先排版描述的一個現(xiàn)象的抽象L1={wcwR|w(a|b)*}
SaSa|bSb|cL2={anbmcmdn|n1,m1}
SaSd|aAd AbAc|bcL
2={anbncmdm|n1,m1} SAB AaAb|ab
BcBd|cdL3
={anbn|n
1}
SaSb|ab3.2
語言和文法L3
={anbn|n
1}
SaSb|abL3是不能用正規(guī)式描述的語言的一個范例
若存在接受L3的DFAD,狀態(tài)數(shù)為k個。
設(shè)D讀完,
a,aa,
…,ak
分別到達(dá)狀態(tài)s0,s1,
…,sk至少有兩個狀態(tài)相同,例如是si和sj,則ajbi屬于L3
si…。。。fs0標(biāo)記為ai的路徑標(biāo)記為bi的路徑標(biāo)記為aj
i的路徑…。。。…。。。3.2
語言和文法
3.2.9
形式語言鳥瞰文法G=(VT
,VN,S,P)0型文法:,,(VNVT)*,||11型文法:||||,但S可以例外,此時S不出現(xiàn)在任何產(chǎn)生式的右側(cè)。2型文法:A,AVN,(VN∪VT)*3型文法:AaB或Aa,A,BVN,aVT
短語文法上下文有關(guān)文法上下文無關(guān)文法正規(guī)式3.2
語言和文法
例:L3={anbncn|n1}的上下文有關(guān)文法S
aSBC
S
aBC
CB
BCaB
ab
bB
bb bC
bccC
ccanbncn的推導(dǎo)過程如下:S*an-1S(BC)n1S+an(BC)n
S+anBnCnS+anbBn1CnS+anbnCn
S+anbncCn-1S+anbncn溫故知新正規(guī)式上下文無關(guān)文法功能有限四元組定義推導(dǎo)分析樹圖形化表示最左推導(dǎo)最右推導(dǎo)二義性消除二義性左遞歸消除左遞歸左因子消除左因子A
1|2A+Aa
0型文法1型文法2型文法3型文法3.3
自上而下分析
3.3.1自上而下分析的一般方法例:
文法 S
aCb C
cd|c
為輸入串w=acb建立分析樹SSSaCbaaCCbbcdc
不能處理左遞歸、復(fù)雜的回溯技術(shù)、回溯導(dǎo)致語義工作推倒重來、難以報告出錯的確切位置、效率低3.3
自上而下分析
3.3.2LL(1)文法
對文法加什么樣的限制可以保證沒有回溯?先定義兩個和文法有關(guān)的函數(shù)FIRST(
)={a|
*a…,a
VT}
1、特別是,
*時,規(guī)定
FIRST(
) 2、如果AB,則FIRST(B)應(yīng)該加入FIRST(A) 對A的任何兩個不同的選擇i
和j,希望有 FIRST(i)FIRST(j)=但有一個前提,F(xiàn)IRST(i)和FIRST(j)都不含3.3
自上而下分析
3.3.2LL(1)文法
對文法加什么樣的限制可以保證沒有回溯?先定義兩個和文法有關(guān)的函數(shù)FOLLOW(A)={a|S
*…Aa…,aVT}
1、如果A是某個句型的最右符號,那么$屬于FOLLOW(A) 2、如果存在AB或AB且*,則FOLLOW(A)的全體元素要加入FOLLOW(B)3.3
自上而下分析引起回溯的原因:由于相同左部的產(chǎn)生式的右部First集交集不為空而引起回溯例:
文法 S
aCb C
cd|c
為輸入串w=acb建立分析樹2.由于相同左部VN的右部存在能*的產(chǎn)生式,且該VN的Follow集中含有其他產(chǎn)生式右部First集的元素
例:S->aAS|bA->bAS|
輸入串a(chǎn)b#
(因為A*
所以First(bAs)Follow(A)≠
)3.由于文法左遞歸引起回溯
例:S->Sa|b
輸入串baa#3.3
自上而下分析LL(1)文法 任何兩個產(chǎn)生式A|都滿足下列條件:
FIRST(
)FIRST()=若
*
,那么FIRST()FOLLOW(A)=LL(1)文法有一些明顯的性質(zhì)沒有公共左因子不是二義的不含左遞歸FIRST集合計算方法若Xa..,則將終結(jié)符a加入FIRST(X)中若X,則將加入FIRST(X)中若XY…,且Y屬于非終結(jié)符,則將FIRST(Y)\{}加入到FIRST(X)中若XY1Y2..YK,且Y1,Y2,..Yi-1都是非終結(jié)符,且Y1,Y2,..Yi-1的FIRST集合中均包含,則將FIRST(Yj)的所有非元素加入到FIRST(X)中,(j=1,2,..i).特別地,若Y1~YK均有產(chǎn)生式,則將加到FIRST(X)中。FIRST集合及FOLLOW集合的計算方法SBAABS|dBaA|bS|cFIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW集合計算方法對文法開始符號S,置$于FOLLOW(S)中。若有AB,則將FIRST()\{}加入FOLLOW(B)中。(此處可以為空)若AB或AB,且*(即屬于FIRST()),則將
FOLLOW(A)加入FOLLOW(B)中(此處可以為空)。FIRST集合及FOLLOW集合的計算方法SBAABS|dBaA|bS|cFIRST(B)={a,b,c}FIRST(A)={a,b,c,d}FIRST(S)={a,b,c}FOLLOW(S)=?FOLLOW(A)=?FOLLOW(B)=?3.3
自上而下分析例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|id3.3
自上而下分析例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|idFIRST(E)=FIRST(T)=FIRST(F)={(,id}3.3
自上而下分析例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|idFIRST(E)=FIRST(T)=FIRST(F)={(,id}FIRST(E)={+,}3.3
自上而下分析
例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|idFIRST(E)=FIRST(T)=FIRST(F)={(,id}FIRST(E)={+,}FRIST(T)={*,}3.3
自上而下分析例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|idFIRST(E)=FIRST(T)=FIRST(F)={(,id}FIRST(E)={+,}FRIST(T)={*,}FOLLOW(E)=FOLLOW(E)={),$}3.3
自上而下分析
例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|idFIRST(E)=FIRST(T)=FIRST(F)={(,id}FIRST(E)={+,}FRIST(T)={*,}FOLLOW(E)=FOLLOW(E)={),$}FOLLOW(T)=FOLLOW(T)={+,),$}3.3
自上而下分析例 E
TE E
+TE
| T
FT T
*
FT
| F
(E)|idFIRST(E)=FIRST(T)=FIRST(F)={(,id}FIRST(E)={+,}FRIST(T)={*,}FOLLOW(E)=FOLLOW(E)={),$}FOLLOW(T)=FOLLOW(T)={+,),$}FOLLOW(F)={+,*,),$}3.3
自上而下分析
3.3.3遞歸下降的預(yù)測分析為每一個非終結(jié)符寫一個分析過程這些過程可能是遞歸的例: type
simple |id |array[simple]oftype simpleinteger |char |numdotdotnum3.3
自上而下分析
一個輔助過程procedurematch(t:token);begin iflookahead==tthen lookahead:=nexttoken() elseerror()end;3.3
自上而下分析
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;type
simple |id |array[simple]oftype3.3
自上而下分析
proceduresimple;begin iflookahead=integerthen match(integer) elseiflookahead=charthen match(char) elseiflookahead=numthenbegin match(num);match(dotdot);match(num) end elseerror()end;simpleinteger |char |numdotdotnumprocedurematch(t){if當(dāng)前輸入符號=tthen取下一個符號作為當(dāng)前輸入符號else報錯。}procedureA{ if當(dāng)前符號=‘a(chǎn)’then {match(a);調(diào)用A;} elsereturn;}procedureB{ if當(dāng)前符號=‘b’then {match(b);調(diào)用B;} elseif當(dāng)前符號=‘c’thenreturn;else報錯。
}procedureS{ switch當(dāng)前符號
case‘a(chǎn)’:調(diào)用A; case‘b’:調(diào)用B;}SA|BAaA|
BbB|c
aaaaa,bbbbcaaaaa,aa,bbbc,bbc當(dāng)非終結(jié)符的產(chǎn)生式有多種選擇,即意味著分析過程有不同的展開方式。而我們只能根據(jù)當(dāng)前輸入符號來決定采用哪種展開方式(選擇),這樣就有了FIRST()函數(shù)。1、LL(1)文法的自上而下分析及FIRST函數(shù)理解3.3
自上而下分析3.3.4非遞歸的預(yù)測分析a+b$輸入預(yù)測分析程序分析表M輸出
XYZ$棧3.3
自上而下分析非終結(jié)符輸
入
符
號
id+*
...EE
TE
E
E
+TE
T
T
FT
T
T
T
*FTF
F
id3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$$ET
id*id+id$E
TE
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$$ET
id*id+id$E
TE
$ETF
id*id+id$T
FT
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$$ET
id*id+id$E
TE
$ETF
id*id+id$T
FT
$ETidid*id+id$F
id
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$$ET
id*id+id$E
TE
$ETF
id*id+id$T
FT
$ETidid*id+id$F
id$ET
*
id+id$
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$
$ET
id*id+id$
E
TE
$ETF
id*id+id$
T
FT
$ETid
id*id+id$
F
id
$ET
*
id+id$
$ETF*
*
id+id$
T
*FT
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$$ET
id*id+id$E
TE
$ETF
id*id+id$T
FT
$ETidid*id+id$F
id$ET
*
id+id$$ETF*
*
id+id$T
*FT
$ETF
id+id$
預(yù)測分析器接受輸入id*id+id的動作
3.3
自上而下分析棧
輸
入
輸
出
$E
id*id+id$$ET
id*id+id$E
TE
$ETF
id*id+id$T
FT
$ETidid*id+id$F
id$ET
*
id+id$$ETF*
*
id+id$T
*FT
$ETF
id+id$$ETidid+id$F
id預(yù)測分析器接受輸入id*id+id的動作
棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EEE$2、LL(1)文法的自上而下的非遞歸分析方法理解深度優(yōu)先構(gòu)造分析樹E
TEE
+TE|T
FTT
*FT
|F
(E)|id輸入:id*id棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
TE’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
FT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
ididT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
idT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
id*T
F*FT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
id*T
FFT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
id*T
FididT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ETF
id*id$
T
FT
$ETid
id*id$
F
id
$ET
*
id$
$ETF*
*
id$
T
*FT
$ETF
id$
$ETid
id$
F
id
$ET$$E$T$$EETE
FT
id*T
FidT’E’$棧
輸
入
輸
出
$E
id*id$
$ET
id*id$
E
TE
$ET
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司新推出勞務(wù)分包合同
- 大客戶采購合同的簽訂技巧
- 短期借款合同范文
- 終止房屋租賃合同的協(xié)議
- 地毯生產(chǎn)流程合同
- 復(fù)墾質(zhì)量守諾
- 租賃倉庫續(xù)約延期事項
- 房江湖服務(wù)合同貼心提示
- 法庭證人責(zé)任書
- 高校圖書采購合同
- C語言程序設(shè)計-001-國開機(jī)考復(fù)習(xí)資料
- 組織架構(gòu)圖可編輯
- seagull船員英語STCW甲板操作級答案
- 胎元、命宮、身宮的推算
- 高速公路改擴(kuò)建中的保通設(shè)計分析
- 美人蕉銹病病情調(diào)查報告
- 腦出血后遺癥臨床路徑
- 板式換熱器計算
- 事故隱患排查治理統(tǒng)計分析制度
- 重慶大學(xué)--數(shù)學(xué)模型--數(shù)學(xué)實驗作業(yè)二(共9頁)
- 新課改背景下促進(jìn)小學(xué)教師專業(yè)成長的實踐與探索
評論
0/150
提交評論