コンパイラの理論10

1.除去は、私は私を+ *分析する記号列を再帰的な次の文法を残しました。

   それぞれFIRSTセット、FOLLOWセット、およびセットSELECTを探しています

     E - > E + T | T

     T - > T * F | F

     F - >(E)|

ソリューション:

左再帰を排除

E - > TE '  

E ' - > + TE " | ε 

T - > FT '
 
T ' - > * FT " | ε 

 F - >(E)| 

FIRST集:

FIRST(E)= FIRST(T)=最初の(F)= {(I} 
FIRST(E ')= {+、ε}
FIRST(E')= {+、ε}
FIRST(T ')= {* 、ε}

FOLLOW集:

フォロー(E)= {)、#} 
フォロー(E ' )=フォロー(E)= {)、#} 
フォロー(T)= {+ 、)、#} 
フォロー(T') =フォロー(T)= { + )、#} 
フォロー(F) = {+、*、)、#}  

SELECTセット:

SELECT(E - > TE ' )= {(iは} 
(E SELECT ' - > + TE ')= {+ } 
SELECT(E ' >ε)= - {)、#を} 
SELECT(Tを- > FT ' ) = {(iは} 
SELECT(T ' - > * FT ')= {* } 
(SELECT) = {T ' - >ε} = {+、)、#} 
SELECT(F - >(E))= { (} 
(SELECT) = {F - > I} = {I}

運動2.P101 7(2)(3)文法を書き換えられ、FIRSTは、それぞれフォローセットを設定し、SELECTを設定してください

ソリューション:

2番目の質問:

左再帰を排除

→を1aA A '
 
A ' →安倍| E 

B→デシベル'
 
B ' →bBで" | E

FIRST集:

FIRST(A)= {} 
FIRST(A ' )= {ε} 
FIRST(B)= {D} 
FIRST(B ' )= {B、ε}

FOLLOW集:

FOLLOW(A)= {D、#} 
FOLLOW(A ' )= {D、#} 
フォロー(B)= {E} 
FOLLOW(B ' )= {E}

SELECTセット:

SELECT(A→を1aA ' )= {} 
SELECT(A ' ABE→)= {} 
SELECT(A ' →ε)= {D、#} 
SELECT(B→デシベル' )= {D}は 
SELECT(B ' →bBで')= {B} 
SELECT(B ' →ε)= {E}

3番目の質問:

左再帰を排除

BS→S '
 
S ' →のBaS " | E 

B→AB

FIRST集:

FIRST(S)= {B} 
FIRST(S ' )= {ε} 
FIRST(B)= {}

FOLLOW集:

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

SELECTセット:

(S→BSにSELECT ' )= {B} 
SELECT(S ' →のBaS ')= {ε}は
SELECT(S ' →ε)= {#} 
(B→AB)を選択= {}

ワークショップ:

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

(1)

S->のAp
A-> |ε
A->のcA

A->を1aA

 (2)

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

ソリューション:

(1)

FIRST集:

FIRST(S)= {、C、P} 
FIRST(A) = {} 
FIRST(A) = {C} 
FIRST(A) = {}

FOLLOW集:

フォロー(S)= {#} 
FOLLOW(A) = {P}

SELECTセット:

SELECT(S-> AP)= {、C、P} 
SELECT(A - >)= {} 
SELECT(A - >ε)= {P} 
SELECT(A - > CA)=は {C}は
SELECT( - > AA)= {}

(2)

FIRST集:

FIRST(S)= {C} 
FIRST(S) = {B、D} 
FIRST(A) = {} 
FIRST(A) = {C} 
FIRST(B) = {B} 
FIRST(B) = { D}

FOLLOW集:

フォロー(S)= {#} 
FOLLOW(A) = {P} 
FOLLOW(B) = {Q}

SELECTセット:

S-> Apを
S - > ベクレル
A - > 
A - > のcA 
B - > B 
B - > dBの
SELECT() = {} 
SELECT(Sの - > AP)= {C} 
SELECT(Sの - >ベクレル) = {B、D} 
SELECT(A - >)= {} 
SELECT(A - > CA)= {C} 
SELECT(B - > B)= {B} 
SELECT(B - >デシベル)= {D}

 

おすすめ

転載: www.cnblogs.com/huangwenshuo/p/11854424.html