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 }