對於first集合,follow集合的構造方法,我引用的是國防科技大學王挺老師的方法,我覺得這個講的比較詳細易懂;
下面用一道例題進行應用;
求e->t|e+t t->f|t*f f->i |(e)
的所有產生式的follow集合,所有產生式右部的first集合。
第一步,消除左遞迴;
上式轉化為:
(1)e->te』
(2)e』->+te』
(3)e』->ε
(4)t->ft』
(5) t』->*ft』
(6)t』->ε
(7)f->(e)
(8)f->i
first(e)=first(t)=first(f)=//由於t推導不出ε,所以後面的first(e』)不加入first(e),同理,(4)中的first(t』)不加入first(t)。
first(e』)=//由於e』的推導中第乙個字元就是+,為終結符,掃瞄後,first停止。(個人想法)
first(t)=first(f)=
first(t』)=
first(f)=
follow集合:
follow(e)= ,//e為開始符號,加入#,(7)式中first( ))加入了follow(e)
follow(e』)= follow(e)= //follow集合第三條規則,第乙個產生式中e』是最後乙個符號,所以follow(e』)中加入follow(e)。
follow(t)=}∪follow(e)∪follow(e』) = //(2)式由follow規則2,first(e』)\ε加入follow(t)
(1)式可構成e->ate』,a為ε,這樣,follow(e)加入follow(t),同理,(2)中的follow(e』)加入follow(t)
follow(t』)= follow(t)=
follow(f)=})∪follow(t)∪follow(t』) =
編譯原理 First集合和Follow集合的求法
first集合的求法 first集合最終是對產生式右部的字串而言的,但其關鍵是求出非終結符的first集合,由於終結符的first集合就是它自己,所以求出非終結符的first集合後,就可很直觀地得到每個字串的first集合。1.直接收取 對形如u a 的產生式 其中a是終結符 把a收入到first ...
編譯原理first集合和follow集合
2011.06.4 文法 s abc a a b b first集合求法 能 由非終結符號推出的所有的開頭符號或可能的 但要求這個開頭符號是終結符號。如此題a可以推導出a和 所以first a a,同理 first b s可以推導出abc,還可以推導出bc,還可以推導出c,所以first s a,b...
編譯原理 First集合和Follow集合的求法
first集合的求法 first集合最終是對產生式右部的字串而言的,但其關鍵是求出非終結符的first集合,由於終結符的first集合就是它自己,所以求出非終結符的first集合後,就可很直觀地得到每個字串的first集合。1.直接收取 對形如u a 的產生式 其中a是終結符 把a收入到first ...