- •Самарский государственный архитектурно-строительный университет
- •Часть 1.
- •Оглавление
- •1. Модели дискретных структур. Комбинационные схемы
- •1.1. Введение
- •1.2. Функции алгебры логики
- •1.3. Булева алгебра. Функциональная полнота
- •Свойства алгебры Жегалкина
- •1.4. Минимизация функции алгебры логики
- •1.5. Функции k-значной логики
- •1.6. Основные понятия трехзначной логики
- •1.7. Представление k-значных функций в виде нормальных форм
- •1.8. Двоичное кодирование переменных и функций трехзначной логики
- •1.9. Элементная база комбинационных схем
- •1.10. Программная реализация логических функций и автоматов
- •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. Пространство сообщений. Коды обнаружения и исправления ошибок
- •Контрольные вопросы
4. Отдельные вопросы теории вычислительных процессов
4.1. Автоматы с магазинной памятью
Конечный автомат может решать лишь вычислительные задачи, требующие фиксированного (конечного) объема памяти. Однако, в компиляторах существует множество задач, которые не могут быть решены при таком ограничении и поэтому приходится пользоваться моделью более сложного автомата [3]. Например, задача обработки скобок арифметических выражений не может быть решена с помощью конечного автомата, потому что арифметическое выражение может начинаться с любого количества левых скобок и компилятор должен проверять соответствие их числу правых скобок. Заранее число левых и правых скобок не известно.
Автомат с магазинной памятью имеет расширенную память по сравнению с конечным автоматом за счет возможности дополнительного хранения информации в магазине (стеке). Часто в программировании стек и магазин считаются синонимами, однако, стек имеет более широкий смысл в теории автоматов. Стек в русском языке имеет аналогию со стопкой, например, книг.
Основная особенность магазинной памяти с точки зрения работы с ней состоит в том, что символы могут помещаться в магазин и удаляться из него по одному, причем удаляемый символ - это всегда тот, который был помещен в магазин последним. Когда символ помещается в магазин, говорят, что он «вталкивается» в магазин, а когда удаляется - «выталкивается». Говорят, что только что поступившая информация находится наверху магазина. Считается, что на дне магазина всегда находится символ - маркер дна, он никогда не вталкивается и не выталкивается из магазина. Если в магазине находится только символ , то говорят, что магазин пуст. Символы в магазине находятся в том порядке, в котором они поступали в магазин. Магазин можно изображать в виде цепочки одним из следующих способов:
C A B 2. B A C
Автомат с магазинной памятью может находиться в одном из конечных состояний и иметь магазин, куда он может помещать и откуда может извлекать информацию. В отличие от конечного автомата автомат с магазинной памятью может обрабатывать один входной символ в течение нескольких шагов. На каждом шаге управляющее устройство автомата решает пора ли закончить обработку текущего входного символа и принять новый входной символ или продолжить обработку текущего символа на следующем шаге.
Каждый шаг процесса обработки задается множеством правил, использующих информацию трех видов:
состояние;
верхний символ магазина;
текущий входной символ.
Множество таких правил задается управляющим устройством. В зависимости от получаемой информации управляющее устройство выбирает либо выход из процесса, то есть прекращение обработки, либо переход в новое состояние. Переход из одного состояния в другое состоит из трех операций:
над магазином;
над состоянием;
над входом.
Возможные операции:
1. Операции над магазином:
втолкнуть в магазин определенный магазинный символ;
вытолкнуть верхний символ магазина;
оставить магазин без изменения.
2. Операции над состояниями:
перейти в заданное новое состояние;
остаться в прежнем состоянии.
3. Операции над входом:
перейти к следующему входному символу и сделать его текущим
входным символом;
оставить данный входной символ текущим, то есть держать его
до следующего шага.
Определение. Автомат с магазинной памятью есть формальная система, задаваемая следующими пятью формальными объектами:
конечным множеством входных символов, в которое входит и
концевой маркер (маркер конца цепочки);
конечным множеством магазинных символов, включающем
маркер дна;
конечным множеством состояний, включая начальное состояние;
4) управляющим устройством, которое каждой комбинации
(входной символ, магазинный символ, состояние) ставит в
соответствие выход или переход. Переход в отличие от выхода
заключается в выполнении операции над магазином, состоянием и
входом. Операции, которые запрашивали бы входной символ после
концевого маркера или выталкивали из магазина или вталкивали в
магазин маркер дна исключаются;
начальным содержимым магазина является маркер дна, за которым следует (возможно, пустая) цепочка других магазинных символов.
Определение. Автомат с магазинной памятью называется распознавателем, если у него 2 выхода: ДОПУСТИТЬ и ОТВЕРГНУТЬ.
Говорят, что цепочка символов входного алфавита допускается распознавателем, если под действием этой цепочки автомат, начавший работу в своем начальном состоянии и с начальным содержимым магазина, делает ряд переходов, приводящих к выходу ДОПУСТИТЬ. В противном случае цепочка отвергается.
При описании переходов автомата с магазинной памятью будем обозначать действия автомата словами:
ВЫТОЛКНУТЬ,
ВТОЛКНУТЬ (А),
СОСТОЯНИЕ (Si),
СДВИГ,
ДЕРЖАТЬ.
Здесь А - магазинный символ, операция СОСТОЯНИЕ (Si ) означает, что следующим состоянием автомата становится состояние Si, операция СДВИГ означает, что текущим входным символом становится следующий входной символ. В некоторых реализациях это может означать сдвиг указателя на входе. Операция ДЕРЖАТЬ означает, что текущий входной символ следует держать до следующего шага.
Пример. Построить автомат с магазинной памятью, для распознавания
скобок.
Решение. Предлагается следующий принцип работы такого распознавателя. Каждый раз, когда встречается левая скобка, в магазин вталкивается символ А, а когда встречается правая - символ А выталкивается. Цепочка отвергается, если на входе остаются правые скобки, а магазин пуст (лишние правые скобки) или, если цепочка прочитана до конца, а в магазине остаются символы А (лишние левые скобки). Такой автомат с магазинной памятью определяется следующими объектами:
1) входным множеством { ( , ), };
2) множеством магазинных символов { А, };
множеством состояний {Si }, где i = 1..n, S - начальное
состояние, n - число внутренних состояний автомата;
4) переходами:
(, A, S = ВТОЛКНУТЬ (А), СОСТОЯНИЕ (S), СДВИГ.
(, , S = ВТОЛКНУТЬ (А), СОСТОЯНИЕ (S), СДВИГ.
), A, S = ВЫТОЛКНУТЬ, СОСТОЯНИЕ (S), СДВИГ.
), , S = ОТВЕРГНУТЬ (лишние правые скобки).
, A, S = ОТВЕРГНУТЬ (лишние левые скобки).
, , S = ДОПУСТИТЬ.
начальным содержимым магазина {}.
Пусть на вход автомата подается цепочка ( ( ) ( ) ), тогда работа такого автомата может быть представлена следующей таблицей переходов:
-
Состояние магазина
Входные символы
(
)
A
ВТОЛКНУТЬ(А)
СДВИГ
ВЫТОЛКНУТЬ
СДВИГ
ОТВЕРГНУТЬ
ВТОЛКНУТЬ(А)
СДВИГ
ОТВЕРГНУТЬ
ДОПУСТИТЬ
Пример. Построить автомат, распознающий правильность построения цепочек языка {0n 1n, n > 0}.
Решение. Предлагается следующий принцип работы автомата:
начальный отрезок цепочки, состоящий из нулей вталкивается в магазин;
каждый раз, когда встречается единица на входе, один нуль выталкивается из магазина;
цепочка допускается тогда и только тогда, когда в момент прихода концевого маркера магазин пуст;
если после обработки единицы за ней следует ноль, то цепочка входных символов отвергается.
Для построения автомата введем две фазы процесса обработки:
первая фаза - « ВТАЛКИВАНИЕ»;
вторая фаза - « ВЫТАЛКИВАНИЕ ».
Чтобы автомат «помнил», в какой фазе он находится, введем два внутренних состояния S1 и S2, соответствующие этим фазам. Построим управляющую таблицу.
Состояние S1(обработка нулей):
-
0
1
A
ВТОЛКНУТЬ(А), S1, СДВИГ
ВЫТОЛКНУТЬ, S2, СДВИГ
ОТВЕРГНУТЬ
ВТОЛКНУТЬ(A), S1,
СДВИГ
ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
Состояние S2 (обработка единиц):
-
0
1
A
ОТВЕРГНУТЬ
ВЫТОЛКНУТЬ, S2, СДВИГ
ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
ДОПУСТИТЬ
Рассмотренный автомат характеризовался следующими объектами:
входным множеством {0,1, };
множеством магазинных символов {А, }.
множеством состояний {S1, S2}, где S1 - начальное состояние;
таблицами переходов (см. выше);
начальным содержимым магазина {}.
Рассмотрим другой подход, применимый в решении поставленной задачи, который позволит обойтись лишь одним состоянием S вместо двух примененных. Для этого введем в рассмотрение операцию ЗАМЕНИТЬ (A, B, C). Она эквивалентна последовательности операций:
ВЫТОЛКНУТЬ,
ВТОЛКНУТЬ (А),
ВТОЛКНУТЬ (B),
ВТОЛКНУТЬ (C).
Если эта операция применяется к магазину { X Y Z} , то новый магазин будет выглядеть следующим образом: { X Y A B C}.
Вернемся к задаче распознавания множества {0n 1n, n > 0}. Построим другой автомат, в котором будет достаточно одного конечного состояния. Предлагается следующий принцип работы. Символ А вталкивается в магазин при каждом появлении на входе нуля и выталкивается при каждом появлении на входе единицы. Для отличия фаз вталкивания и выталкивания применим новую стратегию. Во время фазы вталкивания в верхней ячейке магазина хранится новый магазинный символ X. Единственное его назначение - напоминать управляющему устройству, что автомат находится в фазе вталкивания. Когда впервые на входе появится единица, X выталкивается из магазина. Работа такого автомата может быть представлена следующей таблицей:
-
0
1
X
ЗАМЕНИТЬ (А,X), СДВИГ
ВЫТОЛКНУТЬ, ДЕРЖАТЬ
ОТВЕРГНУТЬ
А
ОТВЕРГНУТЬ
ВЫТОЛКНУТЬ
СДВИГ
ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
ДОПУСТИТЬ
( Начальное состояние магазина { X}.