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