Дан контекст: грамматика G с продукциями S -> S S | "a" порождает язык {a}^+ и является амбигуэзной; продемонстрируйте неоднозначность на конкретном примере строки "aaa", преобразуйте грамматику в эквивалентную без неоднозначности или объясните, почему это невозможно, и при необходимости покажите преобразование в нормальную форму Хомского или Хопкрофта и Ульмана для использования алгоритма CYK

27 Окт в 13:34
6 +6
0
Ответы
1
1) Демонстрация неоднозначности для строки "aaa" "aaa" "aaa" в грамматике
S→S S∣"a" S \to S\,S \mid "a"
SSS"a"
Две разные разборки (группировки) дают одну и ту же строку:
- Разборка слева-ассоциативная ((aa)a)((aa)a)((aa)a):
S⇒S S⇒S S S⇒"a" S S⇒"a" "a" S⇒"a" "a" "a". S \Rightarrow S\,S \Rightarrow S\,S\,S \Rightarrow "a"\,S\,S \Rightarrow "a"\,"a"\,S \Rightarrow "a"\,"a"\,"a".
SSSSSS"a"SS"a""a"S"a""a""a".

- Разборка справа-ассоциативная (a(aa))(a(aa))(a(aa)):
S⇒S S⇒S S S⇒S "a" S⇒"a" "a" "a". S \Rightarrow S\,S \Rightarrow S\,S\,S \Rightarrow S\,"a"\,S \Rightarrow "a"\,"a"\,"a".
SSSSSSS"a"S"a""a""a".

Обе дают одну и ту же итоговую строку "aaa" "aaa" "aaa" при разных деревьях разбора ⇒ грамматика амбигуэзна.
2) Эквивалентная без неoднозначности грамматика (порождает {a}+ \{a\}^+ {a}+ и однозначна):
S→"a" S∣"a". S \to "a"\,S \mid "a".
S"a"S"a".
Для любой длины nnn строка ana^nan имеет единственный цепной (право-рекурсивный) разбор — однозначность.
3) Преобразование в нормальную форму Хомского (CNF) для использования CYK.
Введём нетерминал AAA для терминала aaa:
A→"a". A \to "a".
A"a".
Приведём правила так, чтобы правая часть была либо два нетерминала, либо один терминал:
S→A S∣"a",A→"a". S \to A\,S \mid "a",\qquad A \to "a".
SAS"a",A"a".
Здесь S→A SS\to A\,SSAS — форма A→BCA\to BCABC, а S→"a"S\to "a"S"a" и A→"a"A\to "a"A"a" — формы A→aA\to aAa. Это CNF-подобная форма, пригодная для CYK (при необходимости можно избавиться от дублирующего правила S→"a"S\to "a"S"a", но для CYK такое представление допустимо).
Кратко: исходная грамматика амбигуэзна (пример "aaa" "aaa" "aaa" показан); язык регулярный {a}+ \{a\}^+ {a}+, поэтому существует однозначная грамматика, например S→"a"S∣"a"S\to "a"S\mid "a"S"a"S"a"; для CYK можно использовать приведённую CNF-версию с вводом A→"a"A\to "a"A"a".
27 Окт в 14:04
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир