如何在FOLLOW集中删除循环依赖

时间:2011-09-24 13:11:10

标签: context-free-grammar compiler-theory

考虑下面的短语法

S -> Bc | DB
B -> ab | cS
D -> d | epsilon

第一组是

FIRST(S) ={a,c,d}
FIRST(B) = { a,c }
FIRST(D)= { d, epsilon }

在其中

Follow(S)={ Follow(B) }

Follow(B) ={ c , Follow(S) }

我的问题是如何解决这种循环依赖?

1 个答案:

答案 0 :(得分:3)

这种循环依赖不应该从那里开始。这是找到'follow's:

的算法

初始化所有关注组到{},除了初始为{$}的S 虽然有变化,但每个A∈V都有:
对于每个Y→αAβ执行:
遵循(A)=跟随(A)∪第一(β)
如果β⇒*ε,也可以:跟随(A)=跟随(A)∪跟随(Y)

所以在你的情况下,你应该得到:
按照(S)= {C,$}
跟随(B)= {C,$}
按照(d)= {A,C}