一. 考虑以下文法:
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)中除了

本文详细解析了编译原理中的语法分析问题,包括消除左递归、构造LL(1)分析表、SLR分析等,并通过具体文法实例进行演示。同时,总结了LL(1)、LR(1)、SLR(1)、LALR(1)文法的判断方法。
最低0.47元/天 解锁文章
747

被折叠的 条评论
为什么被折叠?



