編譯原理(三)直接左遞迴與間接左遞迴的消除

2021-10-05 11:25:10 字數 610 閱讀 1127

這個公式是死記住的,怎麼記住呢?理解著記憶。首先寫出這個式子,然後b肯定打頭,就是如此了。

p->pa|b是原左遞迴式子,一定是有b的,不然就永遠遞迴下去了

p  →  yp';        比如:p  →  abp' | b p'

p' → xp' | ε; 比如: p' → abcp' | ε

什麼意思呢,就是就是有左遞迴的那一部分,全部規約成乙個式子,這樣就成為直接遞迴,然後做就可以了,當然首先刪除無用符號。採用自下而上往上消除,最後只剩下乙個字母,然後就完成了

s  →  sabc |abc | bc | c

∴ x = abc,y = abc | bc | c

∴ 直接消除左遞迴的結果是:

s → abcs' | bcs' | cs'

s' → abcs' | ε

5)刪除其中不可達的非終結符,這裡就是q、r了

∴ 最終消除左遞迴的結果是

s  →  abcs' | bcs' | cs'

s' → abcs' | ε

這是自上而下的ll文法才會出現的問題。根本不難的。

編譯原理 直接左遞迴和間接左遞迴的消除

採用擴充bnf表示 設有產生式 a a a a 設有產生式 a a a a 引進新的非終結符號,將左遞迴改寫為右遞迴。設有產生式 a a a a 設有產生式 a a 1 a 2 a m 1 2 n 其中yi i 1,2,n 均不以符號u為首,增加新非終結 符號u 將上述產生式變換為 a 1a 2a ...

編譯原理 消除左遞迴

乙個文法含有下列形式的產生式之一時 1 a a a vn,v 2 a b b a a b vn,v 則稱該文法是左遞迴的。乙個文法g 若存在 p經過一次或多次推導得到 pa 即能推導出以 p開頭的式子 則稱 g是左遞迴的。然而,乙個文法是左遞迴時,不能採取自頂向下分析法。左遞迴分為直接左遞迴和間接左...

編譯原理 消除左遞迴

乙個文法含有下列形式的產生式之一時 1 a a a vn,v 2 a b b a a b vn,v 則稱該文法是左遞迴的。然而,乙個文法是左遞迴時,不能採取自頂向下分析法。消除左遞迴方法有 a 把直接左遞迴改寫為右遞迴 設有文法產生式 a a 其中 非空,不以a打頭。可寫為 a a a a 一般情況...