FIRST集與FOLLOW集白話版

2021-10-06 22:04:42 字數 1677 閱讀 2735

可以理解為當前非終結符可以出現的開始符號(終結符)的集

求解方法:

步驟:1.若x->a…,則將終結符a加入first(x)中;

2.若x->e ,則將終結符e加入first(x)中(e表示空集);

3.若 x->bcd…e,則將first(b)所有元素(除了空集)加入 first(x),然後檢測first(b),若first(b)中不存在空集, 即e,則停止,若存在則向b的後面檢視,將first(c)中所有元素(除了空集)加入first(x),然後再檢測first(c)中是否有e…直 到最後,若e之前的所有非終結符的first集中都含有e,則檢測到e時,將first(e)也加入first(x),若first(e)中含有e,則將 e加入first(x)。

舉例:例如文法:

first集合求法:

能由非終結符號推出的所有的開頭符號或可能的ε,但要求這個開頭符號是終結符號。如此題a可以推導出a和ε,所以first(a)={a,ε};同理 first(b)=;s可以推導出abc,還可以推導出bc,還可以推導出c,所以first(s)={a,b,c}

對於follow集,我們可以理解為當前候選式(右式)的非終結符後出現的總結符號集。

求解方法:

步驟:1.對文法開始符號s,置#於follow(s)中;

2.對於產生式:a->abc,將除去空集e的first(c)加入follow(b)中;

3.對於產生式:a->ab或者a->abc,(其中c可以推導出空串,c=>*e),則將follow(a)加入follow(b)中。

舉例:例如文法:

follow集合的求法:

緊跟隨其後面的終結符號或#。但文法的識別符號包含#,在求的時候還要考慮到ε。 具體做法是把所有包含你要求的符號的產生式都找出來,再看哪個有用。 follow(s)={#}

如求a的follow集 產生式:s→abc a→a|ε ,但只有s→abc 有用。跟隨在a後年的終結符號是first(b)={b,ε},當first(b)的元素為ε時,跟隨在a後的符號就是c,所以 follow(a)={b,c} 同理follow(b)={c}

first

例如:a->ab | cd

這裡面包含了組成first(a)的兩種情況:

1.以終結符開頭, 當然要把這個終結符放到a的first裡

2.以非終結符開頭, 先把c的first放到a的first裡,再看如果c的first中有空的話就把d的first放到a的first裡,如果d也有空的話往後依次類推

技巧:first一般從下往上找。如果要找a的first,我們要找a的定義式,即a在左邊的式子,看著他的右邊來找。

follow

如s->(l) | al | lc

找follow的三種情況:先在候選式(右邊)中找到該非終結符,如l(注意例中只有乙個定義,但找follow要看到所有右邊出現該非終結符的)

1.如果l的右邊是終結符, 那麼這個終結符加入l的follow

3.如果l的右邊是非終結符, 那麼把這個非終結符的first除去空加到l的follow中

3.如果l處在末尾, 那麼,』->'左邊符號的follow成為l的follow

4.另外要注意的是:開始符號的follow中要加上『#』

技巧:follow一般從上往下找。如果要找l的follow,要從式子的右邊找到l,然後來找l的follow,這與first是不同的。

本文所用參考資料1

在此感謝以上兩位前輩。

怎樣求FIRST集與FOLLOW集

文法 s abc a a b b first集合求法 能 由非終結符號推出的所有的開頭符號或可能的 但要求這個開頭符號是終結符號。如此題a可以推導出a和 所以first a a,同理 first b s可以推導出abc,還可以推導出bc,還可以推導出c,所以first s a,b,c follow集...

編譯原理 FIRST集與FOLLOW集

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

怎麼求 first集 follow集

判斷該文法是不是ll 1 文法,說明理由 s abc a a b b first集合求法就是 能由非終結符號推出的所有的開頭符號或可能的 但要求這個開頭符號是終結符號。如此題a可以推導出a和 所以first a a,同理first b s可以推導出abc,還可以推導出bc,還可以推導出c,所以fir...