Parsing LR(1)项目的讨论:意义?
什么是规范的LR(1)项!我读过《龙之书》,它让我困惑,(delta,gamma,toh,…) 有人能帮我解决这个问题吗 这在英语中是什么意思?[A->alpha.Bbeta,A]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)的成员,并且假设您有一个规则
非常感谢。
[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
(空字符串)(这里,假设beta是可以生成lambda
)的非终端。然后,您可以“减少”然后转到包含规则的状态,如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
(空字符串)(这里,假设beta是可以生成lambda
)的非终端。然后,您可以“减少”然后转到包含规则的状态,如lambda
。在这种情况下,您已决定堆栈上的C->something a.a something\u other,follow]
、alpha
和B
可以组合为一个beta
a
[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}
。事实上,在编写解析器时,这三个都很重要(这就是我记得它们的原因)。其余的在证明解析算法和其他理论内容的正确性时非常有用。