- •Часть 1.
- •Оглавление
- •1. Модели дискретных структур. Комбинационные схемы
- •1.1. Введение
- •1.2. Функции алгебры логики
- •Коммутативность
- •Ассоциативность
- •Дистрибутивность
- •1.3. Булева алгебра. Функциональная полнота
- •Свойства алгебры Жегалкина
- •1.4. Минимизация функции алгебры логики
- •1.5. Функции k-значной логики
- •1.6. Основные понятия трехзначной логики
- •1.7. Представление k-значных функций в виде нормальных форм
- •1.8. Двоичное кодирование переменных и функций трехзначной логики
- •1.9. Программная реализация логических функций и автоматов
- •2. Формальные языки и грамматики
- •2.1. Введение в теорию формальных языков и грамматик
- •2.2. Выводы цепочек формального языка. Деревья ксг
- •2.3. Основные понятия теории формальных языков и грамматик
- •2.4. Приведение грамматик
- •2.4. Операции над языками
- •2.5. Право-линейная и автоматная грамматики
- •3. Теория автоматов
- •3.1. Введение
- •3.2. Способы представления конечных автоматов
- •3.3. Минимизация числа состояний автомата
- •3.4. Использование сети Петри при переходе от грамматики к автомату
- •3.5. Сети Петри. Маркировка
- •3.6. Классификация сетей Петри
- •Статические ограничения
- •3.7. Синхронные и асинхронные автоматы
- •3.8. Модели автоматов Мили и Мура
- •3.9. Кодирование автомата
- •3.10. Элементная база синтеза комбинационных схем
- •3.11. Структурный синтез автомата
- •4. Отдельные вопросы теории вычислительных процессов
- •4.1. Автоматы с магазинной памятью
- •4.2. Комбинационные схемы обнаружения ошибок
- •4.3. Пространство сообщений. Коды обнаружения и исправления ошибок
- •Контрольные вопросы
2.4. Приведение грамматик
Для одного и того же формального языка могут существовать различные грамматики. Поэтому возникает проблема выбора грамматики, наиболее подходящей по тем или иным свойствам, иначе проблема эквивалентного преобразования грамматик к нужному виду. Желаемые свойства могут быть такими как:
однозначность;
минимальное число правил или нетерминальных символов;
простота вывода.
Универсальных методов эквивалентных преобразований контекстно-свободных грамматик (КСГ) не существует из-за неразрешимости алгоритмических проблем распознавания эквивалентности контекстно-свободных грамматик и существенной неоднозначности контекстно-свободных языков. Однако, существуют некоторые преобразования, которые могут улучшать грамматику.
Определение. Назовем нетерминальный символ A выводимым (достижимым), если существует S * A и производящим, если A*, V* , и - произвольные цепочки, - терминальная цепочка.
Определение. Нетерминальный символ называется существенным, если он является достижимым и производящим. В противном случае, он называется несущественным (бесполезным).
Покажем, что для любой КСГ можно построить эквивалентную ей приведенную контекстно-свободную грамматику. Для этого рассмотрим алгоритм выделения достижимых символов:
Обозначим через M1 множество всех нетерминальных символов, содержащихся в правых частях правил вида:
S , (V W)*.
Очевидно, что все символы M1 достижимы.
2. Mi = M1.
Определим Mi-+1 = Mi Mi’, как множество, состоящее из
объединения множеств Mi и Mi’ , где Mi’ - множество всех
нетерминальных символов правых частей правил вида:
A , A Mi , ( V W )*.
4. Mi+1 Mi ? Если - да, то Mi = Mi+1 и переход к п. 3.
5. Окончание алгоритма.
Массив Mi+1 - множество достижимых символов и его размерность
k W .
Пример. Для заданной грамматики вида:
S a B a C b B
B a B C a C a C
B b
определить множество достижимых символов.
Решение. Найдем множества Mi для заданной грамматики в соответствии с представленным алгоритмом. Ими будут множества
M1 = {B, S}, M2 = M1 {C}, M3 = M2 = {B, S, С} - множество достижимых символов.
Пример. Для заданной грамматики вида:
S A B A C b b
B A B C A D D A
B b D C A
A a
определить множество достижимых символов.
Решение. Найдем множества Mi для заданной грамматики в соответствии с представленным алгоритмом. Ими будут множества M1 = {A, B, S}, M2 = M1 {C}, M3 = M2 = {A, B, S, С} - множество достижимых символов. D - недостижимый символ, а значит бесполезный.
Замечание. Нетерминальный символ, соответствующий аксиоме грамматики, всегда считается достижимым.
Рассмотрим алгоритм выделения производящих символов. Он работает с конца вывода.
Обозначим через Q1 множество всех нетерминальных символов, для которых в G имеются правила вида:
, V*, A W.
Все символы множества Q1 - производящие.
Qi = Q1 .
Qi-+1 = Qi Qi‘, где Qi‘ - множество нетерминальных символов левых частей правил, для которых в грамматике имеются правила вида: A , (V Qi)*.
Если Qi+1 Qi , то Qi = Qi+1 и переход к пункту 3.
Окончание алгоритма.
Qi+1 - множество производящих символов. Его мощность
m W .
Пример. Для заданной грамматики вида:
S A D A C b b
S B A D C
D A B c A D D A
D C A A a.
определить множество производящих символов.
Решение. Найдем множества Qi для заданной грамматики в соответствии с представленным алгоритмом. Ими будут множества Q1 = {A, С}, Q2 = Q1 {D, S}, Q3 = Q2 = {A, D, S, С} - множество производящих символов. B - непроизводящий символ, а значит бесполезный.
После преобразования грамматики по вышеописанным алгоритмам получаем грамматику, не содержащую бесполезные (несущественные) символы.
Удаление цепных правил
Цепные правила - это правила вида : A B, A, B W. Назначение процедуры удаления цепных правил состоит в сокращении памяти требуемой под дерево вывода. Эта процедура состоит из 2-х этапов:
Для каждого нетерминального символа A W составляется множество WA, состоящее из нетерминальных символов, выводимых из A, причем A WA .
В грамматике выделяют не цепные правила вида:
, W.
Они записываются в новую грамматику для каждого WA , для которого существует выводимость из .
Пример. Для заданной грамматики вида:
G = {V, W, A, P}; V={a}; W={A, B, C};
P = { A B, B C, C a }
удалить цепные правила, сохранив основные свойства грамматики.
Решение. Найдем множества Wi для заданной грамматики в соответствии с представленным алгоритмом. Ими будут множества:
WA = {A, B, C}; WB = { B, C }; WC ={ C } .
Что позволяет записать новые правила грамматики, в которых нет цепных правил, но сохраняется порождаемый формальный язык.
P’= {Aa, Ba, Ca}.
Пример. Для заданной грамматики вида:
G = {V, W, I, P}; V = {a, b}; W = { A, B, C, D, I };
P = { I A, A a C , I B, B C, C D, D b }
удалить цепные правила, сохранив основные свойства грамматики.
Решение. Найдем множества Wi для заданной грамматики в соответствии с представленным алгоритмом. Ими будут множества:
WI = { I, A, B, C, D }; WA = { C, D };
WB ={ C, D }; WC = { D }.
Что позволяет записать новые правила грамматики, в которых нет цепных правил, но сохраняется порождаемый формальный язык.
P’ = { I a C, A a C , I b, B b, C b, D b }.
Замечание. Достоинство грамматик без цепных правил состоит в отсутствии циклов в выводах и ни одна цепочка в выводе не повторяется.