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)文法?

     SELECT(A→Da)=FIRST(Da)={b,a}

     SELECT(A→ε)=FIRST(ε)-ε+FOLLOW(A)=FOLLOW(A)=FIRST(B)∪FIRST(D)∪FIRST(C)={c,b,a,#}

     SELECT(A→Da)∩SELECT(A→ε)≠∅

     SELECT(C→aADC)=FIRST(aADC)={a}

     SELECT(C→ε) =FIRST(ε)-{ε}+FOLLOW(C)=FOLLOW(B)=FOLLOW(S)={#}

     SELECT(C→aADC)∩SELECT(C→ε)=∅

     SELECT(D→b)=FIRST(b)={b}

     SELECT(D→ε)=FIRST(ε)-ε+FOLLOW(D)={a,FOLLOW(C)}={a,FOLLOW(B)}={a,FOLLOW(S)}={a,#}

     SELECT(D→b)∩SELECT(D→ε)=∅

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

    不一定,还有回溯等其他的情况,判断文法是不是LL1需要计算每个产生式的select集,根据计算结果才能确定

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

    void ParseE()

        {ParseT();

           ParseE'();

         }

    void ParseE'()

      {switch(lookahead):

        case +:

          MatchToken(+);

          ParseT();

          ParseE'();

          break;

        case #,):

          MatchToken(ε);

          break;

        default:

          printf('synax error! ');

          exit(0);

      }

    void ParseT()

    {  

      ParseF();

      ParseT'();

    }

    void ParseT'()

    {

      switch(lookahead):

        case *:

          MatchToken(*);

          ParseF();

          ParseT'();

          break;

        case #,),+:

          MatchToken(ε);

          break;

        default:

          printf('synax error! ');

          exit(0);

    }

    void ParseF()

    { 

      switch(lookahead):

        case (:

          MatchToken(();

          ParseE();
          MatchToken());

          break;

        case i:

          MatchToken(i);

          break;

        default:

          printf('synax error! ');

          exit(0);

    }

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

  • 相关阅读:
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    asp.net session对象的持久化
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    小白也能看懂的约瑟夫环问题
  • 原文地址:https://www.cnblogs.com/lxml/p/11887053.html
Copyright © 2011-2022 走看看