2011-12-13 28 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