скольких индексов они записываются в порядке от старшего к младшим уровням иерархии таблицы.
Имя-индекса-1 должно соответствовать статье описания данного в иерархии таблицы, содержащей фразу INDEXED (ИНДЕКСИРУЕТСЯ), определяющую это имя-индекса.
При каждом обращении к табличному элементу должно использоваться индексирование, за исключением следующих случаев:
в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ);
в качестве субъекта в операторе SEARCH (ИСКАТЬ);
во фразе REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ);
в варианте ASCENDING/DESCENDING KEY IS (ПО ВОЗ- РАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) фразы OCCURS (ПОВТОРЯЕТСЯ).
Имя-данного-2 может уточняться и должно быть числовым элементарным данным, представляющим целое.
Целое-1 может быть со знаком; знак должен быть только положительным.
О б щ и е правила
Значение индекса должно быть положительным целым. Наименьшее допустимое значение, представляемое индексом, равняется 1 и оно указывает на первый элемент таблицы. Следующие за ним элементы таблицы указываются с помощью номера вхождения 2, 3 Наибольший допустимый номер вхождения в каждом
отдельном случае равен максимальному числу повторений данного, указанному фразой OCCURS (ПОВТОРЯЕТСЯ).
Значение имени-индекса-1 соответствует номеру вхождения элемента таблицы, связанного с ним. Это соответствие определяется реализацией.
Значение имени-индекса-1 должно устанавливаться до его использования в качестве индекса. Начальное значение имени-индекса может быть задано оператором PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ); оператором SEARCH (ИСКАТЬ) с фразой ALL (ОСОБО) или оператором SET (УСТАНОВИТЬ). Значение имени-индекса может изменяться только операторами PERFORM (ВЫПОЛНИТЬ), SEARCH (ИСКАТЬ) или SET (УСТАНОВИТЬ).
Если указано целое-2 или целое-3, значение индекса определяется как номер вхождения, представленный значением име- ни-индекса-1, либо значением данного, указанного именем-данно- го-2, увеличенным на значение целого-2 или целого-3 (когда указан знак арифметической операции +) или уменьшенным на значение целого-2 или целого-3 (когда указан знак арифметической операции —).Модификация ссылки
Назначение
Модификация ссылки определяет данное указанием его само® левой позиции литеры и длины данного.
Общий формат
имя-данного-1 (позиция-самой-левой-литеры: [длина])
С и нт а к с и ч е с к и е правила
Имя-данного-1 должно быть именем данного, статья описания которого содержит фразу об использовании USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ).
Позиция самой лецой литеры и длина должны быть арифметическими выражениями.
Если особо не оговорено, модификация ссылки допустима< везде, где разрешен идентификатор соотнесенный данному, принадлежащему к буквенно-цифровому классу.
Имя-данного-1 может быть уточнено или индексировано.
О б щ и е правила
Каждой литере данного, соотнесенного имени-данного-1,. приписывается порядковый номер, который равен 1 для самой левой позиции и увеличивается на единицу для каждой следующей.: позиции вплоть до самой правой позиции. Если статья описания, данного для имени-данного-1 содержит фразу SIGN IS SEPARATE'. (ЗНАК ОТДЕЛЬНО), позиции знака приписывается порядковый! номер в этом данном.
Если данное, соотнесенное имени-данного-1, описано как:, числовое, числовое редактируемое, буквенное или буквенно-цифровое редактируемое, над ним производятся действия по модификации ссылок, как если бы оно было переопределено как буквенноцифровое данное того же размера, что и данное, соотнесенное име- ни-данного-1.
Модификация ссылки для операнда выполняется по следующим правилам:
если для операнда указано индексирование, модификация: ссылки производится сразу же после вычисления индексов;
если для операнда индексирование не указано, модификация ссылки производится тогда, когда производилось бы вычисление- индексов, если бы были указаны индексы.
Модификация ссылки создает уникальное данное, являющееся подстрокой данного, соотнесенного имени-данного-1. Это данное определяется по следующим правилам:
вычисление позиции-самой-левой-литеры определяет порядковую позицию самой левой литеры единственного данного по отношению к самой левой литере данного, соотнесенного имени-данного-1. Результатом вычисления позиции самой левой литеры должно быть положительное целое число, не равное нулю, меньшее.-
'или равное количеству литер в данном, соотнесенном имени-данно- ІГО-1;
вычисление длины определяет размер данного, которое будет использовано в операции. Результатом вычисления длины должно быть положительное целое число, не равное нулю. Сумма позиции* самой-левой-литеры и длины минус единица должна быть меньше или равна количеству литер в данном, соотнесенном имени-данно- го-1.
Если длина не указана, создаваемое модификацией ссылки данное распространяется от позиции-самой-левой-литеры (включая •ее) и до самой правой литеры (тоже включая ее) данного, соотнесенного имени-данного-1.
Создаваемое модификацией ссылки данное рассматривается как элементарное данное без фразы JUSTIFIED (СДВИНУТО). Оно относится к тому же классу и категории, что и данное, •соотнесенное имени-данного-1, учитывая то обстоятельство, что класс числовой, числовой редактируемый и буквенно-цифровой •редактируемый рассматриваются как класс и категория буквенно- щифровые.
Идентификатор
Термин идентификатор используется в случае, когда имя дан- яого, дублируемое в программе, должно сопровождаться синтаксически правильной комбинацией уточнителей, индексов или модификаторов ссылки, необходимой для обеспечения однозначности «ссылки.
Общий формат идентификатора:
имя-данного-1
TN 1
ОРг)имя-данного-2
'
имя-коммуни-
кации-1
имя-файла-1
имя-отчета-1
имя-комму-
никации-1 имя-файла-1 имя-отчета-1
[ ({индекс} . . . ) ] [ (позиция-самой-левой-литеры: [длина]) ]!имя-данного-1 [ИЗ имя-данного-2]... ИЗ
[ ({индекс}. . . )] [ (позиция-самой-левой-литеры: [длина])]
4Д.8.5. Имя условия
При наличии явной ссылки каждое из имен условий не должно дублироваться или должно позволять однозначное определение посредством уточнения и (или) индексирования, за исключением случаев, когда соглашения об области действия имен сами обеспечивают однозначность ссылок (ч. 10, п. 1.3.8).
Если для определения однозначности имени условия используется уточнение, соответствующая условная переменная может- использоваться как первый уточнитель. При уточнении используется иерархия имен, относящихся к условной переменной.
Если ссылки на условную переменную требуют индексирования, то ссылки на любое из ее имен условия требуют той же комбинации индексов.
Формат и ограничения на совместное использование уточнения и индексирования имен-условий в точности совпадают с форматом!: и ограничениями для идентификатора, при этом имя-данного-1 нужно заменить на имя-условия-1.
В общем формате и дальнейшем тексте «имя-условия» обозначает уточненное или индексированное имя условия, если это необходимо.
Явные и неявные спецификации
Имеется четыре типа явных и неявных определений, встречающихся в исходной Кобол-программе:
явные и неявные обращения (ссылки) к данным в разделе, процедур;
явные и неявные передачи управления;
явные и неявные свойства;
явные и неявные ограничители области действия.
Явные и неявные обращения к данным в- разделе процедур
Исходная Кобол-программа может явно или неявно обращаться к данным в операторах раздела процедур. Явное обращение имеет место в том случае, когда имя данного, к которому происходит обращение, записывается в операторе раздела процедур или копируется в разделе процедур с помощью оператора COPY (КОПИРОВАТЬ). Неявное обращение имеет место в том случае, когда оператор раздела процедур обращается к данному без указания: его имени. Неявное обращение имеет место также во время выполнения оператора PERFORM (ВЫПОЛНИТЬ), когда индекс пли данное, представленное именем индекса или идентификатором во фразах VARYING, AFTER, UNTIL (МЕНЯЯ, ЗАТЕМ, ДО), устанавливаются в начало, изменяются или вычисляются механизмом управления, относящимся к этому оператору PERFORM (ВЫПОЛНИТЬ). Такое неявное обращение имеет место только в том случае, когда данное участвует в выполнении оператора.
Я в н ы е и неявные передачи управления
Механизм, управляющий программным потоком, передает управление от оператора к оператору в той последовательности, в которой они записаны в исходной программе, пока явная передача управления не прервет эту последовательность или не останется ни одного выполнимого оператора, которому можно передать уп- давление. Передача управления от оператора к оператору может происходить без явного указания в операторах раздела процедур; в этом случае она является неявной передачей управления.
Язык Кобол обеспечивает явные и неявные средства передачи управления.
В дополнение к неявной передаче управления в последовательности операторов, неявная передача управления имеет место и тогда, когда нормальный ход выполнения операторов меняется без выполнения оператора ветвления процедуры. Кобол обеспечивает следующие типы неявного изменения управления, прерывающие передачу управления от оператора к оператору:
если параграф выполняется под управлением другого оператора (например, PERFORM (ВЫПОЛНИТЬ), USE (ИСПОЛЬЗОВАТЬ), SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ)) и этот параграф является последним в области управляющего оператора, тогда неявная передача управления происходит от последнего оператора в параграфе к механизму управления последнего выполняемого управляющего оператора. Дальше, если параграф, выполняемый под управлением оператора PERFORM (ВЫПОЛНИТЬ), яв- .ляется первым параграфом в области действия этого оператора PERFORM (ВЫПОЛНИТЬ), то неявная передача управления имеет место между механизмом управления, относящимся к этому оператору, и первым оператором в этом параграфе при каждой итерации выполнения параграфа;
при выполнении оператора SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ) происходит неявная передача управления к соответствующей процедуре ввода и вывода;
при выполнении оператора Кобола, приводящего к выполнению декларативной секции, происходит неявная передача управления к этой секции. Заметим, что другая неявная передача управления происходит после выполнения декларативной секции, как указано выше (пункт (1)).
Явная передача управления состоит в изменении механизма неявной передачи посредством оператора ветвления процедуры или условного оператора. Явная передача управления может быть вызвана только в результате выполнения оператора ветвления процедуры или условного оператора. Выполнение оператора ветвления процедуры ALTER (ИЗМЕНИТЬ) само по себе не осуществляет явной передачи управления, но влияет на нее при выполнении соответствующего оператора GO ТО (ПЕРЕЙТИ). Оператор ветвления EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) приводит к явной передаче управления только при выполнении этого оператора в вызванной программе.
В этом документе термин «следующий выполнимый оператор» используется для обращения к следующему оператору Кобола, которому передается управление согласно приведенным выше правилам и правилам, соответствующим каждому элементу языка.
Нет следующего выполнимого оператора, когда программа не содержит раздел процедур, а также для перечисленных ниже операторов:
последний оператор в декларативной секции, когда содержащий его параграф не выполняется под управлением некоторого- другого оператора Кобола;
последний оператор в декларативной секции, когда оператор, находящийся в области активного оператора PERFORM. (ВЫПОЛНИТЬ), выполняется в другой секции и этот последний оператор декларативной секции не является в то же время последним оператором процедуры, которая является выходом из активного оператора PERFORM (ВЫПОЛНИТЬ);
последний оператор в программе, когда содержащий его параграф не выполняется под управлением некоторого другого оператора Кобола в этой программе;
оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) или EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), который передает управление за пределы Кобол-программы;
заголовок конца программы.
Когда нет следующего выполнимого оператора и управление не передается за пределы Кобол-программы, передача управления в программе не определена. Если выполнение программы активировано в недекларативной части процедур другой программы посредством оператора CALL (ВЫЗВАТЬ), выполняется неявный оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ).
Явные и неявные свойства
Свойства могут быть заданы явно и неявно. Любое свойство, которое задано явно, называется явным свойством. Если свойство- не задано явно, оно определяется по умолчанию. Такое свойство- определяется как неявное.
Например, использование данного нет необходимости задавать в случае, когда его использование DISPLAY (ДЛЯ ВЫДАЧИ).
Я в н ы е и неявные ограничители области действия
Ограничители области действия служат для указания границ области действия определенных операторов раздела процедур- (п. 6.4.2.4 настоящей части). Ограничители области действия бывают двух типов: явные и неявные.
Явными ограничителями области действия являются следующие: