В качестве домашнего задания мне дали следующую грамматику:
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», синтаксический анализатор не будет знать, следует ли уменьшить мой пустой до A или уменьшить до B. Что я делаю не так? Мне всегда говорили, что LR(1) на самом деле может анализировать больше грамматик, чем LL(1), так в чем тут дело? Я был бы признателен, если бы кто-нибудь мог мне помочь, потому что это сводит меня с ума. Спасибо