让我假设我有以下语法:
E - > TX
T - > (E)| int Y
X - > + E | ε
Y - > * T | ε
构建项目集我得到像这样的状态:
T - > int。 ÿ
Y - > 。 * T
Y - >
这种状态是否充足?也就是说,语法是否是SLR(1)? 感谢
答案 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)。