左再帰を排除

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}

おすすめ

転載: www.cnblogs.com/tao614/p/11840829.html