消除左递归方法:
1.直接左递归消除:
原文法: P->Pa1|Pa2|...|Pan|b1|b2|...|bn
消除后: { P->b1P'|b2P'|...|bnP'
P'->a1P'|a2P'|...|anP' }
2.间接左递归消除:
1>把所有非终结符号按一定序列排序为P1,P2,...Pn
2>FOR i=1 TO n DO /*依次处理每个非终结符号*/
FOR j=1 to i-1 DO /*处理第1个到i-1个*/
若Pi->pj
则改为Pi->S1r|S2r|...|Skr
其中Pj->S1|S2|...|Sk
对Pi消除直接左递归
3>去掉无用符号和无用产生式