Структура и реализация макроязыков
Рефераты >> Программирование и компьютеры >> Структура и реализация макроязыков

НАЙДЕНО = поиск кода в МНТ

если (НАЙДЕНО) {

МДИ = 1

УКАЗАТЕЛЬ = индекс из МНТ

Заполнение списка параметров АЛА

цикл {

УКАЗАТЕЛЬ ++

чтение след. строки из МДТ

подстановка параметров

вставка во ВХТ

} пока !(операция MEND)

иначе если !(операция MACRO) {

вывод строки в ВЫХТ1

если (операция END) ФЛАГ ВЫХОДА = 1

}

иначе {

чтение идентификатора

запись имени и индекса в МНТ

МНТС ++

приготовить массив списка АЛА

запись имени в МДТ

МДТС ++

цикл {

чтение следующей строки ВХТ

подстановка индекса операторов

добавление в МДТ

МДТС ++

} пока !(операция MEND)

}

}

конец алгоритма

ОПИСАНИЕ АЛГОРИТМА

данный алгоритм является упрощением алгоритма приведенного в [1], глава 4.3.2. Различие состоит в том, что современные средства интеллектуализации программирования дают нам возможность осуществлять вставки и удаления из крупных массивов с минимальными затратами процессорного времени, что было невозможно при использовании перфокарт. Кроме того, скорость работы современных процессоров настолько велика, что позволяет производить прямые вставки и удаления в массивах данных средней величины (скажем, до 64 килобайт) в режиме реального времени. Таким образом, расширение исходного макроса может быть напрямую вставлено в массив исходного текста и обработано в расширенном виде. Такая технология позволяет значительно упростить алгоритм обработки макроязыка.

РЕАЛИЗАЦИЯ ВНУТРИ АССЕМБЛЕРА

Макропроцессор, описанный нами предназначался для обработки текста в режиме препроцессора, то-есть он выполнял полный просмотр входного текста, до того, как передать управление ассемблеру. Но макропроцессор также может быть реализован внутри первого прохода ассемблера. Такая реализация позволяет исключить промежуточные файлы, и позволяет достичь на порядок большей интеграции макропроцессора и ассемблера путем объединения сходных функций. Например, возможно объединение таблиц имен макросов и имен кода операции; специальный признак может указывать на то макро это или встроенная операция.

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

1. Многие функции не надо реализовывать дважды (например, функции ввода-вывода, проверки на тип, и.т.п.)

2. В процессе обработки отпадает необходимость создавать промежуточные файлы или массивы данных.

3. У программиста появляются дополнительные возможности по совмещению средств ассемблера (например, команды EUQ) совместно с макрокомандами.

Основные недостатки:

1. Программа должна требовать больше оперативной памяти, что критично на некоторых типах ЭВМ, не имеющих много оперативной памяти.

2. Реализация подобного типа задачи может оказаться на порядок сложнее, чем отдельная реализация ассемблера и макропроцессора.

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

ВЫВОДЫ

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

Существуют четыре основных задачи, решаемых макропроцессором:

1. Распознавание макроопределений

2. Хранение макроопределений

3. Распознавание макрокоманд

4. Расширение макрокоманд и подстановка параметров

Макропроцессор в ассемблере может быть реализован несколькими способами:

1. Независимый двухпросмотровый ассемблер

2. Независимый однопросмотровый ассемблер

3. Процессор, совмещенный с первым проходом стандартного двухпросмотрового ассемблера.

ССЫЛКИ

В работе над рефератом использовалась следующая литература:

[1] Дж. Джор­дан - “Сис­тем­ное про­грам­ми­ро­ва­ние”

[2] IBM OS/2 - “REXX Programmer’s Reference”

[3] Borland C++ - Included documentation and sources.


Страница: