求First集和Follow集
字数
462 字
阅读时间
2 分钟
一、求Fitst集
First集中可以包含空串
- 求开头:
- 步骤一:把非终结符列出,从左往右看
- 步骤二:以第一个产生式右侧为起始,先找到First集合中的所有终结符,再判断非终结符
- First集无
:First集合相同,如:S PQc,则 - First集有
:列完该First集后再列下一个的First集,循环直到找到第一个不含 的First集或终结符,如:S PQcE,且 P 的First集含有 ,则将 列入First(S),再判断 Q 的First集是否满足条件: - 若无
,则将 的元素加入First(S)中,并终止循环; - 若有
,则将 的元素加入到First(S)中后,再继续往后循环,遇到终结符 c
时,将该终结符也加入First(S)中,终止循环 - 如果是 S
ABCD的情况,若A,B,C,D的 First集
中均含有,则在将A,B,C,D的First集,如: 都加入First(S)后,将 也加入First(S),因为是最后一个了,所以无法再去除 以继续循环,就此终止
- 若无
- First集无
二、求Follow集
- 简单情况不讨论,仅讨
且 ( 能最终推导出 ),例如: ,则 如果First(A)中存在 ,则将 加入到FOLLOW(B)中后,再继续判断First(B),如果First(B)中也存在 ,则将 也加入到FOLLOW(B)中,再继续往后循环,如果最终推导出来仍存在 ,则将所有 加入到FOLLOW(B)中后,还需要将FOLLOW(A)也加入到FOLLOW(B)中
贡献者
freeway348