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}

  • 相关阅读:
    一致性哈希算法(c#版)
    制作Docker镜像的两种方式
    AWS AutoScaling的一个ScaleDown策略问题以及解决方法
    在CentOS6.6上以replSet方式部署MongoDB集群
    在Docker中安装和部署MongoDB集群
    为Docker容器设置静态IP
    CSS动画的性能分析和浏览器GPU加速
    spark日志配置及问题排查方式。
    Structure Streaming和spark streaming原生API访问HDFS文件数据对比
    SQL On Streaming
  • 原文地址:https://www.cnblogs.com/linyanli/p/11839705.html
Copyright © 2011-2022 走看看