Да, так как 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