編譯原理 first follow select集合理解+例題分析實戰


補充:

FIRST集里面可以有,但是不能有$

 

FOLLOW集里面可以有$,但是不能有

 下面通過一個例子,來展示具體問題分析方法:

 

 

 當計算上面文法的first集合的時候,

第一步,先把所有符號first集寫下:

 

第二步,分析每一個文法,將分析結果寫入first集合

例如第一個文法,可以得出first(E)集合中,需要包括first(T)中的所有元素,此時first(T)中為空,此時不進行操作

再看第二個文法,可以得出first(E`)集合包括+和,所以把這兩個符號,寫入對應first集合

 

 

以此類推

第三步,循環第二步操作,把對應結果再次分析,直到循環整輪沒有新的元素添加進集合中為止

最后是結果:

 

 

 

下面進行計算follow集實戰:

第一步,先把所有元素的follow集合寫好:

 

 

 第二步,將終結符$放在開始的follow集合中

第三步,開始進行每一行文法的分析

分析第一行:可以看出T的follow集合等於E`的first集合,E`的first集合包括+和,這里的話,把+放進T的follow集合中,但是因為

 

 

follow集合中沒有,所以可以得出結論,E`為空時,T的follow集合和E的follow集合是一樣的,需要吧元素移過去,以此類推

第四步:重復上面操作,直到沒有新元素添加進集合

 最后是結果:

 

 

下面展示select集合的求法:

 

1:遇見非終結符,select集合為非終結符的first集合

2:遇見終結符,直接寫進集合

3:當遇到空串,為前面元素的follow集合

 

 

 

 

     

   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)文法

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM