一. 考虑以下文法:
S→aTUV∣bV
T→U∣UU
U→ε∣bV
V→ε∣cV
写出每个非终结符号的FIRST集和FOLLOW集
FIRST(S)={a, b} FIRST(T)={є, b} FIRST(U)={є, b} FIRST(V)={є, c}
FOLLOW(S)={ $} FOLLOW(T)={ b, c, $} FOLLOW(U)={ b, c, $} FOLLOW(V)={ b, c , $}
FIRST集的求解方法非常简单,因为显而易见,一眼就能看出来。这里就不赘述了。
FOLLOW集的求解就需要细心一点,一不小心就容易漏掉。
求解一个非终结符号的FOLLOW(S),那么就看它出现在产生式右边的地方。
1) 求FOLLOW(S)
因为S是开始符号,$是结束标记,先把$放到FOLLOW(S)中。S没有出现在产生式右边,所以没有了。
2) 求FOLLOW(T)
因为T出现在 s→aTUV 中,所以FIRST(U)中除了 ε 之外的所有符号都在FOLLOW(T)中,也就是把b添加进去。
又因为FIRST(U)中含有 ε ,所以FOLLOW(S)中的所有符号都在FOLLOW(T)中,也就是把$添加进去。
这里很容易忘掉一种情况,那就是U可能为 ε 的情况。这种情况下,FIRST(V)中除了