ГОСТ 22558-89 сторінка 22 з 116
Общими форматами для уточнения являются:
'Формат 1
(имя-данного-11 , , г [IN ) Iпмя-файла-1 П
имя-условия-1 J і Л—• имя-данного-2}... |OF[ имя-комму- 1
—1 LI ( никации-1 'J
г
(OF) (имя-файла-1 1
j имя-данното-1 (имя-условия-1
(
{ИЗ имя-данного-2} . .
I имя-файла-1 1 имя-комму- г
никации-1 J
IN 11 имя-коммуникации-1)
и ИЗ
мя-файла-1 имя-комму
никации-1
Формат 2
(OF) имя-параграфа-1 j [ имя-секции-1
имя-параграфа-1 ИЗ имя-секции-1
Формат 3
(OF1 .
имя-текста-1 1 имя-библиотеки-1
имя-текста-1 ИЗ имя-библиотеки-1
Формат 4
LINAGE-COUNTER [qF"! имя-файла-2
СЧЕТЧИК-ВЕРСТКИ ИЗ имя-файла-2
Формат 5 (PAGE-COUNTER | (IN 1 [LINE-COUNTER } [pF і имя-отчета-1
С имя-отчета-1
ЧЕТЧИК-СТРАНИЦ 1
СЧЕТЧИК-СТРОК ЦЗ
Формат 6
имя-данного-3
IN
I
0Р } имя-данного-4
IN 1 1
Орг| имя-отчета-2 J }
»
[ИЗ имя-отчета-2] 1
имя-данного-3
имя-данного-4 имя-отчета-2
Правила уточнения:
Для каждого неоднозначного имени, определенного пользователем, на которое имеется явная ссылка, однозначность должна устанавливаться посредством последовательности уточнителей, которая устраняет неоднозначность ссылки.
Имя может уточняться даже тогда, когда нет необходимости в уточнении; если имеется несколько комбинаций уточнителей^ обеспечивающих однозначность, использоваться может любая из. таких комбинаций.
IN и OF являются логическими эквивалентами.
В формате 1 уточнитель должен быть именем, относящимся к индикатору уровня, или именем группы, в которую входит уточняемое данное, или именем условной переменной, связанной с уточняемым именем-условия. Уточнители указываются в порядке последовательного нарастания уровней иерархии.
В формате 1 имя-данного-1 или имя-данного-2 может быть именем-записи.
Если имеется явная ссылка на имя параграфа, то имя параграфа не должно дублироваться внутри секции. Когда имя параграфа уточняется именем секции, слово SECTION (СЕКЦИЯ) опускается. Имя параграфа не нужно уточнять, если к нему обращаются внутри той же секции. На имя параграфа или имя сек
ции, появляющееся в программе, нельзя ссылаться из любой другой программы.
Если во время компиляции компилятору доступна более чем одна библиотека Кобола, имя текста должно уточняться при каждом обращении к нему.
Если в исходной программе имеется несколько статей описания файла, содержащих фразу LINAGE (ВЕРСТКА), LINAGE- COUNTER (СЧЕТЧИК-ВЕРСТКИ) должен уточняться каждый раз при обращении к нему.
Если в исходной программе определено несколько статей описания отчета, LINE-COUNTER (СЧЕТЧИК-СТРОК) должен быть уточнен при каждом обращении к нему в разделе процедур. В секции отчетов неуточненная ссылка на LINE-COUNTER (СЧЕТЧИК-СТРОК) неявно уточнена именем отчета, в статье описания которого имеется эта ссылка. При обращении к счетчику строк разных отчетов, LINE-COUNTER (СЧЕТЧИК-СТРОК) должен явно уточняться соответствующим именем отчета.
Если в исходной программе определено несколько статей описания отчета, PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) должен быть уточнен при каждом обращении к нему в разделе процедур. В секции отчетов неуточненная ссылка на PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) неявно уточнена именем отчета, в статье ■описания которого имеется эта ссылка. При обращении к счетчику страниц разных отчетов PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) должен явно уточняться соответствующим именем отчета.
Индексирование
И аз наче ние
Индексы используются при обращении к отдельному элементу из списка или таблицы однотипных элементов, которым не поставлены в соответствие индивидуальные имена данных (ч. 6, п. 5.8).
О б щ и й формат
ц имя-данного-1 имя-условия-1
елое-1
имя-данного-2 Ц—} целое-2] имя-индекса-1 Ц±} целое-3]
С и нт акс инее кие правила
Статья описания данного, содержащая имя-данного-1 или имя-данного, соотнесенное имени-условия-1, должна содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или должна подчиняться статье описания данного, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ).
За исключением случаев, указанных в синтаксическом правиле (4), при обращении к табличному элементу количество индексов должно равняться числу фраз OCCURS (ПОВТОРЯЕТСЯ) в описании данного табличного элемента. При использовании не- 148
скольких индексов они записываются в порядке от старшего к младшим уровням иерархии таблицы.
Имя-индекса-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 (ВЫПОЛНИТЬ), то неявная передача управления имеет место между механизмом управления, относящимся к этому оператору, и первым оператором в этом параграфе при каждой итерации выполнения параграфа;
Побачили розбіжність з офіційним текстом?