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

    FIRST(+TE')={+}

    FIRST(FT')={( ( , i ) | F-->{ , F-->I}

    FIRST(*FT")={*}

    FIRST(ε)={ε}

    FIRST((E))={ ( }

    FIRST(i)={i}

    FOLLOW集

    FOLLOW(E)={ ) }

    FOLLOW(E')={#}

    FOLLOW(T)={+}

    FOLLOW(T')={#}

    FOLLOW(F)={*}

    SELECT集

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

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

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

    SELECT(T-->FT' )=FIRST(FT')={( ( , i ) | F-->{ , F-->I}

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

    SELECT(T'-->ε)=FOLLOW(T')={#}

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

    SELECT(F-->i)=FIRST(i)={i}

    分析i*i+i

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

      A → aABe|a

      B → Bb|d

    提取公因子

    A-->aA'

    A'-->ABe | ε

    消除左递归

    B-->bB' | d

    B'-->*b | ε

    FIRST集

    FIRST(aA')={a}

    FIRST(ABe)={a | A-->a}

    FIRST(ε)={ε}

    FIRST(bB')={b}

    FIRST(d)={d}

    FIRST(*b)={*}

    FOLLOW集

    FOLLOW(A)=FIRST(B)={b}

    FOLLOW(A')={#}

    FOLLOW(B)={e}

    FOLLOW(B')={#}

    SELECT集

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

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

    SELECT(A'-->ε)=FOLLOW(A')={#}

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

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

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

    SELECT(B'-->ε)=FOLLOW(B')={#}

      S → Aa|b

      A → SB

      B → ab

    带入S得

    S-->SBa | b

    B-->ab

    消除左递归

    S-->BaS' | b

    S'-->*B | e

    B-->ab

    (待修改)

    课堂练习:

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

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

    A->aA

     FIRST集

    FIRST(Ap)={(a,c,ε) | A-->a,A-->c,A-->ε}

    FIRST(a)={a}

    FIRST(ε)={ε}

    FIRST(cA)={c}

    FIRST(aA)={a}

    FOLLOW集

    FOLLOW(S)={#}

    FOLLOW(A)={p}

    SELECT集

    SELECT(S->Ap)=FIRST(Ap)={(a,c,ε) | A-->a,A-->c,A-->ε}

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

    SELECT(A->ε)=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}

    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}

    SELECT(S->Bq)=FIRST(b)={b} U FIRST(dB)={d}

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

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

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

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

  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/xiaoAP/p/11862833.html
Copyright © 2011-2022 走看看