По существу, грамматика SLR (1) может разрешать конфликты смещения-сдвига, которые существуют в соответствующей грамматике LR (0). Возьмите пример грамматики на странице SLR парсера Википедии (которая объясняет это на более низком, более строгом уровне):
- S → E
- E → 1 E
- E → 1
Когда синтаксический анализатор LR (0) анализирует E , а "1" - следующий входной символ, он может распознать E и уменьшить (правило 3), или он может сдвиг, чтобы разобрать следующую E (правило 2). Поскольку он не может смотреть в будущее, LR (0) не может определить, что делать. Это станет более очевидным, если мы посмотрим на items , которые LR (0) может обрабатывать, когда встречает «1» (добавлен символ конца строки):
Для первого потребуется сдвиг, для второго - уменьшение.
С помощью приведенной выше грамматики SLR (1) может смотреть вперед на один символ и определять, какое действие предпринять. E может сопровождаться только $, поэтому действие сокращения действует только в конце строки. Это соответствует второму элементу, где вы можете увидеть следующий символ «$».
Другой пример грамматики SLR (1), а не LR (0), см. В примечаниях Fegaras для CSE 5317/4305 в Техасском университете.