首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将语法固定到LR(0)

将语法固定到LR(0)
EN

Stack Overflow用户
提问于 2016-02-12 10:31:56
回答 1查看 47关注 0票数 0

问题:

给定以下语法,将其修正为LR(O)语法:

代码语言:javascript
复制
S -> S' $
S'-> aS'b | T
T -> cT | c

checking --我已经尝试了很久了,使用自动工具检查我的固定语法,但没有成功。我们的教授喜欢在考试中问这样的问题,而不给我们一个方法来解决这个问题(除了反复尝试)。有什么方法可以用来回答这类问题吗?有人能证明这个方法可以应用到这个例子中吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-12 16:44:42

我不知道自动程序,但基本思想是推迟决定。也就是说,如果在解析中的特定状态下,可以同时执行shift和reduction操作,那么可以找到一种推迟还原的方法。

在LR(0)解析器中,您可以根据刚才移动的令牌做出决定,而不是根据将要转移的令牌作出决定。所以在某种程度上,你需要把决定移到作品的结尾。

例如,语言的LR(0)语法是:

代码语言:javascript
复制
S -> S' $.
S' -> U | a S' b.
U -> a c T.
T -> b | c T.

(非常感谢@templatetypedef检查原始答案并识别该漏洞。更正的语法稍微复杂一些,可能存在简化,但原则是相同的。)

在最初的语法中,在项目集(包括T -> c .T -> c . T )中,shift和reduce都是可能的: shift、c和before b。通过将b转移到T的生产中,我们将决定推迟到转移之后:在转移b之后,需要减少;在c之后,减少是不可能的。

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

https://stackoverflow.com/questions/35360315

复制
相关文章

相似问题

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