當前位置:首頁 » 編程軟體 » 編譯原理構建first集合視頻

編譯原理構建first集合視頻

發布時間: 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

熱點內容
php上傳xls 發布:2024-11-25 11:01:46 瀏覽:678
formphp 發布:2024-11-25 11:01:45 瀏覽:553
資料庫主表 發布:2024-11-25 10:54:13 瀏覽:228
什麼是cf腳本 發布:2024-11-25 10:51:48 瀏覽:920
存儲台設計 發布:2024-11-25 10:40:04 瀏覽:668
如何查看自己電腦的所有配置 發布:2024-11-25 10:14:02 瀏覽:771
java編譯器偽編譯指什麼 發布:2024-11-25 10:08:53 瀏覽:961
amax伺服器默認地址 發布:2024-11-25 10:07:20 瀏覽:318
甘肅省浪潮伺服器雲伺服器 發布:2024-11-25 10:07:17 瀏覽:522
android手環 發布:2024-11-25 10:03:55 瀏覽:163