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.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。

     

  • 相关阅读:
    【win7】安装开发环境
    【php-fpm】启动PHP报错ERROR: [pool www] cannot get uid for user 'apache'
    【apache2】AH00543: httpd: bad user name apache
    【gedit】 显示行号
    关于golang.org/x包问题
    国内的go get问题的解决
    php7函数,声明,返回值等新特性介绍
    php5.6.x到php7.0.x特性
    PHP5.4.0新特性研究
    【git】如何去解决fatal: refusing to merge unrelated histories
  • 原文地址:https://www.cnblogs.com/xuechendong/p/11905115.html
Copyright © 2011-2022 走看看