编译原理follow集和first集的运算

first集 定义

first(x):可以从x推导出的所有串首终结符构成的集合 若x→ ε ,ε ∈first(x)

follow集 定义

follow(A)是可能在某个句型紧跟在A后面终结符a的集合

如果A是某个句型的最右符号,则将终结符$加入到follow(A)中

不断应用下面的规则,直到再没有新的终结符号可以被加入到任意的follow集合中为止。

①如果S是文法的开始符号,那么把$添加进FOLLOW(S)中。($是输入串的结束符)

②如果有一个产生式A→αBβ
1 ε不属于first(β),则folllow(B)=first(β)
2 ε属于first(β),则follow(B)=first(β)-{ε}+follow(A)

③ 如果有一个产生式 A→αB , follow(B)=follow(A)
α既可为终结符又可为非终结符。
编译原理follow集和first集的运算
first集的计算就比较简单了,(2)、(4)、(5)式子的串首终结符比较容易看出,由first集的定义可知ε也属于(2)、(4)first集。由(1)可知,E的first集取决于T,由(3)可知,T的first集取决于F。故而求得各自的first集。
follow集计算如求E’的follow集看的是(1)式子,对比上面格式为产生式 A→αB 满足规则③,带入公式求出follow(E’)=follow(E);
求T的follow集看的是(2)式子,满足产生式A→αBβ 符合规则②,又因为ε属于first(E’),得follow(T)=first(E’)-{ε}+follow(E’) 。下面其他求解类似。