LR(1)-грамматики
Если для КС-грамматики G функция Action, полученная в результате работы алгоритма 4.10, не содержит неоднозначно определенных входов, то грамматика называется LR(1)-грамматикой.
Язык L называется LR(1)-языком, если он может быть порожден некоторой LR(1)-грамматикой.
Иногда используется другое определение LR(1)-грамматики. Грамматика называется LR(1), если из условий
1. S'


2. S'


3. FIRST(w) = FIRST(y)
следует, что uAy = zBx (т.е. u = z, A = B и x = y).
Согласно этому
определению, если uvw и uvy - правовыводимые цепочки пополненной грамматики, у которых FIRST(w) = FIRST(y) и A


пополненной грамматики.
Можно доказать, что эти два определения эквивалентны.
Если грамматика не является LR(1), то анализатор типа сдвиг-свертка при анализе некоторой цепочки может достигнуть конфигурации, в которой он, зная содержимое магазина и следующий входной символ, не может решить, делать ли сдвиг или свертку (конфликт сдвиг/свертка), или не может решить, какую из нескольких сверток применить (конфликт свертка/свертка).
В частности, неоднозначная грамматика
не может быть LR(1). Для доказательства рассмотрим два различных правых вывода
(1) S




(2) S




Нетрудно заметить, что LR(1)-условие (согласно второму определению LR(1)-грамматики) нарушается для наименьшего из чисел i, для которых un-i

Пример 4.11. Рассмотрим вновь грамматику условных операторов:
S ![]() |
|
E ![]() |
|
Если анализатор типа сдвиг-свертка находится в конфигурации, такой что необработанная часть входной цепочки имеет вид else...$, а в магазине
находится ...if E then S, то нельзя определить, является ли if E then S основой, вне зависимости от того, что лежит в магазине ниже. Это конфликт сдвиг/свертка. В зависимости от того, что следует на входе за else, правильной может быть свертка по S

Эта грамматика может быть преобразована к LR(1)-виду следующим образом:
S ![]() |
|
M ![]() |
|
U ![]() |
|
E ![]() |
|
выводимый из его правой части. Таким образом, класс LL(1)-грамматик является собственным подклассом класса LR(1)-грамматик.
Справедливы также следующие утверждения [2].
Теорема 4.5. Каждый LR(1)-язык является детерминированным КС-языком.
Теорема 4.6. Если L - детерминированный КС-язык, то существует LR(1)-грамматика, порождающая L.