zoukankan      html  css  js  c++  java
  • LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S):

    (1)S -> AB

    (2)A ->Da|ε

    (3)B -> cC

    (4)C -> aADC |ε

    (5)D -> b|ε

    验证文法 G(S)是不是 LL(1)文法?

    First(Da)={b,a}     Follow(A)={c,b,a,#}    SELECT(A->Da)={b,a}

    First(ε)={ε}       Follow(C)={#}        SELECT(A->ε)={c,b,a,#}

    First(aADC)={a}    Follow(D)={a,#}     SELECT(C->aADC)={a}  

    First(b)={b}                  select(C->ε)={#}  

                         select(D->b)={b}  

                           select(D->c)={a,#}

      

    因为:

    SELECT(A->Da)∩SELECT(A->ε)!=空

    SELECT(C->aADC)∩SELECT(C->ε)=空

    SELECT(D->b)∩SELECT(D->ε)=空

    所以G(S)不是LL(1)文法。

    2.法消除左递归之后的表达式文法是否是LL(1)文法?

     Select(E' -> +TE') = First(+TE') = {+}                

    Select(E' -> ε) = (First(ε)-{ε})∪Follow(E') = {),#}               

    Select(T' -> *FT') = First(*FT') = {*}              

    Select(T' -> ε) = (First(ε)-{ε})∪Follow(T') = {#,+,)}

    Select(F -> (E)) = First((E)) = {(}             

    Select(F -> i ) = First(i) = {i}

    因为:Select(E' -> +TE') ∩ Select(E' -> ε) = ∅          

    Select(T' -> *FT') ∩ Select(T' -> ε) = ∅    Select(F -> (E)) ∩ Select(F -> i ) = ∅

    所以:文法G‘(s)是LL(1)文法。

    3.接2,如果是LL(1)文法,写出它的递归下降语法分析程序代码。

    E()

        {T();

           E'();

         }

    E'()

    T()

    T'()

    F()

    课程作业
  • 相关阅读:
    冲刺博客 五
    冲刺博客 四
    冲刺第一天
    软件工程概论第十周学习进度
    软件工程概论第九周学习进度
    找水王
    软件工程概论第八周学习进度
    软件工程概论第七周学习进度
    四则运算最终版
    二维数组最大值
  • 原文地址:https://www.cnblogs.com/lingcode/p/11908495.html
Copyright © 2011-2022 走看看