zoukankan      html  css  js  c++  java
  • 作业十

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

                       FIRST(+TE')={+}

                    FIRST(ε)={ε}

                    FIRST(FT')={F}  

                      FIRST(*FT')={*}

                 FIRST((E))={(}

                 FIRST(i)={i}

    FOLLOW集:FOLLOW(E)={)}

                     FOLLOW(E')={#}

                     FOLLOW(T)={E'}

                     FOLLOW(T')={#}

                     FOLLOW(F)={#}

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

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

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

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

     (2)

    提取左公因子: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)={Be}

    FOLLOW(A')={#}

    FOLLOW(B)={e}

    FOLLOW(B')={#}

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

    (3)化成:S→SBa|b

    消除左递归:S →bS' S'→BaS'|ε B→ab

    FIRST集: FIRST(SBa)={S} FIRST(b)={b} FIRST(bS')={b} FIRST(BaS)={B} FIRST(ε)={ε} FIRST(ab)={ab}

    FOLLOW集: FOLLOW(S)={B} FOLLOW(S')={#} FOLLOW(B)={a}

    SELECT集: 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}

    课堂练习:

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

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

    A->aA

    FIRST集: FIRST(a)={a} FIRST(ε)={ε} FIRST(cA)={c} FIRST(aA)={a} FIRST(Ap)={a,c,p}

    FOLLOW集:FOLLOW(S)={#} FOLLOW(A)= {p}

    SELECT集:SELECT(S→Ap)=FIEST(Ap)={A}  SELECT(A→a)=FIRST(a)={a}  SELECT(A→ε)=(FIRST(ε)-{ε})∪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} FIRST(cA)={c} FIRST(b)={b} FIRST(dB)={d} FIRST(Ap)={a,c}  FIRST(Bq)={b,d}

    FOLLOW集: FOLLOW(S)={#} FOLLOW(A)={p} FOLLOW(B)={q}

    SELECT集: SELECT(S→Ap)=FIEST(Ap)={A} SELECT(S→Bq)=FIRST(a)={a}  SELECT(A→a)=FIRST(a)={a} SELECT(A→cA)=FIRST(cA)={c}  SELECT(B→b)=FIRST(b)={b}

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

  • 相关阅读:
    Java中NIO和IO区别和适用场景
    JDK和CGLIB动态代理原理
    java中的Serializable接口的作用
    redis采用序列化方案存对象
    在时间复杂度为O(n)且空间复杂度为O(1)的情况下翻转链表
    给定一个排好序的数组,然后求出丢失的数字
    求字符串里超过字符长度一半的元素
    求你给定两字符串包含的字母数是否完全一致
    动态规划,求数组不相邻数字的最大子串值
    JWT 工具
  • 原文地址:https://www.cnblogs.com/huangzixuan/p/11861838.html
Copyright © 2011-2022 走看看