Задача трансляции

Материал из WikiGrapp
Перейти к навигации Перейти к поиску

Задача трансляции (Compilation problem) — Логически трансляция содержит две основные части: анализ и синтез. Первая часть распознает во входном тексте конструкции абстрактной программы, а вторая реализует собственно перевод — построение эквивалентной ей выходной программы.

Процесс извлечения абстрактной программы из исходного текста осуществляется в три этапа. На этапе лексического анализа происходит построение по тексту входной программы ее лексической свертки. В лексической свертке каждая лексема приводится к единому формату и представляется посредством дескриптора, содержащего два вида информации: тип (или класс) лексемы как синтаксической единицы (идентификатор, служебное слово и т.п.), а также местоположение данной конкретной лексемы (вход в таблицу объектов). Затем лексическая свертка преобразуется на этапе синтаксического анализа в дерево разбора, описывающего иерархическое строение составляющих ее вхождений понятий и лексем. Завершающим в построении абстрактной программы по исходному тексту является этап контекстного анализа, который приписывает вершинам дерева разбора значения всех так называемых статических атрибутов и тем самым осуществляет построение атрибутного дерева транслируемой программы. Атрибуты вершин дерева кодируют ту часть синтаксических свойств транслируемой программы, которые не описываются КС-грамматикой (например, такой атрибут, как класс конструкции, связанной с идентификатором), а также ряд других (семантических) ее свойств, позволяющих осуществлять построение выходной программы (на этапе генерации) при систематическом обходе дерева разбора и за счет вызовов генерационных процедур (трансдукторов), обрабатывающих вершины дерева вместе с их атрибутами и соответствующих понятиям и лексемам языка.

Схемой процесса трансляции называется схема организации и взаимодействия просмотров с распределением по просмотрам функций этапов трансляции. На практике встречаются одно-, двух- или многопросмотровые схемы процесса трансляции. Основной является двухпросмотровая схема. Она приемлема для большинства входных языков и достаточно проста и эффективна. Многопросмотровые (при числе просмотров больше двух) схемы трансляции, как правило, требуются для таких языков, как, например, Алгол 68 или Ада, в которых синтаксическое определение существенно связано с контекстными условиями, и позволяют включать в процесс трансляции дополнительные функции (например, оптимизацию транслируемой программы).

Литература

  • Евстигнеев В.А., Касьянов В.Н. Теория графов: алгоритмы обработки деревьев. — Новосибирск: Наука. Сиб. отд-ние, 1994.
  • Касьянов В.Н., Поттосин И.В. Методы построения трансляторов. — Новосибирск: Наука. Сиб. отд-ние, 1986.