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

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

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