消除左递归(第10次作业)

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

     E -> E+T | T

     T -> T*F | F

     F -> (E) | i

消除左递归:

E→TE'

E'→+TE'|ε

T→FT'

T'→*FT'|ε

F→(E)|i

FIRST集:

FIRST(E)→FIRST(T)→FIRST(F)→{ ( , i }

FIRST(E')→{+,ε}

FIRST(T)→FIRST(F)→{ ( , i }

FIRST(T')→{*,ε}

FIRST(F)→{ ( , i }

FOLLOW集:

FOLLOW(E)→{ ) , #  }                    可由 (E)得出

FOLLOW(E')→{ ) , # }               可由 (TE')得出

FOLLOW(T)→{ + , ) , # }           可由 (T+T)得出

FOLLOW(T')→{ + , ) , # }          可由 (T+FT')得出

FOLLOW(F)→{ * , + , ) , # }       可由 F+F 、F*F 、(i+i)得出

SELECT集:

SELECT(E→TE')={ ( , i }

SELECT(E'→+TE')={+}

SELECT(E'→ε)= FIRST(ε)-{ ε } U FOLLOW(E') = FOLLOW(E')= { ) , # }          FIRST(ε)不存在,所以等于FOLLOW(E')

SELECT(T→FT')={ ( , i }

SELECT(T'→*FT')={*}

SELECT(T'→ε)= FIRST(ε)-{ ε } U FOLLOW(T') = FOLLOW(T')={+,),#}        FIRST(ε)不存在,所以等于FOLLOW(T')

SELECT(F→(E))={(}

SELECT(F→i)={i}

2.P101练习7(2)(3)文法改写.

(2)A → aABe|a

 B → Bb|d

提取左公因子:

  A→aA'

  A'→ABe|ε

 消除左递归:

  B→dB'

  B'→bB'|ε

FIRST集:

FIRST(A)→{a}

FIRST(A')→{a,ε}

FIRST(B)→{d}

FIRST(B')→{b,ε}

FOLLOW集:

FOLLOW(A)→{d,#}

FOLLOW(A')→{d,#}                         可由  aaA'Be 得出   d

FOLLOW(B)→{e}

FOLLOW(B')→{e}                    可由  aAdB'e  得出   e

SELECT集:

SELECT(A→aA')={a}

SELECT(A'→ABe)={a}

SELECT(A'→ε)=FIRST(ε) - {ε}∪FOLLOW(A')={ d , # }

SELECT(B→dB')={d}

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

SELECT(B'→ε)=FIRST(ε) - {ε}∪FOLLOW(B')={e}

(3)

S → Aa|b

 A → SB

 B → ab

 代入:

  S→SBa|b

 消除左递归:

  S →bS'

  S'→BaS'|ε

  B→ab

FIRST集:

FIRST(S)→{b}

FIRST(S')→{a,ε}

FIRST(B)→{a}

FOLLOW集:

FOLLOW(S)→{a,#}

FOLLOW(S')→{#}                         

FOLLOW(B)→{a}                    

SELECT集:

SELECT(S →bS')={b}

SELECT(S'→BaS')={a}

SELECT(S'→ε)=FIRST(ε) - {ε}∪FOLLOW(S')={ # }

SELECT(B→ab)={a}

课堂练习:

(1)

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

A->aA

FIRST集:

FIRST(a)={a}

FIRST(A)={ε}

FIRST(A)={c}

FIRST(A)={a}
FIRST(S)={a,c,p}

FOLLOW集:

FOLLOW(S)={#}

FOLLOW(A)= {p}

SELECT集:

SELECT(S->Ap)={a,c,p}

SELECT(S->Ap)={a,c,p}

SELECT(A→a)={a}

SELECT(A→ε)=FIRST(ε) - { ε } U FOLLOW(A) =FOLLOW(A)={p}

SELECT(A→cA)={c}

SELECT(A→aA)={a}

(2)

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

    

FIRST集:

FIRST(S)→FIRST(Ap)→{a,c}

FIRST(S)→FIRST(Bq)→{b,d}

FIRST(A)→FIRST(a)→{a}

FIRST(A)→FIRST(cA)→{c}

FIRST(B)→FIRST(b)→{b}

FIRST(B)→FIRST(dB)→{d}

FOLLOW集:

FOLLOW(S)→{#}

FOLLOW(A)→{p}

FOLLOW(B)→{q}

SELECT集:

SELECT(S->Ap)=FIRST(Ap)={a,c}

SELECT(S->Bq)=FIRST(Bq)={b,d}

SELECT(A->a)={a}

SELECT(A->cA)={c}

SELECT(B->b)={b}

SELECT(B->dB)={d}

猜你喜欢

转载自www.cnblogs.com/lishishi0917/p/11847519.html