Все грамматики LL являются грамматиками LR, но не наоборот, но я все еще изо всех сил пытаюсь разобраться с различием. Мне любопытны небольшие примеры, если таковые существуют, LR-грамматик, которые не имеют эквивалентного LL-представления.
Пример LR-грамматики, которая не может быть представлена LL?
Ответы (1)
Что ж, что касается грамматик, то тут все просто — любая простая леворекурсивная грамматика является LR (вероятно, LR(1)), а не LL. Итак, грамматика списка, например:
list ::= list ',' element | element
является LR (1) (при условии, что производство для элемента равно), но не LL. Такие грамматики могут быть довольно легко преобразованы в грамматики LL с помощью левого факторинга и тому подобного, так что это, однако, не слишком интересно.
Более интересны ЯЗЫКИ, которые являются LR, но не LL — это язык, для которого существует LR(1)-грамматика, но нет LL(k)-грамматики для любого k. Примером могут служить вещи, которым нужны необязательные конечные совпадения. Например, язык любого количества a
символов, за которыми следует такое же или меньшее количество b
символов, но не более b
s -- { a^i b^j | я >= j }. Есть тривиальная грамматика LR(1):
S ::= a S | P
P ::= a P b | \epsilon
но нет грамматики LL(k). Причина в том, что LL-грамматика должна решить, следует ли сопоставить пару a+b или нечетное a при просмотре a, в то время как LR-грамматика может отложить это решение до тех пор, пока не увидит b или конец входных данных.
В этом посте на cs.stackechange.com много упоминаний об этом
if/else
, то есть statement ::= if (...) statement | if (...) statement else (...) statement
. С этим, насколько я знаю, парсеры LL прекрасно справляются.
- person Puppy; 11.01.2012
endif
или другой конечный токен, который должен совпадать с if, так как это делает язык снова LL.
- person Chris Dodd; 12.01.2012
aab
имеет два разных дерева синтаксического анализа с любой из первых двух альтернатив S
в корне. Также я бы не сказал, что любая леворекурсивная грамматика является LR, но вы, возможно, хотели сказать, что любая леворекурсивная LR грамматика не является LL.
- person Gunther; 19.09.2012