2013-08-16 52 views

回答

1

原始語法是左遞歸的,因此不是LL(1),實際上對於任何k都不是LL(k)。

幸運的是,左遞歸可以被刪除。標準算法通過分別解決即時左遞歸(如我們在這裏)和間接左遞歸這樣做。即時左遞歸是兩者中較簡單的情況。維基百科的文章解釋了它here

基本上你移動以下遞歸參考到一個新的生產(尾部),其還具有ε替代

X -> ε|+E|*E 

然後刪除從原來生產左遞歸的替代方案,並且允許X部件,遵循所有剩餘的非遞歸的替代品,

E -> (E)X|aX 

請注意,您的提案錯過X以下括號內的表達,這樣就不會RECOG掌握相同的語言。

+0

FWIW:原始語法也是模糊的,並且因此不LR(k)也適用於任何k。轉換的語法不是不明確的,但它的解析不符合正常的算術優先級。可能這兩個事實將在本課程後面介紹。 – rici

-1

)查找FIRST(S)和FOLLOW(S),用於此語法: 小號→d S上小號 →C S B小號 →ε

+1

這是甚至與這個問題有關嗎? – CAFEBABE