當前位置:ag真人国际官网-ag旗舰厅官方网站 » 編程軟體 » 編譯原理構建first集合視頻

編譯原理構建first集合視頻-ag真人国际官网

發布時間: 2024-11-14 17:43:57

編譯原理——first集與follow集

first(a)為a的開始符或者首符號集。

如果兩個a產生式 a -> α | β ,且first(α)和first(β)不相交;

下一個輸入符號是x,若x∈first(α),則選擇 a->a ,若x∈first(β),則選擇 a->b 。

計算first(x)的方法

如果演算法看不懂,那我們來根據演算法來模擬一下!

因為求first集合如果有終結符號會比較好處理,所以我們逆順序進行實施;

應該一看明白了!

follow(a)指的是在某些句型中緊跟在a右邊的 終結符號 的集合

一步一步來看

2.1 第一次迭代

第一種情況: follow(t)=first(e')={ }

第二種情況 : follow(e')=follow(e)={ $ }

第一種情況: follow(t)=first(e')={ }

第二種情況 : follow(t)=follow(e')={ , $ }

第一種情況: follow(f)=first(t')={ * }

第二種情況 : follow(t')=follow(t)={ , $ }

第一種情況: follow(f)=first(t')={ * }

第二種情況 : follow(f)=follow(t')={ , * , $ }

第一種情況 : follow(e)={ $ , ) }

2.2 第二次迭代

由於我們列出了等值關系,所以只需要再走一次第一次迭代的過程就可以了!

因為主要是follow可能在變,所以我們只需要找到follow的等值關系即可

我在上面標出了第一次迭代的follow的最新版

下面我只要列出更新的即可

2.3 第三次迭代

第三次迭代就會發現 follow集合 不再發生改變,這時候規則結束,求出follow集合。

follow比較容易出錯,出錯的點主要在迭代過程的第二種情況的: a -> αbβ 且first(β)包含ε

我們容易忽略這種情況。

只要把每一次迭代過程都寫在紙上,尤其注重 follow集合 的等值!

⑵ 關於編譯原理first follow 和select

首先要明白這三個集的作用和用途,知道了他們是用來做什麼的之後,理解起來就簡單一些
first(a)集的作用是標示在替換非終結符a的時候,替換後的文法的首字母集合,語法分析程序根據這個來判斷給定的語言是否是合法的,是符合規則的。
follow(a)的作用是標示那些可以出現在a之後的字元,語法分析程序根據這個,在a可以被替換為e(空)的時候來進行判斷,看當前的文法是否是合法的。
這里簡單說明下,比如a->b,a->e(空) 當給定的語言是 bxxxxx的時候,根據第一句文法就可以判定句子合法,但是如果給的語言是cxxxxx的時候,因為a->可以替換為空,這時候就需要一句a的follow集來進行判斷,若a的follow集裡面含有c 則語言是合法的
select集的作用是將first集和follow集進行合並,如果兩個文法的左端都是a,若他們的select集交集為空,表明他們是兩個無關的,不會產生不確定性的文法,反之,則表明文法不是ll(1)文法
計算的公式很繁雜,理解了意思之後,看就能看出來。。。。

⑶ 編譯原理中firstvt和lastvt是什麼意思

firstvt和lastvt是為了畫算符優先關系表的(就是表裡面填優先大於小於等於的那個)。
然後要注意他們可都是終結符的集合。
firstvt
找firstvt的三條規則:如果要找a的firstvt,a的候選式中出現:
a->a.......,即以終結符開頭,該終結符入firstvt
a->b.......,即以非終結符開頭,該非終結符的firstvt入a的firstvt
a->ba.....,即先以非終結符開頭,緊跟終結符,則終結符入firstvt

lastvt
找lastvt的三條規則:如果要找a的lastvt,a的候選式中出現:
a->.......a,即以終結符結尾,該終結符入lastvt
a->.......b,即以非終結符結尾,該非終結符的lastvt入a的lastvt
a->.....ab,即先以非終結符結尾,前面是終結符,則終結符入firstvt

⑷ 編譯原理語法分析中,求first,follow集合時,要消除左遞歸嗎

如果題目是單純求first、follow集合,不需要消除左遞歸。但是,如果求first、follow集合是為了判斷文法是否為ll(1)文法的話,可以直接得出否定的結論(因為含有左遞歸的文法絕對不是ll(1)文法)。可以先對文法進行改寫,一般是消除左遞歸和提取左公共因子,然後再判斷。

⑸ 一道《編譯原理》求follow集題目,在線等答案

哥們,你這個問題中的一個產生式e』→ te』| e,應該是e-> te』 |ε這樣吧!否則不可能獲得如此結果。
關於求follow集合,龍書中說得很清楚,依據三條規則即可:
1、任何follow(s)都包含輸入終止符號,其中s是開始符號。
適用該條,因此follow(e』)中包含終止符號#。
2、如果存在產生式,a->αbβ,則將first(β)中除ε以外的符號都放入follow(b)中。
該條不適用,因為在上述所有產生式中不存在形如e『->αe』β這樣的產生式。
3、如果存在產生式,a->αb,或a->αbβ,其中first(β)中包含ε,則將follow(a)中的所有符號都放入follow(b)中。
適用該條,因為存在這樣的產生式e-> te』,使得follow(e』)=follow(e)成立。而follow(e)適用上述第二條,根據產生式f→(e)可求得為follow(e)={#,)}。
綜上,follow(e』)=follow(e)={#,)}。

⑹ 編譯原理計算first 集和follow集的簡單方法 s->bbs' s'->aas'|ε a->ab|c b->db' b'->bb'|ε 求計算過程

first : s'=a,ε
s=b
a=a,c
b=d
b'=b,ε
follow: s'=#
s=#
a=a
b=a
b'=a

熱點內容
vb資料庫數組 發布:2024-11-19 09:23:40 瀏覽:827
安卓游戲數據保存在哪裡找 發布:2024-11-19 09:22:02 瀏覽:309
解壓出來的文件亂碼 發布:2024-11-19 09:15:40 瀏覽:939
北航ftp是多少 發布:2024-11-19 09:15:32 瀏覽:821
瀏覽保存密碼如何取消 發布:2024-11-19 09:10:17 瀏覽:89
安卓怎麼關簡訊重復提醒 發布:2024-11-19 09:02:00 瀏覽:635
html與php的區別 發布:2024-11-19 09:00:53 瀏覽:193
晚安密碼多少 發布:2024-11-19 09:00:51 瀏覽:945
易語言腳本模塊 發布:2024-11-19 09:00:44 瀏覽:484
經典矩陣c語言 發布:2024-11-19 08:56:23 瀏覽:268
网站地图