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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

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

2023-01-01 30
Макрокоманды внутри макроопределений 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. Если в поле МКОП команда ассемблера, то выводим строку в выходной файл, если же в поле МКОП неизвестная команда – ошибка.

 


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

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

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

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

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



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

0.008 с.