скольких индексов они записываются в порядке от старшего к младшим уровням иерархии таблицы.

  1. Имя-индекса-1 должно соответствовать статье описания дан­ного в иерархии таблицы, содержащей фразу INDEXED (ИНДЕК­СИРУЕТСЯ), определяющую это имя-индекса.

  2. При каждом обращении к табличному элементу должно ис­пользоваться индексирование, за исключением следующих слу­чаев:

  1. в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ);

  2. в качестве субъекта в операторе SEARCH (ИСКАТЬ);

  3. во фразе REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ);

  4. в варианте ASCENDING/DESCENDING KEY IS (ПО ВОЗ- РАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) фразы OCCURS (ПОВТО­РЯЕТСЯ).

  1. Имя-данного-2 может уточняться и должно быть числовым элементарным данным, представляющим целое.

  2. Целое-1 может быть со знаком; знак должен быть только положительным.

  1. О б щ и е правила

  1. Значение индекса должно быть положительным целым. Наи­меньшее допустимое значение, представляемое индексом, равняет­ся 1 и оно указывает на первый элемент таблицы. Следующие за ним элементы таблицы указываются с помощью номера вхожде­ния 2, 3 Наибольший допустимый номер вхождения в каждом

отдельном случае равен максимальному числу повторений данно­го, указанному фразой OCCURS (ПОВТОРЯЕТСЯ).

  1. Значение имени-индекса-1 соответствует номеру вхождения элемента таблицы, связанного с ним. Это соответствие определяет­ся реализацией.

  2. Значение имени-индекса-1 должно устанавливаться до его использования в качестве индекса. Начальное значение имени-ин­декса может быть задано оператором PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ); оператором SEARCH (ИСКАТЬ) с фразой ALL (ОСОБО) или оператором SET (УСТАНОВИТЬ). Значение имени-индекса может изменяться только операторами PERFORM (ВЫПОЛНИТЬ), SEARCH (ИСКАТЬ) или SET (УС­ТАНОВИТЬ).

  1. Если указано целое-2 или целое-3, значение индекса опре­деляется как номер вхождения, представленный значением име- ни-индекса-1, либо значением данного, указанного именем-данно- го-2, увеличенным на значение целого-2 или целого-3 (когда ука­зан знак арифметической операции +) или уменьшенным на значе­ние целого-2 или целого-3 (когда указан знак арифметической опе­рации —).Модификация ссылки

    1. Назначение

Модификация ссылки определяет данное указанием его само® левой позиции литеры и длины данного.

  1. Общий формат

имя-данного-1 (позиция-самой-левой-литеры: [длина])

  1. С и нт а к с и ч е с к и е правила

  1. Имя-данного-1 должно быть именем данного, статья описа­ния которого содержит фразу об использовании USAGE IS DIS­PLAY (ДЛЯ ВЫДАЧИ).

  2. Позиция самой лецой литеры и длина должны быть ариф­метическими выражениями.

  3. Если особо не оговорено, модификация ссылки допустима< везде, где разрешен идентификатор соотнесенный данному, при­надлежащему к буквенно-цифровому классу.

  4. Имя-данного-1 может быть уточнено или индексировано.

  1. О б щ и е правила

  1. Каждой литере данного, соотнесенного имени-данного-1,. приписывается порядковый номер, который равен 1 для самой ле­вой позиции и увеличивается на единицу для каждой следующей.: позиции вплоть до самой правой позиции. Если статья описания, данного для имени-данного-1 содержит фразу SIGN IS SEPARATE'. (ЗНАК ОТДЕЛЬНО), позиции знака приписывается порядковый! номер в этом данном.

  2. Если данное, соотнесенное имени-данного-1, описано как:, числовое, числовое редактируемое, буквенное или буквенно-цифро­вое редактируемое, над ним производятся действия по модифика­ции ссылок, как если бы оно было переопределено как буквенно­цифровое данное того же размера, что и данное, соотнесенное име- ни-данного-1.

  3. Модификация ссылки для операнда выполняется по следу­ющим правилам:

  1. если для операнда указано индексирование, модификация: ссылки производится сразу же после вычисления индексов;

  2. если для операнда индексирование не указано, модификация ссылки производится тогда, когда производилось бы вычисление- индексов, если бы были указаны индексы.

  1. Модификация ссылки создает уникальное данное, являюще­еся подстрокой данного, соотнесенного имени-данного-1. Это дан­ное определяется по следующим правилам:

  2. вычисление позиции-самой-левой-литеры определяет поряд­ковую позицию самой левой литеры единственного данного по от­ношению к самой левой литере данного, соотнесенного имени-дан­ного-1. Результатом вычисления позиции самой левой литеры дол­жно быть положительное целое число, не равное нулю, меньшее.-

  3. 'или равное количеству литер в данном, соотнесенном имени-данно- ІГО-1;

  4. вычисление длины определяет размер данного, которое будет использовано в операции. Результатом вычисления длины должно быть положительное целое число, не равное нулю. Сумма позиции* самой-левой-литеры и длины минус единица должна быть меньше или равна количеству литер в данном, соотнесенном имени-данно- го-1.

