作业十

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

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

     E -> E+T | T

     T -> T*F | F

     F -> (E) | i

解:

消除左递归:E→TE'

                     E'→+TE'|ε

                     T→FT'

                     T'→*FT'|ε  

                   F→(E)|i

 FIRST集:FIRST(TE')={T}    

                   FIRST(+TE')={+}

                FIRST(ε)={ε}

                FIRST(FT')={F}  

                  FIRST(*FT')={*}

             FIRST((E))={(}

             FIRST(i)={i}

FOLLOW集:FOLLOW(E)={)}

                 FOLLOW(E')={#}

                 FOLLOW(T)={E'}

                 FOLLOW(T')={#}

                 FOLLOW(F)={#}

SELECT集:SELECT(E→TE')=FIRST(TE')={T}

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

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

                  SELECT(T→FT')=FIRST(FT')={F}

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

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

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

                SELECT(F→i)=FIRST(i)={i}

作业十_第1张图片

 

 

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

 (2)

提取左公因子:A→aA' A'→ABe|ε

消除左递归:B→dB' B'→bB'|ε

FIRST集:FIRST(aA')={a}

FIRST(ABe)={A}

FIRST(ε)={ε}

FIRST(dB')={d}

FIRST(bB')={b}

FOLLOW集:FOLLOW(A)={Be}

FOLLOW(A')={#}

FOLLOW(B)={e}

FOLLOW(B')={#}

SELECT集:SELECT(A→aA')=FIRST(aA')={a}

SELECT(A'→ABe)=FIRST(ABe)={A}

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

SELECT(B→dB')=FIRST(dB')={d}

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

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

(3)化成:S→SBa|b

消除左递归:S →bS' S'→BaS'|ε B→ab

FIRST集: FIRST(SBa)={S} FIRST(b)={b} FIRST(bS')={b} FIRST(BaS)={B} FIRST(ε)={ε} FIRST(ab)={ab}

FOLLOW集: FOLLOW(S)={B} FOLLOW(S')={#} FOLLOW(B)={a}

SELECT集: SELECT(S→SBa)=FIRST(SBa)={S} SELECT(S→b)=FIRST(b)={b}  SELECT(S→bS')=FIRST(bS')={b} SELECT(S'→BaS')=FIRST(BaS')={B}

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

 

课堂练习:

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

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

A->aA

 

FIRST集: FIRST(a)={a} FIRST(ε)={ε} FIRST(cA)={c} FIRST(aA)={a} FIRST(Ap)={a,c,p}

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

SELECT集:SELECT(S→Ap)=FIEST(Ap)={A}  SELECT(A→a)=FIRST(a)={a}  SELECT(A→ε)=(FIRST(ε)-{ε})∪FOLLOW(A)={p}  SELECT(A→cA)=FIRST(cA)={c}      SELECT(A→aA)=FIRST(aA)={a}

 

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

FIRST集: FIRST(a)={a} FIRST(cA)={c} FIRST(b)={b} FIRST(dB)={d} FIRST(Ap)={a,c}  FIRST(Bq)={b,d}

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

SELECT集: SELECT(S→Ap)=FIEST(Ap)={A} SELECT(S→Bq)=FIRST(a)={a}  SELECT(A→a)=FIRST(a)={a} SELECT(A→cA)=FIRST(cA)={c}  SELECT(B→b)=FIRST(b)={b}

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

你可能感兴趣的:(作业十)