follow集
若x->a…,則將終結符a加入first(x)中;
若x->e ,則將終結符e加入first(x)中(e表示空集);
若 x->bc…d,則將first(b)所有元素(除了空集)加入first(a),然後檢測first(b),若first(b)中不存在空集, 則停止,若存在則向b的後面檢視,將first(c)中所有元素(除了空集)加入first(a),然後再檢測first(c)中是否有空集…直到最後,若d之前的所有非終結符的first集中都含有空集,則檢測到d時,將first(d)也加入first(a),若first(d)中含有空集,則將空集加入first(a)。
例子:a->ab | cd這裡面包含了組成first(a)的兩種情況:
以終結符開頭, 當然要把這個終結符放到a的first裡
以非終結符開頭, 先把c的first放到a的first裡。再看如果c的first中有空的話就把d的first放到a的first裡,如果d也有空的話往後依次類推
技巧:first一般從下往上找。
如果要找a的first,我們要找a的定義式,即a在左邊的式子,看著他的右邊來找。
對文法開始符號s,置$於follow(s)中;
對於產生式:a->abc,將除去空集e的first(c)加入follow(b)中;
對於產生式:a->ab或者a->abc,(其中c可以推導出空串,c=>*e),則將follow(a)加入follow(b)中。
開始符號的follow中要加上『#』
FIRST集 FOLLOW集 和 SELECT集
first a 為a的開始符或者首符號集。設g vt,vn,s,p 是上下文無關文法 first 特別的,若 能推導出 則規定 first 若x vt,則first x 簡單講,終結符的first集就是它本身 若x vn,且有產生式x a a vt,則 a first x x 則 first x 簡...
first集和follow集的計算
計算first集 根據定義計算 對每一文法符號x v 計算first x a 若x vt,則first x b 若x vn,且有產生式x a a vt,則 a first x c 若x vn,x 則 first x d 若x,y1,y2,yn都 vn,且有產生式x y1 y2 yn 當y1 y2 y...
編譯原理 FIRST集和FOLLOW集
自己的理解 例子如果x是乙個終結符,則first x x 如果x是乙個非終結符,則x y 1y2y 3 yk x rightarrow y 1y 2y 3 cdots y k x y1 y 2 y3 yk 其中k 1 k ge1 k 1。i k,a firs t yi 且fi rst y1 firs...