第十 - 左再帰の除去

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(TE ')= {T}

  FIRST(+ TE ')= {+}

  FIRST(E)= {E}

  FIRST(FT ')= {F}

  FIRST(* FT ')= {*}

  FIRST((E))= {(}

  FIRST(I)= {I}

 FOLLOW集:

  フォロー(E)= {)}

  フォロー(E ')= {#}

  フォロー(T)= {E '}

  フォロー(T ')= {#}

  フォロー(F)= {#}

 SELECTセット:

  SELECT(E→TE ')=最初の(TE')= {T}

  (E「→+ TE)=最初の(+ TE)= {+}を選択

  SELECT(E '→E)=(FIRST(E) - {E})∪FOLLOW(E')= {)}

  SELECT(T→FT ')=最初の(FT')= {F}

  SELECT(T '→* FT')=最初の(* FT ')= {*}

  SELECT(T '→ε)=(FIRST(ε) - {ε})∪FOLLOW(T')= {#}

  SELECT(F→(E))= FIRST((E))= {(}

  SELECT(F→I)=最初の(I)= {I}

 私は+ Iを*分析記号列:

 

2.P101実践7(2)(3)

 A→aABe | A

 B→Bbの| D

 左エキス共通因子:

  A→A」

  A「→阿部| E

 左再帰を排除します:

  B→デシベル」

  B '→B-B' | E

 FIRST集:

  FIRST(AA ')= {}

  FIRST(ABE)= {A}

  FIRST(E)= {E}

  FIRST(DB ')= {D}

  FIRST(BB ')= {B}

 FOLLOW集:

  FOLLOW(A)= {こと}

  FOLLOW(A ')= {#}

  フォロー(B)= {E}

  フォロー(B ')= {#}

 SELECTセット:

  SELECT(A→A-A ')= FIRST(AA')= {}

  SELECT(ABE→A ')=最初の(ABE)= {A}

  SELECT(A '→ε)=(FIRST(ε) - {ε})∪FOLLOW(A')= {#}

  SELECT(B→デシベル ')=最初の(DB')= {D}

  SELECT(B '→B-B')=最初の(B-B ')= {B}

  SELECT(B '→ε)=(FIRST(ε) - {ε})∪FOLLOW(B')= {#}

 S→Aaと| B

 A→SB

 B→AB

 代入:

  S→SBaに| B

 左再帰を排除します:

  S→bSの」

  S '→のBaS' | E

  B→AB

 FIRST集:

  FIRST(SBA)= {S}

  FIRST(B)= {B}

  FIRST(BS ')= {B}

  FIRST(BAS)= {B}

  FIRST(E)= {E}

  FIRST(AB)= {AB}

 FOLLOW集:

  フォロー(S)= {B}

  フォロー(S ')= {#}

  フォロー(B)= {}

 SELECTセット:

  SELECT(S→SBaに)= FIRST(SBA)= {S}

  SELECT(S→B)=最初の(B)= {B}

  (S→BSに ')SELECT = FIRST(BS')= {B}

  SELECT(S '→のBaS')=最初の(BAS ')= {B}

  SELECT(S '→ε)=(FIRST(ε) - {ε})∪FOLLOW(S')= {#}

  SELECT(B→AB)=最初の(AB)= {}

 

 次の文法FIRSTセット、FOLLOWセットを探しています

 S - >のAp

 - > |ε

 - >のcA

 - >を1aA

  FIRST()= {}

  FIRST(E)= {E}

  FIRST(CA)= {C}

  FIRST(AA)= {}
  FIRST(AP)= {、C、P}

 

  フォロー(S)= {#}

  FOLLOW(A)= {P}

 

  SELECT(S→AP)= FIEST(AP)= {A}

  SELECT(A→A)=最初の()= {}

  SELECT(A→ε)=(FIRST(ε) - {ε})∪FOLLOW(A)= {P}

  SELECT(A→CA)= FIRST(CA)= {C}

  SELECT(A→AA)= FIRST(AA)= {}

 

   S - > Apを
   S - >ベクレル
   A - >
   A - >のcA
   B - > B
   B - >デシベル

  FIRST()= {}

  FIRST(CA)= {C}

  FIRST(B)= {B}

  FIRST(DB)= {D}

  FIRST(AP)= {C}

  FIRST(ベクレル)= {B、D}

 

  フォロー(S)= {#}

  FOLLOW(A)= {P}

  フォロー(B)= {Q}

 

  SELECT(S→AP)= FIEST(AP)= {A}

  SELECT(S→ベクレル)=最初の()= {}

  SELECT(A→A)=最初の()= {}

  SELECT(A→CA)= FIRST(CA)= {C}

  SELECT(B→B)=最初の(B)= {B}

  SELECT(B→デシベル)= FIRST(DB)= {D}

 

 

おすすめ

転載: www.cnblogs.com/lxml/p/11839669.html