语法分析-First,Follow,Predict三集合求法
一:Fisrt集合
步骤:
1)若X->a…,则将终结符a加入FIRST(X)中;
2)若X->ε ,则将终结符ε加入FIRST(X)中;
3)若 X->BCD…E,则将First(B)所有元素(除了空集)加入 First(X),然后检测First(B),若First(B)中不存在空集, 即ε,则停止,若存在则向B的后面查看,将First(C)中所有元素(除了空集)加入First(X),然后再检测First(C)中是否有ε…直到最后,若E之前的所有非终结符的First集中都含有ε,则检测到E时,将First(E)也加入First(X),若First(E)中含有ε,则将ε加入First(X)。
例如:
• S→ABc
• A→a|ε
• B→b|ε
First(A)={a,ε},First(B)={b,ε},对于S当A和B都推出ε时S能推出的最左边的开头终极符为c,所以First(C)={a,b,c}
二:Follow集合
对于Follow集可以理解为当前非终极符出现在产生式右边的时候,他后面跟随的可能的第一个终极符是什么。
步骤:
1)若X->a…,则将终结符a加入FIRST(X)中;
2)对于产生式:A->aBC,将除去空集ε的First(C)加入Follow(B)中;
3)对于产生式:A->aB或者A->aBC,(其中C可以推导出空串,C=>*ε),则将Follow(A)加入Follow(B)中。
例如:
• S→ABc
• A→a|ε
• B→b|ε
Follow(S)={#},Follow(A)={b,c},Fllow(B)={c}
三:Predict集合
步骤: