Gaist-Endruy
( off
)
(
09:36 24-03-2009
)
Приведенный ниже пример определяет макрокоманду DEFINE, которая при указании в качестве ее операнда имени подпрограммы определяет соответствующий этому имени макрос. Отдельные генерируемые макроопределения получают имена связанных с ними подпрограмм.
Gaist-Endruy
( off
)
(
09:36 24-03-2009
)
Пример 6:
.
.
.
МАСRO DEFINE sub
.......
.......
MACRO sub(param)
......
......
sub(param)
......
......
END
......
......
END
Gaist-Endruy
( off
)
(
09:37 24-03-2009
)
Пользователь может обратиться к этому макроопределению следующим образом:
DEFINE(cos)
Gaist-Endruy
( off
)
(
09:37 24-03-2009
)
определяя таким образом новое макроопределение с именем cos, к которому впоследствии можно обращаться следующим образом:
cos(х)
и макропроцессор сгенерирует соответствующую последовательность вызова функции.
Gaist-Endruy
( off
)
(
09:37 24-03-2009
)
РЕАЛИЗАЦИЯ
Gaist-Endruy
( off
)
(
09:37 24-03-2009
)
Таким образом, нами был описан вариант реализации макроязыка. Рассмотрим метод реализации макроязыка. В качестве примера возьмем классический язык макроассемблера.
Gaist-Endruy
( off
)
(
09:37 24-03-2009
)
ПОСТАНОВКА ЗАДАЧИ
Gaist-Endruy
( off
)
(
09:37 24-03-2009
)
Любой процессор макрокоманд должен решать следующие четыре основные задачи:
Gaist-Endruy
( off
)
(
09:38 24-03-2009
)
1.Распознавать макроопределения. Процессор макрокоманд должен распознавать макроопределения, выделяемые соответствующими псевдокомандами. В языке макроассемблера этими псевдооператорами являются псевдокоманды MACRO и MEND.
Gaist-Endruy
( off
)
(
09:38 24-03-2009
)
Эта задача может быть усложнена тем, что внутри макроопределений могут встречаться также другие макроопределения. Когда макроопределения вложены, как было продемонстрировано выше, макропроцессор должен правильно распознавать вложения и сопоставить начало и конец макроса. Весь вложенный текст, включая и другие макроопределения определяет отдельную макрокоманду.