Макроси в макроси

За разлика от предишния, този инструмент може да бъде доста полезен. На първо място, за често използваните макроси те могат да бъдат включени в библиотеките на макроси - системни или потребителски. Това може значително да опрости създаването на нови макроси.

За да се осигури такава възможност, е достатъчно да се направи само 2-ри проход на макропроцесора рекурсивно. Това донякъде усложнява анализа на макро операторите. В раздела „Други“ (в нашата диаграма на алгоритъма той започва с блок), 2-рият проход на Макропроцесора трябва да разпознае макроса и ако операторът е макрос, да се извика. Разпознаване на макрос - чрез метода на изключване: ако операторът не е оператор на макро език, не е асемблерна директива или машинна инструкция, тогава той се счита за макрос и се търси в таблицата с имената на макроопределенията. За рекурсивно повикване се създава нова Таблица на локални променливи (и параметри). Общата таблица на променливите и уникалният индекс на етикета се споделят.

Възниква известна сложност, ако вложените команди maro са библиотечни. В нашия алгоритъм за първо преминаване съдържанието на дефиницията на макроса (какво се намира между операторите MACRO и MEND) не беше анализирано, следователно дефинициите на вложени макроси не бяха въведени в таблиците на дефинициите на макроси и имената на дефинициите на макроси. Има две възможности за решаване на този проблем:

u При първото преминаване въпреки това разпознавате вложени макро повиквания и включвате техните дефиниции на макроси в таблици.

u Направете това на 2-ри проход: когато се появи оператор, който не е разпознат нито като оператор на макро език, нито като директива на Assembler, нито като машинна инструкция, нито като макрос, чието определение вече е в нашите таблици, считайте го за библиотечен макрос и търсете неговото определение в библиотеките. Ако се намери макрос, той се добавя към нашите таблици. Не е необходимо да премахвате дефиницията на макрос на вложената библиотека от таблици, когато външното извикване на макрос приключи с обработката: може да е необходимо по време на обработката и последващите извиквания на макроси.

Качествено разширяване на възможностите

Активното и компетентно използване на макро инструменти може да направи работата на програмиста много продуктивна. По този начин, след като отдели малко усилия за създаване на библиотека от макроси, програмист може да превърне езика на събранието в качествено нов език, който ще има някои от свойствата на езика на високо ниво. Програмистът може да направи този език до известна степен ориентиран към проблемите, т.е. в максимална степен адаптиран за задачите, които неговият разработчик решава. Ще опишем накратко тези основни насоки, в които разширяването на възможностите на Асемблера може да премине чрез макро средства.

Структурен асемблер

Под формата на макроси могат да бъдат внедрени оператори, които са близки до операторите за управление на потока на изчисленията на езици от високо ниво (условни оператори, клонове, различни видове цикли). Добре известен пример за такова разширение е езикът на асемблера BCPL Macro, предшественикът на езика C.