例如,有文法的产生式为: (1) S→Qc|c (2) Q→Rb|b (3) R→Sa|a 该文法的每个非终结符为间接左递归,按上述方法消除该文法的一切左递归。 若非终结符排序为S、Q、R, 左部为S的产生式(1)无直接左递归,(2)中右部不含S,所以把(1)右部代入(3)得: (4) R→Qca|ca|a 再将(2)的右部代入(4)得: (5) R→Rbca|bca|ca|a 对(5)消除直接左递归得: R→(bca|ca|a)R′ R′→bcaR′|ε 最终文法变为: S→Qc|c Q→Rb|b R→(bca|ca|a)R′ R′→bcaR′|ε 若非终结符的排序为R、Q、S, 则把(3)代入(2)得: Q→Sab|ab|b 再将此代入(1)得: S→Sabc|abc|bc|c 消除该产生式的左递归后,最终文法变为: S→(abc|bc|c)S′ S′→abcS′|ε Q→Rb|b R→Sa|a 由于Q、R为不可到达的非终结符,所以以Q、R为左部及包含Q、R的产生式应删除。当非终结符的排序不同时,最后结果的产生式形式不同,但它们是等价的。 |