语法和SLR,LALR的一些挑战

时间:2014-09-02 13:29:08

标签: compiler-construction programming-languages ll lalr lr

我知道:

  
    

如果语言可以由LL(1)语法生成,则称该语言为LL(1)。可以证明LL(1)语法是

  
not ambiguous and
not left-recursive.

但我遇到了一个问题。

为什么语法

  
    

S-> aBDb

         

B - >拉姆达

         

D-> dD |拉姆达

  

为什么这个语法不是LL(1)也不是SLR也不是LALR?谁能描述我?

1 个答案:

答案 0 :(得分:0)

这个语法确实是LL(1)。这是解析表:

      a     b     d       $
S     aBDb
B           eps   eps
D           eps   dD

这也是SLR(1)。以下是FOLLOW集:

S: $
B: d, b
D: b

以下是配置集:

 S' -> .S$ 
 S  -> .aBDb  ($)

 S' -> S.$

 S  -> a.BDb   ($)
 B  -> .       (b, d)

 S  -> aB.Db   ($)
 D  -> .       (b)
 D  -> .dD     (b)

 D  -> d.D     (b)
 D  -> .dD     (b)
 D  -> .       (b)

 D  -> dD.     (b)

没有转移/减少或减少/减少冲突,因此该语法是SLR(1)。因此,它也是LALR(1)。

希望这有帮助!