Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТВП.Ответы.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
308.05 Кб
Скачать

8.Магазинные преобразователи. Определение магазинного преобразователя. Перевод, определяемый преобразователем.

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

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

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

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

(s0, c, h0I, $) |--* (s', $', $, d).

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

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

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

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

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

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

9. Описание перевода или трансляции. Синтаксически – управляемые (су) – схемы. Перевод, определяемый су – схемой. Построение простой су – схемы.

В общем случае перевод или трансляцию можно представить как соответствие между словами алфавита Р и алфавита W. Если цепочка a О P* , цепочка b О W* , они называются соответственно входной и выходной цепочками.

Если заданы входной алфавит P и выходной алфавит W, то переводом с языка Lвх, состоящего из цепочек множества P*, на язык Lвых, состоящий из цепочек множества W*, называется множество C пар цепочек (a ,b ) таких, что a О Lвх и b О Lвых.

C={(a ,b ) | a О Lвх и b О Lвых}.

Если входной и выходной алфавиты заданы в виде: P = {a,b,c,d} и W = {00,01,10,11}, и если входной и выходной языки содержат цепочки длиной l < 3, то соответствие между

входными и выходными цепочками может быть описано, например, в виде перевода.

С = {(a,00),(b,01),(c,10),(d,11),(ab,0001),(ac,0010),

(cd,0011),(bc,0110),(bd,0111),(cd,1011) }.

Конечные переводы с небольшим числом элементов можно задавать в виде перечислений. Однако, для задания больших конечных переводов и бесконечных переводов нужны такие

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

Примером такого задания может служить перевод, определяющий для каждой входной цепочки a ее зеркальное отображение a ". Если входной и выходной алфавиты состоят из двух символов - {0,1}, то правила построения такого перевода имеют вид:

входные цепочки выходные цепочеки

1) <I> ╝ 0<I>, <I> ╝ <I>0

2) <I> ╝ 1<I>, <I> ╝ <I>1

3) <I> ╝ $, <I> ╝ $

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

(<I>,<I>) ==> (0<I>,<I>0) ==> (00<I>,<I>00) ==> (001<I>,<I>100) ==> (001,100)

При таком построении существенное значение имеет заданное соответствие между правилами построения входных и выходных цепочек.

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

Схемой синтаксически управляемого перевода (СУ-схемой) называется совокупность пяти объектов:

T = {Va,Vтвх,Vтвых,Q,<I>}, где Va - множество нетерминальных символов,

Vтвх- множество терминальных символов, используемых для построения входных цепочек,

Vтвых- множество терминальных символов, используемых для построения выходных цепочек,

<I>-начальный символ, <I> О Va,

Q - множество правил вида <A> ╝ a ,b,

где <A> принадлежит Va, a О(Va U Vтвх)*, b О (Va U Vтвых)* и нетерминалы, входящие в цепочку b образуют перестановку нетерминалов цепочки a .

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

Если T = {Va,Vтвх,Vтвых,Q,I} СУ-схема, то грамматика

Г = {Va,Vтвх,R, I},

где R = {<A> ╝ a |<A> ╝ a ,b принадлежит Q},

называется входной грамматикой СУ-схемы Т, а грамматика

Г'={Va,Vтвых,R',I},

где R' = {<A> ╝ b | <A> ╝ a ,b принадлежит Q}

называется выходной грамматикой СУ-схемы Т.

С помощью СУ - схемы можно строить пары соответствующих цепочек. Такое построение называется выводом СУ -схемы, а получаемые пары цепочек - выводимыми парами.

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

1) (<I>,<I>) - выводимая пара,

2) если (a <A>b ,a '<A>b ') - выводимая пара и выделенные нетерминалы соответствуют друг другу и в Q существует правило <A>╝g ,g ', то

