我有以下的生產遞歸的深淺解析器 - 避免左遞歸
A -> Aa
A -> b
所以很顯然,有左遞歸像
parseA() {
parseA();//recursion
parsea();
}
據說左遞歸可以使用可以避免以下規則:
A -> bA'
A' -> aA'|null
這裏如何避免左遞歸?仍然存在遞歸在函數A'中。 有人可以解釋我這個。我是這個主題的初學者嗎?
我有以下的生產遞歸的深淺解析器 - 避免左遞歸
A -> Aa
A -> b
所以很顯然,有左遞歸像
parseA() {
parseA();//recursion
parsea();
}
據說左遞歸可以使用可以避免以下規則:
A -> bA'
A' -> aA'|null
這裏如何避免左遞歸?仍然存在遞歸在函數A'中。 有人可以解釋我這個。我是這個主題的初學者嗎?
這裏如何避免左遞歸?在函數A'中仍然存在遞歸。
再次閱讀。左遞歸被避免。非左遞歸不是。
所以仍然存在遞歸函數A'? – 2012-07-24 15:12:55
實際上這是什麼「左」遞歸? – 2012-07-24 15:14:01
遞歸最左邊的元素。所以像'A = A something'這樣的規則是遞歸的。所有LL解析器的非左遞歸都可以。 – Puppy 2012-07-24 15:23:36
寫出函數來查看發生了什麼。遞歸現在是尾遞歸而不是左遞歸。 – 2012-07-24 15:13:28
實際上這個'左'遞歸是什麼 – 2012-07-24 15:14:38
進入所有活躍的聊天室並向別人打招呼是沒有禮貌的,只有鏈接到你的秒問題。 – 2012-07-24 15:16:33