自頂向下語法分析方法:消除左遞歸

直接左遞歸

形如A->Aβ,A∈非終結符,β∈終結符∪非終結符。

消除直接左遞歸

一般形式:
A->Aα1|Aα2|...|Aαm|β1|β2|...|βn
其中,αi(1≤i≤m)不等於ε,βj(1≤j≤n)不以A開頭,消除直接左遞歸改寫爲:
A->β1A'|β2A'|...|βnA'
A'->α1A'|α2A'|...|αmA'|ε

例如:

文法:
S->Sa
S->b
消除直接左遞歸:
S->bS'
S'->aS'|ε

間接左遞歸

形如A->Bβ,B->Aα,A,B∈非終結符,α,β∈終結符∪非終結符。

消除間接左遞歸
先通過產生式非終結符置換,變爲直接左遞歸,然後按直接左遞歸方法消除

例如:

文法:
(1)A->aB
(2)A->Bb
(3)B->Ac
(4)B->d
用(1)、(2)的右部置換(3)中的非終結符A,得到:
B->aBc
B->Bbc
B->d
消除直接左遞歸:
B->aBcB'|dB'
B'->bcB'|ε
把原來的A產生式加入,最終文法爲:
A->aB
A->Bb
B->aBcB'|dB'
B'->bcB'|ε
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章