Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lects_1.pdf
Скачиваний:
30
Добавлен:
09.06.2015
Размер:
732 Кб
Скачать
☆

4.9. Магазинные преобразователи

4.9.1. Определение магазинного преобразователя

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

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

4.9.2. Описание работы магазинного преобразователя

Определение:

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

Мп={P, S, s0, H, h0, F, W, ϕ},

где P - входной алфавит, состоящий из символов, записываемых на входную ленту; W - выходной алфавит, содержащий символы, записываемые на выходную ленту; H - магазинный алфавит, содержащий символы, записываемые и считываемые из магазина;

h0 - маркер дна магазина, h0 H;

S - множество состояний преобразователя; s0- начальное состояние из множества S;

50

F - множество конечных состояний, представляющих собой подмножество S;

ϕ - функция переходов преобразователя, которая задает отображение,

ϕ: Sx{P {ε} x H S x H* x W*.

Она может быть записана в функциональном виде:

ϕ(s, p, h) = (s', β, γ),

где h H, p P, β H*, γ W* и s, s' S.

Определим конфигурацию Мп как четверку

(s, aχ, ρh, δ),

где aχ P*, ρh H* и δ W*.

Если такту работы преобразователя соответствует конфигурация (s, aχ, ρh , δ) и опреде-

лена функция переходов ϕ(s, a, h) = (s', β, γ), то происходит смена конфигурации, которая выражается следующим образом:

(s, aχ, ρh, δ) |-- (s', χ, ρβ, δγ).

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

Начальной конфигурации соответствует заданная входная цепочка χ на ленте, цепочка h0<I> в магазине, начальное состояние s0 и пустая цепочка на выходной ленте, т.е.

(s0, χ, h0I, $).

Конечной или заключительной конфигурацией является (sk, $, $, δ), где sk - одно из за-

ключительных состояний из множества F, а δ - выходная цепочка.

4.3.3. Перевод, определяемый преобразователем

Определение. Цепочка δ называется выходом для цепочки χ, если существует последовательность конфигураций, первой из которых является начальная конфигурация с за-

данной входной цепочкой χ, а последней – заключительная конфигурация с выходной цепочкой δ:

(s0, χ, h0<I>, $) |--* (s', $, $, δ).

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

51

почек.

D(Mп) = {(x, y) | (s0, χ, h0, $) |--* (s', $, $, y) & s' F}

Для каждой простой СУ-схемы перевода Т = { Vтвх, Vтвых, VA, Q, <I>} можно построить такой магазинный преобразователь Мп, что D(Т) = D(Мп).

Данное утверждение не гарантирует получение детерминированного преобразователя. Однако для каждой простой СУ - схемы перевода Т, входная грамматика которой принадлежит классу LL(1) - грамматик, можно построить такой детерминированный магазинный преобразователь Мп, что перевод, определяемый этим преобразователем, совпадает с переводом, задаваемым СУ - схемой Т.

4.9.4. Построение преобразователя

В начале по заданной СУ - схеме создается транслирующая грамматика Г. Это всегда можно сделать, поскольку заданная СУ - схема должна быть простой. Если входная грамматика заданной СУ - схемы относится к классу LL(1) -грамматик, то и входная грамматика транслирующей грамматики также будет относиться к этому классу. Поскольку искомый преобразователь должен в процессе формирования выхода осуществлять распознавание входной цепочки, он строится на основе транслирующей грамматики с использованием правил построения распознавателя.

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

Определим компоненты Мп следующим образом:

S = {s0}, P = VTВХ, H = VTВХ VA {h0} VTВЫХ, F = {s0}, W = VTВЫХ

Определим функции переходов Мп:

(1) Для всех правил вида <A> → bα, где b Vтвх и α (Vтвх Vтвых VA)*, строятся команды:

52

ϕ( s0, b, <A>)=( s0, α', $ ),

где α' - зеркальное отображение цепочки α.

(2) Для всех правил вида <A> → <B>α, где B VA и α (Vтвх Vтвых VA)*, строятся команды:

ϕ*( s0, u, <A> ) = ( s0, α'<B> , $ ),

где u ВЫБОР(<A> → <B>αвх) и αвх - цепочка, полученная из α путем удаления из нее всех выходных символов.

(3) Для всех правил вида <A> → $ строятся команды:

ϕ*( s0, u, <A> ) = ( s0, $, $ ),

где u ВЫБОР(<A> → $).

(4) Для всех символов b, принадлежащих, Vтвх, стоящих не только на первом месте в правой части правил транслирующей грамматики, т.е. символов, заносимых в магазин, строятся команды:

ϕ( s0, b, b ) = ( s0, $, $ ).

(5) Для всех выходных символов {u}, таких что u Vтвых, строятся команды:

ϕ*( s0, z, {u} ) = ( s0, $, u ),

где z Vтвх {ε}

Т.о. команды строятся для сочетаний {u}z, таких, что z может следовать за {u} в цепочках, выводимых в заданной грамматике.

(6) Заключительная команда имеет вид:

ϕ*( s0, ε, h0 ) = ( s0, $, $ ).

4.9.5. Пример построения преобразователя

Применение правил построения команд преобразователя рассмотрим на примере транслирующей грамматики Г, которая описывает перевод префиксных выражений, состоящих из идентификатора a и знаков + и *, в постфиксные польские выражения. Эта грамматика имеет следующую схему:

Г 4. 1 : R = {<E> +<E><E>{+}, <E> *<E><E>{*}, <E> a{a}}

53

Используя правило построения команд преобразователя (1) для правил грамматики, начинающихся входным терминальным символом, получаем команды преобразователя Мп1:

(1)ϕ(s0, +, <E>) = (s0, {+}<E><E>, $),

(2)ϕ(s0, *, <E>) = (s0, {*}<E><E>, $),

(3)ϕ(s0, a, <E>) = (s0, {a}, $)

Правила построения команд вида (2),(3),(4) к заданной грамматике неприменимы, поэтому с помощью правил вида (5) построим команды, обеспечивающие передачу выходных символов на выход. Эти команды имеют вид:

(4)

ϕ*(s0, +, {+}) = (s0, $, +),

(5)

ϕ*(s0, *, {+}) = (s0, $, +),

(6)

ϕ*(s0, a, {+}) = (s0, $, +),

(7)

ϕ*(s0, ε, {+}) = (s0, $, +),

(8)

ϕ*(s0, *, {*}) = (s0, $, *),

(9)

ϕ*(s0, +, {*}) = (s0, $, *),

(10)

ϕ*(s0, {a}, *) = (s0, $, *),

(11)

ϕ*(s0, ε, {*}) = (s0, $, *),

(12)

ϕ*(s0, a, {a}) = (s0, $, a),

(13)

ϕ*(s0, +{a}) = (s0, $, a),

(14)

ϕ*(s0, *, {a}) = (s0, $, a),

(15)

ϕ*(s0, ε, {a}) = (s0, $, a)

Для перехода в заключительное состояние s1 в соответствии с правилом (6) построим команду:

(16) ϕ*(s0, ε, h0) = (s1, $, $)

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

(s0, +a*aa, h0<E>, $) |-- (s0, a*aa, h0{+}<E><E>, $) |-- (s0, *aa, h0{+}<E>{a}, $) |--

(s0, *aa, h0{+}<E>, a) |--

(s0, aa, h0{+}{*}<E><E>, a) |-- (s0, a, h0{+}{*}<E>{a}, a) |-- (s0, a, h0{+}{*}<E>, aa) |-- (s0, $, h0{+}{*}{a}, aa) |--

(s0, $, h0{+}{*}, aaa) |-- (s0, $, h0{+}, aaa*) |--

54

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]