Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2023-01-01 | 29 |
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. Если в поле МКОП команда ассемблера, то выводим строку в выходной файл, если же в поле МКОП неизвестная команда – ошибка.
|
|
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!