繁体   English   中英

带有 epsilon 的 SLR(1) 解析器

[英]SLR(1) parser with epsilon

假设我有以下语法:

E --> 发送

T --> (E) | 整数

X --> + E | ε

Y --> * T | ε

构建项目集我得到这样的状态:

T --> 整数。

是 --> 。 * T

是 --> 。

这种状态是否足够? 也就是说,语法是不是 SLR(1)? 谢谢

是的,您在状态中指定的条目绝对正确。

  T->int.Y
  Y->.*T
  Y->.

这是为给定语法的 SLR(1) 解析器创建的 DFA 中的第 5 个状态。

Y->Ɛ可能出现混淆。 当您在增广产生式中放置一个点时,例如S->AB这意味着 A 已完成而 B 尚未完成(此处的完成表示解析进度)。 同样,如果你写Y->.Ɛ ,这意味着 Ɛ 还没有结束,但我们也知道 Ɛ 是空字符串,即什么都没有,因此Y->.Ɛ被解释为Y->.

我为这个语法创建了 DFA(13 个状态),发现给定的语法是 SLR(1),因为没有 Reduce-Reduce 或 Shift-Reduce 冲突

您必须构造 FOLLOW 集并查看 FOLLOW(Y) 是否包含 int 或 *。 如果是这种情况,则会出现 shift/reduce 冲突,并且语法不会是 SLR(1)。 检查所有状态,如果没有冲突,则语法为 SLR(1)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM