FIRST集
步骤
- 若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的Firs