編譯原理 FIRST集和FOLLOW集

2021-09-18 06:22:59 字數 2977 閱讀 9275

自己的理解

例子如果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

t(yi

−1

)\exists i \in k,a\in first(y_i)且first(y_1)\cdots first(y_)

∃i∈k,a

∈fir

st(y

i​)且

firs

t(y1

​)⋯f

irst

(yi−

1​)中都有

ϵ則把a

加入到f

irst

(x)中

中都有\epsilon 則把a加入到first(x)中

中都有ϵ則把

a加入到

firs

t(x)

中 並且可以有以下推論:

f ir

st(y

1)∈f

irst

(x

)first(y_1)\in first(x)

first(

y1​)

∈fir

st(x

)如果y

1y_1

y1​不能推導出ϵ

\epsilon

ϵ,則不會再往fir

st(x

)first(x)

first(

x)中新增任何元素

如果s

ss是開始符,則ς∈f

\varsigma\in f ,\varsigma

ς∈f,

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

如果有a→α

a\rightarrow \alpha b\beta

a→αb

β,那麼fir

st(β

)first(\beta)

first(

β)中除了ϵ

\epsilon

ϵ之外的所有符號都在fol

low(

b)

follow(b)

follow

(b)中。

如果有a→α

ba\rightarrow \alpha b

a→αb

,或a →α

a\rightarrow \alpha b\beta

a→αbβ且fir

st(β

)first(\beta)

first(

β)包含ϵ

\epsilon

ϵ。則fol

low(

a)

follow(a)

follow

(a)的所有符號都在fol

low(

b)

follow(b)

follow

(b)中。

終結符的first就是自己

對於產生式,如果最左邊的能推導出ϵ

\epsilon

ϵ,則再開始推第二個,並把最左邊的first並到自己的first裡。

產生式的右邊如果存在,則把first(右邊)中除了ϵ

\epsilon

ϵ之外所有的符號加入follow(自己)

如果產生式的右邊能推導出ϵ

\epsilon

ϵ,或者不存在,則產生式左邊的follow也在自己的裡面。 g[s

]:

g[s]:

g[s]:e→t

e′

e \rightarrow te^

e→te

′ (1) e′→

+te′

∣ϵ

e^ \rightarrow +te^ | \epsilon

e′→+te

′∣ϵ(2) t→f

t′

t\rightarrow ft^

t→ft

′(3) t′→

∗ft′

∣ϵ

t^\rightarrow *ft^|\epsilon

t′→∗ft

′∣ϵ(4) f→(

e)∣i

df\rightarrow (e)|id

f→(e)∣

id(5)由(5)明顯易得:

first(f)= 因為是終結符

所以:first(t) = first(f) 因為(3),最左邊的元素,且first(f)裡沒有ϵ

\epsilon

ϵ同理根據(1)可得

所以first(e) = first(t) = first(f)

也由(4)明顯易得:

fisrt(t′t^

t′) =

同理(2)

fisrt(e′e^

e′) =

因為e是開始符,並且由(5)得到follow(e) =

由(1)可得 follow(e′e^

e′) = follow(e)

由(2)可得follow(t)中一定有first(e′e^

e′)

所有follow(t)中一定有』+』

且first(e′e^

e′)中存在ϵ

\epsilon

ϵ,並且(1)產生式的左邊是e

所以follow(t)=

所以follow(t′t^

t′) = follow(t)

有(3),(4)可得

follow(f) =

編譯原理 First集和Follow集

剛學first集和follow集的時候,如果上課老師沒有講明白或者自己沒聽明白,自己看的時候還真是有點難理解,不過結合著具體的題目可以理解的更快。先看一下兩種集合的求法 first集合的求法 first集合最終是對產生式右部的字串而言的,但其關鍵是求出非終結符的first集合,由於終結符的first...

編譯原理 FIRST集與FOLLOW集

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

編譯原理 First集和Follow集的求法

自上而下分析 first集求法 first集合最終是對產生式右部的字串而言的,但其關鍵是求出非終結符的first集合,由於終結符的first集合就是它自己,所以求出非終結符的first集合後,就可很直觀地得到每個字串的first集合。1.直接收取 對形如u a 的產生式 其中a是終結符 把a收入到f...