Gaist-Endruy
( off
)
(
09:43 24-03-2009
)
чтение идентификатора
запись имени и индекса в МНТ
МНТС ++
приготовить массив списка АЛА
запись имени в МДТ
МДТС ++
цикл {
чтение следующей строки ВХТ
подстановка индекса операторов
добавление в МДТ
МДТС ++
} пока !(операция MEND)
}
}
переход ко второму проходу
конец алгоритма
Gaist-Endruy
( off
)
(
09:44 24-03-2009
)
Второй просмотр
Начало алгоритма
Gaist-Endruy
( off
)
(
09:45 24-03-2009
)
ФЛАГ ВЫХОДА = 0
цикл пока (ФЛАГ ВЫХОДА == 0) {
чтение строки из ВЫХТ1
НАЙДЕНО = поиск кода в МНТ
если !(НАЙДЕНО) {
запись в ВЫХТ2 строки
если (операция END) {
ФЛАГ ВЫХОДА = 1
}
}
иначе {
Gaist-Endruy
( off
)
(
09:45 24-03-2009
)
УКАЗАТЕЛЬ = индекс из МНТ
Заполнение списка параметров АЛ
цикл {
УКАЗАТЕЛЬ ++
чтение след. строки из МДТ
подстановка параметров
вывод в ВЫХТ2
} пока !(операция MEND)
}
}
переход к компиляции
конец алгоритма
Gaist-Endruy
( off
)
(
09:45 24-03-2009
)
ОДНОПРОСМОТРОВЫЙ АЛГОРИТМ
Gaist-Endruy
( off
)
(
09:45 24-03-2009
)
Предположим, что мы допускаем реализацию макроопределения внутри макроопределений. Основная проблема здесь заключена в том, что внутреннее макро определено только после того, как выполнен вызов внешнего. Для обеспечения использования внутреннего макро нам придется повторять как просмотр обработки макроопределений, так и просмотр обработки макрокоманд. Однако существует и еще одно решение, которое позволяет произвести распознавание и расширение в один просмотр.
Gaist-Endruy
( off
)
(
09:46 24-03-2009
)
Рассмотрим аналогию с ассемблером. Макроопределение должно обрабатываться до обработки макрокоманд, поскольку макро должны быть определены для процессора раньше, чем макрокоманды обращения к ним.
Gaist-Endruy
( off
)
(
09:46 24-03-2009
)
Однако, если мы наложим ограничение, что каждое макроопределение должно быть определено до того, как произойдет обращение к нему, мы устраним основное препятствие для однопросмотровой обработки. Заметим, что то же самое может быть верно и для символических имен в ассемблере, но такое требование было бы неоправданным ограничением для программиста.
Gaist-Endruy
( off
)
(
09:46 24-03-2009
)
В случае же макрорасширения может быть вполне естественно потребовать, чтобы объявления макро предшествовали вызовам. Это не накладывает очень существенных ограничений на использование аппарата макрокоманд. Этот механизм даже не запрещает обращение макро к самому себе, поскольку обращение ведется в тот момент, когда имя макроса уже определено. Расширение же макроса идет не в процессе разбора макроса, а в процессе последующего вызова.
Gaist-Endruy
( off
)
(
09:46 24-03-2009
)
Предложенный ниже алгоритм объединяет два вышеприведенных алгоритма для двупросмотрового макроассемблера в один.