如何消除 LL 解析器的左递归

How to eliminate this Left Recursion for LL Parser

如何消除以下类型的左递归。我似乎无法将一般规则应用到这个特定的规则上。

A -> A | a | b

通过使用消除规则你得到:

A  -> aA' | bA'
A' -> A'  | epsilon

其中还有左递归。

这说明语法 being/not 是 LL(1) 吗?

谢谢。

注意规则

A → A

从某种意义上说,完全没有用。应用此规则对推导没有任何作用。因此,我们可以安全地将它从语法中删除,而无需更改语法产生的内容。这就剩下

A → a | b

这是 LL(1)。