Семейство трансляторов с языка Модула-2 для различных машин

Автор: Ходукин В.М.

Журнал: Компьютерная оптика @computer-optics

Статья в выпуске: 2, 1987 года.

Бесплатный доступ

Описывается проект Супер-Модула семейства трансляторов с языка Модула-2 для различных машин. Работа ведется с использованием САПТ Супер. Каждый транслятор содержит единую машинно-независимую часть, транслирующую программу на Модуле-2 в промежуточный язык Лидер, и машинно-зависимую часть, транслирующую язык Лидер в коды конкретной машины. Даются характеристика языка Лидер и его отличия от других промежуточных языков.

Короткий адрес: https://sciup.org/14058127

IDR: 14058127

Текст научной статьи Семейство трансляторов с языка Модула-2 для различных машин



В. М. Ходукин

СЕМЕЙСТВО ТРАНСЛЯТОРОВ С ЯЗЫКА МОДУЛА-2 ДЛЯ РАЗЛИЧНЫХ МАШИН

Во всяком трансляторе с языка высокого уровня можно выделить фазы, не зависящие от машины, в коды которой осуществляется трансляция. Это лексический и синтаксический анализ, проверка контекстных условий, определение типа операций и приведений. В проекте Супер-Модула поставлена цель написать единую машинно-независимую часть для нескольких трансляторов с языка Модула-2. Тогда для каждой новой машины потребуется написать лишь генератор кода. В проекте используется разработанная в ВЦ АН СССР система автоматизации построения трансляторов (САПТ) Супер (Синтаксически Управляемый ПЕРевод)*, основанная на механизме атрибутных грамматик. Для интер-

Серебряков В. А. Основные особенности входного языка и реализации СПТ Супер.-Программирование, 1982. № 1.

фейса между машинно-независимой частью и генераторами кода используется промежуточный язык Лидер. Этот язык ориентирован на его обработку атрибутными грамматиками. Основное его отличие от других промежуточных языков состоит в том, что он не претендует на универсальность, а ориентирован на некоторый разумный класс языков. таких как Модула-2, Паскаль, Фортран и Си. Как машинно-независимая часть, так и генератор кода пишутся на метаязыке системы Супер. В настоящее время ведется разработка генераторов кода для машин СМ-4 и БЭСМ-6.

Промежуточный язык Лидер имеет следующие особенности. Программа на языке Лидер является линейным представлением модифицированного абстрактного синтаксического дерева программы (отсюда название языка: Линеаризованное ДЕРево). Все синтаксические правила имеют уникальные име- на, что облегчает генерацию дерева и его последующую обработку. Этот машинно-независимый язык высокого уровня соответствует уровню языков Модула-2 и Паскаль. Все операции приведения в языке описываются явно. Одинаковым операциям (например, сложения) над различными типами операндов соответствуют различные синтаксические правила. В языке отсутствует понятие идентификатора. Для ссылок на объекты языка используется нумерация, позволяющая исключить поиск по таблице и обеспечивающая эффективный доступ к описателю любого объекта с помощью косвенной ссылки через элемент массива. Программа на языке Лидер содержит описания констант и заголовки процедур, импортируемых из других модулей, а также описания типов, переменных и процедур. Все эти виды объектов, за исключением двух первых, могут также содержаться и внутри описания процедуры. Описание процедуры состоит из заголовка процедуры, за которым следуют описания объектов. За описаниями как в программе, так и в процедурах следует список операторов. В языке Лидер нет модулей, поскольку благодаря использованию нумерации объектов и отсутствию идентификаторов ликвидировано понятие области видимости.

Если сравнить Лидер с другими вариантами промежуточных языков, такими как М-код для Модулы-2 и Diana для языка Ада, можно отметить сле дующее: М-код ориентирован в основном на интерпретацию: в нем требуется, чтобы все переменные получили конкретные адреса, что ведет к машинной зависимости: кроме того, выражения получаются записанными в постфиксной форме, что требует при трансляции либо методов восходящего разбора, либо моделирования стека времени выполнения. Язык Diana, во-первых, слишком сложен для языка Модула-2; во-вторых, он не ориентирован на последовательную обработку дерева программы, а значит, все дерево программы должно храниться в оперативной памяти; в-третьих, в нем используются прямые ссылки на другие узлы дерева, что требует либо использования указателей, то есть машинной зависимости, либо поиска по таблице на этапе генерации кода.

Лидер представляет и самостоятельный интерес вне зависимости от его использования в трансляторах с языка Модула-2. Поскольку предполагается разработать в рамках системы Супер пакет подпрограмм для генерации программ на языке Лидер, то появится возможность получения новых трансляторов как со специализированных языков, так и с универсальных из приведенного выше класса. В частности, предполагается перевести на Лидер и систему Супер. А пока эта система строит трансляторы на языке Паскаль.

Статья научная