Автоматы с магазинной памятью

Отдельные вопросы теории вычислительных процессов

 

 

Конечный автомат может решать лишь вычислительные задачи, требующие фиксированного (конечного) объема памяти. Однако, в компиляторах существует множество задач, которые не могут быть решены при таком ограничении и поэтому приходится пользоваться моделью более сложного автомата [3]. Например, задача обработки скобок арифметических выражений не может быть решена с помощью конечного автомата, потому что арифметическое выражение может начинаться с любого количества левых скобок и компилятор должен проверять соответствие их числу правых скобок. Заранее число левых и правых скобок не известно.

Автомат с магазинной памятью имеет расширенную память по сравнению с конечным автоматом за счет возможности дополнительного хранения информации в магазине (стеке). Часто в программировании стек и магазин считаются синонимами, однако, стек имеет более широкий смысл в теории автоматов. Стек в русском языке имеет аналогию со стопкой, например, книг.

Основная особенность магазинной памяти с точки зрения работы с ней состоит в том, что символы могут помещаться в магазин и удаляться из него по одному, причем удаляемый символ - это всегда тот, который был помещен в магазин последним. Когда символ помещается в магазин, говорят, что он «вталкивается» в магазин, а когда удаляется - «выталкивается». Говорят, что только что поступившая информация находится наверху магазина. Считается, что на дне магазина всегда находится символ Ñ - маркер дна, он никогда не вталкивается и не выталкивается из магазина. Если в магазине находится только символ Ñ, то говорят, что магазин пуст. Символы в магазине находятся в том порядке, в котором они поступали в магазин. Магазин можно изображать в виде цепочки одним из следующих способов:

 

1. C A B Ñ 2. Ñ B A C

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

Каждый шаг процесса обработки задается множеством правил, использующих информацию трех видов:

· состояние;

· верхний символ магазина;

· текущий входной символ.

Множество таких правил задается управляющим устройством. В зависимости от получаемой информации управляющее устройство выбирает либо выход из процесса, то есть прекращение обработки, либо переход в новое состояние. Переход из одного состояния в другое состоит из трех операций:

· над магазином;

· над состоянием;

· над входом.

Возможные операции:

1. Операции над магазином:

· втолкнуть в магазин определенный магазинный символ;

· вытолкнуть верхний символ магазина;

· оставить магазин без изменения.

2. Операции над состояниями:

· перейти в заданное новое состояние;

· остаться в прежнем состоянии.

3. Операции над входом:

· перейти к следующему входному символу и сделать его текущим

входным символом;

· оставить данный входной символ текущим, то есть держать его

до следующего шага.

 

Определение. Автомат с магазинной памятью есть формальная система, задаваемая следующими пятью формальными объектами:

1) конечным множеством входных символов, в которое входит и

концевой маркер ¿ (маркер конца цепочки);

2) конечным множеством магазинных символов, включающем

маркер дна;

3) конечным множеством состояний, включая начальное состояние;

4) управляющим устройством, которое каждой комбинации

(входной символ, магазинный символ, состояние) ставит в

соответствие выход или переход. Переход в отличие от выхода

заключается в выполнении операции над магазином, состоянием и

входом. Операции, которые запрашивали бы входной символ после

концевого маркера или выталкивали из магазина или вталкивали в

магазин маркер дна исключаются;

5) начальным содержимым магазина является маркер дна, за которым следует (возможно, пустая) цепочка других магазинных символов.

 

Определение. Автомат с магазинной памятью называется распознавателем, если у него 2 выхода: ДОПУСТИТЬ и ОТВЕРГНУТЬ.

 

Говорят, что цепочка символов входного алфавита допускается распознавателем, если под действием этой цепочки автомат, начавший работу в своем начальном состоянии и с начальным содержимым магазина, делает ряд переходов, приводящих к выходу ДОПУСТИТЬ. В противном случае цепочка отвергается.

При описании переходов автомата с магазинной памятью будем обозначать действия автомата словами:

· ВЫТОЛКНУТЬ,

· ВТОЛКНУТЬ (А),

· СОСТОЯНИЕ (Si),

· СДВИГ,

· ДЕРЖАТЬ.

Здесь А - магазинный символ, операция СОСТОЯНИЕ (Si ) означает, что следующим состоянием автомата становится состояние Si, операция СДВИГ означает, что текущим входным символом становится следующий входной символ. В некоторых реализациях это может означать сдвиг указателя на входе. Операция ДЕРЖАТЬ означает, что текущий входной символ следует держать до следующего шага.

 

Пример. Построить автомат с магазинной памятью, для распознавания

скобок.

 

Решение. Предлагается следующий принцип работы такого распознавателя. Каждый раз, когда встречается левая скобка, в магазин вталкивается символ А, а когда встречается правая - символ А выталкивается. Цепочка отвергается, если на входе остаются правые скобки, а магазин пуст (лишние правые скобки) или, если цепочка прочитана до конца, а в магазине остаются символы А (лишние левые скобки). Такой автомат с магазинной памятью определяется следующими объектами:

