11分の2019 / 20- 11ジョブ

1.文法G(S):

(1)S - > AB

(2)A - >ダ|ε

(3)B - > CC

(4)C - > AADC |ε

(5)D - > B |ε

文法G(S)は、LL(1)文法ではない検証?

式の文法は、LL(1)文法であるかどうか、左再帰を除去した後2.(最後のジョブ)?

それは、LL(1)文法であれば3接続2、その再帰下降構文解析コードを書きます。

E()

    {T();

       E '();

     }

E '()

T()

T '()

F()

 

 

回答:

1.文法G(S)

FIRST(DA)= {B}

FIRST(E)= {E}

FIRST(AADC)= {}

FIRST(B)= {B}

FOLLOW(A)= {C、B、#}

フォロー(C)= {#}

フォロー(D)= {#}

SELECT(A->ダ)= FIRST(DA)= {B}

SELECT(A->ε)= FIRST(ε) - {ε} UFOLLOW(A)= FOLLOW(A)= {C、B、#}

SELECT(A-> Da)であり、SELECT(A->ε)が交差するので、G(S)はLL(1)構文ではありません。

式の文法は、LL(1)文法であるかどうか、左再帰を除去した後2.(最後のジョブ)?

SELECTセット:
SELECT(E ' - > + TE')=最初の(+ TE ')= {+}
SELECT(E' - >ε)=フォロー(E「)=フォロー(E)= {#)}
SELECT (T ' - > * FT')=延期(* FT ')= {*}
SELECT(T' - >ε)=フォロー(T「)=フォロー(T)= {#、)、+}
SELECT(F. - >(E))=延期((E))= {(}
SELECT(F-> I)=延期(I)= {I}
以来:
SELECT(E ' - > + TE')、およびSELECT(E ' - >ε)互いに素
SELECT(T ' - > * FT ') 、およびSELECT(T「 - >ε)互いに素
SELECT(F - >(E) ) 、およびSELECT(F-> I)のない交差点
がLL(あります1)文法。

それは、LL(1)文法であれば3接続2、その再帰下降構文解析コードを書きます。

集SELECT:
SELECT(E-> TE)= FIRST(TE ')= FIRSI(T)-first(F)U {*} = {(I、*}
(E SELECT' - > + TEを')= FIRST (+ TE ')= {+}
SELECT(E' - >ε)=フォロー(E ')=フォロー(E)= {#)}
SELECT(T - > FT')=延期(FT ')= FIRST (F) - {(iは}
(T SELECT - ) '> * FTを' =延期(* FT ')= {*}
(T SELECT' - >ε)=(T '従う)=)(Tに従います= {#、)、+}
SELECT(F - >(E))=延期((E))= {(}
SELECT(F-> I)=延期(I)= {I}

擬似コード:

1つの 空隙パーシー()
 2  {
 3      スイッチ(ルックアヘッド)
 4      {
 5          ケース ' '' I ' 6              PARSET();
 7              ParseEP();
 8              ブレーク;
 9          デフォルト10              のprintf(" 構文エラー\ n " ) ;
 11      }
 12  }
 13  
14  空隙ParseEP()
 15  {
 16      スイッチ(ルックアヘッド)
 17      {
 18          ケース ' + ' 19              MatchToken(' + ' );
20              PARSET()。
21              ParseEP()。
22              ブレーク;
23          ケース ' '' ' 24              休憩25          デフォルト26              のprintf(" 構文エラー\ N " );
27      }
 28  }
 29 
30  ボイドPARSET()
 31  {
 32      スイッチ(ルックアヘッド)
 33      {
 34          ケース ' '' I ' 35              ParseF();
 36              ParseTP();
 37              ブレーク;
 38          デフォルト39              のprintf(" 構文エラー\ n " ) ;
 40      }
 41  }
 42  
43  空隙ParseTP()
 44  {
 45      スイッチ(ルックアヘッド)
 46      {
 47          の場合 ' * ' 48              MatchToken(' * ' )。
49              ParseF();
50              ParseTP()。
51              ブレーク;
52          ケース ' + '' '' ' 53              ブレーク54          デフォルト55              のprintf(" 構文エラー\ N " );
56     }
 57  }
 58  
59  空隙ParseF()
 60  {
 61      スイッチ(ルックアヘッド)
 62      {
 63          ケース ' ' 64              MatchToken(' ' );
 65              パーシー();
 66              MatchToken(' ' );
 67              ブレーク;
 68          ケース ' ' 69              MatchToken(' I ' );
70              ブレーク;
71          デフォルト72              のprintf(" 構文エラー\ N " );
73      }
 74 }

 

おすすめ

転載: www.cnblogs.com/Roromiya/p/11908747.html