左再帰(10作品)を除去

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}

おすすめ

転載: www.cnblogs.com/lishishi0917/p/11847519.html