1) входным множеством { ( , ), ¿ };

2) множеством магазинных символов { А, Ñ};

3) множеством состояний {Si }, где i = 1..n, S - начальное

состояние, n - число внутренних состояний автомата;

4) переходами:

(, A, S = ВТОЛКНУТЬ (А), СОСТОЯНИЕ (S), СДВИГ.

(, Ñ, S = ВТОЛКНУТЬ (А), СОСТОЯНИЕ (S), СДВИГ.

), A, S = ВЫТОЛКНУТЬ, СОСТОЯНИЕ (S), СДВИГ.

), Ñ, S = ОТВЕРГНУТЬ (лишние правые скобки).

¿, A, S = ОТВЕРГНУТЬ (лишние левые скобки).

¿, Ñ, S = ДОПУСТИТЬ.

5) начальным содержимым магазина {Ñ}.

 

Пусть на вход автомата подается цепочка ( ( ) ( ) ), тогда работа такого автомата может быть представлена следующей таблицей переходов:

 

 

Состояние магазина Входные символы
( ) ¿
A ВТОЛКНУТЬ(А) СДВИГ ВЫТОЛКНУТЬ СДВИГ ОТВЕРГНУТЬ
Ñ ВТОЛКНУТЬ(А) СДВИГ ОТВЕРГНУТЬ ДОПУСТИТЬ
           

 

 

Пример. Построить автомат, распознающий правильность построения цепочек языка {0n 1n, n > 0}.

 

Решение.Предлагается следующий принцип работы автомата:

n начальный отрезок цепочки, состоящий из нулей вталкивается в магазин;

n каждый раз, когда встречается единица на входе, один нуль выталкивается из магазина;

n цепочка допускается тогда и только тогда, когда в момент прихода концевого маркера магазин пуст;

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

 

Для построения автомата введем две фазы процесса обработки:

 

· первая фаза - « ВТАЛКИВАНИЕ»;

· вторая фаза - « ВЫТАЛКИВАНИЕ ».

 

Чтобы автомат «помнил», в какой фазе он находится, введем два внутренних состояния S1 и S2, соответствующие этим фазам. Построим управляющую таблицу.

Состояние S1(обработка нулей):

 

  ¿
A ВТОЛКНУТЬ(А), S1, СДВИГ ВЫТОЛКНУТЬ, S2, СДВИГ   ОТВЕРГНУТЬ
Ñ ВТОЛКНУТЬ(A), S1, СДВИГ   ОТВЕРГНУТЬ ОТВЕРГНУТЬ

 

 

Состояние S2 (обработка единиц):

 

  ¿
A ОТВЕРГНУТЬ ВЫТОЛКНУТЬ, S2, СДВИГ   ОТВЕРГНУТЬ
Ñ ОТВЕРГНУТЬ ОТВЕРГНУТЬ   ДОПУСТИТЬ

 

Рассмотренный автомат характеризовался следующими объектами:

1) входным множеством {0,1, ¿ };

2) множеством магазинных символов {А, Ñ}.

3) множеством состояний {S1, S2}, где S1 - начальное состояние;

4) таблицами переходов (см. выше);

5) начальным содержимым магазина {Ñ}.

 

Рассмотрим другой подход, применимый в решении поставленной задачи, который позволит обойтись лишь одним состоянием S вместо двух примененных. Для этого введем в рассмотрение операцию ЗАМЕНИТЬ (A, B, C). Она эквивалентна последовательности операций:

 

· ВЫТОЛКНУТЬ,

· ВТОЛКНУТЬ (А),

· ВТОЛКНУТЬ (B),

· ВТОЛКНУТЬ (C).

 

Если эта операция применяется к магазину {Ñ X Y Z} , то новый магазин будет выглядеть следующим образом: { Ñ X Y A B C}.

Вернемся к задаче распознавания множества {0n 1n, n > 0}. Построим другой автомат, в котором будет достаточно одного конечного состояния. Предлагается следующий принцип работы. Символ А вталкивается в магазин при каждом появлении на входе нуля и выталкивается при каждом появлении на входе единицы. Для отличия фаз вталкивания и выталкивания применим новую стратегию. Во время фазы вталкивания в верхней ячейке магазина хранится новый магазинный символ X. Единственное его назначение - напоминать управляющему устройству, что автомат находится в фазе вталкивания. Когда впервые на входе появится единица, X выталкивается из магазина. Работа такого автомата может быть представлена следующей таблицей:

 

  ¿
X ЗАМЕНИТЬ (А,X), СДВИГ ВЫТОЛКНУТЬ, ДЕРЖАТЬ   ОТВЕРГНУТЬ
А ОТВЕРГНУТЬ ВЫТОЛКНУТЬ СДВИГ   ОТВЕРГНУТЬ
Ñ ОТВЕРГНУТЬ ОТВЕРГНУТЬ   ДОПУСТИТЬ

 

 

( Начальное состояние магазина {Ñ X}.