制作语法ll(1)并且明确无误

问题描述 投票:0回答:1

我在表格中有一个CFG

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

我试图通过删除导致的左递归来使它成为ll(1)

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

但是,我相信,删除左递归会使语法变得模糊不清。

怎么解决这个问题?

grammar context-free-grammar ll
1个回答
0
投票

原始语法含糊不清。消除左递归既不会产生也不会消除歧义。

歧义:

PB := PB

这种生产什么都不做,但它可以应用任意次

PB := R
PB := R

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

当你删除无意义的作品时,你就会离开

PB := R
R := s

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

© www.soinside.com 2019 - 2024. All rights reserved.