Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / вар2 / LECS5

.DOC
Скачиваний:
17
Добавлен:
17.04.2013
Размер:
410.11 Кб
Скачать

1.3.2. Магазинные автоматы

Если конечные автоматы дают возможность построить распознаватель для языка, порожденного праволинейной грамматикой, следующий вид автоматов нацелен на распознавание контекстно-свободных языков. С повышением сложности рассматриваемого языка повышается и сложность автомата. Магазинный автомат - это односторонний в общем случае недетерминированный распознаватель, у которого в качестве вспомогательной памяти используется магазин (рис.1.16). Магазин можно представить в виде строки символов, правый символ которой называют дном магазина, а левый вершиной магазина. Из строки можно считать в определенный момент времени только символ вершины магазина. Причем при считывании символа он удаляется из магазина и вершиной магазина становится следующий (правый) по порядку символ. При записи символов в магазин они помещается слева от вершины магазина и в дальнейшем последний из них рассматривается как новая вершина магазина.

Магазинный автомат или автомат с магазинной памятью (МП - автомат) - это семерка

, где

Q - конечное множество состояний;

T - конечный входной алфавит;

M - конечный алфавит магазинных символов (стековый алфавит);

- начальное состояние автомата;

- начальный символ магазина;

- конечное множество заключительных состояний;

t - функция переходов

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

Под конфигурацией магазинного автомата понимают тройку

  • - содержимое магазина,

  • - текущее состояние магазинного автомата,

  • - часть исходной строки на входной ленте,

начинающаяся с текущего символа (на который указывает считывающая головка) и кончающаяся последним символом строки. Конфигурацию можно также записать в виде или , или , где - символ на вершине магазина. Начальная конфигурация в этом случае записывается в виде , заключительная конфигурация - , где и . Для записи перехода автомата из одной конфигурации в другую применяется бинарное отношение ├, определенное на конфигурациях автомата. Будем писать

, где

если пара и . Символ считается допущенным, если автомат читает его из входной строки и переходит из конфигурации в конфигурацию . При этом читающая головка перемещается на один символ вправо и символ m в вершине магазина заменяется строкой магазинных символов b. Если , то происходит сокращение содержимого магазина на символ m, при этом в вершине магазина будет содержаться следующий магазинный символ.

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

,

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

,

где . Если конечное состояние магазина совпадает с начальным , говорят, что строка допускается автоматом A с опустошенным магазином [4].

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

Язык T(A), допускаемый магазинным автоматом, представляет собой множество строк, определяемых формулой

и

Рассмотренный магазинный автомат позволяет на каждом шаге, либо удалить символ в вершине магазина, либо заменить его строкой магазинных символов конечной длины. Это ограничение снято при определении расширенного магазинного автомата [1], который позволяет заменять строки конечной длины , прилегающие к вершине магазина. Данный магазинный автомат является недетерминированным, поскольку или имеют множество значений (которое может содержать и более одного элемента) и в общем не существует правила для выбора единственного значения из множества. Множество может быть и пустым, тогда автомат не может допускать следующие входные символы.

Описанные выше магазинные автоматы могут применяться в качестве недетерминированных распознавателей контекстно-свободных языков. Доказано [1,4], что каждой КС грамматике соответствует магазинный автомат A, такой, что . Недетерминированный магазинный автомат в виде нисходящего распознавателя строится следующим образом. Определим множества, описывающие автомат A.

- множество состояний;

T - входной алфавит состоит из терминальных символов;

- алфавит магазинных символов содержит терминальные и нетерминальные символы;

- начальное состояние;

- начальный символ магазина;

- множество конечных состояний.

Функция перехода t определяется следующим образом:

  • если множество продукций P содержит правило , то содержит для всех продукций с нетерминалом A в левой части;

  • для .

Построим магазинный автомат для приведенной в разделе 1.2.2 грамматики с продукциями

Автомат будет представлять семерку , функция перехода которого имеет вид:

для всех

При распознавании строки , дерево вывода которой представлено на рис. 1.5 автомат может пройти по следующей последовательности конфигураций.

Изобразим в виде графа состояний недетерминированный автомат, моделирующий при распознавании левые выводы строк. Множество V построим таким образом, что каждой вершине соответствует нетерминальный символ. Дополним это множество специальной вершиной для допуска входных символов строки, обозначим ее g ( эта вершина является конечной). Тогда множество .

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

Смену конфигураций при проходе по ребру будем записывать на нем в виде тройки , где a – допускаемый символ входной строки, b - удаляемый из магазина символ (для расширенного автомата строка символов), c - помещаемая в магазин строка символов. Разметка ребер для приведенных шагов автомата будет выглядеть следующим образом.

,A,Bw или , A,Bw

,A,  ,A,

,A,aw ,A,aw

a,a,

,A,A ,A,A

Для рассмотренного выше магазинного автомата граф состояний представлен на рис. 1.17.

Как отмечалось выше можно построить расширенный МП автомат, моделирующий правый вывод строки . Такой автомат строится следующим образом [1]:

- множество состояний;

T - входной алфавит;

- алфавит магазинных символов;

q - начальное состояние автомата;

# - начальный символ магазина;

{r} - множество заключительных состояний.

Функция перехода t:

содержит , если в грамматике существует продукция ;

для всех ;

.

Для задания автомата определим граф , множество вершин которого . Для функции в графе задается ребро , при переходе по которому выполняется шаг , .

Здесь и далее при записи конфигураций автомата строка в магазине записывается в обратном порядке, т.е. дно магазина расположено на левом крае строки, а вершина на правом. Если , то задается ребро с шагом автомата .

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

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

для всех

Граф состояний для данного автомата приведен на рис. 1.18.

Строка может распознаваться автоматом в следующем порядке.

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

Детерминированность автомата, возможность его построения зависит от типа используемой контекстно-свободной грамматики. В теории выделены два типа грамматик LL(k) и LR(k), для которых можно построить детерминированные магазинные автоматы, работающие по принципам как сверху-вниз, так и снизу-вверх. Ограничения, которые наложены на КС-грамматики данных классов, рассматривались выше. Известны методы построения детерминированных автоматов LL(k) и LR(k) - грамматик. Они достаточно подробно рассмотрены в литературе [1,6,7] и останавливаться на них специально мы не будем. Однако эти грамматики и способ построения детерминированных автоматов будут внимательно изучены в свете предлагаемого в книге подхода.

Соседние файлы в папке вар2