Cтраница 2
При входе в блок обработки макрокоманд переменной уровень присваивается значение нуль, одновременно восстанавливается начало рабочего поля ( блок 1), на котором размещаются временные таблицы, используемые при обработке макрокоманды. [16]
При обработке макрокоманд РЕГАБ ( РЕГАБД), ИСКЛАБ, ОТКПРТ ( в режиме почты) и ЗАКПРТ ( в режиме почты) транспортной станции не требуется буферная память. При обработке остальных макрокоманд в любом режиме ТС использует свой небольшой пул буферов, в каждом из которых может уместиться один фрагмент, для отсылки служебных команд протокола ТС-ТС. Этот же пул используется и для приема фрагментов входящих писем, но память под все письмо ( для сборки его из фрагментов) должна явным образом предоставляться транспортной Станции абонентом. [17]
Рассмотрим снова аналогию с ассемблером. Макроопределения должны обрабатываться до обработки макрокоманд, поскольку макро должны быть определены для процессора раньше, чем он может расширять макрокоманды обращения к ним. Однако, если мы наложим ограничение, что каждое макроопределение должно быть определено до того, как к нему обращаются, мы устраним основное препятствие для однопросмотро-вой обработки. [18]
Момент поступления макрокоманд из РП регулируется посредством установки и анализа специального индикатора, общего для ИСПОЛНИТЕЛЯ и программы реализации макрокоманд. В случае несвоевременного появления макрокоманд из РП программа реализации макрокоманд блокирует уровень РП до появления возможности обработки макрокоманды. [19]
К макроязыку относятся макрокоманды и следующие команды ассемблера: ACTR, AGO, AIF, GBLA, GBLB, GBLC, LCLA, LCLB, LCLC, MACRO, MEND, MEXIT, MNOTF, SETA, SETB, SETC, которые мы в отличие от команд базисною языка будем называть операторами. В свою очередь, в макроязыке можно различить две группы средств: макросы - операторы и конструкции, используемые для обработки макрокоманд, и операторы условной генерации, предназначающиеся как для обработки макрокоманд, так и для других целен. [20]
К макроязыку относятся макрокоманды и следующие команды ассемблера: ACTR, AGO, AIF, GBLA, GBLB, GBLC, LCLA, LCLB, LCLC, MACRO, MEND, MEXIT, MNOTF, SETA, SETB, SETC, которые мы в отличие от команд базисною языка будем называть операторами. В свою очередь, в макроязыке можно различить две группы средств: макросы - операторы и конструкции, используемые для обработки макрокоманд, и операторы условной генерации, предназначающиеся как для обработки макрокоманд, так и для других целен. [21]
Описанная схема макроассемблера не является единственно возможной. В этом случае блок обработки макрокоманд нужно включить в ассемблер. [22]
![]() |
Временные таблицы макрогенератора. [23] |
Две первые таблицы нужны только в процессе обработки макроопределения. В трех последних таблицах фиксируется результат работы блока обработки макроопределений. Эти таблицы используются затем блоком обработки макрокоманд. [24]
Если в процессе выполнения некоторая программа обращается к операционной системе с командой OPEN, то подсистема ввода-вывода на основе сведений, содержащихся в ТЮТ и JFCB, обра зует управляющие блоки, требуемые для дальнейших обращений к набору данных. Для каждого обрабатываемого в программе набора данных необходим соответствующий блок DCB, создаваемый и размещаемый в ее памяти языковым процессором. Однако языковый процессор оставляет некоторые поля DCB незаполненными, и только при обработке макрокоманды OPEN в этот блок из таблицы JFCB помещается информация, заданная средствами языка управления. [25]
Предположим, что мы допускаем реализацию макроопределения внутри макроопределений. Основная проблема здесь состоит в том, что внутреннее макро определено только после того, как выполнен вызов внешнего. Для обеспечения использования внутреннего макро нам придется повторить как просмотр обработки макроопределений, так и просмотр обработки макрокоманд. Однако существует более простое решение, которое обладает дополнительным преимуществом, а именно обеспечивает выполнение всей работы макропроцессора за один просмотр. [26]
Так же как ассемблер не может обрабатывать ссылку на символ до ее определения, так и макропроцессор не может выполнить расширение макрокоманды до того, как будет найдено и запомнено соответствующее макроопределение. Таким образом, необходимы два просмотра входного текста - один для обработки определений, а другой для обработки макрокоманд. Во время первого просмотра проверяется каждый код операции, все макроопределения запоминаются в таблице макроопределений МВТ, а копия исходного текста без макроопределений запоминается во внешней памяти ( например, на магнитной ленте) для использования при втором просмотре. Помимо таблицы MDT во время первого просмотра будет подготовлена таблица имен - MNT. [27]
![]() |
Взаимодействие сопрограмм. [28] |
Читателю уже известно, что применение языка символического Ассемблера упрощает программирование, известно и назначение директив, предписывающих ассемблеру определенные действия. Теперь мы рассмотрим еще одно средство ассемблера, называемое макрогенератором и представляющее собой расширение языка. Обратите внимание на слово расширение: макроассемблер как средство программирования состоит из обычного символического Ассемблера и средств для обработки макрокоманд. [29]
В макробиблиотеку включают наиболее часто используемые макроопределения. В этом случае отпадает необходимость описывать такие макроопределения в исходной программе на языке Макро. MCALL [ 6J обеспечивает его включение в текст программы при трансляции, а следовательно, и порождение макрорасширения при обработке макрокоманды. [30]