1. 程式人生 > >編譯原理—消除直接左遞迴

編譯原理—消除直接左遞迴

自頂向下語法分析

語法分析從頂部(樹根、文法的開始符號)到底部(葉子、語言的終結符號)為輸入的符號串建立分析樹。

自頂向下語法分析要求無左遞迴,有左遞迴會陷入無窮遞迴。

左遞迴

一個文法G,若存在P經過一次或多次推導得到Pa(即能推匯出以P開頭的式子), 則稱G是左遞迴的

左遞迴分為直接左遞迴和間接左遞迴。
直接左遞迴經過一次推導就可以看出文法存在左遞迴,如P→Pa|b。
間接左遞迴側需多次推導才可以看出文法存在左遞迴,如文法:S→Qc|c,Q→Rb|b,R→Sa|a有S =>Qc =>Rbc =>Sabc


消除左遞迴

a)消除直接左遞迴

將直接左遞迴改寫為右遞迴

P→Pa|b       //含左遞迴

P—>bP'

P'—>aP' | ε     //更改後的右遞迴