Является ли каждая грамматика LL (1) также LR (1)? - PullRequest
7 голосов
/ 14 ноября 2010

Является ли каждая грамматика LL (1) также LR (1)?

1 Ответ

9 голосов
/ 14 ноября 2010

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

...