zoukankan      html  css  js  c++  java
  • 10.消除左递归

    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')={(,i }

    FIRST(+TE')={ + }

    FIRST(ε)={ ε }

    FIRST(FT')={(,i }

    FIRST(*FT')={ * } 

    FIRST((E))={( }

    FIRST((E)|i)={ i }

    FOLLOW集

    FOLLOW(E)={#,)}

    FOLLOW(E')={ )}

    FOLLOW(T)={ + }

    FOLLOW(T')={ + }

    FOLLOW(F)={ * }

    SELECT集

    SELECT(E->TE')={(,i }

    SELECT(E'->+TE')={ + }

    SELECT(E'->ε)={ )}

    SELECT(T->FT')={(,i }

    SELECT(T'->*FT')={ * } 

    SELECT(T'->ε)={ + }

    SELECT(F->(E))={(  }

    SELECT(F->i)={ i }

    分析符号串 i*i+i

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

    (2)

    A->aABe|a

    B->Bb|d

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

    FOLLOW(A')={d}

    FOLLOW(B)={e}

    FOLLOW(B')={e}

    SELECT集

    SELECT(A->aA')={a}

    SELECT(A'->ABe)={a}

    SELECT(A'->ε)={d}

    SELECT(B->dB')={d}

    SELECT(B'->bB')={b}

    SELECT(B'->ε)={e}

    (3)

    S->Aa|b

    A->SB

    B->ab

    S->bS'

    S'->BaS'|ε

    B->ab

    FIRST集

    FIRST(bS')={b}

    FIRST(BaS')={a}

    FIRST(ε)={ε}

    FIRST(a)={a}

    FOLLOW集

    FOLLOW(S)={#}

    FOLLOW(S')={#}

    FOLLOW(B)={a}

    SELECT集

    SELECT(S->bS')={b}

    SELECT(S'->BaS')={a}

    SELECT(S'->ε)={#}

    SELECT(B->ab)={a}

    课堂练习:

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

    S->Ap

    A->a|ε

    A->cA

    A->aA

    FIRST集

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

    FIRST(a)={a}

    FIRST(ε)={ε}

    FIRST(cA)={c}

    FIRST(aA)={a}

    FOLLOW集

    FOLLOW(S)={#}

    FOLLOW(A)={p}

    SELECT集

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

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

    SELECT(A->ε)=FIRST(ε) - {ε} U 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(Ap)={a,c}

    FIRST(Bq)={b,d}

    FIRST(a)={a}

    FIRST(cA)={c}

    FIRST(b)={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)=FIRST(a)={a}

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

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

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

  • 相关阅读:
    mac 终端 常用命令
    创办支持多种屏幕尺寸的Android应用
    java学习之部分笔记2
    java学习之部分笔记
    java学习之i/o
    java中String的用法
    java中List的用法
    java学习之Date的使用
    java学习之数据库
    C#中通过类来继承两个接口,父类实例化接口中的方法,子类继承父类,调用方法
  • 原文地址:https://www.cnblogs.com/linyanli/p/11839705.html
Copyright © 2011-2022 走看看