文法:s→abc
a→a|ε
b→b|ε
first集合求法:
能 由非終結符號推出的所有的開頭符號或可能的ε,但要求這個開頭符號是終結符號。如此題a可以推導出a和ε,所以first(a)={a,ε};同理 first(b)=;s可以推導出abc,還可以推導出bc,還可以推導出c,所以first(s)={a,b,c}
follow集合的求法:
緊跟隨其後面的終結符號或#。但文法的識別符號包含#,在求的時候還要考慮到ε。 具體做法是把所有包含你要求的符號的產生式都找出來,再看哪個有用。 follow(s)={#}
如求a的,產生式:s→abc a→a|ε ,但只有s→abc 有用。跟隨在a後年的終結符號是first(b)={b,ε},當first(b)的元素為ε時,跟隨在a後的符號就是c,所以 follow(a)={b,c} 同理follow(b)={c}
明天就考試了,在這裡糾結這個問題。
一,要知道什麼是終結符和非終結符。
終結符:通俗的說就是不能單獨出現在推導式左邊的符號,也就是說終結符不能再進行推導。
非終結符:不是終結符的都是非終結符。(非男即女,呵呵)
如:a——>b,則a是非終結符。
(一般書上終結符用小寫,非終結符用大寫。)
二,文法產生語言句子的基本思想:從識別符號(開始符)開始,把當前產生的符號串中的非終結符替換為相應規則右部的符號串,直到全部由終結符組成。
三,first集求法
first集合最終是對產生式右部的字串而言的,但其關鍵是求出非終結符的first集合,由於終結符的first集合就是它自己,所以求出非終結符的first集合後,就可很直觀地得到每個字串的first集合。
1. 直接收取:對形如u->a…的產生式(其中a是終結符),把a收入到first(u)中
2. 反覆傳送:對形入u->p…的產生式(其中p是非終結符),應把first(p)中的全部內容傳送到first(u)中【意思就是只需要把第乙個非終結符的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(u)
4.*反覆傳送:對形如u->…p的產生式(其中p是非終結符),應把follow(u)中的全部內容傳送到follow(p)中。
ps:follow集比first要複雜一點,不過記住演算法多做練習就是小case啦。
怎樣求FIRST集 FOLLOW集和SELECT集
終結符 通俗的說就是不能單獨出現在推導式左邊的符號,也就是說終結符不能再進行推導。非終結符 不是終結符的都是非終結符。非男即女,呵呵 如 a b,則a是非終結符。一般書上終結符用小寫,非終結符用大寫。從識別符號 開始符 開始,把當前產生的符號串中的非終結符替換為相應規則右部的符號串,直到全部由終結符...
怎麼求 first集 follow集
判斷該文法是不是ll 1 文法,說明理由 s abc a a b b first集合求法就是 能由非終結符號推出的所有的開頭符號或可能的 但要求這個開頭符號是終結符號。如此題a可以推導出a和 所以first a a,同理first b s可以推導出abc,還可以推導出bc,還可以推導出c,所以fir...
關於求FIRST集和FOLLOW集
這幾天上課沒怎麼聽進去,導致對求first集和follow集有點模模糊糊的,於是在網上找到乙個部落格,看完就理解了,就轉過來了。來自 對於終結符和非終結符的理解 終結符 通俗的說就是不能單獨出現在推導式左邊的符號,也就是說終結符不能再進行推導。非終結符 不是終結符的都是非終結符。如 a b,則a是非...