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}

  • 相关阅读:
    图片切换的练习
    固定定位
    绝对定位
    相对定位
    全局作用域 变量声明
    3种循环语句 JS基础
    解除绑定事件 和 封装兼容性addEvent 来处理针对于不同浏览器的兼容方法
    插入排序法 猴子选大王 检索的数组 验证身份证号码 练习
    [z]JSONP例子
    ireport related
  • 原文地址:https://www.cnblogs.com/xiaoAP/p/11862833.html
Copyright © 2011-2022 走看看