是每LL(1)文法也是一个LR(1)?是否每个LL(1)语法也是一个LR(1)?
回答
是的,因为这两个LL和LR解析从左至右的数据;并且由于LL(1)仅向前看一个令牌,它必须是LR(1)。 LR(k)也是如此,其中k> 1,因为LR(k)语法可以转换为LR(1)语法。
LR和LL文法之间的差异来在LR产生最右边的推导,其中作为LL产生最左推导。所以这意味着一个LR解析器实际上可以解析一个比LL语法更大的集合,因为它从树叶中建立起来。
,假设我们已经制作如下:
然后LL(1)将解析字符串(())
:
(()) -> A
-> "(" A ")"
-> "(" "(" ")" ")"
凡为LR(1)将解析如下:
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
但使用的LL(1)来解析序列(生产的)并不总是相反的顺序(生产的)的LR(1)使用解析。即使前者是自上而下的,而后者是自下而上的解析器,所以你所有的LL(1)都是LR(1)的理由似乎不够。 – siddharth 2010-11-14 01:43:45
东西是LR并不意味着分析树与等同于逆LL语法分析树,而语法分析器因而将不一定使用制作以相反的顺序。它意味着一个LR解析器可以正确地解析给定相同语法的同一组字符串。 – Mike 2010-11-14 03:31:11
这个事实矛盾吗? http://cs.stackexchange.com/questions/60763/does-my-grammar-contradict-ll-⊆-lr1/60764#60764 – Pranav 2016-07-24 11:51:12
- 1. LR(1)但不是LL的语法(1)
- 2. 这个语法不是LR(1)吗?
- 3. 验证语法是LL(1)
- 4. 这是语法LL(1)?
- 5. 这是LL(1)语法
- 6. 这是LL(1)语法吗?
- 7. 为什么所有LL(1)语法LR(1)?
- 8. 如何显示语法不是LL(1)并将语法转换为LL(1)
- 9. Oberon语法不是LL(1)在哪里?
- 10. LR(k)至LR(1)的语法转换
- 11. SLR(1)或LR(1)语法分析
- 12. 为什么LR(1)语法不是LALR(1)?
- 13. 这是语法LL(1)吗? http://hackingoff.com/compilers/ll-1-parser-generator给出错误
- 14. 为什么这个语法不是LL(1)
- 15. 是否有可能将此语法转换为LR(1)?
- 16. 语法LL(1)冲突
- 17. 制作语法LL(1)
- 18. 查找不是LL(1)的语言?
- 19. Android:C2DM是否为每个Registration_id请求一个帖子? (1:1)
- 20. 如何识别文法是否是LR(N),LL(N)
- 21. 如何证明一个文法是LL(k)k> 1
- 22. 验证是否一个语法是强LL(2)
- 23. 每个LR(0)语法都是单反(1),但反过来不一定是正确的,为什么?
- 24. LL(1)语法,寻找一个好的,清晰的资源
- 25. 这个LL(1)解析表是否正确?
- 26. 如何确定语言是否为LL(1)?
- 27. 如何确定语言是否为LL(1)?
- 28. 写入正确的LL(1)语法?
- 29. 将C-语法转换为LL(1)
- 30. 关于LL(1)语法的例子?
我想我很久以前曾在大学有一天,这个问题;) – foreyez 2010-11-14 04:07:09