gpt4 book ai didi

python - 创建简单的 LR 解析器闭包项

转载 作者:行者123 更新时间:2023-12-01 06:03:37 28 4
gpt4 key购买 nike

假设 G(增强语法):

E' - > E
E - > E+T|T
T - > T*F|F
F - > (E)|id

因此,在 dfa 的创建级别之一中,我已经达到了这一点:(龙书中的 I6)

    I6                   I9
--------- ---------
|E -> E+.T| | E->E+T. |
|T -> .T*F| T | T->T.*F |
|T -> .F | -----> ---------
|F -> .(E)|
|F -> .id |
---------

我想知道,为什么我们不添加 T->.FF->.(E)F->.id 到 I9 ?

当我们在输入字符串中到达 T 时,我们应该添加 T->.F,现在我们已经到达 F,我们应该添加 F->.(E) 和 F->.id。

为什么 I9 不包含这些?

最佳答案

这是因为闭包和 goto 算法的工作原理。因为当您在 I6 上使用 GOTO(T) 创建 I9 时,点在任何 T 上向右移动一步,并将它们添加到新集合中。该组就是 I9 GOTO 组。 I6 中点右侧没有 T 的那些将不会添加到 I9 GOTO 集中。执行 GOTO 后,您将设置 I9

E->E+T.
T->T.*F

当您在集合 I9 上应用闭包时,您将展开点右侧的每个非终结符。在 I9 上,点右侧没有非终结符,因此无需展开。

我最近发表了一篇关于一个非常相似但更复杂的问题的帖子,如果您需要额外的说明,可能会有所帮助,Computing LR1 closure

关于python - 创建简单的 LR 解析器闭包项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149262/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com