參考 http://www.cppblog.com/woaidongmao/archive/2010/02/22/108242.html
First集:
1. 非終結符(表達式左側的大寫字母)的推導式如果含有終結符(小寫字母、運算符、ε),則將推導式裏所有終結符作爲這個非終結符的First 集 , 例如
由式
2. 非終結符的推導式全是非終結符, 則該非終結符的First 集等於推導式裏第一個非終結符分First集, 例如
由式
推出
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)中。