(ag b , a 'g 'b ') является выводимой парой.

Это записывается так:

(a <A>b ,a '<A>b ') ==> (ag b ,a 'g 'b ').

Последовательность выводимых пар обозначим как прежде:

(a <A>b ,a '<A>b ') ==>* (wm p ,w 'm 'p ').

С помощью понятия выводимая пара можно определить перевод, задаваемый СУ - схемой.

Переводом С(T), определяемым СУ-схемой Т назовем множество пар, состоящих из входной и выходной цепочек, выводимых из пары, включающей два начальных символа.

С(T) = {(a ,b ) | (<I>,<I>) ==>* (a ,b ) и a О Vтвх*, b О Vтвых*}

В качестве примера рассмотрим СУ-схему, заданную следующим образом:

T4.1: Va = {<I>,<A>}, Vтвх = {0,1},Vтвых = {a,b}

Q = { <I> ╝ 0<A><I>, <I><A>a;

<A> ╝ 0<I><A>, <A><I>a;

<I> ╝ 1, b;

<A> ╝ 1, b

}.

Эта схема определяет перевод, входные слова которого состоят из нулей и единиц, а выходные из букв а,b. Нулям входной цепочки должны соответствовать буквы a, а единицам - буквы b выходной цепочки, причем расположение символов в выходной цепочке должно быть зеркальным по отношению к соответствующим символам входной цепочки. Вывод в рассматриваемой СУ - схеме может, например, иметь вид:

(<I>,<I>) ==> (0<A><I>,<I><A>a) ==> (0<A>0<A><I>,<I><A>a<A>a) ==>

==>(0<A>00<I><A><I>,<I><A><I>aa<A>a)==>*==>*(0100111,bbbaaba)

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

СУ-схема Т = {Va,Vтвх,Vтвых,Q,I} называется простой, если для каждого правила <A>╝a ,b из Q соответствующих друг другу вхождения нетерминалов встречаются в a и b в одном и том же порядке.

Перевод называется простым СУ-переводом, если он определяется простой СУ-схемой.

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

состоящие только из нетерминалов, оказываются одинаковыми во входной и выходной грамматиках.

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

Г4. 1: Vт = {x,+,(.)} Va = {A,B.C}

R = {<A> ╝ x,

<A> ╝ (<B>),

<B> ╝ <A><C>,

<C> ╝ +<A><C>,

<C> ╝ $

}

Учитывая, что выходные выражения не должны содержать скобок, находим, что Vтвых = {x',+'}.

Первое правило грамматики содержит один входной терминал, поэтому правило СУ - схемы можем записать в виде:

<A> ╝ x , x' . Третье правило грамматики не содержит терминалов, поэтому получаем:

<B> ╝ <A><C>,<A><C> . Пятое правило является аннулирующим, поэтому оно должно сохраниться в выходной грамматике

<C> ╝ $ , $ . Второе правило грамматики содержит скобки, которые, согласно правилам построения, должны отсутствовать в постфиксной польской записи, поэтому имеем:

<A> ╝ (<B>),<B> . При построении правила СУ - схемы по четвертому правилу грамматики следует учесть, что знак сложения в постфиксной записи должен следовать за вторым опреандом, который вводится в выражение нетерминалом А, следовательно получаем правило СУ - схемы в виде:

<A> ╝ +<A><C>, <A>+'<C> . Объединяя построенные правила, находим множество правил искомой СУ - схемы:

Т4.4: Q = {<A> ╝ x,x',

<A> ╝ (<B>),<B>,

<B> ╝ <A><C>, <A><C>,

<C> ╝ +<A><C>, <A>+'<C>,

<C> ╝ $, $}. Чтобы в первом приближении убедиться в правильности построения СУ - схемы, выполним вывод входной цепочки ((x+x)+x) и соответствующей ей выходной цепочки, используя построенные правила.

(<A>,<A>) ==> ((<B>),<B>) ==> ((<A><C>),<A><C>) ==> (((<B>)<C>,<B><C>) ==>

(((<A><C>)<C>),<A><C><C>) ==>(((x<C>)<C>),x<C><C>) ==> (((x+<A><C>),x'x'+'<C><C>) ==>

(((x+x+<C>)<C>), x'x'+'<C><C>) ==> (((x+x)<C>),x'x'+'<C>) ==> (((x+x)+<A><C>),x'x'+'<A>+'<C>)

==> (((x+x)+x<C>),x'x'+'x'+'<C>) ==> (((x+x)+x),x'x'+'x'+').

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