繁体   English   中英

语法中的间接左递归?

[英]Indirect left recursion in my grammar?

我的语法似乎有间接左递归的情况,研究了其他一些类似的问题,无法在它们和我的语法之间建立一种精神上的联系,我无法理解如何解决它。

A  ::= A' a
     | A
     | b

A' ::= c
     | A

A调用A' ,但是A'cA ,这导致左递归,如何在消除左递归的同时将其重新排列为等效语法?

您有以下作品:

1:  A  -> A' a
2:  A  -> A
3:  A  -> b
4:  A' -> c
5:  A' -> A

首先要注意的是,产生式#2使这种语法变得模棱两可,而且实际上是毫无意义的。 让我们删除它。

1:  A  -> A' a
3:  A  -> b
4:  A' -> c
5:  A' -> A

Wikipedia上的“左递归”文章包含一种(未提供资源) 算法,可消除所有左递归 ,包括间接左递归。 让我们忽略此特定算法,而将注意力集中在此概念上:首先将间接递归转换为通过替换进行的直接递归,然后通过添加尾部非终结符来解决直接递归。

例如,我们可以A'生产中的A'替换为

6:  A  -> c a    (see #1 and #4)
7:  A  -> A a    (see #1 and #5)

语法如下:

4:  A' -> c
5:  A' -> A
6:  A  -> c a
7:  A  -> A a

并且我们已经将所有间接递归转换为直接递归。 剩下的就是删除A的直接递归:

4:  A' -> c
5:  A' -> A
6:  A  -> c a T
8:  T  -> epsilon
9:  T  -> a T

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM