首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有epsilon的SLR(1)解析器

带有epsilon的SLR(1)解析器
EN

Stack Overflow用户
提问于 2014-09-12 17:34:15
回答 2查看 1.2K关注 0票数 2

让我们假设我有以下语法:

E -> TX

T -> (E) \x{e76f} int Y

X -+E=ε

Y ->*T_xε

构建项目集--我得到一个类似于此的状态:

T -> int .Y

Y ->* T

Y -> .

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

EN

回答 2

Stack Overflow用户

发布于 2015-01-25 19:36:45

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

代码语言:javascript
复制
  T->int.Y
  Y->.*T
  Y->.

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2014-09-19 14:13:19

您必须构造以下集合,并查看下面(Y)是否包含int或*。如果是这样的话,就会发生移位/减少冲突,语法也不会是SLR(1)。检查所有状态,如果没有冲突,则语法为SLR(1)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25813779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档