2011-12-13 122 views

回答

18

讓我們開始構建LR(1)構式集語法:

(1) 
S' -> .S [$] 
S -> .aEa [$] 
S -> .aFb [$] 
S -> .bFa [$] 
S -> .bEb [$] 

(2) 
S' -> S. [$] 

(3) 
S -> a.Ea [$] 
S -> a.Fb [$] 
E -> .e [a] 
F -> .e [b] 

(4) 
E -> e. [a] 
F -> e. [b] 

(5) 
S -> aE.a [$] 

(6) 
S -> aEa. [$] 

(7) 
S -> aF.b [$] 

(8) 
S -> aFb. [$] 

(9) 
S -> b.Fa [$] 
S -> b.Eb [$] 
E -> .e [b] 
F -> .e [a] 

(10) 
E -> e. [b] 
F -> e. [a] 

(11) 
S -> bF.a [$] 

(12) 
S -> bFa. [$] 

(13) 
S -> bE.b [$] 

(14) 
S -> bEb. [$] 

如果喲日子會把你的通知,狀態(4)和(10)具有相同的核心,所以在LALR(1)自動機,我們會合並在一起,以形成新的狀態

(4, 10) 
E -> e. [a, b] 
F -> e. [a, b] 

現在有一個減少/減少它中的衝突(順便說一句,LR(1)解析器中不存在的LALR(1)中的所有衝突都是reduce/reduce)。這解釋了爲什麼語法是LR(1)而不是LALR(1)。

希望這會有所幫助!

+0

好吧,你幫了我很多忙,我意識到在我的pdf中有一個分析錯誤,但無論如何,我發現這個[here](http://compilers.iecc.com/comparch/article/95- 02-053),我想證明自己,我的結果是它是一個有效的LARL(1)語法,所以我猜這個網站有錯誤嗎?我對嗎? – 2011-12-13 21:26:06