First集和Follow集(轉)

FIRST集合和FOLLOW集合
一吐绵、First集合
定義:
First集合是對產生式右部的字符串而言的,求取的是非終結符VT(或終結符尼斧、空字符长踊、文法符號串)的開始符號集合,集合中包含的是由左部非終結符VT推導得到的終結符VN或空字符ε。以α表示一個文法的字符串毫别,F(xiàn)IRST( α )表示由α推導出的串的首個終結符或空字符組成的集合娃弓。

規(guī)則
求文法符號X的FIRST( X ) ,直到沒有終結符或空字符可以加入岛宦。
① 如果X屬于終結符VT台丛,則FIRST(X) = { X } 。
② 如果X屬于非終結符VN砾肺,且有產生式形如X → a…挽霉,則FIRST( X ) = { a }。
③ 如果X屬于非終結符VN债沮,且有產生式形如X → ABCdEF…(A炼吴、B、C均屬于非終結符且包含 ε疫衩,d為終結符)硅蹦,需要把d、FIRST( A )闷煤、FIRST( B )童芹、FIRST( C )加入到FIRST( X)中。
④ 如果X經過一步或多步推導出空字符ε鲤拿,將ε加入FIRST( X )假褪。

一組文法符號串
由規(guī)則可知單個文法字符的FIRST集,那么一組文法字符串的FIRST集也可以求取了近顷。假設文法符號串S由X1X2X3……Xn組成生音,則將每個文法符號Xi的FIRST集加入到FIRST( S )中,包括空字符ε窒升。

舉例1
設有文法G[A]:?
???A→BCc?|?gDB??????
???B→bCDE?| ε?????
???C→DaB?|?ca??????
???D→dD?| ε??????
???E→gAf?|?c?
解:
FIRST( A ) = FIRST( BCc ) ∪ FIRST( gDB )
=FIRST( B )∪FIRST( C )∪{ c }∪{ g }
由規(guī)則③規(guī)則②可知
FIRST( A ) =FIRST( B )∪FIRST( D )∪{ a }∪{ c }∪{ c }∪{ g }
={ b缀遍,ε?}∪{ d,ε }∪{ a }∪{ c }∪{ g }
={ a饱须,b域醇,c,d蓉媳,g 譬挚,ε }
FIRST( B ) = { b,ε }
FIRST( C ) = FIRST( D )∪{ a }∪{ c }= { a酪呻,c减宣,d,ε }
FIRST( D ) = { d玩荠,ε }
FIRST( E ) = { g蚪腋,c }
對于A來說:有兩種選擇 BCc 與 gDB丰歌,BCc用規(guī)則③姨蟋,gDB用規(guī)則②屉凯。
對于B來說:有兩種選擇 bCDE 與 ε,均用規(guī)則②眼溶。
對于C來說:有兩種選擇 DaB 與 ca悠砚,由于D存在空字符,所以 DaB用規(guī)則③堂飞,ca用規(guī)則②灌旧。
對于D來說:有兩種選擇dD?與 ε?,分別用規(guī)則②與規(guī)則④绰筛。
對于E來說:有兩種選擇gAf?與?c?枢泰,均用規(guī)則②。

舉例2
設有文法G[S]:
???S→aBS | bAS | ε
???A→bAA | a
???B→aBB | b
解:
FIRST( S ) = FIRST( aBS )∪FIRST( bAS )∪{ ε }={ a铝噩,b衡蚂,ε }
FIRST( A ) = { a,b }
FIRST( B ) = { a骏庸,b }
對于S來說:有三種選擇 aBS與bAS毛甲、ε,分別用②與規(guī)則④具被。
對于A來說:有兩種選擇bAA與 a玻募,均用規(guī)則②。
對于B來說:有兩種選擇aBB與 b一姿,均用規(guī)則②七咧。

二、Follow集合
定義:
Follow集合是對某個非終結符而言的叮叹,求取的是非終結符VT的后繼符號集合艾栋,集合中包含的是由非終結符VT后面緊跟的終結符VN和結束符$,不能出現(xiàn)空字符ε 衬横。以X表示一個非終結符裹粤,F(xiàn)OLLOW( X )表示當X通過規(guī)約出現(xiàn)時,接下來的輸入可能是哪些終結符蜂林。

