如何消除 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)。
如何消除以下类型的左递归。我似乎无法将一般规则应用到这个特定的规则上。
A -> A | a | b
通过使用消除规则你得到:
A -> aA' | bA'
A' -> A' | epsilon
其中还有左递归。
这说明语法 being/not 是 LL(1) 吗?
谢谢。
注意规则
A → A
从某种意义上说,完全没有用。应用此规则对推导没有任何作用。因此,我们可以安全地将它从语法中删除,而无需更改语法产生的内容。这就剩下
A → a | b
这是 LL(1)。