10、消除左递归

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

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

     E → E+T | T
     T → T*F | F
     F→ (E) | i

2.P101练习7(2)(3)

文法改写,并分别求FIRST集、FOLLOW集,和SELECT集

课堂练习

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

SAp
Aa |ε
A→cA

A→aA

S→Ap
S→Bq
A→a
A→cA
B→b
B→dB

 ------------------------------------------------------------------------------

解:

1.

E → TE'
E → +TE' | ε
T → FT'
T' → *FT' | ε
F → (E) | i
 
分析符号串i*i+i:
 
FIRST集:
FIRST(E)=FIRST(T)=FIRST(F)={ ( , i }
FIRST(E')={ + , ε }
FIRST(E')={ + , ε }
FIRST(T')={ * , ε }
 
FOLLOW集:
FOLLOW(E)={ ) , # }
FOLLOW(E')= FOLLOW(E) ={ ) , # }
FOLLOW(T)={ + , ) , # }
FOLLOW(T')=FOLLOW(T)= {+, ) , # }
FOLLOW(F)={ +, * , ) , # }
 
SELECT集:
SELECT( E→TE' )={ (,i }
SELECT( E'→+TE' )={ + }
SELECT( E→ ε )={ ( ) , # }
SELECT( E→FT' )={ (,i }
SELECT( E→ *FT' )={ * }
SELECT( )={ T'→ε }=(+, ) ,# }
SELECT( F→(E) )={ ( }
SELECT( )=( F→i )={ i }
 
---------------------------------------------------
2、

练习7(2)

A→aABe|a

B→Bb|d

 FIRST集

FIRST(aA’)={a}

FIRST(aA’Be)={a}

FIRST(ε)={ε}

FIRST(dB’)={d,b}

FIRST(bB’)={b}

FOLLOW集

FOLLOW(A’)={d}

FOLLOW(A)={#}

FOLLOW(B’)={ε}

FOLLOW(ε)={ε}

FOLLOW(B)={#}

SELECT集

SELECT(A→aA’)={a,e,d,b}

SELECT(A’→aA’Be)={a,e,d,b}

SELECT(A’→ε)={a,e,d,b}

SELECT(B→dB’)={d,b}

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

SELECT(B’→ε)={b}

---------------------------------------------------

(3)

S→Aa|b

A→SB

B→ab

 FIRST集

 FIRST(bS’)={b,a}

 FIRST(aS’B)={a}

 FIRST(ε)={ε}

 FIRST(ab)={a}

FOLLOW集

FOLLOW(S’)={a}

FOLLOW(S)={#}

SELCECT集

SELECT(S→bS’)={a,b}

SELECT(S’→aS’ab)={a,b}

SELECT(S’→ε)={a,b}

---------------------------------------------------

S→Ap
A→a |ε
A→cA

A→aA

 FIRST集

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

FOLLOW集

FOLLOW(S)={#}
FOLLOW(A)={p}

SELCECT集

SELECT(S->Ap)={a,c,p}
SELECT(A->a)={a}
SELECT(A->ε)={p}
SELECT(A->cA)={c}
SELECT(A->aA)={a}

S→Ap
S→Bq
A→a
A→cA
B→b
B→dB

FIRST集

FIRST(S)={a,c}
FIRST(S)={b,d}
FIRST(A)={a}
FIRST(A)={c}
FIRST(B)={b}
FIRST(B)={d}

FOLLOW集

FOLLOW(S)={#}
FOLLOW(A)={p}
FOLLOW(B)={q}

SELCECT集

S->Ap S->Bq
A->a
A->cA
B->b
B->dB
SELECT()={}
SELECT(S->Ap)={a,c}
SELECT(S->Bq)={b,d}
SELECT(A->a)={a}
SELECT(A->cA)={c}
SELECT(B->b)={b}
SELECT(B->dB)={d}

猜你喜欢

转载自www.cnblogs.com/dyun3/p/11863059.html
今日推荐