First, Follow 集

參考 http://www.cppblog.com/woaidongmao/archive/2010/02/22/108242.html

First集:

1. 非終結符(表達式左側的大寫字母)的推導式如果含有終結符(小寫字母、運算符、ε),則將推導式裏所有終結符作爲這個非終結符的First 集 , 例如
由式

E+TEϵ
推出
First(E)={+,ϵ}

2. 非終結符的推導式全是非終結符, 則該非終結符的First 集等於推導式裏第一個非終結符分First集, 例如
由式

ETE
TFT
F(E)|id
推出
First(E)=First(T)=First(F)={(,id}
3. 終結符的First集是自身

Follow集

Follow集合是針對非終結符而言的,Follow(U)所表達的是句型中非終結符U所有可能的後隨終結符號的集合,特別地,“#”是識別符號的後隨符。注意Follow集合是從開始符號S開始推導。

1. 直接收取:注意產生式右部的每一個形如“…Ua…”的組合,把a直接收入到Follow(U)中。因a是緊跟在U後的終結符。

2.直接收取:對形如“…UP…”(P是非終結符)的組合,把First(P)直接收入到Follow(U)中【在這裏,如果First(P)中有空字符,那麼就要把左部(假設是S)的Follow(S)送入到Follow(U)中。還有就是Follow集中是沒有空字符的】。

3. 直接收取:若S->…U,即以U結尾,則把Follow(S)直接收入到Follow(U)(這裏,參考文章有誤)

4. 開啓表達式的那個起始符 的Follow集是{#}
5.反覆傳送:對形如U->…P的產生式(其中P是非終結符),應把Follow(U)中的全部內容傳送到Follow(P)中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章