3

我正在阅读编译器:原理、技术和工具,但不明白这一点:

此外,如果需要将前向指针缩回一个位置(即,词位不包括使我们进入接受状态的符号),那么我们应该在接受状态附近额外放置一个*。在我们的示例中,没有必要向前缩回一个以上的位置,但如果是这样,我们可以将任意数量的 * 附加到接受状态。

这一切都说得通,但我不明白星号的意义。这本书只是在正则表达式中使用它(Kleene 星/闭包),它是用来表示别的东西,还是仍然是 Kleene 星?

4

2 回答 2

3

不,它不是 Kleene 星,文本解释它,它基本上说要放回最后一个标记,因为该字符不是接受字符的一部分。例如,如果您只考虑 a <,那么您在 RE 中读取了两个字符,但您实际上并不想读取第二个字符,因此您将其放回原处,以便任何后续读取都会首先找到它。

通常在完整的 FSM(有限状态机)中,您不会遇到这种情况,因为它会处理完整的词法语法,但由于它们仅显示语法的一部分,因此需要使用此设备。在此示例中,“其他”弧将进入另一个状态(作为更多弧)。

于 2011-12-29T05:45:41.723 回答
0

对于撤回部分 -> 考虑 x<y,这里 y 是我们正在谈论的“其他”。在读取“x<y”之后,我们需要将 y 放回缓冲区,因为它可能对下一个词位处理有任何要求。这种“放回缓冲区”被称为收回

于 2021-02-24T03:46:57.023 回答