编译原理-消除间接左递归算法的细节补充

消除左递归的算法如下:

步骤1中,在消除间接左递归时,关于P1,P2.....Pn的排序,建议这样处理:

建议把文法的开始符号S作为Pn,这样最后得到的产生式就只有2个,很简便。

相反, S作为P1的话,最后文法G的产生式可能会很多个。

这是为何? 

如下图所示,间接左递归的消除就是循环圈不断减少非终结符的过程,那么最后会只剩下一个非终结符A的循环(即直接左递归),再消去直接左递归,并删去多余的语句,即完成。

但开始符号是S,所以至少还会多一个S->A的产生式(甚至更多,如S->B,B->A之类);

那么我们人为的令Pn为S,最后就只有两个产生式,分别以S,S'开始。

posted @ 2023-10-23 11:17  geekChen01  阅读(0)  评论(0)    收藏  举报  来源