我在表格中有一个CFG
PB := PB | R | R
R := s
我试图通过删除导致的左递归来使它成为ll(1)
PB := R PB' | R PB'
PB' := PB'| ϵ
R := s
但是,我相信,删除左递归会使语法变得模糊不清。
怎么解决这个问题?
原始语法含糊不清。消除左递归既不会产生也不会消除歧义。
歧义:
PB := PB
这种生产什么都不做,但它可以应用任意次
PB := R
PB := R
这两个产品是相同的,所以在任何地方可能适用,另一个可能会被使用。
当你删除无意义的作品时,你就会离开
PB := R
R := s
这是明确的和非递归的。由于它不是递归的,因此没有要移除的左递归。