Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

22 Синтаксически управляемая трансляция.

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

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

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

- конечный выходной алфавит; R - конечное множество правил перевода вида

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

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

Процесс построения дерева разбора, а затем вычисления атрибутов (нетерминал к терминалу) и называется синтаксически управляемой трансляцией

23 Таблица символов, таблица меток и др. Методы построения, доступа и анализа.

24 Генерация промежуточного кода.

Задачи промежуточного кода:Оптимизация программы,Данные для интерпретации

Виды записи промежуточного кода:В виде синтаксических деревьев (элементы дерева – операторы).

Синтаксическое дерево изображает естественную иерархическую структуру исходной программы. Даг дает ту же информацию, но в более компактном виде (одинаковые под­выражения в нем объединены).

Постфиксная запись представляет собой линеаризованное представление синтаксиче­ского дерева; такая запись — не что иное, как список узлов дерева, в котором узлы рас­полагаются сразу после своих дочерних узлов.

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

Синтаксические деревья для инструкций присвоения строятся с помощью синтакси­чески управляемого определения, представляющего собой расширение опреде­ления. Нетерминал S порождает инструкцию присвоения. Два бинарных оператора + и * представляют собой примеры полного множества операторов типичного языка программирования. Ассоциативность и приоритет операторов — обычные, не­смотря на то, что они не внесены в грамматику. Приведенное определение строит дерево для входного потока а := b*-c+b*-c.

Это же синтаксически управляемое определение позволит построить даг, показанный, если функции mkunode(op, child) и mknode(op, left, right) будут, если воз­можно, возвращать указатель на уже существующий узел, а не строить новый. Токен id имеет атрибут place, указывающий на запись в таблице символов для данного идентифи­катора. Если лексический анализатор хранит все лексемы в едином массиве символов, атрибут пате может представлять собой индекс первого символа лексемы.

Представление в виде трехадресного кода

z = x op y (бинарная операция)

z = op x (унарная операция)

z = x (копирование ячейки x в z)