消除左递归

1.将以下文法消除左递归,分析符号串 i*i+i 。

   并分别求FIRST集、FOLLOW集,和SELECT集

     E -> E+T | T

     T -> T*F | F

     F -> (E) | i

 消除左递归_第1张图片

消除左递归_第2张图片

2.P101练习7(2)(3)文法改写,并分别求FIRST集、FOLLOW集,和SELECT集

 

消除左递归:                FIRST集:          FOLLOW集:             SELECT集:

A→aA'                                 FIRST(A)→{a}        FOLLOW(A)→{d,#}              SELECT(A→aA')={d,#}

A'→ABe|ε        FIRST(A')→{a,ε}       FOLLOW(A')→{d,#}              SELECT(A'→ABe)={a}

B→dB'           FIRST(B)→{d}        FOLLOW(B)→{e}            SELECT(A'→ε)={d,#}

B'→bB'|ε          FIRST(B')→{b,ε}        FOLLOW(B')→{e}            SELECT(B→dB')={e}

                                                SELECT(B'→bB')={b}

                                               SELECT(B'→ε)={e}

 

 

(3)S→Aa|b

 A→SB

 B→ab

消除左递归_第3张图片

课堂练习:

求以下文法的FIRST集、FOLLOW集和SELECT集。

S->Ap
A->a |ε
A->cA

A->aA

 消除左递归_第4张图片

S->Ap
S->Bq
A->a
A->cA
B->b
B->dB

消除左递归_第5张图片

消除左递归_第6张图片

你可能感兴趣的:(消除左递归)