
- •Часть 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. Операции над языками
Класс контекстно-свободных языков замкнут относительно объединения и не замкнут относительно пересечения и дополнения. Это говорит о том, что теоретико-множественные операции, за исключением объединения, не имеют естественной синтаксической интерпретации. С этой точки зрения большой интерес представляют операции, связанные с подстановками языка в язык [ 3 ].
Пусть L0 - язык, заданный грамматикой:
G0 = {V0 , W0 , R0 , I 0}, a V0;
L1 - язык, заданный грамматикой G1 = {V1 , W1 , R1 , I1} .
Определение. Подстановка языка L1 в язык L0 вместо символа a - это операция, сопоставляющая языкам L0 и L1 язык L = L0 ( a L1 ), состоящий из всех цепочек L0, в которых вместо символа a подставлена некоторая цепочка из L1.
Обобщением рассмотренной подстановки является подстановка
L = L0 ( a1 L1 , ... , ak Lk) нескольких языков.
Пример. Пусть заданы языки вида:
L0 = { a, ( a + a ), ( a + a + a), ... } L1 = { b, bb, bbb, ... }
требуется выполнить подстановку L1 в L0.
Решение. Подстановка L1 в L0 будет иметь вид:
L = L0 ( a L1 ) = L = { b, bb, bbb,...,( b + b), (bb + b), ...}.
Определение. Конкатенация языков L0 и L1 - эта операция
L0L1, сопоставляющая языкам L0 и L1 язык L, содержащий цепочки, представляющие собой парное сцепление цепочек языков L0 и L1.
Пример. Пусть заданы языки вида:
L0 = { a, (a+a), (a+a+a), ... } L1 = { b, bb, bbb, ... }
требуется выполнить конкатенацию L1 и L0.
Решение. Конкатенация L1 и L0 будет иметь вид:
L = L0L1 = { ab, abb, abbb, ( a+a )b, ...}.
Введем в рассмотрение степенные обозначения конкатенаций
LL=L2 , LLL=L3, ... .
Подстановки будем обозначать следующим образом:
Определение. Итерацией L* языка L называется язык вида:
L* = { } L L2 ... Ln ,
где { } - пустая цепочка.
Замечание. Не следует путать язык, содержащий одну пустую цепочку, с пустым языком, не содержащим ни одной цепочки, так как
L {} = {} L = L, а L = для любого L.
2.5. Право-линейная и автоматная грамматики
Определение. Грамматика называется право -линейной, если правая часть каждого правила содержит не более одного нетерминала, причем он является самым правым символом.
Правила право линейной грамматики имеют вид:
A B, A , V* , B W.
Определение. Грамматика называется автоматной, если ее правила имеют вид:
A x B, A x, A , x V, B W.
Синтез конечных автоматов, распознающих язык, порождаемый грамматикой, предусматривает, что такая грамматика должна быть автоматной.
Пример. Преобразовать грамматику, заданную правилами вида:
S a A 4. A a b b S
2. S b c 5. A c A
3. S A 6. A
к автоматной.
Решение. Последовательно будем вводить новые нетерминалы в
тех правилах, где необходимо обозначить цепочку нетерминалов и терминалов или одних терминалов одним символом. Новые правила примут вид:
1. S a A 6. S
2. S b К1 7. A a K2
3. K1 c 8. K2 b K3
4. S a K2 9. K3 b S
5. S c A 10. A c A
A