2017-11-11 201 views
0

假設我有以下CFG:如何找到遞歸語法的FIRST和FOLLOW集?

S-> AACD | BcAe

A-> B | EPSILON

B-> cf | d

C-> FE

現在我敷在CFG的第一個規則:

FIRST(S)= FIRST(AACD)U FIRST(BcAe)

= {A} U FIRST(BcAe)

= {A} U FIRST(B) - {EPSILON} U FIRST(CAE)

= {A} U FI RST(B) - {EPSILON} U {C}

= {A} U FIRST(CF)U FIRST(d) - {EPSILON} U {C}

= {A,F,d, C,EPSILON}

FIRST(A)= FIRST(b)U FIRST(EPSILON)= = {b,EPSILON}

FIRST(b)= FIRST(CF)U FIRST(d)= {d中,f}

FIRST(C)= FIRST(FE)= {F}

現在我申請對CFG的FOLLOW規則:

FOLLOW(S)= {$}

FOLLOW(A)= {C,E}

FOLLOW(B)= {C}

FOLLOW(C)= {f}

有什麼不對嗎?如果不對,請告訴我該怎麼做。

+0

「我做完了我的功課嗎?」與堆棧溢出不匹配。如果你有一個關於算法的具體問題,你可以試着問一下,儘管這樣的問題很可能不在SO的範圍內,因爲它與編程很少或者沒有關係。 – rici

+0

@SourodipKundu這是錯的。它不是答案。 – Billa

+0

@SourodipKundu請檢查生產是否與我的問題相同。並且由於'C'在生產體S-> aACD中,'FOLLOW(C)'是'FIRST(D)'。由於'FIRST(D)'是'EPSILON',所以'EPSILON'替代'S-> aACD'中的'D'。所以它變成'S-> aAC'然後取'FOLLOW(C)',然後變成'FOLLOW(S)'這是'$'。我認爲你缺乏基礎知識,請參考我在答案中提出的視頻。 – Billa

回答

2

你上面的工作(問題)表明你不擅長基本概念。所以你可以使用this tutorial

格拉默:

S-> AACD | BcAe

A-> B | EPSILON

B-> cf | d

C-> FE

沒有產生裝置EPSILON所以,

D-> EPSILON

在施加第一規則:

FIRST( A)= FIRST(b)U FIRST(EPSILON)= = {b,EPSILON}

FIRST(B)= FIRST(CF)U FIRST(d)= {C} U {d} = {C,d}

FIRST(C)= FIRST(FE)= {F}

FIRST(d)= {EPSILON}

FIRST(S)= FIRST(AACD)U FIRST(BcAe)

= {A} U FIRST(BcAe)

= {A} U FIRST(B)

= {a} U {c,d}

= {A,C,d}

上塗布後續規則:

FOLLOW(S)= {$}

FOLLOW(A)= FIRST(C) U第(E)= {F,E}

FOLLOW(B)= {C}

FOLLOW(C)= {$}

關注(D)= {$}

+0

隨意問你的疑惑。 – Billa

+0

FOLLOW(C)如何變爲$但使用FIRST AND FOLLOW規則我得到C遵循f @Billa –