每个LL(1)语法也是LR(1)吗?
-
09-10-2019 - |
题
每个LL(1)语法也是LR(1)吗?
解决方案
是的,由于LL和LR都从左到右解析数据;而且,由于LL(1)只看了一个令牌,因此必须是LR(1)。对于LR(k),k> 1也是如此,因为可以将LR(K)语法转换为LR(1)语法。
LR和LL语法之间的差异在于LR产生最右边的推导,其中LL会产生最左边的推导。因此,这意味着LR解析器实际上可以分析比LL语法更大的集合,因为它是从叶子中堆积的。
可以说,我们的作品如下:
A -> "(" A ")" | "(" ")"
然后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
不隶属于 StackOverflow