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

    1. 文法 G(S):

    1)S -> AB

    2)A ->Da|ε

    3)B -> cC

    4)C -> aADC |ε

    5)D -> b|ε

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

     答:

    first(AB)={b,a,c}

    First(Da)={b,a}

    First(ε)={ε}

    First(cC)={c}

    First(aADC)={a}

    First(b)={b}

     

    Follow(S)={c,b,a}

    Follow(A)={a,b,c,#}

    Follow(B)={a,b,c}

    Follow(C)={#}

    Follow(D)={#,a}

     

    Sellect(A->Da)={b,a}

    Sellect(A->ε)={a,b,c,#}

    因为Sellect(A->Da)∩Sellect(A->ε)≠Ø,由此可以看出,G(s)不是 LL1)文法。

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

     答:

     

    First集:

    First(TE’)=First(T)={ ( , i }

    First(T’)={ * , ε }

    First(E’)={ + , ε }

    First(+TE’)={+}

    First(ε)={ε}

    First(FT’)=First(F)={ ( , i }

    First(*FT’)={*}

    First((E))={ ( }

    First(i)={ i }

     

    Follow集:

    Follow(E)={ ) , #}

    Follow(E’)=Follow(E)={ ) , #}

    Follow(T)=(First(E’)-{ε}) U Follow(E’)={ + , ) , #}

    Follow(T’)=Follow(T)={ + , ) , #}

    Follow(F)=(First(T’)-{ε}) U Follow(T’)={* , + , ) , #}

     

    Select集:

    Select(E->TE') =First(TE’)=First(T)={ ( , i }

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

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

    Select(T->FT') = First(FT’)=First(F)={ ( , i }

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

    Select(T'->ε) = First(ε) -{ε} U 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 ) = Ø

    故该文法是 LL(1)文法。

     

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

    E()

        {T();

           E'();

         }

    E'()

    T()

    T'()

    F()

     答:

      SELECT集:

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

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

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

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

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

      SELECT(T'->ε)=FIRST(ε)-{ε}UFOLLOW(T')=FOLLOW(T')={ +,),# }

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

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

      递归下降语法分析程序:

      void ParseE(){

        switch(lookahead){

          case '(','i':

            ParseT();

            ParseE'();

            break;

          default:

            print("syntax error ");

            exit(0);

        }

      }

      void ParseE'(){

        switch(lookahead){

          case '+':

            MatchToken('+');

            ParseT();

            ParseE'();

            break;

          case ')','#':

            break;

          default:

            print("syntax error ");

            exit(0);

        }

      }

      void ParseT(){ 

        switch(lookahead){

          case '(','i':

            ParseF();

            ParseT'();

            break;

          default:

            print("syntax error ");

            exit(0);

        }

      }

      void ParseT'(){

        switch(lookahead){

          case '*':

            MatchToken('*');

            ParseF();

            ParseT'();

            break;

          case '+',')','#':

            break;

          default:

            print("syntax error ");

            exit(0);

        }

      }

      void ParseF(){

        switch(lookahead){

          case '(':

            MatchToken('(');

            ParseE();

            MatchToken(')');

            break;

          case 'i':

            MatchToken('i');

            break;

          default:

            print("syntax error ");

            exit(0);

        }

      }

     

     4.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。

     

  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/xuechendong/p/11905115.html
Copyright © 2011-2022 走看看