02 ИМЯ-ОТЛАДКИ ШАБЛОН X (30).
02 ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ.
02 ИНДЕКС-ОТЛАДКИ-1 ШАБЛОН 39999 ЗНАК ПЕРВЫЙ ОТДЕЛЬНО.
02 ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ.
02 ИНДЕКС-ОТЛАДКИ-2 ШАБЛОН 39999 ЗНАК ПЕРВЫЙ ОТДЕЛЬНО.
02 ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ.
02 ИНДЕКС-ОТЛАДКИ-3 ШАБЛОН 39999 ЗНАК ПЕРВЫЙ ОТДЕЛЬНО.
02 ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ.
02 ЗНАЧЕНИЕ-ОТЛАДКИ ШАБЛОН Х(п).
Перед каждым выполнением отладочной секции значения данных, соотнесенных DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ), заполняются пробелами. Затем значения подчиненных ему данных обновляются в соответствии с нижеприведенными общими правилами, непосредственно перед передачей управления этой отладочной секции. Значения данных, не указанных в нижеследующих общих правилах, представляются пробелами.
Обновление выполняется в соответствии с правилами для оператора MOVE (ПОМЕСТИТЬ), за единственным исключением, состоящим в том, что перемещение в DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) неявно рассматривается как элементарное перемещение буквенно-цифрового в буквенно-цифровое без преобразования данных из одной формы внутреннего представления в другую.
DEBUG-LINE (СТРОКА-ОТЛАДКИ) является определенным реализацией средством идентификации исходного оператора.
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит первые 30 литер имени, вызвавшего выполнение отладочной секции.
Все уточнители имени отделяются в значении данного DEBUGNAME (ИМЯ-ОТЛАДКИ) словом IN или OF (ИЗ).
Индексы при их наличии не включаются в это значение.
Если ссылка на данное, вызвавшее выполнение отладочной секции, индексирована, то в DEBUG-SUB-1 (ИНДЕКС- ОТЛАДКИ-1), DEBUG-SUB-2 (ИНДЕКС-ОТЛАДКИ-2), DEBUG-SUB-3 (ИНДЕКС-ОТЛАДКИ-3) соответственно помещаются номера вхождений каждого из необходимых уровней индек- сирования.
Размер данного . DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) должен допускать представление необходимых значений, определяемых последующими общими правилами.
Если отладочная секция вызывается вследствие первого выполнения первой процедуры программы, не принадлежащей к декларативной части, то выполняются следующие условия:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует первый оператор этой процедуры;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя этой процедуры;DEBUG-CONTENTS (ЗНАЧЕНИЕ ОТЛАДКИ) содержит значение ’START PROGRAM’ («НАЧАЛО ПРОГРАММЫ»),
Если выполнение отладочной секции вызвано ссылкой на имя-процедуры-1 в операторе ALTER (ИЗМЕНИТЬ), то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует этот оператор ALTER (ИЗМЕНИТЬ);
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит нмя процедуры, указанное фразой PROCEED ТО (ДЛЯ ПЕРЕХОДА К) оператора ALTER (ИЗМЕНИТЬ).
Если выполнение отладочной секции вызвано передачей управления при выполнении оператора GO ТО (ПЕРЕЙТИ), то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует указанный оператор GO ТО (ПЕРЕЙТИ), который передает управление нмени-процедуры-2;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1.
Если выполнение отладочной секции вызвано ссылкой на имя-процедуры-1, указанной во фразах INPUT (ПРОЦЕДУРА ВВОДА) или OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ), то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ), ссылающийся на имя-процедуры-1;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит:
в случае фразы INPUT (ПРОЦЕДУРА ВВОДА) оператора SORT (СОРТИРОВАТЬ) — ’SORT INPUT’ («ВВОД СОРТИРОВКИ»);
в случае фразы OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора SORT (СОРТИРОВАТЬ) — ’SORT OUTPUT’ («ВЫВОД СОРТИРОВКИ»);
в случае фразы OUTPUT (ПРОЦЕДУРА ВЫВОДА) оператора MERGE (СЛИТЬ) — ’MERGE OUTPUT’ («ВЫВОД СЛИЯНИЯ»).
Если выполнение отладочной секции вызвано передачей управления имени-процедуры-1 при выполнении оператора PERFORM (ВЫПОЛНИТЬ), то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует этот оператор;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит ’PERFORM LOOP’ («ЦИКЛ ВЫПОЛНИТЬ»).
Если имя-процедуры-1 относится к процедуре, выполнение которой управляется оператором USE (ИСПОЛЬЗОВАТЬ), и наступили условия ее выполнения, то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор, выполнение которого повлекло выполнение имени-процеду- ры-1;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение ’USE PROCEDURE’ («ПРОЦЕДУРА ИСПОЛЬЗОВАТЬ»),
Если неявная передача управления из предыдущего последовательного параграфа к имени-процедуры-1 вызывает выполнение отладочной секции, имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует предыдущий оператор;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-процедуры-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит ’FALL THR0UGN’ («ПРОХОДИТ ЧЕРЕЗ»),
Если выполнение отладочной секции вызвано ссылкой на имя-файла-1 или имя-коммуникации-1, то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует исходный оператор, ссылающийся на имя-файла-1 или имя-ком- муникации-1;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит имя-файла-1 или имя-коммуникацйи-1;
для оператора READ (ЧИТАТЬ) DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит прочитанную запись;
для остальных операторов, ссылающихся на имя-фай- ла-1, DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит пробелы;
для любого оператора, ссылающегося на имя-коммуника- ции-1, DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение связанной с ним области.
Если выполнение отладочной секции вызвано ссылкой на идентификатор-1, то имеет место следующее:
DEBUG-LINE (СТРОКА-ОТЛАДКИ) идентифицирует оператор, ссылающийся на идентификатор-1;
DEBUG-NAME (ИМЯ-ОТЛАДКИ) содержит идентификатор-1;
DEBUG-CONTENTS (ЗНАЧЕНИЕ-ОТЛАДКИ) содержит значение, представленное идентификатором-1 в момент передачи управления отладочной секции (см. общие правила 5 и 6),
Часть 16. МОДУЛЬ СЕГМЕНТАЦИИ
ВВЕДЕНИЕ В МОДУЛЬ СЕГМЕНТАЦИИ
Назначение
Модуль сегментации предоставляет средства, которые позволяют пользователю взаимодействовать с компилятором для задания требуемых перекрытий в объектной программе.
Модуль сегментации рассматривается в настоящем стандарте Кобола как устаревший элемент и будет устранен из последующих редакций.
Характеристика уровней
Уровень 1 сегментации обеспечивает средства для определения фиксированных и независимых сегментов (п. 1.4.1 настоящей части). Все секции, имеющие одинаковый номер сегмента, должны быть смежными в исходной программе.
Все сегменты, специфицированные как фиксированные, должны быть смежными в исходной программе.
Уровень 2 сегментации допускает смешивание секций с различными номерами сегментов и разрешает фиксированной части исходной программы содержать сегменты, которые могут быть перекрыты (п. 1.4.1 настоящей части).
Область действия
Модуль сегментации в Коболе касается только сегментации процедур. Следовательно, при определении требований к сегментации объектной программы рассматриваются только раздел процедур и раздел оборудования исходной программы.
Организация
Сегменты программы
Раздел процедур исходной программы, хотя это и необязательно, обычно записывается как группа последовательных секций, каждая из которых составлена из ряда операций, предназначенных в целом для выполнения некоторой конкретной функции. Однако, когда применяется сегментация, раздел процедур должен быть разделен на секции. Кроме того, каждая секция должна быть отнесена либо к фиксированной части, либо к одному из независимых сегментов объектной программы. Сегментация не освобождает от необходимости уточнения имен процедур.
Фиксированная часть программы
Фиксированная часть определяется как часть объектной программы, которая логически рассматривается, как если бы она полностью и постоянно находилась в памяти. Эта часть программы составляется из двух типов сегментов: фиксированных постоянных сегментов | и фиксированных перекрываемых сегментові-
Фиксированный постоянный сегмент — это сегмент в фиксированной части, который не может перекрываться никакой другой частью программы. | фиксированный перекрываемый сегмент — это сегмент фиксированной части, который, хотя и обрабатывается логически .так, как если бы он постоянно находился в памяти, может быть перекрыт любым другим сегментом с целью оптимизации использования памяти. Число фиксированных постоянных сегментов в фиксированной части может быть изменено указанием фразы SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) (п. 2.3 настоящей части).
Если такой сегмент вызван программой, он всегда становится доступным в его последнем использованном состоянии.
Независимые сегменты
Независимый сегмент определяется как часть объектной программы, которая может перекрывать [фиксированные перекры- ваемые сегменты или любые другие [ независимые сегменты или перекрываться ими. Независимый сегмент находится в своем начальном состоянии, когда в ходе выполнения программы управление впервые передано (явно или неявно) этому сегменту. При последующих передачах управления этому сегменту он также будет находиться в своем начальном состоянии при следующих условиях:
когда рассматриваемому сегменту управление передается в результате неявной передачи управления из сегмента с номером сегмента, отличным от рассматриваемого;
когда рассматриваемому сегменту передается управление в результате неявной передачи управления между операторами SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) в сегменте с номером сегмента, отличным от рассматриваемого, и процедурой ввода или вывода в рассматриваемом независимом сегменте;
когда рассматриваемому сегменту управление передается явно из сегмента с номером сегмента, отличным от рассматриваемого, за исключением передачи управления от оператора EXIT (ВЫЙТИ).
При последующих передачах управления независимому сегменту он находится в своем последнем использованном состоянии при следующих условиях:
когда рассматриваемому сегменту управление передается неявно из сегмента с номером сегмента, отличным от рассматриваемого, за исключением, отмеченным выше в (1) и (2);
когда управление рассматриваемому сегменту передается явно в результате выполнения оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (см. ч. 4 п. 4.4.2).
Классификация сегментации
Сегментируемые секции^ классифицируются системой номеров сегментов (п. 3.2 настоящей части) и следующими правилами.
Логические требования. Секции, обращения к которым осуществляются постоянно или очень часто, обычно относятся к одному из постоянных сегментов; секции, используемые реже, обычно относят | либо к одному из перекрываемых фиксированных сег-■. I ментов, либо I к одному из независимых сегментов, определяемых логическими требованиями.
Частота использования. Обычно чаще используемым секциям присваиваются меньшие номера сегментов, реже — большие номера сегментов.
Отношения с другими секциями. Секциям, которые часто обращаются друг к другу, следует присваивать один и тот же номер сегмента.
Управление сегментацией
Логическая последовательность программы совпадает с физической, за исключением специальных передач управления. Если для управления переходами от сегмента к сегменту (в соответствии с правилами п. 3.2 настоящей части) требуется переупорядочение объектной программы, то реализация должна обеспечивать передачи управления так, чтобы осуществить логический поток, определенный в исходной программе. Реализация должна обеспечивать также все необходимые передачи управления для обрабатываемого сегмента при любом его использовании. Управление может быть передано внутри исходной программы любому параграфу в секции; таким образом, необязательно передавать управление в начало секции.
2. РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ СЕГМЕНТАЦИИ
Секция конфигурации
Информация, связанная с секцией конфигурации, помещена в ч. 6.
Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА)
Назначение
Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) обеспечивает средства для описания машины, на которой должна выполняться программа.
Общий формат
OBJECT-COMPUTER [имя-машины
WORDS
MEMORY SIZE целое-1 CHARACTERS
(MODULES
[PROGRAM COLLATING SEQUENCE IS имя-алфавита-1]
[SEGMENT-LIMIT IS номер-сегмента] . ]
РАБОЧАЯ-МАШИНА, [имя-машины
(СЛОВ ЛИТЕР
МОДУЛЕЙ
РАЗМЕР ПАМЯТИ целое-1
[ПРОГРАММНЫЙ АЛФАВИТ имя-алфавита-1]
[ГРАНИЦА СЕГМЕНТОВ номер-сегмента] . ]
Синтаксическое правило
Имя-машины — это системное имя.
Общие правила
Все фразы параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) применяются к программе, в которой они явно или неявно заданы, и к любой программе, содержащейся в этой программе.
Общие правила для имени-машины, фраз ME/AORY SIZE (РАЗМЕР ПАМЯТИ) и PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) приводятся в ч. 6.
Фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) описывается в п. 2.3 настоящей части.