SLR(1)解析器与epsilon

时间:2014-09-12 17:34:15

标签: parsing grammar

让我假设我有以下语法:

E - > TX

T - > (E)| int Y

X - > + E | ε

Y - > * T | ε

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

T - > int。 ÿ

Y - > 。 * T

Y - >

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

2 个答案:

答案 0 :(得分:2)

是您在州内指定的条目绝对正确。

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

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

Y->Ɛ可能会出现混淆。当您在增强型制作中放置一个点,例如S->A.B时,意味着A已完成且B尚未完成(此处完成意味着解析的进度)。类似地,如果你写Y->.Ɛ,则意味着Ɛ尚未结束,但我们也知道Ɛ是空字符串,因此Y->.Ɛ被解释为Y->.

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

答案 1 :(得分:1)

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