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}

  • 相关阅读:
    nyoj 110 剑客决斗
    nyoj 16 矩形嵌套
    nyoj 17 单调递增最长子序列
    nyoj 37 回文字符串
    nyoj 44 子串和
    nyoj 36 最长公共子序列
    使用Broadcast实现android组件之间的通信 分类: android 学习笔记 2015-07-09 14:16 110人阅读 评论(0) 收藏
    ubuntu中安装samba 分类: linux 学习笔记 ubuntu 2015-07-07 16:14 46人阅读 评论(0) 收藏
    ubuntu中安装eclipse 分类: android ubuntu linux 学习笔记 2015-07-07 10:19 75人阅读 评论(0) 收藏
    ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/dyun3/p/11863059.html
Copyright © 2011-2022 走看看