每个LL(1)语法是否也是LR(1)?
答案 0 :(得分:9)
是的,因为LL和LR都会从左到右解析数据;并且由于LL(1)只向前看一个标记,它必须是LR(1)。对于LR(k)也是如此,其中k> 1。 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