- •Проектирование автоматов
- •Проектирование автоматов
- •5.7. Упражнения 90
- •Введение
- •1. Абстрактные автоматы
- •1.1. Эквивалентность автоматов
- •1.2. Минимизация автоматов
- •1.2.1. Минимизация полностью определенного автомата
- •1.2.2. Минимизация частичного автомата
- •1.3. Композиция автоматов
- •1.3.1. Параллельное соединение
- •1.3.2. Последовательное соединение
- •1.3.3. Соединение с обратной связью
- •1.3.4. Соединение в сеть
- •1.4 Декомпозиция автомата
- •1.4.1. Задача декомпозиции
- •1.4.2. Разбиения со свойствами подстановки
- •1.4.3. Метод декомпозиции
- •1.5. Упражнения Эквивалентность автоматов
- •Минимизация полностью определённого автомата.
- •Декомпозиция автоматов
- •2. Структурные автоматы
- •2.1. Автоматная полнота и теорема в.М.Глушкова
- •2.2. Гонки в автомате
- •2.2.1. Кодирование состояний
- •2.2.2. Понятие о гонках. Противогоночное кодирование
- •2.3. Проектирование автомата
- •2.4. Упражнение Кодирование
- •Синтез автомата
- •3. Синтез схем
- •3.1. Определения
- •3.2. Функциональная полнота базиса
- •3.2.1. Классы функций
- •3.2.2. Монотонные функции
- •3.2.3. Самодвойственные функции
- •3.2.4. Линейные функции
- •3.2.5. Функции, сохраняющие константу
- •3.2.6. Функциональная полнота
- •3.3. Топологические ограничения в схемах
- •3.3.1. Плоские схемы
- •3.3.2. Ограничения на глубину связи в схеме
- •3.4. Методы синтеза схем
- •3.4.1. Метод факторизации
- •3.4.2. Метод декомпозиции
- •3.4.3. Синтез схем в классическом базисе.
- •3.4.4. Синтез схем в монофункциональном базисе.
- •3.5. Упражнения Функциональная полнота
- •Синтез схем
- •4. Эксперименты над автоматами
- •4.1. Построение диагностических деревьев
- •4.2. Диагностические и установочные эксперименты
- •4.2.1. Дерево преемников
- •4.2.2. Диагностический эксперимент
- •4.2.3. Установочный эксперимент
- •4.3. Упражнения Диагностические эксперименты
- •Установочные эксперименты
- •5. Формальные грамматики
- •5.1. Языки и порождающие их грамматики
- •5.2. Примеры фрагментов описаний в языках программирования.
- •5.3. Порождающая грамматика
- •5.4. Классы языков и грамматик
- •5.5. Язык, понимаемый устройством
- •5.6. Автоматные языки
- •5.7. Упражнения
- •Библиографический список
- •Проектирование автоматов
- •620002, Екатеринбург, Мира, 19
5.4. Классы языков и грамматик
Грамматики и соответственно им и языки делятся на классы в зависимости от ограничений, которые определяются для правил. Среди множества классов выделим классы, рассмотренные Ноамом Хомским. Запишем правило в виде p: .
Если для правил никаких ограничений нет, кроме одного – в слове должен быть хотя бы один нетерминальный символ, то такие грамматики (так же как и языки) отнесём к классу 0 и назовём грамматиками (языками) с фразовой структурой.
Если слова имеют вид: = 1 2 3, =11 3, т.е. замена 2 на 1 произойдет только в том случае, если перед ним стоит 1, а после 3, т.е. зависит от контекста. Цепочки 1 и 3 образуют контексты (1 –левый контекст, 3 – правый контекст). В частности, 2 может быть нетерминальным символом, а 1 – произвольным словом. Такие грамматики называются неукорачивающими. В них каждое следующее слово в цепочке не меньше предыдущего. Такие грамматики называются контекстными или грамматиками класса 1.
Если в правилах – нетерминальный символ, а – произвольное слово, то грамматика называется контекстно-свободной (КС-грамматикой) или грамматикой класса 2.
КС-грамматики широко используются при описании конструкций языков программирования. Синтаксис большинства известных языков программирования основан именно на КС-грамматиках.
И, наконец, грамматики, в правилах которых всегда – нетерминальный символ, а — или терминальный символ или пара символов, первый из которых нетерминальный, а второй — терминальный, называют леволинейными. Если в правилах — или терминальный символ или пара символов, первый из которых терминальный, а второй — нетерминальный, то грамматики называются праволинейными. Показано, что оба эти класса грамматик эквивалентны, т.е. образуют один и тот же класс языков. Такие грамматики называют регулярными или автоматными или грамматиками класса 3.
Так же как и грамматики. соответствующие им языки называют контекстными, контекстно-свободными и автоматными.
5.5. Язык, понимаемый устройством
Рассмотрим программу, которую вы составили и ввели в ЭВМ. В каком случае можно считать, что ЭВМ понимает введённую программу?
Во-первых, тогда, когда программа проработала до конца и выдала какой-то результат. Этот результат может не совпадать с тем, который вы хотели получить, но это только означает, что вы написали программу, которая решает другую задачу.
Во-вторых, если ЭВМ нашла в программе грамматические ошибки и сообщила о них.
В каждом из этих случаев ЭВМ в заключение вышла в одно из штатных состояний. Если рассматривать программу (или другой текст, который вводится в ЭВМ) как слово в некотором алфавите, то можно считать, что это слово является словом языка, который понимает ЭВМ, если в результате обработки этого слова ЭВМ выходит в одно из состояний, определённое как заключительное.
Можно рассматривать как некоторый частный случай язык программирования, например, ПАСКАЛЬ. Тогда заключительным можно определить состояние, соответствующее правильному решению задачи, а описание ЭВМ с программным обеспечением, предназначенным для решения задач на ПАСКАЛе, можно считать одним из способов задания этого формального языка.
Аналогично можно определить язык, понимаемый некоторым конечным автоматом S с начальным состоянием a0. Входной алфавит автомата определен как V, множество состояний как A и задано A*A, которое назовем множеством допустимых заключительных состояний. Слово в алфавите V будем считать словом языка, если оно переводит автомат из состояния a0 в одно из состояний из множества A*. В этом случае автомат можно считать строгим описанием формального языка. Так как выходы автомата нас не интересуют, рассматривают автоматы без выходов, т.е. автомат описывается как S=( V, A, a0, A*, ), где –функция переходов. Такой язык принято называть автоматным.