2024-05-23 19:32:45 发布
网友
假设G(扩充语法):
E' - > E E - > E+T|T T - > T*F|F F - > (E)|id
所以在dfa的一个创造阶段,我已经达到了这一点:(龙书中的I6)
我想知道,为什么我们不在I9中添加T->.F和{}和{}?在
T->.F
当我们在输入字符串中到达T时,我们应该添加T->;.F,现在我们已经到达了F,我们应该添加F->;(E)和F->;.id
为什么I9不包含这些?在
这是因为闭包和goto算法是如何工作的。因为当你在I6上使用GOTO(T)创建I9时,点会在任何T上向右移动一步,并将其添加到新的集合中。这个集合就是I9 GOTO集合。那些在I6中的点右边没有T的将不会被添加到I9 GOTO集合中。在完成了GOTO之后,你就可以开始了
E->E+T. T->T.*F
在集合I9上应用闭包时,展开点右侧的每个非终结点。在I9上,点的右边没有非终端,所以没有什么可以扩展的。在
我最近发了一篇关于一个非常相似但有点复杂的问题的帖子,如果你需要更多的说明,这个问题可能会有帮助,Computing LR1 closure
这是因为闭包和goto算法是如何工作的。因为当你在I6上使用GOTO(T)创建I9时,点会在任何T上向右移动一步,并将其添加到新的集合中。这个集合就是I9 GOTO集合。那些在I6中的点右边没有T的将不会被添加到I9 GOTO集合中。在完成了GOTO之后,你就可以开始了
在集合I9上应用闭包时,展开点右侧的每个非终结点。在I9上,点的右边没有非终端,所以没有什么可以扩展的。在
我最近发了一篇关于一个非常相似但有点复杂的问题的帖子,如果你需要更多的说明,这个问题可能会有帮助,Computing LR1 closure
相关问题 更多 >
编程相关推荐