複習 First集和Follow集的求法

2021-10-12 16:23:05 字數 1047 閱讀 4604

參考**:

我的理解:比如求first(a)

(1)如果產生式右部第乙個就是終結符,那麼這個終結符屬於first(a)

例子:

...

a->ab|ε

a->c

...first(a)=

分析:右部的第乙個產生式分別是a,ε,c

(2)如果產生式右部第乙個是非終結符,那麼就找以這個非終結符為產生式左部的產生式,直到找到產生式右部以終結符開頭,那麼這個終結符屬於first(a)例子

...

a->ba //產生式a

b->b //產生式b

...first(a)=

分析:要求的是first(a),產生式a右部是非終結符號b,就去找左部是b的產生式,找到了產生式b,產生式b以終結符b開頭,那麼b屬於first(a)。其實這相當於用產生式b中的b替換了產生式a中的b

(3)產生式右部有ε的情況,用ε去替換非終結符後看看能否獲得更多的first集元素

例子

...

a->bc //產生式a

b->b|ε //產生式b

...first(a)=

分析:要求的是first(a),按照(2)的分析,b∈first(a)。其實產生式b中的ε也可以用來替換產生式a中的b,替換後產生式變成了a->εc,也就是a->c,再根據(1),得出c∈first(a)

(1)要求follow(a)就找產生式右部有a的產生式

(2)對於文法的開始符號s,#∈follow(s)

(3)求follow(b),若a->αbβ是乙個產生式,first(β)除去空加入到follow(b)中

(4)求follow(b),若a->αbβ是乙個產生式且β->空,則follow(a)加入到follow(b)中

(5)求follow(b,若a->αb是乙個產生式,則follow(a)加入到follow(b)中

關於求follow的例子和答案在上方**上有。

2020/12/19 於公教樓

FIRST集 FOLLOW集 和 SELECT集

first a 為a的開始符或者首符號集。設g vt,vn,s,p 是上下文無關文法 first 特別的,若 能推導出 則規定 first 若x vt,則first x 簡單講,終結符的first集就是它本身 若x vn,且有產生式x a a vt,則 a first x x 則 first x 簡...

first集和follow集的計算

計算first集 根據定義計算 對每一文法符號x v 計算first x a 若x vt,則first x b 若x vn,且有產生式x a a vt,則 a first x c 若x vn,x 則 first x d 若x,y1,y2,yn都 vn,且有產生式x y1 y2 yn 當y1 y2 y...

編譯原理 FIRST集和FOLLOW集

自己的理解 例子如果x是乙個終結符,則first x x 如果x是乙個非終結符,則x y 1y2y 3 yk x rightarrow y 1y 2y 3 cdots y k x y1 y 2 y3 yk 其中k 1 k ge1 k 1。i k,a firs t yi 且fi rst y1 firs...