Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Дисциплины:
2023-01-01 | 31 |
5.00
из
|
Заказать работу |
|
|
В отличие от предыдущего, это средство может быть весьма полезным. Прежде всего - для часто употребляемых макрокоманд, могут быть включены в библиотеки макроопределений - системные или пользовательские. Это может весьма упростить создание новых макроопределений.
Для обеспечения такой возможности достаточно сделать рекурсивным только 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!