1. 程式人生 > >編譯原理——LL(1) 文法First,Follow集合的構造過程

編譯原理——LL(1) 文法First,Follow集合的構造過程

 

LL(1)文法是上下文無關文法的一個真子集,在學習過程中我們通常需要了解如何判斷一個文法屬於LL(1)文法。來了解判斷條件之前我們需要構造First,Follow, Select三個集合。以下介紹三個集合的定義,含義,結合例項來體會這些集合的構造過程。

1. First

從定義上來看,First(a)簡單來說就是從一個產生式左部A,通過一步或者多步推導,得到一個產生式右部B。如果B的首字元為終結符a,那麼a ∈ First(A)。

例如: 產生式A → aB  ,a ∈ First(A) (大寫字母通常為非終結符,其他小寫字母和符號通常為終結符)

 

2. Follow

從定義上來看,FOLLOW(U)是文法的所有句型中緊接在U之後出現的終結符或$($不是文法符號,而是一個特定的結束符)。

也就是說,在文法中,能找到一個產生式的右部中包含U非終結符和a終結符,U後面接著一個a,那麼a ∈ Follow(U)。意思是a屬於跟隨在U之後的終結符。

例如: 產生式 A → Ba | BcD  其中 a, c∈ Follow(B)