第十一作业

1. 文法 G(S):

(1)S -> AB

(2)A ->Da|ε

(3)B -> cC

(4)C -> aADC |ε

(5)D -> b|ε

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

FIRST集:

  FIRST(DA)={b,a}

  FIRST(aADC)={a}

  FIRST(D)={b}

FOLLOW集:

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

  FOLLOW(C)={#}

  FOLLOW(D)={b}

SELECT集:

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

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

  SELECT( C -> aADC) = FIRST( aADC) = { a }

  SELECT( C -> ε) = FOLLOW(C) = { # }

  SELECT( D -> b) = FIRST(b) = { b }

  SELECT( D -> ε ) =FOLLOW(D) = { a, # }

       因为SELECT( A -> Da) ∩ SELECT( A -> ε) = { a } ≠ ∅

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

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

消除左递归后的文法:

  E->TE’

  E’->+TE’|ε

  T->FT’

  T’->*FT’|ε

  F->(E)|i

SELECT集:

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

  SELECT(E' -> ɛ) = {  ) , # }

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

  SELECT(T'  -> ɛ) = {  + , ) , # }

  SELECT(F -> (E) ) = { ( , i }

  SELECT(F -> 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()

void E(){

  if(lookhead==(,i){

     T();

     E’();

    break;

  }else{

    print(“语法错误  ”);

    exit(0);

  }

}

 

void E’(){

  Switch(lookhead){

    case +:

      MatchToken(+);

       T();

       E’();

      break;

    case ),#:

      break;

    default:

      print(“语法错误  ”);

      exit(0);

    }

}

 

void  T(){

  if(lookhead==(,i){

     F();

     T’();

    break;

  }else{

    print(“语法错误 ”);

    exit(0);

  }

}

 

void T’(){

  Switch(lookhead){

    case *:

      MatchToken(*);

       F();

       T’();

      break;

    case +,),#:

      break;

       default:

       print(“语法错误  ”);

       exit(0);

    }

}

 

void F’(){

  Switch(lookhead){

    case (:

      MatchToken(();

       E();

      MatchToken());

      break;

    case i:

      MatchToken(i);

      break;

    default:

      print(“语法错误 ”);

      exit(0);

    }

}

原文地址:https://www.cnblogs.com/chock/p/11912733.html