首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用LL表示的LR文法的例子?

不能用LL表示的LR文法的例子?
EN

Stack Overflow用户
提问于 2012-01-11 03:44:41
回答 1查看 2.5K关注 0票数 19

所有的LL文法都是LR文法,但不是反过来,但我仍然在努力处理区别。我对没有等价LL表示的LR文法的小示例感到好奇。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-11 06:33:12

就语法而言,这很简单--任何简单的左递归语法都是LR (可能是LR(1))而不是LL。因此,列表语法如下:

代码语言:javascript
复制
list ::= list ',' element | element

是LR(1) (假设元素的乘积是),但不是LL。这样的文法可以很容易地通过左因子分解等转换成LL文法,所以这并不是很有趣。

更有趣的是那些是LR而不是LL的语言--这种语言存在LR(1)语法,但对于任意k没有LL(k)语法。例如,需要可选尾部匹配的语言。例如,任意数量的a符号后跟相同数量或更少的b符号的语言,但不能超过bs -- { a^i b^j |i >= j }。这里有一个微不足道的LR(1)语法:

代码语言:javascript
复制
S ::= a S | P
P ::= a P b | \epsilon

但没有LL(k)文法。原因是,LL语法需要在查看a时决定是匹配a+b对还是奇数a,而LR语法可以推迟该决定,直到它看到b或输入的末尾。

cs.stackechange.com上的This post有很多关于这方面的参考资料

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

https://stackoverflow.com/questions/8809545

复制
相关文章

相似问题

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