自顶向下语法分析方法:消除左递归

直接左递归

形如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'|ε
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章