1.以下の文法が左再帰を排除し、私は私を+ *記号列を分析しました。
それぞれFIRSTセット、FOLLOWセット、およびセットSELECTを探しています
E - > E + T | T
T - > T * F | F
F - >(E)| 私
左再帰を排除します:
E→TE」
E '→+ TE' |ε
T→FT」
T '→* FT' |ε
F→(E)| I
FIRST集:
FIRST(E)→FIRST(T)→FIRST(F)→{(I}
FIRST(E「)→{+、E}
FIRST FIRST→(T)(F)→{(I}
FIRST(T ')→{*、ε}
FIRST(F)→{(I}
FOLLOW集:
フォロー(E)→{)、#}
フォロー(E ')→{)、#}
フォロー(T)→{+、)、#}
フォロー(T ')→{+、)、#}
フォロー(F)→{*、+、)、#}
SELECTセット:
SELECT(E→TE ')= {(I}
SELECT(E「→+ TE)= {+}
SELECT(E '→ε)= {)、#}
SELECT(T→FT ')= {(I}
SELECT(T '→* FT')= {*}
SELECT(T '→ε)= {+、)、#}
SELECT(F→(E))= {(}
SELECT(F→I)= {I}
私は+ Iを*分析記号列
運動2.P101 7(2)(3)文法を書き換えられ、FIRSTは、それぞれフォローセットを設定し、SELECTを設定してください
(2)A→aABe | A
B→Bbの| D
左再帰を排除します:
A→A」
A「→阿部| E
B→デシベル」
B '→B-B' | E
FIRST集:
FIRST(A)→{}
FIRST(A ')→{ε}
FIRST(B)→{D}
FIRST(B ')→{B、ε}
FOLLOW集:
FOLLOW(A)→{D、#}
FOLLOW(A ')→{D、#}
フォロー(B)→{E}
フォロー(B ')→{E}
SELECTセット:
SELECT(A→A-A ')= {D、#}
SELECT(ABE→A ')= {}
SELECT(A '→ε)= {D、#}
SELECT(B→デシベル ')= {E}
SELECT(B '→B-B')= {B}
SELECT(B '→ε)= {E}
(3)S→Aaと| B
A→SB
B→AB
左再帰を排除します:
S→Aaと|→SBaにB | B→bSの」
S '→のBaS' | E
B→AB
FIRST集:
FIRST(S)→{B}
FIRST(S ')→{ε}
FIRST(B)→{}
FOLLOW集:
フォロー(S)→{#}
フォロー(S ')→{#}
フォロー(B)→{}
SELECT(S→bSの ')= {B}
SELECT(S '→のBaS')= {}
SELECT(S '→ε)= {#}
SELECT(B→AB)= {}
ワークショップ:
次の文法FIRSTセット、FOLLOWセットとSELECTセットを探しています。
(1)S→のAβ
→| E
A→のcA
A→を1aA
FIRST集:
FIRST(AP)→{、C、P}
FIRST()→{}
FIRST(E)→{E}
FIRST(CA)→{C}
FIRST(AA)→{}
FOLLOW集:
フォロー(S)→{#}
FOLLOW(A)→{P}
SELECTセット:
SELECT(S→AP)= {、C、P}
SELECT(A→A)= {A}
SELECT(A→ε)= {P}
SELECT(A→CA)= {C}
SELECT(A→AA)= {}
(2)S-> Apを
S->ベクレル
A-> A
A->のcA
B-> B
B->デシベル
FIRST集:
FIRST()→{}
FIRST(B)→{B}
FIRST(CA)→{C}
FIRST(DB)→{D}
FIRST(ベクレル)→{B、D}
FIRST(AP)→{C}
FOLLOW集:
フォロー(S)→{#}
FOLLOW(A)→{P}
フォロー(B)→{Q}
SELECTセット:
SELECT(S-> AP)= {C}
SELECT(S->ベクレル)= {B、D}
SELECT(A-> A)= {}
SELECT(A-> CA)= {C}
SELECT(B-> B)= {B}
SELECT(B->デシベル)= {D}