規(guī)則
求非終結符X的FOLLOW( X ) 遥诉,直到沒有終結符可以加入。
① 如果X是開始符號噪叙,則將$加入到FOLLOW(X)中 矮锈。
② 如果存在一個產生式S->αXβ,那么將集合FIRST(β)中除ε外的所有元素加入到FOLLOW(X)當中睁蕾。
③如果存在一個產生式 S->αX , 或者S->αXβ且FIRST(β)中包含ε , 那么將集合FOLLOW(S)中的所有元素加入到集合FOLLOW(X)中苞笨。

舉例1
設有文法G[A]:?
???A→BCc?|?gDB??????
???B→bCDE?| ε?????
???C→DaB?|?ca??????
???D→dD?| ε??????
???E→gAf?|?c?
解:
FOLLOW( A ) ={ f 债朵,} FOLLOW( B ) = FIRST( C )∪FOLLOW( A )∪FOLLOW( C ) ?????????????={ a,c瀑凝,d }∪{ f 序芦, }∪{ c,d粤咪,g谚中,} ?????????????={ a,c寥枝,d宪塔,f,g囊拜, }
FOLLOW( C ) = { c }∪FIRST( D )∪FIRST( E )
???????????? ={ c }∪{ d }∪{ g某筐,c }
???????????? ={ c,d冠跷,g }
FOLLOW( D ) = FIRST( B )∪FOLLOW(A )∪FIRST( E )∪{ a }
?????????????={ b } ∪{ g南誊,c }∪{ f ,}∪{ a } ?????????????={ a蔽莱,b弟疆,c,g盗冷,f怠苔, }
FOLLOW( E ) = FOLLOW( B )
?????????????={ a,c仪糖,d柑司,f,g锅劝,} 其中攒驰,A,B,C,D,E都是非終結符,A是開始符號故爵。 對于A的出現(xiàn)來說:A是開始符號玻粪,規(guī)則①需要加入;E→gAf诬垂,規(guī)則②將f加入FOLLOW( A )劲室。
對于B的出現(xiàn)來說:有?A→BCc,規(guī)則②將FIRST( C )除ε以外加入進去结窘;有A→gDB很洋,規(guī)則③將FOLLOW( A )加入進去;有C→DaB隧枫,規(guī)則③將FOLLOW( C )加入進去喉磁。
對于C的出現(xiàn)來說:有?A→BCc谓苟,規(guī)則②將c加入進去;有B→bCDE协怒,規(guī)則③將FOLLOW( D )加入進去涝焙,由于D存在空字符ε,所以需要把FIRST( E )除ε以外也加入進去斤讥。
對于D的出現(xiàn)來說:有A→gDB纱皆,規(guī)則②將FIRST( B )除ε以外加入進去,由于B存在空字符ε芭商,所以規(guī)則③將FOLLOW( A )加入進去;有B→bCDE搀缠,規(guī)則②將FIRST( E )除ε以外加入進去铛楣;有C→DaB,規(guī)則②將a加入進去艺普。
對于E的出現(xiàn)來說:有B→bCDE簸州,規(guī)則③將FOLLOW( B )加入進去。

舉例2
設有文法G[S]:
???S→aBS | bAS | ε
???A→bAA | a
???B→aBB | b
解:
FOLLOW( S ) = { } FOLLOW( A ) = FIRST( S )∪FOLLOW( S )∪FIRST( A ) ?????????????={ a歧譬,b } ∪{ }∪{ a岸浑,b }
?????????????={ a,b瑰步,} FOLLOW( B ) =FIRST( S )∪ FOLLOW( S )∪FIRST( B ) ?????????????={ a矢洲,b } ∪ { }∪{ a,b }
?????????????={ a缩焦,b读虏,} 其中S,A,B是非終結符,S是開始符號袁滥。 對于S的出現(xiàn)來說:規(guī)則①將加入進去盖桥。
對于A的出現(xiàn)來說:有S→bAS,規(guī)則②將FIRST( S )除ε以外加入進去,由于S存在空字符ε题翻,規(guī)則③將FOLLOW( S )加入進去揩徊;有A→bAA,規(guī)則②將FIRST( A )除ε以外加入進去嵌赠。
對于B的出現(xiàn)來說:有S→aBS塑荒,規(guī)則②將FIRST( S )除ε以外加入進去,由于S存在空字符ε,規(guī)則③將FOLLOW( S )加入進去猾普;有B→aBB袜炕,規(guī)則②將FIRST( B )除ε以外加入進去。

