在上下文无关语法中删除左递归

时间:2010-09-30 00:21:10

标签: context-free-grammar left-recursion

试图找出在上下文无关语法中删除左递归。我已经习惯了某些形式,但这个让我感到有些困惑。

S --> S {S} S | (A) | a
A --> {S} A | epsilon

我还必须设计一个像样的解析器,我可以做。然而,弄清楚这个左递归(特别是第一个)让我感到困惑。

2 个答案:

答案 0 :(得分:0)

关于左递归有一篇有趣的维基百科文章。它还有一节关于删除非上下文语法的左递归。

http://en.wikipedia.org/wiki/Left_recursion

答案 1 :(得分:0)

试试这个:

S --> a [ { S } S ]
    | ( [ A ] ) [ {S} S ]


A --> { S } [ A ]