Для домашней работы мне дали следующую грамматику:
S: D
D: AbBb | BaAb
A: ε
B: ε
Я вычислил ее с помощью LL (1) очень хорошо. Первые наборы были:
S: a, b
D: a,b
A: ε
B: ε
Следующие наборы были:
S: $
D: $
A: b
B: a,b
Когда я составлял свою таблицу синтаксического анализа, строка примера "ab" разобралась просто отлично. Однако, когда я попытался проанализировать ту же самую точную грамматику, используя LR (1), я столкнулся с ошибками.
Для набора элементов 0 я получил следующее: (, разделяет терминалы просмотра вперед)
Item set 0:
S: .D, $
D: .AbBb, $
D: .BaAb, $
A: ., b
B: ., a,b
Если вы составите таблицу, вы ясно увидите, что существует конфликт уменьшения-уменьшения между A и B в наборе элементов 0. Если меня попросят проанализировать строку «ab», анализатор не будетзнаю, нужно ли уменьшить мою пустоту до А или уменьшить до Б. Что я делаю не так? Мне всегда говорили, что LR (1) может на самом деле анализировать больше грамматик, чем LL (1), так в чем же дело? Буду признателен, если кто-нибудь сможет мне помочь, потому что это сводит меня с ума. Спасибо