Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по тяпу.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
807.52 Кб
Скачать

5. Минимизация детерминированного конечного автомата.

Было доказано, что для каждого ДКА можно определить единственный минимальный (с точностью до наименований состояний) ДКА.

В автомате некоторые состояния могут быть эквивалентными.

Состояние Si и Sj эквивалентны при выполнении двух условий:

1) оба конечные

2) оба не конечные, но для каждого входного символа они имеют переходы в эквивалентное состояние.

Алгоритм минимизации:

1) разбиваем множество состояний КА на два подмножества – финальное и не финальное.

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

При минимизации конечного автомата все состояния делятся на две группы: финальные и нефинальные. Затем выполняется следующая процедура. Рассматриваем группу {S1, S2, …, Sk} и некоторый входной символ а. Если по этому входному символу есть переходы в разные группы, то исходную группу разбивают на части. Принадлежность Si к той или иной части зависит от того, в какую группу существует переход из состояния Si по входному символу а. Эта процедура продолжается до тех пор, пока не останется ни одной группы, которую можно было бы разбить по какому-либо входному сигналу.

6. Контекстно-свободные языки. Вывод. Дерево вывода.

КСЯ можно разбирать на части. Паскаль имеет вложенную структуру. If E then S1 (оператор) else S2 (оператор). Здесь можно выделить синтаксические категории (S1) – нетерминалы и ключевые слова – терминалы (имеют законченный вид). Для описания синтаксиса ЯП используется БНФ. В ней даются определения нетерминалов через терминалы и нетерминалы. Для оператора if:

<оператор>::= if <выражение> then <оператор> else <оператор>. Далее каждый оператор также можно раскрыть.

Для каждой грамматики можно определить правило непосредственного вывода: если определены последовательности символов  и  такие, что  V* и  V* (конечное множество грамматических символов), и если задана продукция А→Р, то из последовательности символов А можно получить .

Здесь → означает применение правила подстановки или непосредственного вывода.

Допустим, если есть последовательность аАВС, то используя грамматику, применив правило 5 только к В, получим:

аАВС→аАвВС

5

Выводом называется последовательность постановок, она обозначается →*. Эта запись означает, что из  выводится  за 0 или более шагов. →+: из  выводится  за 1 или более шагов.

Каждая цепочка символов, встречающихся в выводе, называется промежуточной цепочкой. Если промежуточная цепочка выводима из начального символа, то она называется выводимой цепочкой (сентенциальной формой).

Вывод цепочки можно представить в виде дерева. Если на каждом шаге заменяется самый левый нетерминал, то вывод называется левосторонним, если самый правый, то правосторонний.

В общем случае грамматика может порождать несколько различных деревьев вывода для одной и тоже цепочки (неоднозначная). Однозначная - если каждой выводимой цепочке соответствует единственное дерево вывода.

7. Контекстно-свободные грамматики для регулярных языков.

Не все языки можно разбирать с помощью регулярных выражений, например нельзя записать регулярное выражение для степенной функции. Для работы с такими языками используются контекстно-свободные грамматики.

КСГ описывают язык как множество строк, полученных применением конечного числа продукций к стартовому символу. КСГ – четверка символов <V, , P, S>, где

V - конечное множество грамматических символов;

 - терминальные символы; N = V -  - нетерминальные символы. , N  V.

P – множество продукций; P  N * V* - последовательность грамматических символов (возможно пустая). Условие, что <A, >  p, будет записываться в виде А→.

Продукция – это последовательность, начинающаяся с нетерминального символа (левая часть правила), за которым следует замыкание Клини терминальных и нетерминальных символов (правая часть правила).

Каждая продукция имеет голову и хвост (правая и левая части). Голова всегда нетерминал, который частично определяется этой продукцией, хвост – конечная цепочка грамматических символов, которая служит определением этого нетерминала.

S- стартовый (начальный) не терминал. Отметим условные обозначения:а, b, c – терминальные символы;A, B, C – нетерминальные символы; U, V, W – переменные, принадлежащие множество V;, ,  - последовательности грамматических символов (, ,   V*);u, v, w – элементы алфавита (u, v, w  ).

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

Алгоритм: для каждого КА строит КСГ.

1. берем алфавит КА и считаем его множеством терминальных символов;

2. множество состояний автомата берем в качестве множества нетерминальных символов, где начальное состояние соответствует стартовому нетерминалу;

3. если в КА есть переход из сост-я А в сост-е В по входному символу х, в грамматику включается продукция А→хВ

4. если состояние С – финальное, то включается продукция С→.

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