Материал: Лабораторная работа #3

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лабораторная работа №3 Недетерминированные магазинные автоматы. Теоретическая часть

Модель магазинного автомата (рис.1) состоит из

  • входной ленты,

  • устройства управления и

  • в спомогательной ленты, называемой магазином или стеком.

Рис.1. Модель магазинного автомата

Входная лента разделяется на клетки (позиции), в каждой из которых может быть записан символ входного алфавита. При этом предполагается, что в неиспользуемых клетках входной ленты расположены пустые символы .

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

Головка входной ленты может перемещаться только в одну сторону - вправо или оставаться на месте. Она может выполнять только чтение. Головка вспомогательной ленты способна выполнять как чтение, так и запись, но эти операции связаны с перемещением головки определенным образом:

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

  • при чтении символ, находящийся под головкой считывается с ленты, а затем головка сдвигается на одну позицию вниз, т.о. головка всегда установлена против последнего записанного символа. Позицию, находящуюся в рассматриваемый момент времени под головкой, называют вершиной магазина.

Определение. Магазинный автомат М определяется следующей совокупностью семи объектов: M={S, P, Z, , sо, hо, F}, где

S - алфавит состояний,

P - входной алфавит,

Z - алфавит магазинных символов, записываемых на вспомогательную ленту,

 - функция переходов,  : {S x P  {} x H S x H*, если М-автомат - детерминированный, и  : {S x P  {} x H 2S x H*, если М-автомат - недетерминированный.

sо - начальное состояние, sо S.

hо- маркер дна, он всегда записывается на дно магазина , hо H.

F - множество конечных состояний. F является подмножеством S.

Функция отображает тройки (pi , sj , hk) в пары (sr , ) , где  H* и hk - символ в вершине магазина, для детерминированного автомата или в множество таких пар для недетерминированного автомата.

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

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

  1. функция переходов с пустым символом в качестве входного символа:

0(s, , h) = (s', ), которая, независимо от того, какой символ находится под читающей головкой входной ленты, предписывает прочитать символ h из вершины магазина, изменить состояние автомата на s' и записать цепочку  в магазин.

2) функция переходов с определенным входным символом:

 (s, a, h) = (s', ), которая предписывает прочитать входной символ а, изменить состояние автомата на s’ и заменить верхний символ магазина h цепочкой .

Работа магазинного автомата

Чтобы описать, как работает автомат, введем понятие конфигурации.

Определение. Конфигурацией автомата М называют тройку (s, , )S x P* x H*, где

s - текущее состояние управляющего устройства,

 - неиспользованная часть входной цепочки P*, самый левый символ этой цепочки находится под головкой. Если a =  , то считается, что вся входная цепочка прочитана.

 - цепочка, записанная в магазине, H*, самый правый символ цепочки считается вершиной магазина. Если =, то магазин пуст.

Работа автомата может быть представлена как смена конфигураций. Один такт работы автомата заключается в определении новой конфигурации по заданной. Это записывается так:

(s, a, h ) ├ (s', , )

Такая смена конфигураций возможна, если функция (s, a, h ) (или (s, , h)) определена и имеет значение (s', ). При этом предполагается, что автомат

  • читает символ a, находящийся под головкой. Или не читает ничего, в случае входного символа .

  • определяет новое состояние s'

  • читает символ h, находящийся в вершине магазина и

  • записывает цепочку  в магазин вместо символа h. Если  = , то верхний символ оказывается удаленным из магазина.

Таким образом, могут быть три случая при работе автомата:

  • (s, a, h) определена и выполняется такт работы,

  • (s, a, h) не определена, но определена функция (s, , h) и выполняется пустой такт (без чтения входной информации).

  • функции (s, a, h) и (s, , h) не определены, в этом случае дальнейшая работа автомата невозможна.

Начальной конфигурацией называется конфигурация (s0, , h0), где s0 - начальное состояние,  - исходная цепочка, h0 - маркер дна магазина.

Заключительная конфигурация – (s, , ), где s принадлежит множеству заключительных состояний F.

Для обозначения последовательности сменяющих друг друга конфигураций условимся использовать знак *. Таким образом последовательность

( s1, 1, 1 ) ( s2, 2, 2) ... ( sn, n,n )

записывается в сокращенном виде как:

(s1, 1, 1 ) * ( sn, n, n ).

Язык, допускаемый магазинным автоматом

Определение. Цепочка  называется допустимой для автомата М, если существует последовательность конфигураций, в которой первая конфигурация является начальной c цепочкой , а последняя – заключительной. (sо, , hо) * (s1,  , ) , где s1  F .

Определение. Множество цепочек, допускаемых автоматом М, называется языком, допускаемым или определяемым автоматом М, и обозначается L(М).

L(М)= { | ( sо, , hо ) ├* ( s', , ) и s' F }

Чтобы лучше представить себе работу магазинного автомата, рассмотрим два примера. Пусть задан магазинный автомат М1 в следующем виде:

М1: P = {a , b}; S = {s0 , s1 , s2}; Z = {h0 , a}; F = {s0};

 (s0 , a , h0) = (s1 , h0a),

 (s1 , a , a) = (s1 , aa),

 (s1 , b , a) = (s2 , ),

 (s2 , b , a) = (s2 , ),

 (s2 ,  , h0) = (s0 , ).

Этот автомат является детерминированным, поскольку каждому набору аргументов соответствует единственное значение функции. Работу автомата при распознавании входной цепочки aabb можно представить в виде последовательности конфигураций:

(s0,aabb,h0) (s1,abb,h0a) (s1,bb,h0aa) (s2,b,h0a) (s2,,h0) (s0,,) .

Нетрудно проверить, что при задании входной цепочки aabbb автомат не сможет закончить работу. Следовательно, эта цепочка не принадлежит языку, допускаемому автоматом M1.

Магазинный автомат М2, заданный следующим описанием:

М2: P = {a , b}; S = {s0, s1 , s2}; Z = {h0, a , b}; F = {s2};

(1)  (s0 , a , h0) = (s0, h0a),

(2)  (s0 , b , h0) = (s0, h0b),

(3)  (s0 , a , a) = {(s0,aa) , (s1 , )},

(4)  (s0 , b , a) = (s0,ab),

(5)  (s0 , a , b) = (s0 , ba),

(6)  (s0 , b , b) = {(s0 , bb) , (s1 , )},

(7)  (s1 , a , a) = (s1, ),

(8)  (s1 , b , b) = (s1, ),

(9)  (s2 ,  , h0) = (s2 , ),

является недетерминированным автоматом, поскольку одному и тому же набору аргументов, например (sо , a, a), соответствуют два значения функции. Работу автомата рассмотрим для входной цепочки abba. Если использовать последовательность команд (1),(4),(6.1),(5), то получим последовательность конфигураций:

(s0,abba,h0)

├ (s0,bba,h0a), (1)

├ (s0,ba,h0ab), (4)

├ (s0,a,h0abb), (6.1)

├ (s0,,h0abba). (5)

которая показывает, что дальнейшая работа невозможна, т.к. входная цепочка прочитана и переход (s0,,h0abba) не определен. Если же использовать последовательность команд (1),(4),(6.2),(3),(9), то получим заключительную конфигурацию:

(s0,abba,h0)

├ (s0,bba,h0a), (1)

├ (s0,ba,h0ab), (4)

├ (s1,a,h0a), (6.2)

├ (s1,,h0), (3)

├ (s2,,) . (9).

Т.о. можно сделать вывод о том, что цепочка abba допускается автоматом М2.

Построение магазинного автомата

Пусть задана грамматика G = {VN, VT, I, P}. Определим компоненты автомата М следующим образом:

S = {s0}, P = VT, Z = VN VT {h0} , F = {s0},

в качестве начального состояния автомата примем s0 и построим функцию переходов так:

  1. Для всех A VN таких, что встречаются в левой части правил A  , построим команды вида:

0(s0, , A) = (s0, R ),

где R – реверс цепочки .

  1. Для всех a VT построим команды вида

( s0, a, a) = ( s0, )

  1. Для перехода в конечное состояние построим команду

( s0, , h0) = ( s0, )

  1. Начальную конфигурацию автомата определим в виде:

( s0, , h0 I),

где исходная цепочка, записанная на входной ленте.

Автомат, построенный по приведенным выше правилам, работает следующим образом. Если в вершине магазина находится терминал, и символ, читаемый с входной ленты, совпадает с ним, то по команде типа (2) терминал удаляется из магазина, а входная головка сдвигается. Если же в вершине магазина находится нетерминал, то выполняется команда типа (1), которая вместо терминала записывает в магазин цепочку, представляющую собой правую часть правила грамматики. Следовательно, автомат, последовательно заменяя нетерминалы, появляющиеся в вершине магазина, строит в магазине левый вывод входной цепочки, удаляя полученные терминальные символы, совпадающие с символами входной цепочки. Это означает, что каждая цепочка, которая может быть получена с помощью левого вывода в грамматике G, допускается построенным автоматом М.

Пример построения автомата

Процедуру построения автомата рассмотрим на примере грамматики с правилами:

E E + T | T

T T * F | F

F ( E ) | a

Для искомого автомата имеем:

P = {a, +, *, ), ( }, Z = {E, T, F, a, +, *) , h0, ( }, S = {s0 }, F = {s0}

Для всех правил грамматики строим команды типа (1):

  1. 0 (s0 ,  , E) = {(s0 , T+E) ; (s0 , T)},

  2. 0 (s0 ,  , T) = {(s0 , F*T) ; (s0 , F)},

  3. 0 (s0 ,  , F) = {(s0 , (E) ) ; (s0 , a)},

Для всех терминальных символов строим команды типа (2):

  1.  ( s0, a, a ) = ( s0,  ),

  2.  ( s0 , + , + ) = (s0 ,  ),

  3.  ( s0 , * , * ) = (s0 ,  ),

  4.  ( s0 , ( , ( ) = (s0 ,  ),

  5.  ( s0 , ) , ) ) = (s0 ,  ),

Для перехода в конечное состояние построим команду:

(9)  (s0 ,  , h0) = ( s0 ,  ).