Если длина не указана, создаваемое модификацией ссылки дан­ное распространяется от позиции-самой-левой-литеры (включая •ее) и до самой правой литеры (тоже включая ее) данного, соотне­сенного имени-данного-1.

  1. Создаваемое модификацией ссылки данное рассматривает­ся как элементарное данное без фразы JUSTIFIED (СДВИНУ­ТО). Оно относится к тому же классу и категории, что и данное, •соотнесенное имени-данного-1, учитывая то обстоятельство, что класс числовой, числовой редактируемый и буквенно-цифровой •редактируемый рассматриваются как класс и категория буквенно- щифровые.

  1. Идентификатор

Термин идентификатор используется в случае, когда имя дан- яого, дублируемое в программе, должно сопровождаться синтакси­чески правильной комбинацией уточнителей, индексов или модифи­каторов ссылки, необходимой для обеспечения однозначности «ссылки.

Общий формат идентификатора:

имя-данного-1


TN 1

ОРг)имя-данного-2



'

имя-коммуни-
кации-1

имя-файла-1

имя-отчета-1

имя-комму-

никации-1 имя-файла-1 имя-отчета-1

[ ({индекс} . . . ) ] [ (позиция-самой-левой-литеры: [длина]) ]

!имя-данного-1 [ИЗ имя-данного-2]... ИЗ

[ ({индекс}. . . )] [ (позиция-самой-левой-литеры: [длина])]

4Д.8.5. Имя условия

При наличии явной ссылки каждое из имен условий не должно дублироваться или должно позволять однозначное определение по­средством уточнения и (или) индексирования, за исключением слу­чаев, когда соглашения об области действия имен сами обеспечи­вают однозначность ссылок (ч. 10, п. 1.3.8).

Если для определения однозначности имени условия исполь­зуется уточнение, соответствующая условная переменная может- использоваться как первый уточнитель. При уточнении использу­ется иерархия имен, относящихся к условной переменной.

Если ссылки на условную переменную требуют индексирова­ния, то ссылки на любое из ее имен условия требуют той же ком­бинации индексов.

Формат и ограничения на совместное использование уточнения и индексирования имен-условий в точности совпадают с форматом!: и ограничениями для идентификатора, при этом имя-данного-1 нужно заменить на имя-условия-1.

В общем формате и дальнейшем тексте «имя-условия» обозна­чает уточненное или индексированное имя условия, если это необ­ходимо.

  1. Явные и неявные спецификации

Имеется четыре типа явных и неявных определений, встречаю­щихся в исходной Кобол-программе:

  1. явные и неявные обращения (ссылки) к данным в разделе, процедур;

  2. явные и неявные передачи управления;

  3. явные и неявные свойства;

  4. явные и неявные ограничители области действия.

  1. Явные и неявные обращения к данным в- разделе процедур

Исходная Кобол-программа может явно или неявно обращать­ся к данным в операторах раздела процедур. Явное обращение име­ет место в том случае, когда имя данного, к которому происходит обращение, записывается в операторе раздела процедур или копи­руется в разделе процедур с помощью оператора COPY (КОПИ­РОВАТЬ). Неявное обращение имеет место в том случае, когда оператор раздела процедур обращается к данному без указания: его имени. Неявное обращение имеет место также во время выпол­нения оператора PERFORM (ВЫПОЛНИТЬ), когда индекс пли данное, представленное именем индекса или идентификатором во фразах VARYING, AFTER, UNTIL (МЕНЯЯ, ЗАТЕМ, ДО), уста­навливаются в начало, изменяются или вычисляются механизмом управления, относящимся к этому оператору PERFORM (ВЫПОЛ­НИТЬ). Такое неявное обращение имеет место только в том слу­чае, когда данное участвует в выполнении оператора.

  1. Я в н ы е и неявные передачи управления

