Gaist-Endruy
( off
)
(
09:38 24-03-2009
)
2.Запоминать макроопределения. Процессор должен запомнить определения макрокоманд, которые будут впоследствии использоваться для расширения макровызовов.
Gaist-Endruy
( off
)
(
09:38 24-03-2009
)
3.Распознавать вызовы. Необходимо также и распознавать макровызовы, представленные в виде мнемонического кода операции. Это предполагает, что имена макрокоманд обрабатываются на тех же самых основаниях, как и один из кодов операции.
Gaist-Endruy
( off
)
(
09:38 24-03-2009
)
4.Выполнять расширение макрокоманд и подстановку фактических параметров. Вместо формальных параметров макроопределения макропроцессор должен подставить соответствующие операнды макрокоманды. Этот текст, в свою очередь может содержать как макрокоманды так и макроопределения.
Gaist-Endruy
( off
)
(
09:39 24-03-2009
)
Таким образом, макропроцессор должен распознавать и обрабатывать макроопределения и макрокоманды.
Gaist-Endruy
( off
)
(
09:39 24-03-2009
)
Что же касается формальных параметров, то тут нужно принять несколько решений. Необходимо определить - могут ли они встречаться в качестве кода операции, каков синтаксис допустимых параметров. В разных реализациях макроязыков могут встречаться разные варианты методы реализации подобных ситуаций, поэтому можно только дать некоторые разумные варианты, покрывающие большую часть возможных реализаций.
Gaist-Endruy
( off
)
(
09:39 24-03-2009
)
Формальные параметры могут встречаться в макроопределении где угодно, в том числе и в команде и в коде операции. Мы хотим, чтобы была обеспечена возможность конкатенации формальных параметров макроопределения с фиксированными символьными строками. В таком случае встает вопрос о некоем разделительном символе, обеспечивающем конкатенацию формальных параметров и заданных пользователем символьных последовательностей.
Gaist-Endruy
( off
)
(
09:39 24-03-2009
)
Например, если из один из параметров должен быть соединен с другим (macro[x,y] = xy), то возможен синтаксис x&y, что означает конкатенацию формального параметра x с формальным параметром y. Этот случай не вызывает больших трудностей. Гораздо сложней обрабатывается случай, когда речь идет о подстановке параметра внутри символьной строки.
Gaist-Endruy
( off
)
(
09:39 24-03-2009
)
В таком случае возможным выходом будет конкатенация по умолчанию двух последовательно друг за другом идущих символьных строк, а также преобразование формального параметра, заключенного в скобки к символьной строке. Таким образом, если мы хотим, чтобы в макросе фигурировала строка вида "blablabla[x]xxxxx", где [x] должно заменяться формальным параметром вполне возможно заменить строку такого вида строкой типа "blablabla"(x)"xxxxx".
Gaist-Endruy
( off
)
(
09:40 24-03-2009
)
Надо заметить, что множество замечательных идей по реализации подобных макроязыков реализовано в языке REXX, поддерживаемом на системном уровне операционной системой OS/2 компании IBM.
Gaist-Endruy
( off
)
(
09:40 24-03-2009
)
Также для выполнения функций условных переходов должны вычисляться некоторые арифметические выражения (возьмем в пример хотя бы обыкновенных счетчик). Таким образом часто оказывается полезной возможность использования псевдо-переменных времени компиляции внутри макросов.