Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TAiFYA(X-file).doc
Скачиваний:
18
Добавлен:
24.04.2019
Размер:
3.09 Mб
Скачать

13. Теорема о совпадении классов праволинейных, конечно-автоматных и регулярных языков.

14. Определение контекстно-свободной грамматики. Контекстно-свободный грамматический вывод, левый и прявый выводы. Примеры кс-языков. Деревья вывода.

КС – грамматика:

i – номер терминала. Нетерминальные символы – нетерминалы. Терминальные – терминалы.

, слово получено из применением одного правила грамматики.

, получено из применением конечного числа правил грамматики. просто выводимо из слова .

- любое слово выводимо из аксиом грамматики.

КС язык – если существует порождающая его КС-грамматика.

Пример:

- мн-во слов, в которых одинаковое число букв a и b.

Последовательность правил – вывод.

Мы могли применять правила в другом порядке. Получили бы другой вывод.

- левый вывод.

Одно и то же слово может иметь разные выводы. Но эти 2 вывода отмечаются только порядком применения правил. Но правила м.б. принципиально различны.

Левый вывод – вывод, в котором любое правило применяется к самому левому вхождению нетерминала в слово.

Правый вывод - вывод, в котором любое правило применяется к самому правомулевому вхождению нетерминала в слово.

Существует графический способ представления левого\правого вывода – дерево вывода.

  1. Корневое дерево.

  2. Вершины-символы недетерминированного и терминированного алфавита или .

  3. Если на некотором шаге к нетерминалам применяется правило , то из этой вершины в следущий ярус проводится k ребер. Вершины отмечаются слева направо.

На каждом шаге можем просмотреть послед-ть листьев слева направо, чтобы поулчить текущее слово. В конце все листья – либо терминальные символы, либо .

Два вывода называются эквивалентными, если им соответствует одно и то же дерево вывода. Обычно используется левый, либо правый вывод.

КС грамматика называется однозначной, если любое слово языка, порождаемое грамматикой, имеет единственное дерево вывода.

КС язык называется однозначным, если существует однозначная, порождающая его, КС-грамматика. Удобно работать с однозначными грамматиками.

КС грамматика называется неоднозначной, если существует хотя бы одно слово, порождаемое этой грамматикой, которое имеет 2 или более различных деревьев вывода.

Высота дерева вывода – длина наибольшего пути от корня дерева к листу (по числу ребер в пути).

15. Приведенная форма кс-грамматики, алгоритм преобразования кс-грамматики к приведенной форме.

Контекстно-свободный язык может определяться разными КС-грамматиками.

Привидение КС-грамматики – переход от произвольной грамматики, к обладающей «хорошими» свойствами.

G = <VT, VN, P, S> SϵVN

I. Грамматика может содержать бесполезные и недостижимые символы.

Бесполезный нетерминальный символ – это такой символ, из которого нельзя вывести ни одного символа в нетерминальном алфавите.

Как определить, является ли символ бесполезным?

Для этого нужно заменить S на этот символ и применить к такой грамматике алгоритм проверки на пустоту. Если грамматика получится пустой, то символ бесполезный.

Недостижимые символы (они могут быть как терминальными, так и нетерминальными) – символы, которые никогда не будут выведены в процессе вывода (символы, которые не могут быть выведены из аксиомы грамматики).

К ак определить недостижимые символы?

Найдем все достижимые символы

N0={S}

N1={x|S→αxβ}U N0

N2={x|A→αxβ(ϵ p), AϵN1}U N1

Ni={x|A→αxβ,AϵNi-1}U Ni-1

Ni=Ni-1 => стоп, все полученные символы достижимы.

=> Остальные – недостижимы.

Была грамматика G. Построим G’=< VT’, VN’, P’, S >, где VT’= VT∩ Ni, VN’= VN∩Ni

  1. Удаляем бесполезные нетерминальные символы

  2. Удаляем недостижимые символы.

  3. Удаляем из P’ все правила, которые содержат бесполезные или недостижимые символы.

II. Еще одно неудобство – грамматика может содержать правила вида А→λ (λ - правила).

Исключение λ – правил.

  1. Язык, порождаемый грамматикой, не содержит λ (L(G)≠λ)

  2. Язык, порождаемый грамматикой, содержит λ (L(G)=λ), тогда все λ – правила точно не исключить.

  3. Алгоритм исключения λ – правил.

1.Nλ={A|AϵVN,A=>+λ(хотя бы одно правило применяется)}

2.N0={A|A→λϵP}

Ni={A|A→λ,λϵNi-1}U Ni-1 из α можно вывести λ=>и из А можно вывести λ

3. пока Ni ≠ Ni-1, Nλ= Ni= Ni-1

Новая грамматика: А→α0В1α1В2… Вкαкϵ Р, к>0, Вiϵ Nλ, αi не содержит символов из Nλ.

По этому правилу строим новые, заменяя всевозможными способами Вi.

А→α0х1α1х2… хкαк, хi=λ, либо хi= Вi

но не включаем правило А→λ.

Если SϵNλ

S’→λ =>слово можно получить единственным способом, применяя правило S’→λ.

S’→S

(при таких преобразованиях грамматика становится неукорачивающей: правая часть правила имеет длину не меньшую, чем левая часть).

=>Всегда по КС-грамматике можно построить новый грамматику, не содержащую λ – правил.

III. Грамматика может содержать правила вида А→В (цепные правила). Если в грамматике есть такие правила, то может случиться так, что А=>+А, т.е. такую цепочку можно применять многократно.

Одно слово языка имеет бесконечное множество способов вывода. Необходимо ликвидировать возможность циклов.

Считаем, что шаги I и II уже проделаны.

Алгоритм избавления от цепных правил.

  • Аϵ VN, NA={B|A=>*B}

N0={A} // т.к. A=>*B за 0 шагов из А=>A

Ni={C|B→CϵP и BϵNi-1}U Ni-1

N1={C|B→CϵP и B=A}U{A}

N2={C|B→CϵP и Bϵ{A,…}U N1

Пока Ni ≠ Ni-1 NА= Ni= Ni-1

Новая грамматика:

1. В→λϵР – нецепное, добавляем в P’

2. А→λϵР’ A, Bϵ NА

A=>*B(может быть цепное)=>α => добавляем А→α

Опр. Грамматика называется приведенной, если она не содержит недостижимых символов, λ – правил и циклов.

Утв. Если L – КС-язык (для него существует КС-грамматика), то существует приведенная грамматика G

L(G)=α.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]