语法ll(1)明确

时间:2019-02-25 16:25:51

标签: grammar context-free-grammar ll

我有一个CFG,格式为

PB := PB | R | R
R := s

我试图通过消除导致的左递归使之成为ll(1)

 PB := R PB' | R PB'
 PB' := PB'| ϵ
 R := s

但是,我相信,消除左递归会使语法变得模棱两可。

如何解决?

1 个答案:

答案 0 :(得分:0)

原始语法不明确。消除左递归既不会产生也不会消除歧义。

歧义:

PB := PB

此制作没有任何作用,但可以多次应用

PB := R
PB := R

这两个产品是相同的,因此在任何可能适用的地方,都可以使用另一个。

当您删除无意义的作品时,您将留下

PB := R
R := s

这是明确且非递归的。由于它不是递归的,因此没有要删除的左递归。