2012-07-24 66 views
-2

我有以下的生产递归的深浅解析器 - 避免左递归

A -> Aa 
A -> b 

所以很显然,有左递归像

parseA() { 
    parseA();//recursion 
    parsea(); 
} 

据说左递归可以使用可以避免以下规则:

A -> bA' 
A' -> aA'|null 

这里如何避免左递归?仍然存在递归在函数A'中。 有人可以解释我这个。我是这个主题的初学者吗?

+0

写出函数来查看发生了什么。递归现在是尾递归而不是左递归。 – 2012-07-24 15:13:28

+0

实际上这个'左'递归是什么 – 2012-07-24 15:14:38

+4

进入所有活跃的聊天室并向别人打招呼是没有礼貌的,只有链接到你的秒问题。 – 2012-07-24 15:16:33

回答

2

这里如何避免左递归?在函数A'中仍然存在递归。

再次阅读。左递归被避免。非左递归不是。

+0

所以仍然存在递归函数A'? – 2012-07-24 15:12:55

+0

实际上这是什么“左”递归? – 2012-07-24 15:14:01

+2

递归最左边的元素。所以像'A = A something'这样的规则是递归的。所有LL解析器的非左递归都可以。 – Puppy 2012-07-24 15:23:36