首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否每个LL(1)文法也是LR(1)文法?

是否每个LL(1)文法也是LR(1)文法?
EN

Stack Overflow用户
提问于 2010-11-14 09:13:52
回答 1查看 7.1K关注 0票数 9

是否每个LL(1)文法也是LR(1)文法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-14 09:24:33

是的,因为LL和LR都从左到右解析数据;而且由于LL(1)只向前看一个标记,它必然是LR(1)。对于LR(k)也是如此,其中k> 1,因为LR(k)文法可以转换为LR(1)文法。

LR和LL语法的不同之处在于LR产生最右边的派生,而as LL产生最左边的派生。因此,这意味着LR解析器实际上可以解析比LL语法更大的集合,因为它是从树叶建立起来的。

假设我们有如下结果:

代码语言:javascript
复制
A -> "(" A ")" | "(" ")"

然后LL(1)将解析字符串(())

代码语言:javascript
复制
(()) -> A
     -> "(" A ")"
     -> "(" "(" ")" ")"

其中,LR(1)将按如下方式进行解析:

代码语言:javascript
复制
Input  Stack          Action
(())   0       
())    0 '('
))     0 '(' '(' 
)      0 '(' '(' ')'  Reduce using A -> "(" ")"
)      0 '(' A
-      0 '(' A ')'    Reduce using A -> "(" A ")"
-      0  A           Accept

有关更多信息,请参阅:http://en.wikipedia.org/wiki/LL_parsing

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

https://stackoverflow.com/questions/4175632

复制
相关文章

相似问题

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