Реализация алгоритма однопроходного макропроцессора, содержащего опережающие макроопределения
5

и ENDМ. Эта задача может усложняться, когда макроопределения встречаются внутри других макроопре­делений. Когда предложения MACRO и ENDМ вложены, как в примере предыдущего раздела, макропроцессор должен распо­знать вложения и правильно сопоставить последнюю или внеш­нюю команду ENDМ первой команде MACRO. Весь промежуточный текст, включая вложенные MACRO и ENDM, определяет отдельную макрокоманду.

1.     Запоминать   определения.   Процессор   должен   запомнить определения макрокоманд, которые он будет использовать для расширения макровызовов.

2.     Распознавать вызовы. Необходимо распознать    макровы­зовы, представленные в форме мнемонического кода операции. Это предполагает, что имена макрокоманд обрабатываются как один из типов кода операции.

4. Выполнять расширение макрокоманд и подстановку фак­тических параметров. Вместо формальных параметров макро­определения процессор должен подставить соответствующие операнды макрокоманды; результирующий символический (в данном случае написанный на языке ассемблера) текст затем подставляется вместо макрокоманды. Этот текст, конечно, мо­жет в свою очередь содержать макрокоманды или макроопреде­ления.

Таким образом, макропроцессор должен распознавать и об­рабатывать макроопределения и макрокоманды.

2.3 Ограничения реализации

Введем некоторые ограничения. Будем считать, что наш макропроцессор функционально независим от ассемблера и что его выходной текст будет передаваться ассемб­леру. Допустим что наш макропроцессор запрещает нам макровызовы или макроопределе­ния внутри макроопределений.