[轉]LL(1)文法判別之First集合、Follow集合、Select集合求法


說明:

所有大寫字母代表非終結符,小寫字母代表終結符,省略號代表未知數目(可能為0)的不確定類型的文法符號。

First集合:

First集合顧名思義就是求一個文法符號串所可能推導出的符號串的第一個終結符的集合。

FirstX)就是求X所有推導出的符號串的第一個符號的集合。

First集合可分如下幾種情況:

單個符號的First集合:

單個終結符的First集合就是它自己。

單個非終結符的First集合:

A-->a… 產生式右部以終結符開頭

根據定義,這種情況下顯然可以看出a屬於First(A)

 

A-->B… 產生式右部以非終結符開頭

根據定義,既然可以把A替換成B……,也可以看出FirstB)屬於FirstA)。

這是一個遞歸的推導。

 

多個符號形成的符號串的First結合:

符號串ABC…,並且A不能推導出空串ε

A不能推導出空串ε,顯然根據定義FirstABC…)=FirstA

 

符號串ABC…,並且A可能推導出空串ε

當A不是空串的時候,顯然FirstA)屬於FirstABC…),但當A是空串的時候,

ABC…就成了BC…,此時根據B是否能推出空串來決定是否將FirstB)加入FirstABC…)。這是一個遞歸的推導,綜上所述,符號串中的第一個不能推出空串的符 號前面所有符號的First集合減去空串ε都屬於FirstABC…),第一個不能推出空串的 符號的First集合也屬於FirstABC…)。也就是假設AB都可以推出空串,C不能推 出空串,FirstABC…)=FirstA-ε∪FirstB-ε∪FirstC)。

 

符號串ABC…,並且所有的符號ABC…都可能推導出空串ε

此時FirstABC…)就是所有符號的First集合的並集

 

 

注意:First集合中的符號一定是終結符,終結符也包括空串ε。

Follow集合:

Follow集合也是顧名思義的,就是文法符號后面可能跟隨的終結符的集合(不包括空 串ε)。

Follow(X)就是求X后面可能跟隨的符號集合。

Follow集合可分如下幾種情況:

 

終結符的Follow集合沒有定義,只有非終結符才會有Follow集合。

 

A-->Ua… 要求的Follow集合的非終結符后跟終結符

根據定義,顯然a屬於FollowU)。這種情況下,FollowU)和A沒有任何關系,產 生式左邊是什么無所謂。

 

A-->UP… 要求的Follow集合的非終結符后跟非終結符

根據定義,顯然P的第一個符號屬於FollowU),也就是FirstP)屬於FollowU)。

 

A-->UP並且ε屬於FirstP) 要求的Follow集合的非終結符后跟非結尾的終結符, 並且結尾非終結符的First集合包含空串。

這是上一種情況的一種特例,除了要按上一種情況處理,FirstP)屬於FollowU) 以外還要進行分析;因為當P推導為空串時,空串不能出現在Follow集合中,所以U后面跟隨的應該是P后面的東西,可P已經是結束的符號,此時U后面顯然就是A后 面跟隨的東西了。所以在這種情況下FollowA)也屬於FollowU)。

 

A-->要求的Follow集合的非終結符在產生式結尾

這時候又要遞歸推導,UA的結尾,所以U后面跟隨的東西也就是A后面跟隨的東 西。所以FollowA)屬於FollowU)。

注意:Follow集合中的符號一定是終結符,並且不能包括空串ε,而且定義開始符號 的Follow集合初始為{#(句子括號)}。

 

Select集合:

Select集合就是產生式左部的可能的推導結果的起始符號。

SelectA-->B)就是求這個產生式中A可能推導出起始符號集合(不包含空串ε)。

Select集合可分如下幾種情況:

 

A-->X X為任意文法符號串,不限於非終結符或單個符號),並且X不能推導出空串ε

根據定義,顯然A推出的符號串起始就是X的起始,也就是FirstX.

SelectA-->X= FirstX

 

A-->X X為任意文法符號串,不限於非終結符或單個符號),並且X能推導出空串ε

根據定義,顯然FirstX)屬於SelectA-->X),此外,當X推導為空串時,顯然A也推導為空串,那么此時推導出的符號串就會是A后面的符號的推導結果。也就是FollowA,所以,此時FollowA)也屬於SelectA-->X)。

 

注意:Select集合中不包括空串ε,但有可能會包含#(句子括號)。

轉自:http://m.blog.csdn.net/blog/bjrxyz/9261243

 


免責聲明!

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



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