導航:首頁 > 源碼編譯 > 編譯原理follow集合演算法

編譯原理follow集合演算法

發布時間:2025-06-29 20:16:45

⑴ 關於編譯原理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)文法
計算的公式很繁雜,理解了意思之後,看就能看出來。。。。

⑵ 誰能通俗解釋一下FIRST集和FOLLOW集的求法啊

三,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)中。

⑶ 關於編譯原理first follow 和select

在編譯原理中,First(A)、Follow(A)和Select集是非常重要的概念。First(A)集的作用在於表示在替換非終結符A時,替換後的文法規則的首字母集合。這對於語法分析程序判斷給定語言是否符合規則至關重要。

Follow(A)集則標識了在非終結符A之後可以出現的字元。這種信息對於分析程序在A可以被替換為空(ε)的情況下,進行合法性的判斷非常關鍵。以一個簡單的例子說明:假設文法規則為A->b, A->ε。當輸入語言為bXXXXX時,根據第一條規則可以判定句子是合法的。但如果輸入語言為cXXXXX時,由於A可以被替換為空,此時就需要藉助A的Follow集來進行判斷。如果A的Follow集中含有字元c,則說明語言是合法的。

Select集的作用是將First集和Follow集進行合並。具體來說,當兩個文法規則的左端都是A時,如果它們的Select集交集為空,則表明這兩個規則是無關的,不會產生不確定性的文法。反之,如果Select集的交集不為空,則表明這些規則可能會導致文法不是LL(1)文法。通過這種合並,可以有效地幫助我們理解文法的結構和規則之間的關系。

雖然計算Select集的具體公式可能較為復雜,但只要理解了這些概念背後的邏輯,就能更容易地理解和應用它們。這種合並過程對於確保文法的確定性和可解析性非常重要。

綜上所述,First(A)、Follow(A)和Select集在編譯原理中扮演著關鍵角色。通過理解和應用這些概念,我們可以更好地分析和優化文法,確保其能夠正確解析輸入語言。這不僅有助於提高編譯器的性能,還能增強對復雜文法規則的理解。

⑷ 編譯原理計算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

⑸ 編譯原理 FOLLOW集

因為有:
T→ F T』
T』→ *F T』
所以FIRST(T')是FOLLOW(F)的子集。所以 * 是FOLLOW(F)中的元素。
因為有:
T→ F T』
T』→ε
所以FOLLOW(T)是FOLLOW(F)的子集。
因為有:
E』→ +TE』
所以FIRST(E『)是FOLLOW(T)中的子集。所以FIRST(E『)是FOLLOW(F) 中的子集。
因為有:
E』→ +TE』
所以+是FIRST(E』)中的元素,所以+是FOLLOW(F)中的元素。
因為有:
E』→ ε
E → TE』
所以有:
FOLLOW(E)是FOLLOW(T)子集。前面有所以FOLLOW(T)是FOLLOW(F)的子集。所以有
FOLLOW(E)是FOLLOW(F)的子集,
由F → (E)|id
知 ) 是FOLLOW(E)的元素。所以 ) 是FOLLOW (F)的元素。
因為E是開始符號,所以有 $ 是FOLLOW(E)中的元素,所以 $ 是FOLLOW(F)中的元素。
綜上所述:
FOLLOW(F)= {*,+,),$}

閱讀全文

與編譯原理follow集合演算法相關的資料

熱點內容
電腦跟伺服器連不上什麼原因 瀏覽:764
單片機表格 瀏覽:312
移動磁碟加密無法格式化怎麼辦 瀏覽:626
530a單片機技術資料 瀏覽:491
程序員辭職原因 瀏覽:752
程序員自學編程靠譜嗎 瀏覽:91
加密在網關 瀏覽:181
如何在本機上搭建代理伺服器 瀏覽:114
linux從入門到精通第2版 瀏覽:369
ubuntuopenwrt編譯環境 瀏覽:193
python求一組隨機數的最大值 瀏覽:871
雲南首選dns伺服器地址 瀏覽:445
如何連接伺服器的db2 瀏覽:908
java線程怎麼結束 瀏覽:380
越玩越解壓的東西 瀏覽:127
伺服器多顯卡交火有什麼用 瀏覽:517
單片機的崗位有哪些 瀏覽:413
有樂中文網app叫什麼名 瀏覽:763
linuxopenvpn客戶端 瀏覽:101
壓縮機高壓側 瀏覽:937