2012-07-24 87 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