Разница между LL и LR заключается в основном в механизме прогнозирования.Люди обычно говорят, что парсеры LR несут больше «контекста».Чтобы увидеть это на практике, рассмотрим определение рекурсивной грамматики с символом S в качестве начального символа:
A -> Ax | x
B -> Ay
C -> Az
S -> B | C
Когда k - небольшое фиксированное значение, разбор строки, такой как xxxxxxy, является задачей, лучше подходящей для синтаксического анализатора LR.Однако в наши дни популярные парсеры LL, такие как ANTLR, не ограничивают k такими маленькими значениями, и большинству людей это больше не нужно.
Надеюсь, это более или менее соответствует вашему вопросу.Конечно, Кнут показал, что любой однозначный контекстно-свободный язык может быть распознан по некоторой грамматике LR (1).Однако на практике нас также интересует перевод.
В качестве примечания: Вам также может понравиться чтение http://www.antlr.org/article/needlook.html.
Это ни в коем случае не доказано, но я всегдаподверг сомнению, действительно ли LR-подобный синтаксический анализ похож на работу мозга при чтении определенных обозначений.Например, при чтении английского предложения довольно очевидно, что мы читаем слева направо.Но рассмотрим шаблон ниже:
.,,,,|,,,,.
Скорее, я ожидаю, что с такими короткими узорами, как этот, люди буквально не читают "точка-точка-точка-точка-точка-точка-точка-точка-точка-точка" слева направо, а скорее обрабатывают шаблон параллельно или вхотя бы в какой-то нечеткой итеративной манере.Другими словами, я не верю, что мы обязательно читаем все шаблоны слева направо с видом линейного просмотра, который использует анализатор LL / LR.
Более того, если мы можем описать любой контекст-свободный язык, использующий грамматику LR (1), тогда ясно, что простое распознавание строки - это не то же самое, что «понимание» ее.