每个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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top