Механизм, управляющий программным потоком, передает уп­равление от оператора к оператору в той последовательности, в ко­торой они записаны в исходной программе, пока явная передача управления не прервет эту последовательность или не останется ни одного выполнимого оператора, которому можно передать уп- давление. Передача управления от оператора к оператору может происходить без явного указания в операторах раздела процедур; в этом случае она является неявной передачей управления.

Язык Кобол обеспечивает явные и неявные средства передачи управления.

В дополнение к неявной передаче управления в последователь­ности операторов, неявная передача управления имеет место и тог­да, когда нормальный ход выполнения операторов меняется без вы­полнения оператора ветвления процедуры. Кобол обеспечивает следующие типы неявного изменения управления, прерывающие передачу управления от оператора к оператору:

  1. если параграф выполняется под управлением другого опе­ратора (например, PERFORM (ВЫПОЛНИТЬ), USE (ИСПОЛЬ­ЗОВАТЬ), SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ)) и этот параграф является последним в области управляющего оператора, тогда неявная передача управления происходит от последнего опе­ратора в параграфе к механизму управления последнего выполня­емого управляющего оператора. Дальше, если параграф, выполня­емый под управлением оператора PERFORM (ВЫПОЛНИТЬ), яв- .ляется первым параграфом в области действия этого оператора PERFORM (ВЫПОЛНИТЬ), то неявная передача управления имеет место между механизмом управления, относящимся к этому оператору, и первым оператором в этом параграфе при каждой итерации выполнения параграфа;

  2. при выполнении оператора SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ) происходит неявная передача управления к со­ответствующей процедуре ввода и вывода;

  3. при выполнении оператора Кобола, приводящего к выпол­нению декларативной секции, происходит неявная передача управ­ления к этой секции. Заметим, что другая неявная передача управ­ления происходит после выполнения декларативной секции, как указано выше (пункт (1)).

Явная передача управления состоит в изменении механизма не­явной передачи посредством оператора ветвления процедуры или условного оператора. Явная передача управления может быть выз­вана только в результате выполнения оператора ветвления про­цедуры или условного оператора. Выполнение оператора ветвле­ния процедуры ALTER (ИЗМЕНИТЬ) само по себе не осуществ­ляет явной передачи управления, но влияет на нее при выполнении соответствующего оператора GO ТО (ПЕРЕЙТИ). Оператор вет­вления EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) приводит к явной передаче управления только при выполнении этого опера­тора в вызванной программе.

В этом документе термин «следующий выполнимый оператор» используется для обращения к следующему оператору Кобо­ла, которому передается управление согласно приведенным выше правилам и правилам, соответствующим каждому элементу языка.

Нет следующего выполнимого оператора, когда программа не содержит раздел процедур, а также для перечисленных ниже опе­раторов:

  1. последний оператор в декларативной секции, когда содер­жащий его параграф не выполняется под управлением некоторого- другого оператора Кобола;

  2. последний оператор в декларативной секции, когда опера­тор, находящийся в области активного оператора PERFORM. (ВЫПОЛНИТЬ), выполняется в другой секции и этот последний оператор декларативной секции не является в то же время послед­ним оператором процедуры, которая является выходом из актив­ного оператора PERFORM (ВЫПОЛНИТЬ);

  3. последний оператор в программе, когда содержащий его параграф не выполняется под управлением некоторого другого оператора Кобола в этой программе;

  4. оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) или EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), который передает уп­равление за пределы Кобол-программы;

  5. заголовок конца программы.

Когда нет следующего выполнимого оператора и управление не передается за пределы Кобол-программы, передача управления в программе не определена. Если выполнение программы активиро­вано в недекларативной части процедур другой программы посред­ством оператора CALL (ВЫЗВАТЬ), выполняется неявный опера­тор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ).

  1. Явные и неявные свойства

Свойства могут быть заданы явно и неявно. Любое свойство, которое задано явно, называется явным свойством. Если свойство- не задано явно, оно определяется по умолчанию. Такое свойство- определяется как неявное.

Например, использование данного нет необходимости задавать в случае, когда его использование DISPLAY (ДЛЯ ВЫДАЧИ).

  1. Я в н ы е и неявные ограничители области действия

Ограничители области действия служат для указания границ области действия определенных операторов раздела процедур- (п. 6.4.2.4 настоящей части). Ограничители области действия бы­вают двух типов: явные и неявные.

Явными ограничителями области действия являются следую­щие: