c) 消除文法中一切左递归的算法。
  对文法中一切左递归的消除要求文法中不含回路即无A A的推导。满足这个要求的充分条件是,文法中不包含形如A→A的有害规则和A→ε的空产生式。
算法步骤:
  1) 把文法的所有非终结符按某一顺序排序;
  如A1,A2,…,An
  2) 从A1开始消除左部为A1的产生式的直接左递归,然后把左部为A1的所有规则的右部逐个替换左部为A2右部以A1开始的产生式中的A1,并消除左部为A2的产生式中的直接左递归。继而以同样方式把A1,A2的右部代入左部为A3右部以A1或A2开始的产生式中,消除左部为A3的产生式之直接左递归,直到把左部为A1,A2,…, An-1的右部代入左部为An的产生式中,从An中消除直接左递归。
  3) 去掉无用产生式。
  把上述算法归结为:
  若非终结符的排序为A1,A2,…,An
  FOR i∶=1 TO N DO
   BEGIN
    FOR j∶=1 TO i-1 DO
     BEGIN
      若Aj的所有产生式为:
      Aj→δ12|…|δk
      替换形如Aj→Ajr的产生式变为:
      Ai→δ1r|δ2r|…|δkr
     END
    消除Ai中的一切直接左递归。
   END
  最后删除无用产生式。