1.除去は、私は私を+ *分析する記号列を再帰的な次の文法を残しました。
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)星
フォロー(E ')→{)、#}によって(TE')結果
(T + T)星でフォロー(T)→{+、)、#}
フォロー(T ')→{+、)、#}によって(T + FT')星
フォロー(F)→{*、+、)、#} F + Fにより、F * F(iはI + 1)星
SELECTセット:
SELECT(E→TE ')= {(I}
SELECT(E「→+ TE)= {+}
SELECT(E '→ε)= FIRST(ε) - {ε} Uフォロー(E')=フォロー(E ')= {)、#}存在しないFIRST(ε)は、フォロー(Eに等しいです')
SELECT(T→FT ')= {(I}
SELECT(T '→* FT')= {*}
SELECT(T '→ε)= FIRST(ε) - {ε}はU FOLLOW(T')=フォロー(T ')= {+、)、#} FIRST(ε)は、存在しないフォロー(Tに等しいです')
SELECT(F→(E))= {(}
SELECT(F→I)= {I}
2.P101実践7(2)(3)は、文法を書き換えます。
(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、#}導出されてもよいaaA'Beさd
フォロー(B)→{E}
フォロー(B「)→{E} eはaAdB'eを誘導することができます
SELECTセット:
SELECT(A→A-A ')= {A}
SELECT(ABE→A ')= {}
SELECT(A '→ε)= FIRST(ε) - {ε}∪FOLLOW(A')= {D、#}
SELECT(B→デシベル ')= {D}
SELECT(B '→B-B')= {B}
SELECT(B '→ε)= FIRST(ε) - {ε}∪FOLLOW(B')= {E}
(3)
S→Aaと| B
A→SB
B→AB
代入:
S→SBaに| B
左再帰を排除します:
S→bSの」
S '→のBaS' | E
B→AB
FIRST集:
FIRST(S)→{B}
FIRST(S ')→{ε}
FIRST(B)→{}
FOLLOW集:
フォロー(S)→{#}
フォロー(S ')→{#}
フォロー(B)→{}
SELECTセット:
SELECT(S→bSの ')= {B}
SELECT(S '→のBaS')= {}
SELECT(S '→ε)= FIRST(ε) - {ε}∪FOLLOW(S')= {#}
SELECT(B→AB)= {}
ワークショップ:
(1)
S->のAp
A-> |ε
A->のcA
A->を1aA
FIRST集:
FIRST()= {}
FIRST(A)= {ε}
FIRST(A)= {C}
FIRST(A)= {}
FIRST(S)= {、C、P}
FOLLOW集:
フォロー(S)= {#}
FOLLOW(A)= {P}
SELECTセット:
SELECT(S-> AP)= {、C、P}
SELECT(S-> AP)= {、C、P}
SELECT(A→A)= {A}
SELECT(A→ε)= FIRST(ε) - {ε} U FOLLOW(A)= FOLLOW(A)= {P}
SELECT(A→CA)= {C}
SELECT(A→AA)= {}
(2)
S-> Apを
S->ベクレル
A-> A
A->のcA
B-> B
B->デシベル
FIRST集:
FIRST(S)→FIRST(AP)→{C}
FIRST(S)→FIRST(ベクレル)→{B、D}
FIRST(A)→FIRST()→{}
FIRST(A)→FIRST(CA)→{C}
FIRST(B)→FIRST(B)→{B}
FIRST FIRST(DB)→(B)→{D}
FOLLOW集:
フォロー(S)→{#}
FOLLOW(A)→{P}
フォロー(B)→{Q}
SELECTセット:
SELECT(S-> AP)= FIRST(AP)= {C}
SELECT(S->ベクレル)= FIRST(ベクレル)= {B、D}
SELECT(A-> A)= {}
SELECT(A-> CA)= {C}
SELECT(B-> B)= {B}
SELECT(B->デシベル)= {D}