Job 10: Eliminate left recursion

1. Elimination left recursive following grammar, the symbol string analyzing i * i + i, respectively, and please FIRST set, FOLLOW sets, and set SELECT

     E -> E+T | T

     T -> T*F | F

     F -> (E) | i

 After eliminating left recursion as: E-> TE ' 

        E '-> + T E' | e   

        T->FT'     

        T'->*FT'|ε   

        F->(E)|i   

Analysis string of symbols:

FIRST集:

  FIRST(TE')={T}

  FIRST(+TE')={+}

  FIRST (e) = {e}

  FIRST(FT')={F}

  FIRST(*FT')={*}

  FIRST((E))={(}

  FIRST(i)={i}

FOLLOW集:

 FOLLOW(E)={)}

  FOLLOW(E')={#}

  FOLLOW(T)={E'}

  FOLLOW(T')={#}

  FOLLOW(F)={T'}

SELECT set:

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

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

  SELECT (E '→ e) = (FIRST (e) - {e}) ∪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}        

Exercise 2.P101 7 (2) (3) is rewritten grammar, please FIRST set respectively, FOLLOW sets, and set SELECT

A->aABe|a

B->Bb|d

Left extract common factor:

A->aA'

A'->ABe|ε

Eliminate left recursion:

B->dB'

B'->bB'|ε

FIRST集:

FIRST(aA')={a}

FIRST(ABe)={A}

FIRST (e) = {e}

FIRST(dB')={d}

FIRST(bB')={b}

FOLLOW集:

FOLLOW(A)={d}

FOLLOW(A')={#}

FOLLOW(B)={e}

FOLLOW(B')={#}

SELECT set:

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')={#}

S->Aa|b

A->SB

B->ab

The progeny obtained by the following two formulas:

S->SBa|b

Eliminate left recursion:

S →bS'

S '→ BaS' | e

B→ab

FIRST集:

  FIRST(SBa)={S}

  FIRST(b)={b}

  FIRST(bS')={b}

  FIRST(BaS)={B}

  FIRST (e) = {e}

  FIRST(ab)={ab}

 FOLLOW集:

  FOLLOW(S)={B}

  FOLLOW(S')={#}

  FOLLOW(B)={a}

 SELECT set:

  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}

Workshop:

Seeking the following grammar FIRST set, FOLLOW sets and SELECT sets.

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

A->aA

FIRST集:

 FISRT(a)={a}

FIRST (e) = {e}

FIRST(cA)={c}

FIRST(aA)={a}

FIRST(Ap)={a,c,p,ε}

FOLLOW集:

FOLLOW(A)={p}

FOLLOW(S)={#}

SELECT set:

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

SELECT(A->a)=FIRST(a)={a}

SELECT(A->ε)=FIRST(ε)-{ε}υFOLLOW(A)=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,c}

FIRST(B)={b,d}

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

FOLLOW集:

FOLLOW(A)={p}

FOLLOW(B)={q}

FOLLOW(S)={#}

SELECT set:

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

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

SELECT(A->a)=FIRST(a)={a}

SELECT(A->cA)=FIRST(cA)={c}

SELECT(B->b)=FIRST(b)={b}

SELECT(b->dB)=FIRST(dB)={d}

Guess you like

Origin www.cnblogs.com/zhengjieting/p/11847923.html