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

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

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

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

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

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

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

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

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

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

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

13. Построение таблицы разбора для ll(1) – грамматики

Таблица синтаксического разбора представляет собой двумерную таблицу, в которой строки соответствуют нетерминалам, а столбцы – терминалам грамматики. Значения в ячейках этой таблицы определяют продукцию, которая должна быть активирована на текущем шаге алгоритма при получении следующей лексемы. Для построения данной таблицы требуется предварительно построить для каждого нетеминала грамматики множества first и follow. Эта таблица определяет, какую продукцию нужно рассматривать для некоторой пары: терминал на входе и нетерминал в вершине стека. Таблица разбора строится следующим образом.

Для всех продукций А грамматики выполняем:

1 Для всех терминалов а, принадлежащих first() в клетку [А, а] таблицы разбора записываем продукцию А.

2 Если  принадлежит first(), то для всех b, принадлежащих follow(А), в клетку [A, b] записываем продукцию А.

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

Если при построении таблицы возникает попытка в одну клетку записать две или более продукции, то разбираемая грамматика не является LL(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 нетерминала, который стоит в конце).

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