(一)FIRST集合
概念:FIRST(α)定义为可以从α推导得到的串的首符号的串的集合。换言之,就是由非终结符推出的所有的开头符号(终结符)或者是ε,即如果α=*=>ε,那么ε也在FIRST(α)中.
1.FIRST的计算方法
- 计算单个文法符号X的FIRST(X)时,不断应用以下规则,直到没有新的终结符或者是ε加入。
(1)如果X是终结符号,那么FIRST(X)={X}
(2)如果X是非终结符号,且X->ε是一个产生式,那么ε在FIRST(X)中。
(3)如果X是非终结符号,且X->Y1Y2…Yk是产生式
—如果ε在FIRST(Y1), FIRST(Y2),…, FIRST(Y i-1)中,那么FIRST(Yi)中的非ε元素,也在FIRST(X)中。
—如果ε在FIRST(Y1), FIRST(Y2),…, FIRST(Yk)中,那么ε在FIRST(X)中。(PS:注意这里是k,也就是说要所有都能推出 ε 才能说明 ε 在FIRST(X))
理解(3)中的两条规则,第一条如果ε在FIRST(Y1), FIRST(Y2),…, FIRST(Y i-1)中,那么我们根据规则(1)可以知道Y1->ε,Y1->ε…Y(i-1)->ε,所以X->