Макрокоманды внутри макроопределений — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Макрокоманды внутри макроопределений

2023-01-01 29
Макрокоманды внутри макроопределений 0.00 из 5.00 0 оценок
Заказать работу

В отличие от предыдущего, это средство может быть весьма полезным. Прежде всего - для часто употребляемых макрокоманд, могут быть включены в библиотеки макроопределений - системные или пользовательские. Это может весьма упростить создание новых макроопределений.

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

 

 


 

Структуры данных Макропроцессора

Таблица макроопределений, строго говоря, не таблица, а просто массив строк, в который записываются тексты всех макроопределений (от оператора MACRO до оператора MEND), найденных в обрабатываемом модуле.

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

Таблица глобальных переменных имеет такую структуру:

Все таблицы имеют переменный размер и заполняются в процессе работы.

Индекс уникальных меток - число, используемое для формирования уникальной части имен меток, встречающихся в макроопределениях

Для обработки каждого макровызова создаются:

Таблица параметров, содержащая информацию о параметрах макроопределения.

Таблица локальных переменных, содержащая информацию о локальных переменных макроопределения.

Структура этих таблиц - такая же, как и таблицы глобальных переменных, эти две таблицы могут быть объединены в одну таблицу параметров и локальных переменных.

Таблица меток макроопределения, структура которой:

 


 

Основные алгоритмы программы.

 

Алгоритм первого прохода.

1. Устанавливаем уровень вложенности макроса (level) в ноль.

2. Организуем цикл по обработке строк исходного файла:

2.1. Если в поле МКОП встретилась директива macro, то проверяем значение level:

2.1.1.  Если level>0. Увеличиваем level на единицу, заносим строку в таблицу макроопределений (ТМО).

2.1.2. Если level=0. Организуем поиск имени макроса в таблице имен макросов:

2.1.2.1. Если поиск удачен – ошибка.

2.1.2.2. Если не нашли. Заносим имя макроса, указатель на начало макроса в ТМО, параметры макроса в ТИМ. Увеличиваем level на единицу.

2.2. Если в поле МКОП встретилась директива mend, то проверяем значение level:

2.2.1. Если level=0 – ошибка.

2.2.2. Если level>0. Заносим строку в ТМО, уменьшаем level на единицу.

2.2.3. Если level=1. Записываем в ТИМ указатель на конец макроса в ТМО. Уменьшаем level на единицу.

2.3. Если в поле МКОП директива end. Проверяем значение переменной level:

2.3.1. Если level>0 – ошибка.

2.3.2. Если level=0 – завершение прохода.

2.4. Если level>0 – заносим строку в ТМО.

3. Ошибка. Директива end не найдена.

 


 

Алгоритм второго прохода.

1. Устанавливаем значение переменной level=0.

2. Организуем цикл по обработке строк исходной программы:

2.1. Если в поле МКОП директива end, то завершение прохода.

2.2. Если macro. Увеличиваем level на единицу.

2.3. Если mend. Уменьшаем level на единицу.

2.4. Если level>0, переход к следующей итерации.

2.5. Если в поле МКОП имя макроса, вызов процедуры обработки макровызова.

2.6. Если в поле МКОП команда ассемблера, то выводим строку в выходной файл, если же в поле МКОП неизвестная команда – ошибка.

 


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.