Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП. / готовый курсовик.doc
Скачиваний:
36
Добавлен:
01.05.2014
Размер:
1.2 Mб
Скачать

4.3. Разработка дмп-процессора, порожденного исходной грамматикой

Мы описали исходную LL(1)-грамматику.

КС-грамматикаG=(N,∑,P,S)являетсяLL(1)-грамматикой тогда и только тогда, когда

для двух различных правил A→β иA→γиз множества Р пересечение

FIRST(βα)∩FIRST(γα) пустое при всех таких ωAα, чтоS=jωAα.

Таким образом для LL(1)-грамматики правило для замены нетерминала однозначно определяется текущим входным символом.

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

4.3.1 Алгоритм разбора для ll(1)-грамматик

Разбор для такой грамматики можно осуществить с помощью так называемого «1-предсказывающего» алгоритма разбора, который использует входную ленту, магазин и выходную ленту. При чтении входной цепочки, находящейся на входной ленте, входная головка может заглядывать вперед на один символ.

Магазин содержит цепочку Xα┴ , Xα - цепочка магазинных символов, а символ ┴ – специальный символ, называемый маркером дна магазина. Если верхним символом магазина является маркер дна, то магазин пуст. Выходная лента содержит цепочку номеров правил π, представляющую собой текущее состояние левого разбора.

Конфигурация такого ДМП-процессора будем представлять в виде (x, Xα┴, π) , где x – неиспользованная часть входной цепочки, Xα - цепочка в магазине, а π –цепочка на выходной ленте.

Работой алгоритма управляет управляющая таблица.

4.3.2 Взаимодействие дмп-процессоров

Поскольку перевод описан шестью порождающими грамматиками, то он должен быть реализован при помощи шести взаимосвязанных ДМП-процессоров. Необходимо конкретизировать вызов того или иного ДМП-процессора при работе с магазином. Для этого выделим два типа ДМП-процессоров.

Вызывающий ДМП-процессор.

В основе этого процессора лежит LL(1)-грамматика, в которой основной символ грамматики – специальный терминальный символ. Когда этот символ находится наверху магазина, данный процессор должен выполнить переход к вызываемому процессору.

Вызываемый ДМП-процессор.

Поскольку каждый процессор должен работать со своим магазином, то в глобальный магазин вталкивается символ “дно магазина” и анализ начинается так, как если бы магазин был пуст. Когда магазин вновь становится пуст, то из него удаляется маркер дна магазина( входная головка остается на месте) и происходит возврат к вызвавшему его ДМП-процессору.

Таким образом, состояние «Допуск» может возникнуть только единожды, когда исходная входная цепочка просмотрена, а магазин пуст.

4.3.3 Алгоритм работы дмп-процессора

  1. Затолкнуть в магазин маркер «дно стека»

  2. Затолкнуть в магазин начальный символ основной подграмматики P

  3. while true do

распознать входной символ (i)

распознать символ магазина (j)

if (j=0) then {операционный символ}

вызов соответствующей операционному символу функции,

удалить символ из магазина

else

case команда (i,j) of

«Замена»:

верхний символ магазина меняется на цепочку по правилу

(код команды(i,j)) и в выходную цепочку дописывается номер правила i

входная головка при этом не сдвигается

«Выброс»:

удаляется символ из магазина,

входная головка сдвигается на 1 символ вправо

«Ошибка»:

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

(код ошибки – код команды(i,j))

«Вызов»:

поместить маркер дна стека после первого элемента в зависимости от

кода команды(i,j), вызвать функцию, соответствующую

ДМП-процессору

«Свёртка»:

удалить верхний символ «дно стека» , выйти из функции

ДМП-процессору

«Допуск»:

работа алгоритма прекращается и выходная цепочка π является левым

разбором входной цепочки

4) end