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

    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}

  • 相关阅读:
    STOAdiary20110315完成的任务
    java MD5 密码加密例子
    STOAdiary20110316完成的任务
    个人实习总结
    STOAdiary20110317完成的任务
    Android 操作XML的几种方式
    Ubuntu 桌面图标不见,鼠标右键的问题
    20110329日记
    MySql 中文问题的处理
    20110312wmh日记
  • 原文地址:https://www.cnblogs.com/dyun3/p/11863059.html
Copyright © 2011-2022 走看看