Опубликован: 06.08.2007 | Уровень: профессионал | Доступ: платный

Лекция 6: Элементы теории перевода

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Аннотация: В данной лекции рассматривается теория перевода. Рассматриваются несколько формализмов для определения переводов: преобразователи с магазинной памятью, схемы синтаксически управляемого перевода и атрибутные грамматики. Приведены основные понятия, примеры решения задач и доказательства теорем.

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

Определение. Пусть T - входной алфавит, а \Pi - выходной алфавит. Переводом (или трансляцией) с языка L_1 \subseteq T^* на язык L_2 \subseteq \Pi^* называется отображение \tau  : L_{1} \to  L_{2}. Если y = \tau  (x), то цепочка y называется выходом для цепочки x.

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

Преобразователи с магазинной памятью

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

Преобразователем с магазинной памятью (МП-преоб- разователем) называется восьмерка P = (Q, T, \Gamma, \Pi, D, q_0,
Z_0, F), где все символы имеют тот же смысл, что и в определении МП-автомата, за исключением того, что \Pi - конечный выходной алфавит, а D - отображение множества Q x (T \cup  \{ e\} ) \times \Gamma в множество конечных подмножеств множества Q \times \Gamma^* \times \Pi^*.

Определим конфигурацию преобразователя P как четверку (q, x, u, y), где q \in Q - состояние, x \in T^* - цепочка на входной ленте, u \in \Gamma^* - содержимое магазина, y \in \Pi^* - цепочка на выходной ленте, выданная вплоть до настоящего момента.

Если множество D(q, a, Z) содержит элемент (r, u, z), то будем писать (q, ax, Zw, y) \vdash^* (r, x, uw, yz) для любых x \in T^*, w \in \Gamma^* и y \in \Pi^*: Рефлексивно - транзитивное замыкание отношения \vdash будем обозначать \vdash^*.

Цепочку y назовем выходом для x, если (q_0, x, Z_0, e) \vdash^* (q, e, u, y) для некоторых q in F и u \in \Gamma^*. Переводом (или трансляцией), определяемым МП-преобразователем P (обозначается \tau(P) ), назовем множество

\{(x,y) \mid (q_0,x,Z_0,e) \vdash^* (q,e,u,y)\} \text{ для некоторых } q \in F \text{ и } u \in \Gamma^*

Будем говорить, что МП-преобразователь P является детерминированным (ДМП-преобразователем), если выполняются следующие условия:

  1. для всех q \in Q, a \in T \cup \{e\} и Z \in \Gamma множество D(q, a, Z) содержит не более одного элемента,
  2. если D(q, e, Z) \ne  \varnothing, то D(q, a, Z) = \varnothing для всех a \in T.

Пример 5.1. Рассмотрим перевод \tau, отображающий каждую цепочку x \in \{a, b\}^* \$, в которой число вхождений символа a равно числу вхождений символа b, в цепочку y = (ab)n, где n - число вхождений a или b в цепочку x. Например, \tau  (abbaab$) = ababab.

Этот перевод может быть реализован ДМП-преобразователем P = ({q0, qf}, {a, b, $}, {Z, a, b}, {a, b}, D, q0, Z, {qf}) c функцией переходов:

\begin{align*}
& D(q_0, X, Z) = \{(q_0, XZ, e)\}, X \in \{a, b\}, \\
& D(q_0, \$, Z) = \{(q_f, Z, e)\}, \\
& D(q_0, X, X) = \{(q_0, XX, e)\}, X \in \{a, b\}, \\
& D(q_0, X, Y ) = \{(q_0, e, ab)\}, X \in \{a, b\}, Y \in \{a, b\}, X \neq Y .
\end{align*}

Синтаксически управляемый перевод

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

Схемы синтаксически управляемого перевода

Определение. Cхемой синтаксически управляемого перевода (или трансляции, сокращенно: СУ-схемой) называется пятерка Tr = (N, T, \Pi , R, S), где

(1) N - конечное множество нетерминальных символов;

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

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

R - конечное множество правил перевода вида

A \rightarrow u, v

где u \in (N \cup T)^*, v \in (N \cup \Pi)^* и вхождения нетерминалов в цепочку v образуют перестановку вхождений нетерминалов в цепочку u, так что каждому вхождению нетерминала B в цепочку u соответствует некоторое вхождение этого же нетерминала в цепочку v ; если нетерминал B встречается более одного раза, для указания соответствия используются верхние целочисленные индексы;

(5) S - начальный символ, выделенный нетерминал из N.

Определим выводимую пару в схеме Tr следующим образом:

(1) (S, S) - выводимая пара, в которой символы S соответствуют друг другу;

(2) если (xAy; x'Ay') - выводимая пара, в цепочках которой вхождения A соответствуют друг другу, и A -> u, v - правило из R, то (xuy; x'vy') - выводимая пара. Для обозначения такого вывода одной пары из другой будем пользоваться обозначением \Rightarrow: (xAy, x'Ay') => (xuy, x'vy'). Рефлексивно-транзитивное замыкание отношение \Rightarrow обозначим =>*.

Переводом \tau  (Tr), определяемым СУ-схемой Tr, назовем множество пар

\{(x, y) \mid (S, S) \Rightarrow^* (x, y), \; x \in T^*, y \in \Pi^*}

Если через P обозначить множество входных правил вывода всех правил перевода, то G = (N, T, P, S) будет входной грамматикой для Tr.

СУ-схема Tr = (N, T, \Pi , R, S) называется простой, если для каждого правила A -> u, v из R соответствующие друг другу вхождения нетерминалов встречаются в u и v в одном и том же порядке.

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

Пример 5.2. Перевод арифметических выражений в ПОЛИЗ (польскую инверсную запись) можно осуществить простой СУ-схемой с правилами

E -> E + T ET+
E -> T T
T -> T * F TF+
T -> F F
F -> id id
F -> (E) E.

Найдем выход схемы для входа id * (id + id). Нетрудно видеть, что существует последовательность шагов вывода

\begin{align*}
&(E, E) \Rightarrow (T, T) \Rightarrow (T* F, TF*) \Rightarrow \\
&\Rightarrow (F * F, FF*) \Rightarrow (id * F, id \; F*) \Rightarrow (id * (E), id \; E*) \Rightarrow \\
&\Rightarrow(id * (E + T), \; id \; E T + *) \Rightarrow (id * (T + T), id \; T T + *) \Rightarrow \\
&\Rightarrow (id * (F + T), \; id \; F T + *) \Rightarrow  (id * (id + T), id \; id T + *) \Rightarrow \\
&\Rightarrow (id * (id + F), id \; id F + * ) \Rightarrow\\
&\Rightarrow (id * (id + id), id \; id \; id + * \Rightarrow;\\
\end{align*}

переводящая эту цепочку в цепочку id id id + *.

Рассмотрим связь между переводами, определяемыми СУ- схемами и осуществляемыми МП-преобразователями [2].

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Никита Барсуков
Никита Барсуков
Россия, СПБПУ
Николай Архипов
Николай Архипов
Россия, Екатеринбург, Уральский федеральный университет