第三部分·如何構造LL(1)分析表
首先畫出表格初家,表格的左列是每一個產生式的左部(不重復)偎窘,表格的橫行是每一個終結符號乌助。
接著逐個考察所有產生式。
抽象算法:
對于G中的每一個產生式陌知, A -> α ,執(zhí)行以下2步:

1.for ? a ∈ FIRST(α)他托, 將 A -> α 填入 M [A, a ];

//對逐個產生式進行考察,考察產生式的FIRST集合的元素仆葡,在找到的元素的對應表格中填寫該產生式

  1. if(ε ∈ FIRST(α))

      ? a ∈ FOLLOW (A) 赏参, 將 A -> ε 填入 M [A, a ];
    

//如果發(fā)現(xiàn)產生式的FIRST集中包含空符號,就查找該產生式頭部的FOLLOW集合中的元素沿盅,在元素的對應表格中填寫空產生式


原文:https://blog.csdn.net/Cielyic/article/details/82941014

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末把篓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腰涧,更是在濱河造成了極大的恐慌韧掩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窖铡,死亡現(xiàn)場離奇詭異疗锐,居然都是意外死亡,警方通過查閱死者的電腦和手機费彼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門滑臊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箍铲,你說我怎么就攤上這事雇卷。” “怎么了虹钮?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵聋庵,是天一觀的道長。 經常有香客問我芙粱,道長祭玉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任春畔,我火速辦了婚禮脱货,結果婚禮上,老公的妹妹穿的比我還像新娘律姨。我一直安慰自己振峻,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布择份。 她就那樣靜靜地躺著扣孟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荣赶。 梳的紋絲不亂的頭發(fā)上凤价,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天鸽斟,我揣著相機與錄音,去河邊找鬼利诺。 笑死富蓄,一個胖子當著我的面吹牛,可吹牛的內容都是我干的慢逾。 我是一名探鬼主播立倍,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼侣滩!你這毒婦竟也來了口注?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胜卤,失蹤者是張志新(化名)和其女友劉穎疆导,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體葛躏,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年悠菜,在試婚紗的時候發(fā)現(xiàn)自己被綠了舰攒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悔醋,死狀恐怖摩窃,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情芬骄,我是刑警寧澤猾愿,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站账阻,受9級特大地震影響蒂秘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜淘太,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一姻僧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒲牧,春花似錦撇贺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挎扰,卻和暖如春翠订,著一層夾襖步出監(jiān)牢的瞬間巢音,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工蕴轨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留港谊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓橙弱,卻偏偏與公主長得像歧寺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棘脐,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容

  • 專業(yè)考題類型管理運行工作負責人一般作業(yè)考題內容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,992評論 0 13
  • 純屬瞎寫借鑒斜筐,我覺得很好懂,給那些不懂的人看 計算FIRST集:① 根據定義計算:對每一文法符號X∈V 計算FIR...
    何處皆不見過往閱讀 11,797評論 2 4
  • 文法: S→ABc A→a|ε B→b|ε First集合求法: 能由非終結符號推出的所有的開頭符號或可能的ε蛀缝,但...
    暖熊熊閱讀 9,782評論 2 9
  • 求解first集與follow集通過作業(yè)題目例子來體會顷链。 題目 1. First 集 First(A)為A的開始符...
    海de我閱讀 22,552評論 1 4
  • 我的人生沉重而又憂傷地遇到了文學,于是我決定報考那門冷清而又看似前途渺茫的專業(yè)屈梁,結果果然遭到了家人的一致反對嗤练。于是...
    易容風閱讀 250評論 1 2