当前计算 FOLLOW 集的算法无法处理含有空产生式的文法
应在AddSetToSet(&TempFirstSet, pFirstSetXn);
下添加以下代码:
if (SetHasVoid(pFirstSetXn) && pSymbol->pNextSymbol->pNextSymbol == NULL) {
AddSetToSet(&TempFirstSet, GetSet(pFollowSetList, pRule->RuleName));
}
此处补充的逻辑是 A->BC 如果 C 可以推出空则应该向 FOLLOW(B) 中加入 FOLLOW(A)。
以上添加的逻辑太简单了,不能处理所有含有空产生式的情况