FOLLOW集
- FOLLOW(A):紧跟在非终结符A后边的终结符α的集合
- 如果A是某个句型的的最右符号,则将结束符 添加到 FOLLOW(A)中
计算非终结符A的 FOLLOW集合
(1)将放入 FOLLOW(S)中,其中S是开始符号,是输入右端的结束标记
(2)如果存在一个产生式 ,那么FIRST(B)中除 之外的所有符号都在FOLLOW(B)中
(3)如果存在一个产生式 ,或存在产生式 且FIRST(β)包含 ,那么FOLLOW(A)中的所有符号都在FOLLOW(B)中
(4)重复上述过程,直到没有新的终结符可以加入
举例:
- 本身就是一个句型,它是该句型的最右符号,故将结束符 添加到FOLLOW中
- 由式子①
- 紧跟在 后面,故 FOLLOW 中包含 FIRST中的终结符 +
- FIRST中包含 ,可能是产生式①右部的最后一个符号,故 依赖于 ,FOLLOW ∈ FOLLOW
- 可能是产生式①右部的最后一个符号,故 依赖于 ,FOLLOW ∈ FOLLOW
- 式子②中, 和 所处位置与式子①相同,分析结果也将相同
- 由式子③
- 紧跟在 后面,故 FOLLOW 中包含 FIRST中的终结符 *
- FIRST中包含 , 可能是产生式③右部的最后一个符号,故 依赖于 ,FOLLOW ∈ FOLLOW
- 可能是产生式③右部的最后一个符号,故 依赖于 ,FOLLOW ∈ FOLLOW
- 式子④中, 和 所处位置与式子③相同,分析结果也将相同
- 式子⑤中, 的后面跟着终结符 ,故将 添加到FOLLOW中
- 验证是否满足所有的依赖关系
参考地址:
https://www.icourse163.org/learn/HIT-1002123007?tid=1003246005#/learn/announce