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