Parsing LR(1)项目的讨论:意义?

Parsing LR(1)项目的讨论:意义?,parsing,compiler-construction,lr,Parsing,Compiler Construction,Lr,什么是规范的LR(1)项!我读过《龙之书》,它让我困惑,(delta,gamma,toh,…) 有人能帮我解决这个问题吗 这在英语中是什么意思?[A->alpha.Bbeta,A] 非常感谢。[a->alpha.B beta,a]基本上是指“假设规则a正在扩展,到目前为止我们已经看到了alpha。然后我们期望看到B beta。我们还知道a之后,我们将看到a” 因此,在CLR(1)中,状态由其中一些项组成。然后,您有许多选择: 如果前瞻(gamma)是first(B)的成员,并且假设您有一个规则

什么是规范的LR(1)项!我读过《龙之书》,它让我困惑,(delta,gamma,toh,…)

有人能帮我解决这个问题吗

这在英语中是什么意思?[A->alpha.Bbeta,A]


非常感谢。

[a->alpha.B beta,a]
基本上是指“假设规则
a
正在扩展,到目前为止我们已经看到了
alpha
。然后我们期望看到
B beta
。我们还知道
a
之后,我们将看到
a

因此,在CLR(1)中,状态由其中一些项组成。然后,您有许多选择:

  • 如果前瞻(gamma)是
    first(B)
    的成员,并且假设您有一个规则,例如
    B->gamma C
    ,那么您可以“移位”并转到包含
    [B->gamma.C,beta]
    的状态。如您所见,
    已经移动通过了
    gamma
    (因为
    gamma
    是匹配的,
    B
    的后面是
    beta
    ,因为在规则
    A->alpha B beta
    中,这是在
    B
    之后出现的
  • 如果前瞻是
    a
    ,假设
    B beta
    可以生成
    lambda
    (空字符串)(这里,假设beta是可以生成
    lambda
    )的非终端。然后,您可以“减少”然后转到包含规则的状态,如
    C->something a.a something\u other,follow]
    。在这种情况下,您已决定堆栈上的
    alpha
    B
    beta
    可以组合为一个
    a

这是我能解释的最简单的方法。

[A->alpha.B beta,A]
基本上意味着“假设规则
A
被扩展,到目前为止我们已经看到了
alpha
。然后我们期望看到
B beta
。我们还知道
A
之后,我们将看到
A

因此,在CLR(1)中,您有由其中一些项组成的状态。然后您有许多选项:

  • 如果前瞻(gamma)是
    first(B)
    的成员,并且假设您有一个规则,例如
    B->gamma C
    ,那么您可以“移位”并转到包含
    [B->gamma.C,beta]
    的状态。如您所见,
    已经移动到
    gamma
    (因为
    gamma
    是匹配的,
    B
    后面是
    beta
    ,因为这是规则
    A->alpha B beta
    B
    后面的内容
  • 如果前瞻是
    a
    ,假设
    B beta
    可以生成
    lambda
    (空字符串)(这里,假设beta是可以生成
    lambda
    )的非终端。然后,您可以“减少”然后转到包含规则的状态,如
    C->something a.a something\u other,follow]
    。在这种情况下,您已决定堆栈上的
    alpha
    B
    beta
    可以组合为一个
    a
这是我能解释的最简单的方式。

IIRC,这是一个“项目”,即某些句子形式解析的潜在状态

这意味着什么:

[A - > alpha.Bbeta , a]
当试图解析一个(目标语言的子字符串)时,它可以被认为是非终结符a,是否看到了alpha,以及(“.”)下一个标记是Bbeta,如果看到非终结符的元素,则下一个标记是a,则它是有效的a

(我认为你把Bbeta转录错了,它可能是书中的beta)。

IIRC,这是一个“项目”,即某些句子形式解析的潜在状态

这意味着什么:

[A - > alpha.Bbeta , a]
当试图解析一个(目标语言的子字符串)时,它可以被认为是非终结符a,是否看到了alpha,以及(“.”)下一个标记是Bbeta,如果看到非终结符的元素,则下一个标记是a,则它是有效的a


(我想你把Bbeta转录错了,它可能是本书中的beta版)。

有效A方法,我们可以减少A。有效A方法,我们可以减少A。我是伊朗人,我必须承认我不记得大部分术语。我记得的是:向前看(输入中的下一个标记),
第一(A)
,在这种情况下是
{alpha}
遵循(A)
这是
{A}
。事实上,这三个是编写解析器时最重要的(这就是为什么我记得它们)。剩下的在证明解析算法和其他理论材料的正确性时最有用。我是伊朗人,我必须承认我不记得大部分术语。我记得的是:向前看(输入中的下一个标记),
first(A)
,在本例中是
{alpha}
follow(A)
,也就是
{a}
。事实上,在编写解析器时,这三个都很重要(这就是我记得它们的原因)。其余的在证明解析算法和其他理论内容的正确性时非常有用。