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

2021-09-24 15:56:23 字數 729 閱讀 1516

採用擴充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′|…|βna′

a′→α1a′|α2a′|…|αma′|ε

2.左遞迴的消除 (left recursion removal)

⑴ 以某種順序將文法非終結符排列a1 ,a2 ,…,an;

⑵ 改寫文法;

⑶化簡由⑵得到的文法。

⑵改寫文法

執行迴圈:

for i:=1 to n do

begin

①for j:=1 to i-1 do

將產生式規則ai→aj γ改寫

;②消除ai產生式中的直接遞迴

end例題

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

這個公式是死記住的,怎麼記住呢?理解著記憶。首先寫出這個式子,然後b肯定打頭,就是如此了。p pa b是原左遞迴式子,一定是有b的,不然就永遠遞迴下去了 p yp 比如 p abp b p p xp 比如 p abcp 什麼意思呢,就是就是有左遞迴的那一部分,全部規約成乙個式子,這樣就成為直接遞迴,...

編譯原理 消除左遞迴

乙個文法含有下列形式的產生式之一時 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 一般情況...