Parsing 语法中带epsilon变换的SLR(1)解析器

Parsing 语法中带epsilon变换的SLR(1)解析器,parsing,compiler-construction,computer-science,grammar,formal-languages,Parsing,Compiler Construction,Computer Science,Grammar,Formal Languages,我正在使用以下语法编写SLR(1)解析器: 1) S -> aSb 2) S -> cB 3) B -> cB 4) B -> ε 首先,我开始寻找相关的LR(0)自动机,并添加S'->S产生式,然后开始计算各种状态。我发现的州有: I0={S'->•S,S->•aSb,S->•cB} 不,不需要创建状态I6 在Y->Ɛ中可能会出现混淆。当您在增强产品中放置一个点时,例如S->a.B,这意味着a已完成,而B尚未完成(此处的完成意味着解析过程的进展)。类似地,如果你写Y-

我正在使用以下语法编写SLR(1)解析器:

1) S -> aSb
2) S -> cB
3) B -> cB
4) B -> ε
首先,我开始寻找相关的LR(0)自动机,并添加
S'->S
产生式,然后开始计算各种状态。我发现的州有:

I0={S'->•S,S->•aSb,S->•cB}

不,不需要创建状态I6

Y->Ɛ
中可能会出现混淆。当您在增强产品中放置一个点时,例如
S->a.B
,这意味着
a
已完成,而
B
尚未完成(此处的完成意味着解析过程的进展)。类似地,如果你写
Y->。Ɛ
,这意味着
Ɛ
还没有结束,但我们也知道
Ɛ
空字符串
,即没有任何东西因此
Y->。Ɛ
被解释为
Y->。

您可以使用并查看它不是必需的。。。 即使是我在删除以下语法的左撇子时也遇到了同样的问题

E->E+T | E-T | T
转换后的规则看起来像

E->T X
X->+TX |-TX |*e*

那并不重要


x->e和x->e。没有意义。因为在Epsilon前后移动经期是疯子的工作

非常感谢,我不知道JFLAP软件,但它似乎对这类事情很有帮助。另外,感谢对ε转换的澄清,据我所知,我应该在ε的状态下直接应用reduce,而不是到另一个状态,然后在那里进行reduce。再次非常感谢。