編譯原理中Follow集的求法

2021-07-24 03:38:28 字數 1050 閱讀 3978

首先引用龍書裡面的一段較為公式化的follow集求法的話:

計算所有非終結符號a的follow(a)集合時,不斷應用下面的規則,直到再沒有新的終結符號可以被加入到任意的follow集合中為止。

(1)將放到

foll

ow(s

)中,其

中s是開

始符號,

而 是輸入右端的結束標記。

(2)如果存在乙個產生式a→αbβ,那麼first(β)中除ε之外的所有符號都在follow(b)中。

(3)如果存在乙個產生式a→αb,或存在產生式a→αbβ且first(β)包含ε,那麼follow(a)中的所有符號都在follow(b)中。

下面舉個例子來說明下,假設有如下文法:

①e→te』

②e』→+te』 | ε

③t→ft』

④t』→*ft』 | ε

⑤f→(e)| id

對於每個非終結符號,我們都可以求出其follow集:

根據(1),首先將加入

到fol

low(

e)中,

即fol

low(

e)={

},由⑤可知,)也應該在follow(e)中,即follow(e)={$,)};

對於e』,根據規則(3)以及產生式①,應該將follow(e)加入到follow(e『)中,即follow(e』)={$,)};

對於t,根據規則(2)以及產生式①,應該將first(e』)加入到follow(t)中,即follow(t)={+},根據規則(3),由於first(e』)包含ε,所以應該將follow(e)加入到follow(t)中,即follow(t)={+,$,)};

對於t』,根據規則(3)以及產生式③,應該將follow(t)加入到follow(t『)中,即follow(t』)={+,$,)};

對於f,根據規則(2)以及產生式③,應該將first(t』)加入到follow(f)中,即follow(f)={},根據規則(3),由於first(t』)包含ε,所以應該將follow(t)加入到follow(f)中,即follow(f)={,+,$,)};

編譯原理FOLLOW集的求法

follow集求法有兩種,要麼逐步推導,推導出所有式子求follow集合,這種方法簡單但是容易遺漏 要麼就按照步驟一步一步來求文字定義 follow a 集合是所有緊跟a之後的終結符或 所組成的集合 是句尾的標誌 稱follow a 是a的隨符集計算所有非終結符號a的follow a 集合時,不斷應...

FIRST集和FOLLOW集的求法

follow集 若x a 則將終結符 加入first x 中 若x e 則將終結符e加入first x 中 e表示空集 若 x bc d,則將first b 所有元素 除了空集 加入first a 然後檢測first b 若first b 中不存在空集,則停止,若存在則向b的後面檢視,將first ...

編譯原理 FIRST集與FOLLOW集

first集合是對產生式右部的字串而言的,求取的是非終結符vt 或終結符 空字元 文法符號串 的開始符號集合,集合中包含的是由左部非終結符vt推導得到的終結符vn或空字元 以 表示乙個文法的字串,first 表示由 推導出的串的首個終結符或空字元組成的集合。規則 求文法符號x的first x 直到沒...