Приведён контекстно-свободный грамматический фрагмент: S -> aSa | bSb | a | b | ε. Проанализируйте язык, которое порождает эта грамматика; докажите либо предложите конструкцию конечного автомата/регулярного выражения, либо докажите нерегулярность; обсудите, является ли грамматика двусмысленной и как это влияет на парсинг

30 Сен в 17:26
24 +1
0
Ответы
1

1) Какой язык порождается грамматикой

G:
S -> aSa | bSb | a | b | ε

Очевидно, что G порождает множество всех палиндромов над алфавитом {a,b}, включая пустую строку. Т. е.
L(G) = { w ∈ {a,b}* | w = w^R }.

Краткое доказательство равенства:

Любая строка, порождённая правилами, — палиндром: базовые случаи ε, "a", "b" — палиндромы; если u — палиндром, то a u a и b u b тоже палиндромы. Отсюда все выведенные строки — палиндромы.Любой палиндром w выводится: если w = ε или |w|=1 — соответствующие правила; если |w|≥2, то первые и последние символы w одинаковы (равны a или b), так что w = c u c и u — меньший палиндром, применяем соответствующее правило c S c и продолжаем по индукции.

Значит L(G) — ровно множество палиндромов над {a,b}.

2) Регулярность языка

Язык палиндромов над двухсимвольным алфавитом не является регулярным (для |alphabet| ≥ 2). Доказательство стандартно через лемму о накачке.

Пусть L — множество палиндромов над {a,b}. Предположим для противоречия, что L регулярна. Тогда существует константа p (длина накачки). Рассмотрим строку
w = a^p b a^p ∈ L.
По лемме о накачке представим w = xyz, где |xy| ≤ p, |y| ≥ 1. Так как |xy| ≤ p, подстрока y состоит только из символов 'a'. Возьмём i = 0 и рассмотрим x z (т. е. выкинем y): получится строка a^{p-|y|} b a^p, у которой количество 'a' слева и справа от 'b' различно, значит xz не является палиндромом и не принадлежит L — противоречие с леммой о накачке. Следовательно L не регулярна.

(Примечание: если алфавит был бы односимвольный, например {a}, то все строки — палиндромы и язык был бы регулярным; но наша грамматика использует два символа, и для этого случая язык не регулярен.)

3) Двусмысленность грамматики и влияние на разбор

Грамматика G не двусмысленна (однозначна). Доказательство по индукции на длине строки:

Базовый случай: ε, "a", "b" имеют ровно один вывод (правила S->ε, S->a, S->b соответственно).Индукционный шаг: пусть w — палиндром длины ≥ 2. Тогда первые и последние символы w совпадают и равны либо 'a', либо 'b'. Поэтому единственно возможное применение верхнего правила — либо S -> a S a (если w начинается и кончается на 'a'), либо S -> b S b (если на 'b'). После этого остаётся вывести единственный внутренний палиндром (коротьше), для которого по индукционному предположению вывод единственен. Значит для w вывод единственен.

Следовательно грамматика однозначна (не двусмысленна): каждой строке соответствует ровно одно дерево вывода.

Влияние на парсинг:

Не-двусмысленность означает, что для корректной строки существует единственный синтаксический разбор (дерево), т. е. семантика однозначна.Однако это не означает, что грамматика удобна для детерминированного синтаксического анализа без проб и/или угадок. Для реализации стандартным детерминированным pushdown-автоматом (DPDA) язык палиндромов без дополнительного разделителя не распознаётся; требуется недетерминизм (нужно угадать середину строки, когда переключаться с записи символов в стек на их сравнение при извлечении). То есть:
Существуют простые алгоритмы проверки палиндрома в линейное время (две указки: сравниваем первый и последний символы, сдвигаемся внутрь), но это алгоритм, не представимый как DPDA без дополнительной информации.Синтаксический разбор по CFG можно выполнить общими алгоритмами (CYK, Earley) за полиномиальное время (обычно O(n^3) для общего случая), либо с недетерминированным PDA в линейное ожидаемое время. Рекурсивный разбор по самой грамматике возможен с бэктрекингом (недетерминизм) и в худшем случае может быть экспоненциальным, но в реальности простая проверка палиндрома делается эффективнее за O(n).

Кратко:

Язык = все палиндромы над {a,b}.Язык не регулярный (для двухсимвольного алфавита) — доказательство через лемму о накачке.Грамматика однозначна (не двусмысленна), поэтому у каждой строки — единственное дерево разбора.Для практического синтаксического анализа нужна либо недетерминированная PDA/бэктрекинг, либо общий алгоритм разбора CFG; чисто детерминированный PDA без дополнительной разметки не распознаёт этот язык.
30 Сен в 18:15
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир