版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,第六章 自下而上的語(yǔ)法分析,清華大學(xué)計(jì)算機(jī)系,2,自下而上語(yǔ)法分析概述簡(jiǎn)單優(yōu)先分析算符優(yōu)先分析,3,自下而上語(yǔ)法分析概述,As the name suggests, bottom-up parsing begins with a string and tries to backwards to the start symbol by applying the productions in reverse.也稱(chēng)為移進(jìn)--歸約分
2、析,自底向上的語(yǔ)法分析,.,VAR,;,A,BEGIN,END,READ,(,),A,VAR A;BEGIN READ(A)END.,移進(jìn)規(guī)約接受錯(cuò)誤,4,自下而上語(yǔ)法分析概述,如名字如示,自下而上語(yǔ)法分析試圖將一個(gè)字符串反向歸約至開(kāi)始符號(hào)。自下而上語(yǔ)法分析比自上而下語(yǔ)法分析更有效率,對(duì)語(yǔ)法的限制更少,5,文法G[S]:(1) S → aAcBe(2) A → b(3) A → Ab(4) B → d,a,b,b
3、,c,d,e,,,,步驟,符號(hào)棧,輸入符號(hào)串,動(dòng)作,,1) # abbcde# 移進(jìn),2) #a bbcde# 移進(jìn),4) #aA bcde# 移進(jìn),6) #aA cde# 移進(jìn),7) #aAc de# 移進(jìn),9)
4、 #aAcB e# 移進(jìn),11) #S # 接受,分析符號(hào)串a(chǎn)bbcde是否G[S]的句子,對(duì)輸入串a(chǎn)bbcde#的移進(jìn)-規(guī)約分析過(guò)程,6,自下而上語(yǔ)法分析算法的一般描述,Let I = input stringrepeatpick a non-empty substring ? of Iwhere X? ? is a p
5、roductionif no such ?, backtrackreplace one ? by X in Iuntil I = “S” (the start symbol) or all possibilities are exhausted,7,算法應(yīng)考慮的問(wèn)題,算法是否能夠終止?算法是否快速?算法是否能夠處理所有的情況?在每一步中如何選擇子串進(jìn)行歸約?,8,自下而上語(yǔ)法分析的策略:移進(jìn)-規(guī)約分析;移進(jìn)
6、就是將一個(gè)終結(jié)符推進(jìn)棧歸約就是將0個(gè)或多個(gè)符號(hào)從棧中彈出,根據(jù)產(chǎn)生式將一個(gè)非終結(jié)符壓入棧移進(jìn)-歸約過(guò)程是自頂向下最右推導(dǎo)的逆過(guò)程(規(guī)范歸約),9,文法G[E]:E ? T + E | TT ? int * T | int | (E),E,T,E,+,int,*,int,T,int,T,10,A Shift-Reduce Parse in Detail (1),+,int,*,int,int,?,11,A Shift-Reduce
7、 Parse in Detail (2),+,int,*,int,int,?,12,A Shift-Reduce Parse in Detail (3),+,int,*,int,int,?,13,A Shift-Reduce Parse in Detail (4),+,int,*,int,int,?,14,A Shift-Reduce Parse in Detail (5),+,int,*,int,int,T,?,15,A Shift-
8、Reduce Parse in Detail (6),T,+,int,*,int,int,T,?,16,A Shift-Reduce Parse in Detail (7),T,+,int,*,int,int,T,?,17,A Shift-Reduce Parse in Detail (8),T,+,int,*,int,int,T,?,18,A Shift-Reduce Parse in Detail (9),T,+,int,*,int
9、,T,int,T,?,19,A Shift-Reduce Parse in Detail (10),T,E,+,int,*,int,T,int,T,?,20,A Shift-Reduce Parse in Detail (11),E,T,E,+,int,*,int,T,int,T,?,21,我們?nèi)绾螞Q定什么時(shí)候移進(jìn),什么時(shí)候規(guī)約?考慮 int | * int + int我們可以用 T ? int進(jìn)行歸約,而得到 T | * int
10、+ int致命錯(cuò)誤: 無(wú)法規(guī)約到開(kāi)始符號(hào) E直覺(jué): Want to reduce only if the result can still be reduced to the start symbol一般的移進(jìn)-歸約策略:若句柄在棧頂出現(xiàn),則歸約否則移進(jìn)句柄(Handles):句型的最左直接短語(yǔ),22,短語(yǔ)、直接短語(yǔ)、句柄的定義:文法G[S], S αAδ且A b則稱(chēng)b是句型αbδ相對(duì)于非終結(jié)符A的短語(yǔ)。
11、若有A ? b則稱(chēng)b是句型αbδ相對(duì)于該規(guī)則A → b的直接短語(yǔ)。 一個(gè)句型的最左直接短語(yǔ)稱(chēng)為該句型的句柄。,23,Conflicts,實(shí)際應(yīng)用中可能出現(xiàn)的’沖突‘移進(jìn)與歸約都合法,產(chǎn)生移進(jìn)-歸約沖突歸約時(shí)可以適用兩個(gè)不同的產(chǎn)生式,產(chǎn)生歸約-歸約沖突,24,Source of Conflicts,二義文法會(huì)導(dǎo)致‘沖突’但應(yīng)注意,許多的非二義文法同樣會(huì)導(dǎo)致‘沖突’,25,Conflict Example,考慮下面的二義文法:,
12、26,One Shift-Reduce Parse,27,Another Shift-Reduce Parse,28,Conflict Solutions,改寫(xiě)文法根據(jù)產(chǎn)生式出現(xiàn)的順序來(lái)選擇根據(jù)算符的優(yōu)先級(jí),29,自下而上的分析算法,優(yōu)先分析法簡(jiǎn)單優(yōu)先分析法算符優(yōu)先分析法LR分析,30,簡(jiǎn)單優(yōu)先分析法,按照文法符號(hào)(包括終結(jié)符和非終結(jié)符)的優(yōu)先關(guān)系確定句柄。示例見(jiàn)下頁(yè),31,文法G[S]:(1) S → bAb(2) A
13、 → (B|a(3) B → Aa),步驟,符號(hào)棧,輸入符號(hào)串,動(dòng)作,,1) # b(aa)b# #<b,移進(jìn),2) #b (aa)b# b<(,移進(jìn),3) #b( aa)b# (<a,移進(jìn),4) #b(a a)b# a>a,歸約A→a,5
14、) #b(A a)b# A=a,移進(jìn),6) #b(Aa )b# a=),移進(jìn),7) #b(Aa) b# )>b,歸約B→Aa),8) #b(B b# B>b,歸約A→(B,9) #bA b# A=b,移進(jìn),10)
15、 #bAb # b>#,歸約S→bAb,11) #S # 接受,對(duì)輸入串b(aa)#的簡(jiǎn)單優(yōu)先分析過(guò)程,簡(jiǎn)單優(yōu)先關(guān)系矩陣,32,優(yōu)先關(guān)系,優(yōu)先關(guān)系X=Y ? 文法G中存在產(chǎn)生式A→...XY...XY? 文法G中存在產(chǎn)生式A→...BD...,且B ...X,D Y...如何確定兩個(gè)文法符號(hào)之間的優(yōu)先關(guān)系?,33,簡(jiǎn)單優(yōu)
16、先文法的定義,滿(mǎn)足以下條件的文法是簡(jiǎn)單優(yōu)先文法(1)在文法符號(hào)集V中,任意兩個(gè)符號(hào)之間最多只有一種優(yōu)先關(guān)系成立。(2)在文法中任意兩個(gè)產(chǎn)生式?jīng)]有相同的右部(3)不含空產(chǎn)生式,34,算符優(yōu)先分析,某些文法具有“算符”特性表達(dá)式運(yùn)算符(優(yōu)先級(jí)、結(jié)合性)人為地規(guī)定其算符的優(yōu)先順序,即給出優(yōu)先級(jí)別和同一級(jí)別的結(jié)合性只考慮算符之間的優(yōu)先關(guān)系來(lái)確定句柄,35,文法G[E]:E→E+E|E-E|E*E|E/E|E?E|(E)|i,步驟,符
17、號(hào)棧,輸入符號(hào)串,動(dòng)作,,1) # i+i*i# #<i,移進(jìn),2) #i +i*i# #+,規(guī)約,3) #E +i*i# #<+,移進(jìn),4) #E+ i*i# +<i,移進(jìn),5) #E+i *i#
18、 +*,規(guī)約,6) #E+E *i# +<*,移進(jìn),7) #E+E* i# *<i,移進(jìn),8) #E+E*i # *#,規(guī)約,9) #E+E*E # +#,規(guī)約,10) #E+E #
19、 ##,規(guī)約,11) #E # 接受,對(duì)輸入串i+i*i的算符優(yōu)先分析過(guò)程,,算符優(yōu)先關(guān)系表,36,如何確定算符優(yōu)先關(guān)系?,(1)i的優(yōu)先級(jí)最高(1) ?優(yōu)先級(jí)次于i,右結(jié)合(2)*和/優(yōu)先級(jí)次之,左結(jié)合(3)+和-優(yōu)先級(jí)最低,左結(jié)合(4)括號(hào)‘(’,‘)’的優(yōu)先級(jí)大于括號(hào)外的運(yùn)算符,小于括號(hào)內(nèi)的運(yùn)算符,內(nèi)括號(hào)的優(yōu)先性大于外括號(hào)(5)#的優(yōu)先性低于與其相鄰的算
20、符,文法G[E]:E→E+E|E-E|E*E|E/E|E?E|(E)|i,算符優(yōu)先關(guān)系表,37,算符文法的定義,定義 如果不含空產(chǎn)生式的上下文無(wú)關(guān)文法 G 中沒(méi)有形如 U?…VW…的產(chǎn)生式,其中V,W∈VN則稱(chēng)G 為算符文法(OG)。性質(zhì)1:在算符文法中任何句型都不包含兩個(gè)相鄰的非終結(jié)符.(數(shù)學(xué)歸納法)性質(zhì)2:如 Vx 或 xV 出現(xiàn)在算符文法的 句型 ? 中,其中V∈VN,x∈VT, 則 ? 中任何 含 x 的短語(yǔ)必含有V.(
21、反證法),38,算符優(yōu)先關(guān)系的定義,在OG中 定義 (算符優(yōu)先關(guān)系) x = y G中有形如.U?…xy…或U ? …xVy.. 的產(chǎn)生式。 x y G中有形如.U ? …Wy…的產(chǎn)生式,而 W …x或W … xV規(guī)定 若 S x…或 S Vx… 則 # #,39,算
22、符優(yōu)先文法的定義,在 OG文法 G 中,若任意兩個(gè)終結(jié)符間至多有一種算符優(yōu)先關(guān)系存在,則稱(chēng)G 為算符優(yōu)先文法(OPG)。注意:允許b>c,c>b;不允許b>c,b<c,b=c 結(jié)論 算符優(yōu)先文法是無(wú)二義的。,40,算符優(yōu)先關(guān)系表的構(gòu)造,由定義直接構(gòu)造由關(guān)系圖法構(gòu)造算符優(yōu)先關(guān)系表,41,首先引入兩個(gè)概念FIRSTVT(B)={b|B b…或B Cb...}對(duì)于非終結(jié)符B,其往下推導(dǎo)所可
23、能出現(xiàn)的首個(gè)算符LASTVT(B)={a|B a…或B aC...}對(duì)于非終結(jié)符B,其往下推導(dǎo)所可能出現(xiàn)的最后一個(gè)算符,42,如何計(jì)算算符優(yōu)先關(guān)系,1) ‘=‘關(guān)系直接看產(chǎn)生式的右部,若出現(xiàn)了A →…ab…或A →…aBb,則a=b2)’’關(guān)系求出每個(gè)非終結(jié)符B的LASTVT(B)若A→…Bb…,則?a∈LASTVT(B),a>b,43,文法G[E]:(0) E’→#E#(1) E→E+T(2)
24、 E→T(3) T→T*F(4) T→F(5) F→P?F|P(6) P→(E)(7) P→i,FIRSTVT(E’)={#}FIRSTVT(E)={+,*,?,(,i}FIRSTVT(T)={*,?,(,i}FIRSTVT(F)={?,(,i}FIRSTVT(P)={(,i}LASTVT(E’)={#}LASTVT(E)={+,*,?,),i}LASTVT(T)={*,?,),i}LASTVT(F)={?,)
25、,i}LASTVT(P)={),i},1)‘=’關(guān)系由產(chǎn)生式(0)和(6),得#=#,(=)2)‘<’關(guān)系找形如:A→…aB…的產(chǎn)生式#E:則#<FIRSTVT(E)+T: 則+<FIRSTVT(T) *F: 則*<FIRSTVT(F)?F:則 ?<FIRSTVT(F)(E: 則 (<FIRSTVT(E),3)‘>’關(guān)系找形如:A→…Bb…的產(chǎn)生式E# ,則 LASTV
26、T(E)>#E+ ,則 LASTVT(E)>+ T* ,則 LASTVT(T)>* P? ,則 LASTVT(P)>? E) ,則 LASTVT(E)>),44,算符優(yōu)先分析算法,歸約過(guò)程中,只考慮終結(jié)符之間的優(yōu)先關(guān)系來(lái)確定句柄,而與非終結(jié)符無(wú)關(guān)。這樣去掉了單非終結(jié)符的歸約,所以用算符優(yōu)先分析法的規(guī)約過(guò)程與規(guī)范歸約是不同的,P110.為解決在算符優(yōu)先分析過(guò)程中如何尋找句柄,引進(jìn)最左素短語(yǔ)的概念,4
27、5,算符文法的任一句型有如下形式:#N1a1N2a2......NnanNn+1#,若Niai......NjajNj+1為句柄,則有ai-1 ai+1對(duì)于算符優(yōu)先文法,如果aNb(或ab)出現(xiàn)在句型r中若ab,則在r中必含有a而不含b的短語(yǔ)存在若a=b,則在r中含有a的短語(yǔ)必含有b,反之亦然定義 cfg G 的句型的素短語(yǔ)是一個(gè)短語(yǔ),它至少包含一個(gè)終結(jié)符,且除自身外不再包含其他素短語(yǔ)。處于句型最左邊的素短語(yǔ)為最左素短
28、語(yǔ),46,文法G[E]:(1) E→E+T(2) E→T(3) T→T*F(4) T→F(5) F→P?F|P(6) P→(E)(7) P→i,句型#T+T*F+i#其短語(yǔ)有:T+T*F+iT+T*FTT*Fi,E,E,T,+,+,E,T,F,*,F,T,T,i,,,,,,,,,,,,,最左素短語(yǔ)為:T*F,句型#N+N*N+i#的歸約過(guò)程,N,N,+,+,N,N,i,*,N,N,,,,,,,,,,,N,47,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 語(yǔ)法分析自下而上分析
- 語(yǔ)法分析-自下而上分析
- 編譯原理分知識(shí)點(diǎn)習(xí)題自下而上語(yǔ)法分析
- 編譯原理語(yǔ)法分析
- 英語(yǔ)語(yǔ)法分析
- 語(yǔ)法分析課程設(shè)計(jì)---編譯原理語(yǔ)法分析器的設(shè)計(jì)與實(shí)現(xiàn)
- 語(yǔ)法分析作業(yè)及答案
- 語(yǔ)法分析自頂向下的分析
- 雅思閱讀例句語(yǔ)法分析
- 語(yǔ)法分析程序遞歸下降法
- 編譯語(yǔ)法分析實(shí)驗(yàn)報(bào)告
- 寂靜的春天的綠色語(yǔ)法分析
- 新聞?dòng)⒄Z(yǔ)的功能語(yǔ)法分析.pdf
- 第二章 語(yǔ)法分析
- 當(dāng)代建筑設(shè)計(jì)形式語(yǔ)法分析
- 寂靜的春天的綠色語(yǔ)法分析_1490(1)
- 語(yǔ)法分析和語(yǔ)義分析流程圖
- 漢語(yǔ)語(yǔ)法分析問(wèn)題呂叔湘
- 杭州方言特殊詞匯的語(yǔ)法分析.pdf
- 小說(shuō)視角的系統(tǒng)功能語(yǔ)法分析.pdf
評(píng)論
0/150
提交評(píng)論