我有一个CFG,格式为
PB := PB | R | R
R := s
我试图通过消除导致的左递归使之成为ll(1)
PB := R PB' | R PB'
PB' := PB'| ϵ
R := s
但是,我相信,消除左递归会使语法变得模棱两可。
如何解决?
答案 0 :(得分:0)
原始语法不明确。消除左递归既不会产生也不会消除歧义。
歧义:
PB := PB
此制作没有任何作用,但可以多次应用
PB := R
PB := R
这两个产品是相同的,因此在任何可能适用的地方,都可以使用另一个。
当您删除无意义的作品时,您将留下
PB := R
R := s
这是明确且非递归的。由于它不是递归的,因此没有要删除的左递归。