Parsing 涉及SLR(1)解析器和epsilon

Parsing 涉及SLR(1)解析器和epsilon,parsing,theory,grammar,compiler-theory,language-theory,Parsing,Theory,Grammar,Compiler Theory,Language Theory,假设我有以下语法: S → X X → a | ϵ 如果该语法不涉及ϵ,我将构建第一个状态,如下所示: S' → .S S → .X X → .a 但是ϵ符号呢?我应该包括: X → .ϵ 也是吗 如果是。。。创建下一个状态时。。。作为第一状态的Io,我应该做GOTO(Io,ϵ)。既然ϵ本身不是终端,你必须将其从你的规则中删除,这给了你 X → . 之后,您将不会有任何带有“symbol”ϵ的奇怪的转到,而是您的状态 S' → S. 在你的图表中是一个接受状态。我同意霍华德的观点。

假设我有以下语法:

S → X  
X → a | ϵ
如果该语法不涉及
ϵ
,我将构建第一个状态,如下所示:

S' → .S
S → .X
X → .a
但是
ϵ
符号呢?我应该包括:

X → .ϵ
也是吗


如果是。。。创建下一个状态时。。。作为第一状态的Io,我应该做
GOTO(Io,ϵ)

既然
ϵ
本身不是终端,你必须将其从你的规则中删除,这给了你

X → .
之后,您将不会有任何带有“symbol”
ϵ
的奇怪的
转到
,而是您的状态

S' → S.

在你的图表中是一个接受状态。

我同意霍华德的观点。DFA中的状态应包含以下项:
x→ .这里是我为SLR(1)解析器绘制的DFA,该解析器可以识别使用两个epsilon结果的语法:

这很有意义。您是否有将LR解析器应用于涉及epsilon的语法的示例:?@Oscar遗憾的是,我没有演示如何继续的示例。但根据你的语法手工构建这个应该很简单。我在今天读的一本书中证实了这一点;)正如你所说。感谢您的回复。我对这个扫描示例有问题。让我们看一下T(n):T->(E)goto(T(n),()={[T->(.E)],[E->.TX],[T->(E)],[T->.intY]}如果是这样,那么因此,对于T(n+1):X->.+E,我不应该有:goto(T(n+1),+)={[X->.E],[E->.TX],[T->(E)],[T->.intY]}?相反,在这个例子中,我有:o(n+1),[X+=,[E],我们为什么不包括T++.TXT的产物?你是对的@joanna。虽然我不理解你所说的T(n)和T(n+1)是什么意思,但你所指的LR状态,即{[X->+.E],[E->.TX]}应该包括通过预测为T生成的产物。在当前的公式中,由于点的右侧没有终端,因此无法从给定状态前进。