LL(1)语法。如果有自我递归规则,如何计算跟随集?
问题描述:
据该paper规则:LL(1)语法。如果有自我递归规则,如何计算跟随集?
- 如果A是启动非终结符,把EOF在FOLLOW(A)
与一个在右手边找到制作:- 对于每一个生产X→αAβ,放FIRST(β) - {EPSILON}在FOLLOW(A)
- 如果EPSILON是在FIRST(β),然后把FOLLOW(X)转换成如下(A)
- 对于每个生产X →αA,把关注(X)按照(A)
我在我的语法下一块:
...
A -> C B
B -> , A
C -> EPSILON
C -> =
B -> ;
...
当我尝试计算根据规则4 I必须计算FOLLOW(A),反之亦然FOLLOW(B)。所以我有*Exception,因为自递归。
我该怎么办?
答
你不使用递归。你迭代,基于计算出的前一迭代什么计算FOLLOW
组:
如果A是开始非终结,把EOF(一个新的终端指示输入结束时)在F [0] (一个)。
对于每个生产X→αAβ,放FIRST(β) - {EPSILON}在F [n]的(A),
并且如果EPSILON是在FIRST(β)然后把F [N- 1](X)代入F [n](A)
对于每个生产X→αA,将F [n-1](X)置于F [n](A)中。
停止时F [N](*)== F [N-1](*)
FOLLOW(*)== F [N](*)
也许更好问[cs.se]? – ShiDoiSi 2013-03-21 09:05:20