Украинская ССР
Государственный стандарт от 30 ноября 1989 года № ГОСТ 22558-89

ГОСТ 22558-89 (СТ СЭВ 6184-88, ИСО 1989-85) Язык программирования Кобол. Части 1-7

Принят
Государственным комитетом СССР по стандартам
20 декабря 1989 года
Разработан
Академией наук Украинской ССР
30 ноября 1989 года
    ГОСТ 22558-89
    (СТ СЭВ 6184-88,
    ИСО 1989-85)
    Группа П85
    ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР
    ЯЗЫК ПРОГРАММИРОВАНИЯ КОБОЛ
    Programming language COBOL
    ЧАСТИ 1-7
    ОКСТУ 4002
    Дата введения 1991-01-01
    ИНФОРМАЦИОННЫЕ ДАННЫЕ
    1.РАЗРАБОТАН И ВНЕСЕН Академией наук УССР РАЗРАБОТЧИКИ
    Е.Л.Ющенко, член-корр. АН УССР (руководитель темы); Л.П.Бабенко, канд. физ.-мат. наук; Г.А.Карпенко; Н.К.Лищитович; Л.А.Мельник; М.Р.Тарановский; Г.В.Пеледов; А.С.Марков; А.А.Севастюк; Л.М.Романовская; Л.К.Загузова
    2.УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Государственного комитета СССР по стандартам от 20.12.89 N 3894
    3.Срок первой проверки 1996 г.; периодичность проверки - 5 лет.
    4.Стандарт полностью соответствует СТ СЭВ 6184-88
    5.Стандарт полностью соответствует международному стандарту ИСО 1989-85
    6.ВЗАМЕН ГОСТ 22558-77
    7.ССЫЛОЧНЫЕ НОРМАТИВНО-ТЕХНИЧЕСКИЕ ДОКУМЕНТЫ
    Обозначение НТД, на который дана ссылка Номер приложения
    ГОСТ 22558-77* Приложение 1

    ______________
    * На территории Российской Федерации документ не действует. Действует ГОСТ 22558-89 (настоящий стандарт). - Примечание изготовителя базы данных.


  1. Часть 1.Основные положения

  2. 1.ВВЕДЕНИЕ К СТАНДАРТУ
    1.1.Область действия и назначение
    Настоящий стандарт распространяется на форму и интерпретацию программ, выраженных в русской или английской нотации языка Кобол. Он предназначен для обеспечения высокой степени машинной независимости Кобол-программ и их совместимости в различных системах автоматической обработки данных.
    1.2.Структура спецификаций языка
    Организация спецификаций Кобола в настоящем документе базируется на понятии функционального обрабатывающего модуля. В языке выделены одиннадцать функциональных обрабатывающих модулей:
    ядро;
    последовательный ввод-вывод;
    относительный ввод-вывод;
    индексный ввод-вывод;
    межпрограммные связи;
    сортировка-слияние;
    обработка исходных текстов;
    генератор отчетов;
    коммуникации;
    отладка;
    сегментация.
    Девять из модулей, как указано ниже, содержат элементы, которые в модуле разделены на элементы уровня 1 и элементы уровня 2. Элементы уровня 1 модуля являются подмножеством элементов уровня 2 того же модуля; два модуля содержат только элементы уровня 1.
    Модуль ядра содержит элементы языка для внутренней обработки данных в базисной структуре четырех разделов программ. Ядро также содержит элементы языка для определения таблиц и доступа к ним. Элементы ядра разделены на два уровня. Уровень 1 ядра содержит элементы, необходимые для выполнения основных внутренних операций, т.е. элементарные варианты различных фраз и операторов. Уровень 2 ядра обеспечивает более широкие возможности внутренней обработки данных.
    Модуль последовательного ввода-вывода содержит элементы языка для определения файлов с последовательной организацией и доступа к ним. Элементы модуля последовательного ввода-вывода разделены на два уровня. Уровень 1 модуля последовательного ввода-вывода включает элементы для основных возможностей определения и доступа к последовательным файлам. Уровень 2 модуля последовательного ввода-вывода содержит элементы для полных возможностей определения и доступа к последовательным файлам.
    Модуль относительного ввода-вывода содержит элементы языка для определения файлов массовой памяти, записи которых идентифицируются своими относительными номерами, доступа к ним. Элементы модуля относительного ввода-вывода разделены на два уровня. Уровень 1 относительного ввода-вывода содержит элементы для основных возможностей определения файлов с относительной организацией и доступа к ним. Уровень 2 относительного ввода-вывода содержит элементы для более полных возможностей, включающих возможность как произвольного, так и последовательного доступа к файлу в одной и той же программе Кобола.
    Модуль индексного ввода-вывода содержит элементы языка для определения файлов массовой памяти и доступа к ним. Записи этих файлов идентифицируются значением ключа и доступны посредством индекса. Элементы модуля индексного ввода-вывода разделены на два уровня. Уровень 1 индексного ввода-вывода содержит элементы для основных возможностей определения и доступа к индексным файлам. Уровень 2 индексного ввода-вывода содержит элементы для более полных возможностей, включающих дополнительные ключи и возможность как произвольного, так и последовательного доступа к файлу в одной и той же программе Кобола.
    Модуль межпрограммных связей содержит элементы языка, позволяющие программе поддерживать связь с одной или несколькими другими программами. Элементы модуля межпрограммных связей разделяются на два уровня. Уровень 1 межпрограммных связей предоставляет элементы для передачи управления другой программе, известной во время компиляции, и для доступа к определенным общим данным в обеих программах. Уровень 2 межпрограммных связей предоставляет элементы для передачи управления другой программе, не идентифицированной во время компиляции, и для обеспечения вложенности программ.
    Модуль сортировки-слияния содержит элементы языка для упорядочения одного или нескольких файлов. Модуль сортировки-слияния также содержит элементы языка для соединения двух или более идентично упорядоченных файлов. По желанию пользователь может применить некоторую специальную обработку к каждой из отдельных записей посредством процедур ввода или вывода. Модуль сортировки-слияния содержит элементы только одного уровня.
    Модуль обработки исходного текста содержит элементы языка для вставки и замены текста исходной программы как части компилируемой исходной программы. Элементы модуля обработки исходного текста разделены на два уровня. Уровень 1 модуля предоставляет возможность копирования текста в исходную программу из единственной библиотеки. Уровень 2 данного модуля предоставляет дополнительные возможности изменения библиотечного текста в процессе копирования, определения нескольких библиотек Кобола во время компиляции и изменения текста исходной программы.
    Модуль генератора отчетов содержит элементы языка для полуавтоматического производства печатных отчетов. Модуль генератора отчетов содержит элементы только одного уровня.
    Модуль коммуникаций содержит элементы языка для получения, обработки и создания сообщений или их частей и для связи с коммуникационными устройствами при помощи системы управления сообщениями. Элементы модуля коммуникаций разделены на два уровня. Уровень 1 коммуникаций предоставляет элементы для основных возможностей передачи или получения полных сообщений. Уровень 2 коммуникаций предоставляет элементы для более широких возможностей, включающих возможность посылать или получать сегменты сообщения.
    Модуль отладки предоставляет средства, при помощи которых пользователь может указывать свой алгоритм отладки - условия, при которых данные или процедуры контролируются во время выполнения программы. Элементы модуля отладки разделяются на два уровня. Уровень 1 модуля отладки предоставляет основные возможности отладки, включающие возможность указывать выборочное или полное контролирование параграфов. Уровень 2 модуля отладки предоставляет полные возможности отладки в языке Кобол.
    Модуль сегментации обеспечивает совмещение памяти для секций раздела процедур во время выполнения. Элементы модуля сегментации разделены на два уровня. Уровень 1 сегментации предусматривает номера сегментов секций и фиксированные границы сегментов. Уровень 2 сегментации добавляет средства изменения границы сегментов.
    1.3.Структура документа
    Настоящий документ состоит из 17 частей.
    Часть 1 содержит справочные сведения о языке и состоит из введения к стандарту и списка элементов языка.
    Часть 2 представляет концепции, имеющие отношение к использованию и организации средств языка Кобол.
    Часть 3 состоит из глоссария, определяющего термины в соответствии с их значением в Коболе.
    Часть 4 содержит общие сведения.
    Часть 5 содержит сводки форматов в английской и русской нотациях.
    Части 6-16 содержат спецификации одиннадцати функциональных обрабатывающих модулей. В этих частях спецификации уровня 2 выделены рамкой.
    В частях 2-16 включены подробные спецификации стандарта языка Кобол. В части 17 содержатся приложения.
    1.4.Рекомендации по использованию текста стандарта
    Очевидно, что стандарт будет изучаться с нескольких различных точек зрения.
    Ключом к изучению стандарта, кроме оглавления, служит также список элементов по модулям, в котором содержится подробная конкретизация каждого элемента стандарта Кобола в данном модуле. Например, установить содержание уровня 1 модуля последовательного ввода-вывода можно, найдя список элементов Кобола, включающий общие сведения, статьи раздела оборудования, статьи раздела данных и глаголы раздела процедур, имеющие отношение к модулю последовательного ввода-вывода.
    Спецификация каждого из элементов языка производится как для русской, так и для английской нотаций. Там, где это требуется в тексте настоящего стандарта, приводятся форматы. Между конструкциями английской и русской нотаций языка Кобол, специфицированных настоящим стандартом, существует полное семантическое соответствие, если исходные данные объектной программы подготовлены без использования русского алфавита. Там, где в тексте требуется ссылка на лексические элементы языка, первым приводится лексический элемент английской нотации, за ним в скобках следует элемент русской нотации. Форматы языковых конструкций приводятся также для английской и русской нотаций. Спецификации особенностей использования данных, представленных в русской лексике, снабжаются пометкой "для русской нотации".
    Определение модулей и их уровней, на которых появляются определенные средства языка, приводится в списке элементов Кобола по разделам Кобола. В этом списке приведены в деталях все элементы стандарта языка Кобол и указано их появление в различных модулях. Элементы, не содержащиеся полностью на одном уровне модуля, приведены в деталях, достаточных для определения нахождения каждого подэлемеита. Например, оператор READ (ЧИТАТЬ) появляется на уровне 1 модуля последовательного ввода-вывода, относительного ввода-вывода и индексного ввода-вывода. Так как определенные фразы оператора READ (ЧИТАТЬ) появляются только на уровне 2 этих модулей, подэлементы оператора READ (ЧИТАТЬ) вынесены в отдельный список.
    Графическое представление 11 функциональных обрабатывающих модулей, образующих стандарт Кобола, показано в табл.1, в которой используются сокращения (например, 2 ИПД 0,2), указывающие иерархическую позицию каждого уровня в функциональном обрабатывающем модуле, также как и число уровней, на которые разделены элементы модуля. Сокращенная запись состоит (слева направо) из однозначного числа, указывающего позицию уровня в иерархии, трехбуквенного обозначения модуля и двух однозначных чисел, указывающих минимальный и максимальный уровни модуля. Число нуль указывает, что допустимо пустое подмножество, соответствующее наименьшему уровню в модуле. Например, 2 ИПД 0,2 указывает, что этот уровень является вторым уровнем модуля индексного ввода-вывода, который содержит нулевой уровень и два ненулевых уровня (уровень 1 и уровень 2). 2 ЯДР 1,2 указывает, что этот уровень является вторым ненулевым уровнем ядра, которое состоит из двух ненулевых уровней (уровень 1 и уровень 2).
    Для указания модулей используются следующие обозначения.
    Ядро ЯДР
    Последовательный ввод-вывод ПОД
    Относительный ввод-вывод ОТД
    Индексный ввод-вывод ИПД
    Межпрограммные связи МПС
    Сортировка-слияние СРТ
    Обработка исходных текстов ОИТ
    Генератор отчетов ГОТ
    Коммуникации КОМ
    Отладка ОТЛ
    Сегментация СЕГ

    Таблица 1
    Подмно- жества Кобола Обязательные модули (обязательны в подмножествах) Необязательные модули (не обязательны в подмножествах)
    Ядро Последо- ватель- ный ввод- вывод Относи- тельный ввод- вывод Индексный ввод- вывод Межпрог- раммные связи Сорти- ровка- слияние Обра- ботка исходных текстов Гене- ратор отчетов Коммуни- кации Отладка Сегмен- тация
    Макси- мальное 2 ЯДР 1,2 2 ПОД 1,2 2 ОТД 0,2 2 ИПД 0,2 2 МПС 1,2 1 СРТ 0,1 2 ОИТ 0,2 1 ГОТ 0,1 2 КОМ 0,2 2 ОТЛ 0,2 2 СЕГ 0,2
    Проме- жуточное 1 ЯДР 1,2 1 ПОД 1,2 1 ОТД 0,2 1 ИПД 0,2 1 МПС 1,2 1 СРТ 0,1 1 ОИТ 0,2 1 КОМ 0,2 1 ОТЛ 0,2 1 СЕГ 0,2
    Мини- мальное 1 ЯДР 1,2 1 ПОД 1,2 Нуль (пустое подмно- жество) Нуль (пустое подмн- жество) 1 МПС 1,2 Нуль (пустое подмно- жество) Нуль (пустое подмно- жество)

    1.5.Определение реализации стандарта языка Кобол
    В этом документе представлены описания средств языка, образующих стандарт языка Кобол. Стандарт языка Кобол состоит из 11 модулей, семь из которых обязательны и четыре - необязательны. В п.1.5 и его подпунктах определены критерии для правильного определения того, насколько реализация соответствует стандарту языка Кобол.
    1.5.1.Определение подмножеств
    Имеются три подмножества стандарта языка Кобол: максимальное подмножество, промежуточное подмножество и минимальное подмножество. Каждое подмножество состоит из уровня семи обязательных модулей: ядра, последовательного ввода-вывода, относительного ввода-вывода, индексного ввода-вывода, межпрограммных связей, сортировки-слияния и обработки исходных текстов. В табл.1 подмножество стандарта языка Кобол представлено одной из трех горизонтальных строк в столбцах обязательных модулей. Четыре модуля (генератор отчетов, коммуникации, отладка и сегментация) являются необязательными в трех подмножествах стандарта языка Кобол.
    Максимальное подмножество стандарта языка Кобол содержит все элементы наивысшего уровня всех обязательных модулей, а именно:
    элементы уровня 2 ядра, последовательного ввода-вывода, относительного ввода-вывода, индексного ввода-вывода, межпрограммных связей и обработки исходных текстов;
    элементы уровня 1 сортировки-слияния.
    Промежуточное подмножество стандарта языка Кобол содержит все элементы уровня 1 всех обязательных модулей:
    элементы уровня 1 ядра, последовательного ввода-вывода, относительного ввода-вывода, индексного ввода-вывода, межпрограммных связей, сортировки-слияния и обработки исходных текстов.
    Минимальное подмножество стандарта языка Кобол содержит все элементы уровня 1 ядра, последовательного ввода-вывода и межпрограммных связей.
    1.5.2.Определение соответствия реализации стандарту
    1.5.2.1.Замена элементов или дополнительные элементы языка
    Реализация не должна для выполнения функций, идентичных функциям элементов стандарта языка Кобол, допускать замену или включение дополнительных элементов языка в исходной программе. Однако в спецификациях стандарта языка Кобол имеется ряд элементов языка, синтаксис или действие которых определяется реализацией (приложение 2, п.2); но и при определении синтаксиса или правил для таких элементов не разрешается замена элементов или включение дополнительных элементов в исходную программу.
    1.5.2.2.Соглашения о стандартных элементах языка
    Реализация должна поддерживать синтаксис и обеспечивать функции всех элементов стандарта языка Кобол, как это определено данным уровнем модуля, включаемым в реализацию, за исключением элементов языка, зависящих от специфических компонент оборудования, которые приведены в п.1.5.2.5.1 настоящей части. Если реализация поддерживает синтаксис элементов стандарта языка Кобол для данного уровня модуля, отличного от того, поддержка которого объявлена, реализация должна обеспечить функции, определенные стандартом языка Кобол для данного синтаксиса, или идентифицировать эти элементы языка как нестандартные расширения (п.1.5.2.5.2 настоящей части).
    1.5.2.3.Устаревшие элементы языка
    Устаревшие элементы языка - элементы в стандарте языка Кобол, которые будут изъяты при следующем пересмотре стандарта (приложение 2, п.1). Устаревшие элементы языка не были ни усилены, ни модифицированы в процессе пересмотра. Взаимодействие между устаревшими и остальными элементами языка не определено, если не оговорено специально в стандарте. Элементы языка, которые предполагается изъять из стандарта, будут сначала идентифицированы как устаревшие элементы языка.
    От реализации стандарта Кобола требуется поддержка устаревших элементов в подмножестве и уровнях необязательных модулей, поддержка которых объявлена. Документация, связанная с реализацией, должна идентифицировать все устаревшие элементы языка в данной реализации.
    Реализация, соответствующая стандарту языка Кобол, должна предусмотреть средство, которое по желанию программиста может быть подключено к компилятору для определения, содержит ли программа устаревшие элементы языка.
    1.5.2.4.Действия, обеспечиваемые вне исходной программы
    Если любая функция, которая выполняет функции элемента стандарта Кобола, содержащегося в данном уровне модуля, который объявлен включенным в реализацию, обеспечивается вне исходной программы, реализация не должна требовать спецификации внешних функций вместо или в дополнение к элементу стандарта языка.
    Реализация может требовать спецификации вне исходной программы интерфейса с операционной средой для поддержки функций, определенных в исходной программе.
    1.5.2.5.Уточнения
    1.5.2.5.1.Элементы языка, зависящие от оборудования
    Ряд элементов языка рассчитан на определенный тип технических средств (приложение 2, п.3). Для того, чтобы реализация удовлетворяла требованиям этого стандарта, разработчик должен указать технические средства, которые поддерживает реализация. Более того, когда объявлена поддержка специфических технических средств, должны быть реализованы все элементы языка, которые зависят от этих средств, если модуль, в котором они появляются, включен в реализацию. Элементы языка, имеющие отношение к специфическим компонентам оборудования, для которых не объявлена поддержка реализации, нет необходимости реализовать. Отсутствие таких элементов должно быть указано реализацией стандарта языка Кобол.
    1.5.2.5.2.Расширение элементов языка
    Реализация, включающая элементы языка в дополнение к подмножеству и уровням необязательных модулей, для которых объявлена поддержка, удовлетворяет требованиям стандарта языка Кобол. Это истинно, хотя и может означать расширение списка зарезервированных слов данной реализацией, и, таким образом, может помешать правильной компиляции некоторых программ, которые удовлетворяют требованиям стандарта языка Кобол.
    Реализация должна идентифицировать каждое стандартное расширение (элементы языка, не указанные в поддерживаемом подмножестве или поддерживаемых уровнях необязательных модулей, но определенные в другом месте стандарта языка Кобол) или нестандартные расширения (элементы языка или действия, не определенные в стандарте языка Кобол) в соответствующей ей документации.
    Реализация, соответствующая стандарту языка Кобол, должна предусмотреть средство, которое по желанию программиста может быть подключено к компилятору для определения, содержит ли данная программа нестандартные расширения, включенные в реализацию.
    1.5.2.5.3.Зарезервированные слова
    Реализация стандарта языка Кобол должна распознавать в качестве зарезервированных слов все зарезервированные слова Кобола, встречающиеся в спецификациях семи обязательных модулей и четырех необязательных модулей (ч.4, п.8).
    1.5.2.5.4.Замена литер
    Определение набора литер Кобола (ч.3) представляет полный набор литер стандарта языка Кобол. Когда реализация не обеспечивает графическое представление для всего набора литер Кобола, реализацией может быть указана заменяющая графика для непредставимых литер.
    1.5.2.5.5.Оператор ENTER (ВОЙТИ)
    По усмотрению разработчика, реализация стандарта языка Кобол может включать или не включать оператор ENTER (ВОЙТИ).
    К реализации спецификаций стандарта Кобола применяются приведенные ниже уточнения.
    Реализация, соответствующая стандарту языка Кобол, должна полностью поддерживать любое из трех подмножеств, определенных в п.1.5.1, и может включать все, любую комбинацию или ни одного из уровней необязательных модулей.
    Соответствующая стандарту реализация данного подмножества стандарта языка Кобол должна полностью поддерживать все элементы языка этого подмножества (п.1.5.2.5 настоящей части).
    Кроме того, каждая реализация должна удовлетворять требованиям, изложенным ниже (пп.1.5.2.1-1.5.2.4).
    1.6.Соответствие исходной программы стандарту
    Соответствующая стандарту исходная программа - это программа, не нарушающая явно установленных условий и спецификаций стандарта языка Кобол. Чтобы исходная программа соответствовала стандарту языка Кобол, она не должна включать никаких элементов языка, не определенных в этом стандарте. Выполнение программы, исходный текст которой соответствует стандарту языка Кобол, предсказуемо только в пределах, определенных в этом стандарте. Результаты нарушения форматов или правил стандарта языка Кобол, не определены, если противное не оговорено в стандарте.
    Для того, чтобы исходная программа соответствовала определенному подмножеству стандарта языка Кобол, она должна включать в себя только элементы языка этого подмножества.
    В стандарте языка Кобол имеется ряд ситуаций, в которых результат выполнения оператора не определен или непредсказуем (приложение 2, п.4). Исходная Кобол-программа, допускающая такие ситуации, не соответствует стандарту, поскольку результат выполнения не определен стандартом языка Кобол.
    1.7.Сочетание соответствующей стандарту программы и соответствующей стандарту реализации
    Компиляция соответствующей стандарту исходной программы соответствующей стандарту реализацией и последующее выполнение результирующей объектной программы определены только в пределах, указанных стандартом. Однако это еще не значит, что программа будет скомпилирована или выполнена успешно, так как это зависит от других факторов, таких как использование элементов языка, определяемых реализацией, логическая правильность программы и данных, которыми оперирует программа.
    В общем случае, стандарт языка Кобол не указывает верхние количественные ограничения числа операторов в программе и числа операндов в некоторых операторах. Такие ограничения могут изменяться от реализации к реализации.
    2.СПИСОК ЭЛЕМЕНТОВ ПО МОДУЛЯМ
    2.1.Общее описание
    Ниже содержится список всех элементов стандарта Кобола, составленный в соответствии с функциональными обрабатывающими модулями.
    Столбец, озаглавленный "Уровень 1", определяет уровень 1 элементов модуля. Столбец, озаглавленный "Уровень 2", определяет уровень 2 элементов модуля.
    Символ "х" в столбце означает наличие указанного элемента в указанном уровне модуля.
    Символ "-" в столбце означает отсутствие указанного элемента в указанном уровне модуля.
    Символ "+" в столбце означает наличие указанного элемента в указанном уровне модуля; однако этот элемент является устаревшим элементом в стандарте Кобола, поэтому он будет удален в следующей редакции стандарта.
    2.2.Список элементов в модуле ядра
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Набор литер
    Литеры, используемые для слов
    в английской нотации 0-9, A-Z, - (дефис) x x
    в русской нотации А-Я, D, F, G, I, J, L, N, Q, R, S, U, V, W, Y, Z, 0-9, - (дефис) x x
    Литеры, используемые для пунктуации " ( ) . , ; пробел x x
    Литеры, используемые для пунктуации : (двоеточие) - x
    Литеры, используемые для редактирования В + - . , Z (П) * 0 CR (КP) DВ (ДБ) / x x
    Литеры, используемые в арифметических операциях + - * / ** - x
    Литеры, используемые в отношениях = >= <=> < x x
    Литеры, используемые при индексировании + - x x
    Разрешена замена одной литерой x х
    Разрешена замена парами литер + +
    Разделители
    " ( ) . , ; пробел x x
    : (двоеточие) - x
    Строки-литер
    Слова Кобола
    Не более 30 литер х х
    Слова, определенные пользователем
    имя-алфавита x х
    имя-класса х х
    имя-условия - х
    имя-данного x х
    имя-индекса x х
    номер-уровня х x
    мнемоническое-имя х х
    имя-параграфа x x
    имя-программы x x
    имя-программного-модуля + +
    имя-секции x x
    символическая-литера - х
    Системные-имена
    имя-машины х х
    имя-реализации x х
    имя-языка + +
    Зарезервированные слова
    Обязательные слова x х
    Ключевые слова x х
    Слова специальные литеры
    Знаки арифметических операций + - * / ** - х
    Знаки арифметических операций при индексировании + - x x
    Литеры отношения = > < >= <= x x
    Необязательные слова x x
    Слова специального назначения
    Стандартные константы:
    ZERO (НУЛЬ), ZEROS, ZEROES (НУЛИ), SPACE (ПРОБЕЛ), SPACES (ПРОБЕЛЫ), HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ), HIGH-VALUES (НАИБОЛЬШИЕ-ЗНАЧЕНИЯ), LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), LOW-VALUES (НАИМЕНЬШИЕ-ЗНАЧЕНИЯ), QUOTE (КАВЫЧКА), QUOTES (КАВЫЧКИ) x х
    Стандартные константы: символическая-литера, ALL литерал (ВСЕ литерал), ALL стандартная-константа (ВСЕ стандартная-константа), ALL символическая-литера (ВСЕ символическая-литера) - х
    Литералы
    Числовые литералы: от 1 до 18 цифр x x
    Нечисловые литералы: от 1 до 160 литер х x
    PICTURE строка-литер (ШАБЛОН строка-литер) x x
    Статья-комментарий + +
    Однозначность ссылки
    Уточнение
    Уточнение недопустимо, имена должны быть однозначны при ссылке х -
    50 уточнителей - х
    Индексирование
    3 уровня индексов x -
    7 уровней индексов - х
    Индексирование литералом х x
    Индексирование именем-данного х х
    Индексирование именем индекса х х
    Относительное индексирование x х
    Модификация ссылки - x
    Формат представления
    Порядковый номер x x
    Продолжение строк
    Нечисловой литерал x x
    Слова Кобола, числовой литерал, строка-литер шаблона - x
    Строки пробелов (пустые строки) x x
    Строки комментария
    Строки комментария со звездочкой (*) x x
    Строки комментария с дробной чертой (/) x x
    Отладочная строка с литерой D (Т) в поле индикатора x x
    Структура исходной программы
    Раздел идентификации обязателен x x
    Раздел оборудования необязателен x x
    Раздел данных необязателен x x
    Раздел процедур необязателен x x
    Заголовок конца программы - x
    РАЗДЕЛ ИДЕНТИФИКАЦИИ
    Параграф PROGRAM-ID (ПРОГРАММА) x x
    имя-программы x x
    Параграф AUTHOR (АВТОР) + +
    Параграф INSTALLATION (ПРЕДПРИЯТИЕ) + +
    Параграф DATE-WRITTEN (ДАТА-НАПИСАНИЯ) + +
    Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) - +
    Параграф SECURITY (ПОЛНОМОЧИЯ) + +
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция конфигурации
    Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) x х
    имя-машины x x
    фраза WITH DEBUGGING MODE (В РЕЖИME ОТЛАДКИ) x x
    Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) х х
    имя-машины х х
    фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) + +
    фраза PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) x x
    Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) х х
    Фраза ALPHABET (АЛФАВИТ) х х
    вариант STANDARD-1 (СТАНДАРТ-А) х х
    вариант STANDARD-2 (СТАНДАРТ-М) х х
    вариант NATIVE (ВНУТРЕННИЙ) х х
    вариант имя-реализации x х
    вариант литерал - x
    Фраза CLASS (КЛАСС) x x
    Фраза CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) х х
    Фраза DECIMAL-POINT (ДЕСЯТИЧНАЯ ТОЧКА) x x
    Фраза имя-реализации x x
    вариант IS мнемоническое-имя x x
    вариант ON STATUS IS имя-условия (ВКЛЮЧЕНО имя-условия) x x
    вариант OFF STATUS IS имя-условия (ВЫКЛЮЧЕНО имя-условия) x x
    Фраза SYMBOLIC CHARACTER (СИМВОЛИЧЕСКАЯ ЛИТЕРА) - x
    РАЗДЕЛ ДАННЫХ
    Секция рабочей памяти
    Статья-описания записи x x
    Статья описания уровня 77 x x
    Статья описания данного
    Фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) x x
    Фраза имя-данного x x
    Фраза FILLER (ЗАПОЛНИТЕЛЬ) x x
    Фраза JUSTIFIED (СДВИНУТО) x x
    Фраза номер-уровня x x
    от 01 до 49; одна или две цифры x x
    66 - x
    77 x x
    88 - x
    Фраза-OCCURS (ПОВТОРЯЕТСЯ) x x
    целое TIMES (целое РАЗ) x x
    фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) - x
    фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) x x
    фраза-целое-1 ТО целое-2 TIMES DEPENDING ON (целое-1 ДО целое-2 РАЗ В ЗАВИСИМОСТИ ОТ) - х
    Фраза PICTURE (ШАБЛОН) x x
    строка-литер содержит не более 30 литер x x
    литеры данных: X 9 А x x
    операционные символы: S(3) V(T) P(M) x x
    литеры фиксированной вставки В + -. 0 CR (КР) DB (ДБ) / x x
    литеры замещения или плавающей вставки* + - Z (П) x x
    замена валютного знака x x
    замена десятичной точки x x
    Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) x x
    не может быть вложенной x -
    может быть вложенной - х
    Фраза RENAMES (ПЕРЕИМЕНОВЫВАЕТ) - х
    Фраза SIGN (ЗНАК) x x
    Фраза SYNCHRONIZED (ВЫДЕЛЕНО) x x
    Фраза USAGE (об использовании) x x
    BINARY (ДВОИЧНОЕ) x x
    COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) x x
    DISPLAY (ДЛЯ ВЫДАЧИ) x x
    INDEX (ДЛЯ ИНДЕКСА) x x
    PACKED-DECIMAL (ДЕСЯТИЧНОЕ) x x
    Фраза VALUE (ЗНАЧЕНИЕ) x x
    литерал x x
    несколько литералов - x
    литерал-1 THROUGH литерал-2 (литерал-1 ПО литерал-2) - x
    несколько диапазонов литералов - x
    РАЗДЕЛ ПРОЦЕДУР
    Арифметическое выражение - x
    Знаки бинарных арифметических операций + - * / ** - x
    Знаки унарных арифметических операций + - - x
    Условные выражения x x
    Простое условие x x
    Условие отношения x x
    Знаки операций отношения
    [NOT] GREATER THAN ([HE] БОЛЬШЕ) x x
    [NOT] > ([HE] >) x x
    [NOT] LESS THAN ([HE] МЕНЬШЕ) x x
    [NOT] < ([HE] td> x x
    [NOT] EQUAL TO ([NE] РАВНО) x x
    [NOT] = ([HE] =) x x
    GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) x x
    > = x x
    LESS THAN OR EQUAL TO (МЕНЬШЕ ИЛИ РАВНО) x x
    < = x x
    Сравнение числовых операндов x x
    Сравнение нечисловых операндов x x
    Сравнение имен индексов и (или) индексных данных x x
    Условие класса x x
    NUMERIC (ЧИСЛОВОЕ) x x
    ALPHABETIC (БУКВЕННОЕ) x x
    ALPHABETIC-LOWER (СТРОЧНЫЕ) x x
    ALPHABETIC-UPPER (ПРОПИСНЫЕ) x x
    имя-класса x x
    Условие имени-условия - x
    Условие знака - x
    Условие состояния переключателя x x
    Сложное условие - x
    Знаки логических операций AND (И) OR (ИЛИ) NOT (HE) - x
    Отрицание условия - x
    Комбинированное условие - x
    Условие в скобках х x
    Сокращенные комбинированные условия отношений - x
    Арифметические операторы x x
    Арифметические операнды имеют длину до 18 цифр x x
    Композиция операндов содержит не более 18 цифр x x
    Оператор ACCEPT (ПРИНЯТЬ) x x
    идентификатор x x
    только одна передача данных x -
    число передач данных не ограничивается - x
    фраза FROM, мнемоническое-имя (С мнемоническое-имя) - х
    фраза FROM DATE/DAY/DAY-OF-WEEK/TIME (ДАТУ/ДЕНЬ/ДЕНЬ/-НЕДЕЛИ/ВРЕМЯ) - x
    Оператор ADD (СЛОЖИТЬ) x x
    идентификатор/литерал x x
    несколько идентификаторов/литералов x x
    ТО идентификатор (С идентификатор) x x
    ТО несколько идентификаторов (С несколько идентификаторов) x x
    ТО идентификатор/литерал GIVING идентификатор (С идентификатор/литерал ПОЛУЧАЯ идентификатор х x
    ТО идентификатор/литерал GIVING несколько идентификаторов (С идентификатор/литерал ПОЛУЧАЯ несколько идентификаторов x x
    фраза ROUNDED (ОКРУГЛЯЯ) x x
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) x x
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) x x
    фраза END-ADD (КОНЕЦ-СЛОЖИТЬ) x x
    фраза CORRESPONDING (СООТВЕТСТВЕННО) - x
    Оператор ALTER (ИЗМЕНИТЬ) + +
    только одно имя-процедуры + -
    несколько имен-процедур - +
    Оператор COMPUTE (ВЫЧИСЛИТЬ) - x
    арифметическое выражение - x
    несколько идентификаторов - x
    фраза ROUNDED (ОКРУГЛЯЯ) - x
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) - x
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) - х
    фраза END-COMPUTE (КОНЕЦ-ВЫЧИСЛИТЬ) - x
    Оператор CONTINUE (ПРОДОЛЖИТЬ) x х
    Оператор DISPLAY (ВЫДАТЬ) x х
    только одна передача данных x -
    число передач данных не ограничено - x
    идентификатор/литерал x x
    несколько идентификаторов/литералов х x
    фраза UPON мнемоническое-имя (НА мнемоническое-имя) - х
    фраза WITH NO ADVANCING (БЕЗ ПРОДВИЖЕНИЯ) - x
    Оператор DIVIDE (РАЗДЕЛИТЬ) - x
    ВY идентификатор/литерал (НА идентификатор/литерал) x x
    INTO идентификатор/литерал (НА идентификатор/литерал) х x
    INTO несколько делимых (НА несколько делимых) х x
    GIVING идентификатор (ПОЛУЧАЯ идентификатор) x x
    GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) x х
    фраза ROUNDED (ОКРУГЛЯЯ) х х
    фраза REMAINDER (ОСТАТОК) - х
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) x х
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) х х
    фраза END-DIVIDE (КОНЕЦ-РАЗДЕЛИТЬ) х х
    Оператор ENTER (ВОЙТИ) + +
    Оператор EVALUATE (ОЦЕНИТЬ) - х
    идентификатор/литерал - x
    арифметическое выражение - x
    условное выражение - х
    TRUE/FALSE (ИСТИНА/ЛОЖЬ) - х
    фраза ALSO (ТАКЖЕ) - х
    фраза WHEN (КОГДА) - x
    фраза ALSO (ТАКЖЕ) - x
    фраза WHEN OTHER (ИНАЧЕ) - х
    фраза END-EVALUATE (КОНЕЦ-ОЦЕНИТЬ) - х
    Оператор EXIT (ВЫЙТИ) x x
    Оператор GO TO (ПЕРЕЙТИ К) х х
    имя-процедуры обязательно x -
    имя-процедуры необязательно - +
    фраза DEPENDING ON (В ЗАВИСИМОСТИ ОТ) х х
    Оператор IF (ЕСЛИ) х х
    только повелительные операторы х -
    повелительные и (или) условные операторы - x
    вложенные операторы IF (ЕСЛИ) х х
    необязательное слово THEN (TO) х х
    фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) х х
    фраза ELSE (ИНАЧЕ) х х
    фраза END-IF (КОНЕЦ-ЕСЛИ) х х
    Оператор INITIALIZE (ИНИЦИИРОВАТЬ) - x
    несколько идентификаторов - x
    фраза REPLACING (ЗАМЕНЯЯ) - x
    несколько REPLACING (ЗАМЕНЯЯ) - x
    Оператор INSPECT (ПРОСМОТРЕТЬ) x x
    на вхождение одной литеры x -
    на вхождение нескольких литер - x
    фраза TALLYING (СЧИТАЯ) x x
    фраза BEFORE/AFTER (ДО/ПОСЛЕ) x x
    несколько фраз BEFORE/AFTER (ДО/ПОСЛЕ) - x
    несколько фраз TALLYING (СЧИТАЯ) - x
    фраза REPLACING (ЗАМЕНЯЯ) x x
    фраза BEFORE/AFTER (ДО/ПОСЛЕ) x x
    несколько фраз BEFORE/AFTER (ДО/ПОСЛЕ) - x
    несколько фраз REPLACING (ЗАМЕНЯЯ) - x
    фразы TALLYING (СЧИТАЯ) и REPLACING (ЗАМЕНЯЯ) x x
    фраза CONVERTING (ПРЕВРАЩАЯ) - x
    Оператор MOVE (ПОМЕСТИТЬ) x x
    ТО идентификатор (В идентификатор) x х
    ТО несколько идентификаторов (В несколько идентификаторов) x x
    дередактирование цифровых редактируемых данных - x
    фраза CORRESPONDING (СООТВЕТСТВЕННО) - х
    Оператор MULTIPLY (УМНОЖИТЬ) x x
    BY идентификатор (НА идентификатор) x x
    BY несколько идентификаторов (НА несколько идентификаторов) х x
    GIVING идентификатор (ПОЛУЧАЯ идентификатор) x x
    GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) х x
    фраза ROUNDED (ОКРУГЛЯЯ) x x
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) x x
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) х x
    фраза END-MULTIPLY (КОНЕЦ-УМНОЖИТЬ) x х
    Оператор PERFORM (ВЫПОЛНИТЬ) x х
    имя-процедуры необязательно x х
    фраза THROUGH имя-процедуры (ПО имя-процедуры) x x
    вариант повелительный-оператор x х
    фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ) x x
    фраза TIMES (РАЗ) х х
    фраза UNTIL (ДО) x x
    фраза TEST BEFORE/AFTER (С ПРОВЕРКОЙ В НАЧАЛЕ/В КОНЦЕ) - x
    фраза VARYING (МЕНЯЯ) - x
    фраза TEST BEFORE/AFTER (С ПРОВЕРКОЙ В НАЧАЛЕ/В КОНЦЕ) - x
    фраза AFTER (ЗАТЕМ) - x
    допускаются по крайней мере 6 фраз AFTER (ЗАТЕМ) - x
    Оператор SEARCH (ИСКАТЬ) - x
    фраза VARYING (МЕНЯЯ) - x
    фраза AT END (В КОНЦЕ) - x
    фраза WHEN (КОГДА) - x
    несколько фраз WHEN (КОГДА) - x
    фраза END-SEARCH (КОНЕЦ-ИСКАТЬ) - x
    Оператор SEARCH ALL (ИСКАТЬ ОСОБО) - x
    фраза AT END (В КОНЦЕ) - x
    фраза WHEN (КОГДА) - x
    фраза END-SEARCH (КОНЕЦ-ИСКАТЬ) - x
    Оператор SET (УСТАНОВИТЬ) x x
    имя-индекса/идентификатор ТО (НА) x x
    имя-индекса UP BY/DOWN BY (имя-индекса ПРИБАВЛЯЯ/ВЫЧИТАЯ) х x
    мнемоническое-имя ТО ON/OFF (мнемоническое-имя НА ВКЛЮЧЕНО/ВЫКЛЮЧЕНО) х x
    имя-условия ТО TRUE (имя-условия НА ИСТИНА) - x
    Оператор STOP (ОСТАНОВИТЬ) x x
    RUN (РАБОТУ) x x
    литерал + +
    Оператор STRING (СОБРАТЬ) - x
    несколько DELIMITED BY (ОГРАНИЧИВАЯСЬ) - x
    фраза WITH POINTER (УКАЗАТЕЛЬ) - x
    фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) - x
    фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) - x
    фраза END-STRING (КОНЕЦ-СОБРАТЬ) - х
    Оператор SUBTRACT (ОТНЯТЬ) х x
    идентификатор/литерал х х
    несколько идентификаторов/литералов x х
    FROM идентификатор (ОТ идентификатор) x х
    FROM несколько идентификаторов (ОТ несколько идентификаторов) x х
    GIVING идентификатор (ПОЛУЧАЯ идентификатор) x х
    GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) х x
    фраза ROUNDED (ОКРУГЛЯЯ) х х
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) х x
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) х x
    фраза END-SUBTRACT (КОНЕЦ-ОТНЯТЬ) x x
    фраза CORRESPONDING (СООТВЕТСТВЕННО) - х
    Оператор UNSTRING (РАЗОБРАТЬ) - х
    фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) - х
    фраза DELIMITER IN (ОГРАНИЧИТЕЛЬ В) - х
    фраза COUNT IN (СЧЕТ В) - х
    фраза WITH POINTER (УКАЗАТЕЛЬ) - х
    фраза TALLYING (СЧИТАЯ В) - х
    фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) - х
    фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) - х
    фраза END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ) - х

    2.3.Список элементов в модуле последовательного ввода-вывода
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем
    имя-файла x x
    имя-записи х x
    Зарезервированные слова
    Специальный регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) - x
    Состояние ввода-вывода x x
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция ввода-вывода
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) x x
    Статья управления файлом x x
    фраза SELECT (ДЛЯ) x х
    фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) - x
    только входной, входной-выходной и дополняемый - x
    фраза ACCESS MODE IS SEQUENTIAL (ДОСТУП ПОСЛЕДОВАТЕЛЬНЫЙ) х x
    фраза ASSIGN (НАЗНАЧИТЬ) х х
    имя-реализации х x
    литерал x x
    фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) х х
    фраза ORGANIZATION IS SEQUENTIAL (ОРГАНИЗАЦИЯ ПОСЛЕДОВАТЕЛЬНАЯ) х х
    фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) - x
    фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) - x
    фраза RESERVE (РЕЗЕРВИРОВАТЬ) - х
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) x x
    фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) - +
    фраза RERUN (ПЕРЕПРОГОН) + +
    фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) x x
    фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) - x
    РАЗДЕЛ ДАННЫХ
    Секция файлов
    Статья описания файла x x
    индикатор уровня FD (ОФ) x x
    фраза BLOCK CONTAINS (В БЛОКЕ) x х
    целое-1 RECORDS/CHARACTERS (целое-1 ЗАПИСЕЙ/ЛИТЕР) x x
    целое-1 ТО целое-2 RECORDS/CHARACTERS (целое-1 ДО целое-2 ЗАПИСЕЙ/ЛИТЕР) - x
    фраза CODE-SET (АЛФАВИТ) x x
    фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) + +
    фраза LABEL RECORDS (МЕТКИ) + +
    фраза LINAGE (ВЕРСТКА) - х
    фраза FOOTING (КОНЦОВКА) - x
    фраза ТОР (ВЕРХНЕЕ ПОЛЕ) - x
    фраза BOTTOM (НИЖНЕЕ ПОЛЕ) - x
    фраза RECORD (В ЗАПИСИ) x x
    целое-1 CHARACTERS (целое-1 ЛИТЕР) x х
    фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) - x
    FROM целое-2 ТО целое-3 CHARACTERS (ОТ целое-2 ДО целое-3 ЛИТЕР) - х
    фраза DEPENDING ON (В ЗАВИСИМОСТИ ОТ) - x
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) х x
    фраза VALUE (ЗНАЧЕНИЕ) + +
    имя-реализации литерал + +
    имя-реализации несколько литералов + +
    имя-реализации имя-данного - +
    имя-реализации несколько имен-данных - +
    Статья описания записи x х
    РАЗДЕЛ ПРОЦЕДУР
    Декларативные процедуры x x
    DECLARATIVES (ДЕКЛАРАТИВЫ) х x
    END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) x x
    Оператор CLOSE (ЗАКРЫТЬ) x х
    имя-файла x x
    несколько имен-файлов x x
    фраза REEL/UNIT (КАТУШКУ/ТОМ) x x
    фраза FOR REMOVAL (С УДАЛЕНИЕМ) - x
    фраза WITH NO REWIND/LOCK (БЕЗ ПЕРЕМОТКИ/С ЗАМКОМ) - x
    Оператор OPEN (ОТКРЫТЬ) x x
    имя-файла x х
    несколько имен-файлов x x
    фраза INPUT (ВХОДНОЙ) x х
    фраза WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) - х
    фраза REVERSED (РЕВЕРСНО) - +
    фраза OUTPUT (ВЫХОДНОЙ) x x
    фраза WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) - x
    фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ) x x
    фраза EXTEND (ДОПОЛНЯЕМЫЙ) - x
    несколько INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ) и I-O (ВХОДНОЙ-ВЫХОДНОЙ) x x
    несколько EXTEND (ДОПОЛНЯЕМЫЙ) - x
    Оператор READ (ЧИТАТЬ) x x
    фраза NEXT (СЛЕДУЮЩУЮ) - x
    фраза INTO (В) x x
    фраза AT END (В КОНЦЕ) x x
    фраза NOT AT END (HE В КОНЦЕ) x x
    фраза END-READ (КОНЕЦ-ЧИТАТЬ) x x
    Оператор REWRITE (ОБНОВИТЬ) x x
    фраза FROM (ИЗ ПОЛЯ) x x
    Оператор USE (ИСПОЛЬЗОВАТЬ) x x
    фраза EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ) x x
    ON имя-файла (ДЛЯ имя-файла) x x
    ON несколько-имен-файлов (ДЛЯ несколько имен-файлов) - x
    ON INPUT (ДЛЯ ВХОДНЫХ) х x
    ON OUTPUT (ДЛЯ ВЫХОДНЫХ) x х
    ON I-O (ДЛЯ ВХОДНЫХ-ВЫХОДНЫХ) x x
    ON EXTEND (ДЛЯ ДОПОЛНЯЕМЫХ) - x
    Оператор WRITE (ПИСАТЬ) x x
    фраза FROM (ИЗ ПОЛЯ) x x
    фраза BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) x x
    целое LINE/LINES (целое СТРОК) x x
    идентификатор LINE/LINES (идентификатор СТРОК) x x
    мнемоническое-имя - x
    PAGE (СТРАНИЦЫ) х x
    фраза AT END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) - x
    фраза NOT AT END-OF-PAGE (HE В КОНЦЕ СТРАНИЦЫ) - x
    фраза END-WRITE (КОНЕЦ-ПИСАТЬ) - х

    2.4.Список элементов в модуле относительного ввода-вывода
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем
    имя-файла x x
    имя-записи x x
    Состояние ввода-вывода x x
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция ввода-вывода
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) x x
    Статья управления файлом x x
    фраза SELECT (ДЛЯ) x x
    фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) - x
    только входной, входной-выходной и дополняемый файлы - x
    фраза ACCESS MODE (ДОСТУП) x x
    SEQUENTIAL (ПОСЛЕДОВАТЕЛЬНЫЙ) x x
    RANDOM (ПРОИЗВОЛЬНЫЙ) x x
    DYNAMIC (ДИНАМИЧЕСКИЙ) x x
    RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) x x
    фраза ASSIGN (НАЗНАЧИТЬ) x x
    имя-реализации х х
    литерал x x
    фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) х х
    фраза ORGANIZATION RELATIVE (ОРГАНИЗАЦИЯ ОТНОСИТЕЛЬНАЯ) х х
    фраза RESERVE (РЕЗЕРВИРОВАТЬ) - x
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) x x
    фраза RERUN (ПЕРЕПРОГОН) + +
    фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) x x
    фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) - x
    РАЗДЕЛ ДАННЫХ
    Секция файлов
    Статья описания файла x x
    индикатор уровня FD (ОФ) x x
    фраза BLOCK CONTAINS (В БЛОКЕ) х x
    целое-1 RECORD/CHARACTERS (целое-1 ЗАПИСЕЙ/ЛИТЕР) x x
    целое-1 ТО целое-2 RECORDS/CHARACTERS (целое-1 ДО целое-2 ЗАПИСЕЙ/ЛИТЕР) - x
    фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) + +
    фраза LABEL RECORDS (МЕТКИ) + +
    фраза RECORD (В ЗАПИСИ) x x
    целое-1 CHARACTERS (целое-1 ЛИТЕР) x x
    фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) x x
    FROM целое-2 ТО целое-3 CHARACTERS (ОТ целое-2 ДО целое-3 ЛИТЕР) - x
    фраза DEPENDING ON (В ЗАВИСИМОСТИ ОТ) - x
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) x x
    фраза VALUE (ЗНАЧЕНИЕ) + +
    имя-реализации литерал + +
    имя-реализации несколько литералов + +
    имя-реализиции имя-данного - +
    имя-реализации несколько имен-данных - +
    Статья описания записи x х
    РАЗДЕЛ ПРОЦЕДУР
    Декларативные процедуры x x
    DECLARATIVES (ДЕКЛАРАТИВЫ) x x
    END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) х x
    Оператор CLOSE (ЗАКРЫТЬ) x x
    имя-файла х x
    несколько имен-файлов х x
    фраза WITH LOCK (С ЗАМКОМ) - x
    Оператор DELETE (УДАЛИТЬ) x х
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) х x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) х х
    фраза END-DELETE (КОНЕЦ-УДАЛИТЬ) х х
    Оператор OPEN (ОТКРЫТЬ) х x
    имя-файла х x
    несколько имен-файлов х х
    фраза INPUT (ВХОДНОЙ) х х
    фраза OUTPUT (ВЫХОДНОЙ) х х
    фраза I-О (ВХОДНОЙ-ВЫХОДНОЙ) х x
    фраза EXTEND (ДОПОЛНЯЕМЫЙ) - x
    несколько INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ) и I-O (ВХОДНОЙ-ВЫХОДНОЙ) х x
    несколько EXTEND (ДОПОЛНЯЕМЫЙ) - x
    Оператор READ (ЧИТАТЬ) х x
    фраза NEXT (СЛЕДУЮЩУЮ) - x
    фраза INTO (В) x x
    фраза AT END (В КОНЦЕ) x x
    фраза NOT AT END (HE В КОНЦЕ) x x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) x x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) x x
    фраза END-READ (КОНЕЦ-ЧИТАТЬ) x x
    Оператор REWRITE (ОБНОВИТЬ) x x
    фраза FROM (ИЗ ПОЛЯ) x x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) x x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) x x
    фраза END-REWRITE (КОНЕЦ-ОБНОВИТЬ) x x
    Оператор START (ПОДВЕСТИ) - x
    фраза KEY (КЛЮЧ) - x
    EQUAL TO (РАВНО) - x
    = - x
    GREATER THAN (БОЛЬШЕ) - x
    > - x
    NOT LESS THAN (HE МЕНЬШЕ) - x
    NOT < (HE td> - x
    GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) - x
    > = - x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) - x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) - x
    фраза END-START (КОНЕЦ-ПОДВЕСТИ) - x
    Оператор USE (ИСПОЛЬЗОВАТЬ) x x
    фраза EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ) х х
    ON имя-файла (ДЛЯ имя-файла) x x
    ON несколько имен-файлов (ДЛЯ несколько имен-файлов) - х
    ON INPUT (ДЛЯ ВХОДНЫХ) х х
    ON OUTPUT (ДЛЯ ВЫХОДНЫХ) x х
    ON I-O (ДЛЯ ВХОДНЫХ-ВЫХОДНЫХ) x х
    ON EXTEND (ДЛЯ ДОПОЛНЯЕМЫХ) - х
    Оператор WRITE (ПИСАТЬ) x x
    фраза FROM (ИЗ ПОЛЯ) x x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) x х
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) x x
    фраза END-WRITE (КОНЕЦ-ПИСАТЬ) x x

    2.5.Список элементов в модуле индексного ввода-вывода
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем
    имя-файла x x
    имя-записи x x
    Состояние ввода-вывода х х
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция ввода-вывода
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) x x
    Статья управления файлом x x
    фраза SELECT (ДЛЯ) x x
    фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) - x
    только входные, входные-выходные и дополняемые файлы - x
    фраза ACCESS MODE (ДОСТУП) x x
    SEQUENTIAL (ПОСЛЕДОВАТЕЛЬНЫЙ) x x
    RANDOM (ПРОИЗВОЛЬНЫЙ) x x
    DYNAMIC (ДИНАМИЧЕСКИЙ) - x
    фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) - x
    фраза WITH DUPLICATES (С ДУБЛИРОВАНИЕМ) - x
    фраза ASSIGN (НАЗНАЧИТЬ) x x
    имя-реализации x x
    литерал x x
    фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) x x
    фраза ORGANIZATION IS INDEXED (ОРГАНИЗАЦИЯ ИНДЕКСНАЯ) x x
    фраза RECORD KEY (КЛЮЧ ЗАПИСИ) x x
    фраза RESERVE (РЕЗЕРВИРОВАТЬ) - x
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) x x
    фраза RERUN (ПЕРЕПРОГОН) + +
    фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) x x
    фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) - x
    РАЗДЕЛ ДАННЫХ
    Секция файлов
    Статья описания файла x x
    индикатор уровня FD (ОФ) x x
    фраза BLOCK CONTAINS (В БЛОКЕ) x x
    целое-1 RECORDS/CHARACTERS (целое-1 ЗАПИСЕЙ/ЛИТЕР) x x
    целое-1 ТО целое-2 RECORDS/CHARACTERS (целое-1 ДО целое-2 ЗАПИСЕЙ/ЛИТЕР) - x
    фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) + +
    фраза LABEL RECORDS (МЕТКИ) + +
    фраза RECORD (В ЗАПИСИ) x x
    целое-1 CHARACTERS (целое-1 ЛИТЕР) x x
    фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) - x
    FROM целое-2 ТО целое-3 CHARACTERS (ОТ целое-2 ДО целое-3 ЛИТЕР) - x
    фраза DEPENDING ON (В ЗАВИСИМОСТИ ОТ) - x
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) x x
    фраза VALUE (ЗНАЧЕНИЕ) + +
    имя-реализации литерал + +
    имя-реализации несколько литералов + +
    имя-реализации имя-данного - +
    имя-реализации несколько имен-данных - +
    Статья описания записи x x
    РАЗДЕЛ ПРОЦЕДУР
    Декларативные процедуры х x
    DECLARATIVES (ДЕКЛАРАТИВЫ) х x
    END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) х x
    Оператор CLOSE (ЗАКРЫТЬ) х x
    имя-файла х x
    несколько имен-файлов х x
    фраза WITH LOCK (С ЗАМКОМ) - x
    Оператор DELETE (УДАЛИТЬ) х x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) х x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) х х
    фраза END-DELETE (КОНЕЦ-УДАЛИТЬ) х x
    Оператор OPEN (ОТКРЫТЬ) x x
    имя-файла x x
    несколько имен-файлов x x
    фраза INPUT (ВХОДНОЙ) x x
    фраза OUTPUT (ВЫХОДНОЙ) x x
    фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ) x x
    фраза EXTEND (ДОПОЛНЯЕМЫЙ) x x
    несколько INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ) и I-O (ВХОДНОЙ-ВЫХОДНОЙ) x x
    несколько EXTEND (ДОПОЛНЯЕМЫЙ) - x
    Оператор READ (ЧИТАТЬ) x x
    фраза NEXT (СЛЕДУЮЩУЮ) - x
    фраза INTO (В) x x
    фраза AT END (В КОНЦЕ) x x
    фраза NOT AT END (HE В КОНЦЕ) x x
    фраза KEY (КЛЮЧ) - x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) х x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) х х
    фраза END-READ (КОНЕЦ-ЧИТАТЬ) х x
    Оператор REWRITE (ОБНОВИТЬ) x x
    фраза FROM (ИЗ ПОЛЯ) х x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) х x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) х х
    фраза END-REWRITE (КОНЕЦ-ОБНОВИТЬ) x x
    Оператор START (ПОДВЕСТИ) - x
    фраза KEY (КЛЮЧ) x x
    EQUAL ТО (РАВНО) - x
    = - x
    GREATER THAN (БОЛЬШЕ) - x
    > - x
    NOT LESS THAN (HE МЕНЬШЕ) - x
    NOT < (HE td> - x
    GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) - x
    > = - x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) - x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) - x
    фраза END-START (КОНЕЦ-ПОДВЕСТИ) - x
    Оператор USE (ИСПОЛЬЗОВАТЬ) x x
    фраза EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ) x x
    ON имя-файла (ДЛЯ имя-файла) x x
    ON несколько имен-файлов (ДЛЯ несколько имен-файлов) - x
    ON INPUT (ДЛЯ ВХОДНЫХ) х х
    ON OUTPUT (ДЛЯ ВЫХОДНЫХ) х х
    ON I-O (ДЛЯ ВХОДНЫХ-ВЫХОДНЫХ) х x
    ON EXTEND (ДЛЯ ДОПОЛНЯЕМЫХ) х x
    Оператор WRITE (ПИСАТЬ) х x
    фраза FROM (ИЗ ПОЛЯ) х x
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) х x
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) х x
    фраза END-WRITE (КОНЕЦ-ПИСАТЬ) х x

    2.6.Список элементов в модуле межпрограммных связей
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Структура исходной программы
    Вложенные исходные программы - x
    РАЗДЕЛ ИДЕНТИФИКАЦИИ
    Параграф PROGRAM-ID (ПРОГРАММА)
    фраза COMMON (ОБЩАЯ) - x
    фраза INITIAL (НАЧАЛЬНАЯ) - x
    РАЗДЕЛ ДАННЫХ
    Секция файлов
    Статья описания файла (индикатор уровня FD (ОФ))
    фраза EXTERNAL (ВНЕШНЕЕ) - x
    фраза GLOBAL (ГЛОБАЛЬНОЕ) - x
    Статья описания данного (номер уровня 01)
    фраза GLOBAL (ГЛОБАЛЬНОЕ) - x
    Секция рабочей памяти
    Статья описания данного (номер уровня 01)
    фраза EXTERNAL (ВНЕШНЕЕ) - x
    фраза GLOBAL (ГЛОБАЛЬНОЕ) - x
    Секция связи x x
    Статья описания записи x x
    Статья описания данного с уровнем 77 x x
    Секция отчетов
    Статья описания отчета (индикатор уровня RD (00))
    фраза GLOBAL (ГЛОБАЛЬНОЕ) - x
    РАЗДЕЛ ПРОЦЕДУР
    Заголовок раздела процедур
    фраза USING (ИСПОЛЬЗУЯ) x x
    разрешается по крайней мере 5 операндов x -
    нет ограничения на число операндов - x
    Оператор CALL (ВЫЗВАТЬ) x x
    литерал х х
    идентификатор - х
    фраза USING (ИСПОЛЬЗУЯ) x x
    идентификатор x x
    разрешается по крайней мере 5 операндов х -
    нет ограничения на число операндов - x
    фраза BY REFERENCE (ССЫЛКУ) - х
    фраза BY CONTENT (ЗНАЧЕНИЕ) - x
    фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) - x
    фраза ON EXCEPTION (ПРИ ОШИБКЕ) - x
    фраза NOT ON EXCEPTION (БЕЗ ОШИБКИ) - x
    фраза END-CALL (КОНЕЦ-ВЫЗВАТЬ) (формат 1) x x
    фраза END-CALL (КОНЕЦ-ВЫЗВАТЬ) (формат 2) - x
    Оператор CANCEL (ОСВОБОДИТЬ) - x
    литерал - x
    идентификатор - x
    Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) х х
    Оператор USE (ИСПОЛЬЗОВАТЬ)
    фраза EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ)
    фраза GLOBAL (ГЛОБАЛЬНО) - x
    Оператор USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ)
    фраза GLOBAL (ГЛОБАЛЬНО) - x

    2.7.Список элементов в модуле сортировки-слияния
    Элемент Уровень 1
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем
    имя-файла x
    имя-записи x
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция ввода-вывода
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) x
    Статья управления файлом x
    фраза SELECT (ДЛЯ) x
    фраза ASSIGN (НАЗНАЧИТЬ) x
    имя-реализации x
    литерал x
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ ВВОДОМ-ВЫВОДОМ) x
    фраза SAME SORT/SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ) x
    фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) x
    РАЗДЕЛ ДАННЫХ
    Секция файлов
    Статья описания сортируемого-сливаемого файла x
    индикатор уровня SD (00) x
    фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) +
    фраза RECORD (В ЗАПИСИ) x
    целое-1 CHARACTERS (целое-1 ЛИТЕР) x
    фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) x
    FROM целое-2 ТО целое-3 CHARACTERS (ОТ целое-2 ДО целое-3 ЛИТЕР) x
    фраза DEPENDING ON (В ЗАВИСИМОСТИ ОТ) x
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) x
    Статья описания записи x
    РАЗДЕЛ ПРОЦЕДУР
    Оператор MERGE (СЛИТЬ) x
    фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) x
    фраза COLLATING SEQUENCE (АЛФАВИТ) x
    фраза USING (ИСПОЛЬЗУЯ) x
    фраза OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА) x
    имя-процедуры x
    фраза GIVING (ПОЛУЧАЯ) x
    Оператор RELEASE (ПЕРЕДАТЬ) x
    фраза FROM (ИЗ ПОЛЯ) x
    Оператор RETURN (ВЕРНУТЬ) x
    фраза INTO (В) x
    фраза AT END (В КОНЦЕ) x
    фраза NOT AT END (HE В КОНЦЕ) x
    фраза END-RETURN (КОНЕЦ-ВЕРНУТЬ) x
    Оператор SORT (СОРТИРОВАТЬ) x
    фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) x
    фраза WITH DUPLICATES (С ДУБЛИРОВАНИЕМ) x
    фраза COLLATING SEQUENCE (АЛФАВИТ) х
    фраза INPUT PROCEDURE (ПРОЦЕДУРА ВВОДА) x
    имя-процедуры х
    фраза USING (ИСПОЛЬЗУЯ) x
    фраза OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА) x
    имя-процедуры x
    фраза GIVING (ПОЛУЧАЯ) x

    2.8.Список элементов в модуле обработки исходных текстов
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Набор литер
    Литеры, используемые в пунктуации = - x
    Слова, определенные пользователем
    имя-библиотеки - x
    имя-текста x x
    ВСЕ РАЗДЕЛЫ
    Оператор COPY (КОПИРОВАТЬ) x x
    фраза OF/IN имя-библиотеки (ИЗ имя-библиотеки) - х
    фраза REPLACING (ЗАМЕНЯЯ) - x
    псевдотекст - x
    идентификатор - x
    литерал - x
    слово - х
    Оператор REPLACE (ЗАМЕНИТЬ) - x
    псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) - x
    OFF (ОТКЛЮЧИТЬ) - x

    2.9.Список элементов в модуле генератора отчетов
    Элемент Уровень 1
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем
    имя-файла x
    имя-отчета x
    Зарезервированные слова
    Специальные регистры
    LINE-COUNTER (СЧЕТЧИК-СТРОК) x
    PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) x
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция ввода-вывода
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) x
    Статья управления файлом x
    фраза SELECT (ДЛЯ) x
    фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) x
    только дополняемые файлы x
    фраза ACCESS MODE IS SEQUENTIAL (ДОСТУП ПОСЛЕДОВАТЕЛЬНЫЙ) x
    фраза ASSIGN (НАЗНАЧИТЬ) x
    имя-реализации x
    литерал x
    фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) x
    фраза ORGANIZATION IS SEQUENTIAL (ОРГАНИЗАЦИЯ ПОСЛЕДОВАТЕЛЬНАЯ) x
    фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) x
    фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) x
    фраза RESERVE (РЕЗЕРВИРОВАТЬ) x
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) x
    фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) +
    фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) x
    РАЗДЕЛ ДАННЫХ
    Секция файлов
    Статья описания файла x
    индикатор уровня FD (ОФ) x
    фраза BLOCK CONTAINS (В БЛОКЕ) x
    целое RECORDS/CHARECTERS (целое ЗАПИСЕЙ/ЛИТЕР) x
    целое-1 ТО целое-2 RECORDS/CHARACTERS (целое-1 ДО целое-2 ЗАПИСЕЙ/ЛИТЕР) x
    фраза CODE-SET (АЛФАВИТ) x
    фраза LABEL RECORDS (МЕТКИ) +
    фраза RECORD (В ЗАПИСИ) x
    целое-1 CHARACTERS (целое-1 ЛИТЕР) x
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) х
    фраза REPORT (ОТЧЕТ) x
    фраза VALUE OF (ЗНАЧЕНИЕ) +
    имя-реализации литерал +
    имя-реализации несколько литералов +
    имя-реализации имя-данного +
    имя-реализации несколько имен-данных +
    Секция отчетов
    Статья описания отчета x
    индикатор уровня RD (00) x
    фраза CODE (С КОДОМ) x
    фраза CONTROL (УПРАВЛЕНИЕ) x
    фраза PAGE (РАЗМЕР СТРАНИЦЫ) x
    Статья описания группы отчета x
    фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) x
    фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) x
    фраза имя-данного x
    фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ) x
    фраза JUSTIFIED (СДВИНУТО) x
    фраза номер-уровня x
    от 01 до 49; представление одной или двумя цифрами x
    фраза LINE NUMBER (НОМЕР СТРОКИ) x
    фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) x
    фраза PICTURE (ШАБЛОН) x
    фраза SIGN (ЗНАК) x
    фраза SOURCE (ИСТОЧНИК) x
    фраза SUM (СУММА) x
    фраза TYPE (ТИП) x
    фраза USAGE (об использовании) x
    DISPLAY (ДЛЯ ВЫДАЧИ) x
    фраза VALUE (ЗНАЧЕНИЕ) x
    литерал x
    РАЗДЕЛ ПРОЦЕДУР
    Декларативные процедуры x
    DECLARATIVES (ДЕКЛАРАТИВЫ) х
    END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) x
    Оператор CLOSE (ЗАКРЫТЬ) x
    фраза REEL/UNIT (КАТУШКУ/ТОМ) x
    фраза FOR REMOVAL (С УДАЛЕНИЕМ) x
    фраза WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) x
    Оператор GENERATE (ГЕНЕРИРОВАТЬ) x
    имя-данного x
    имя-отчета x
    Оператор INITIATE (НАЧАТЬ) x
    Оператор OPEN (ОТКРЫТЬ) x
    фраза OUTPUT (ВЫХОДНОЙ) x
    фраза WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) x
    фраза EXTEND (ДОПОЛНЯЕМЫЙ) x
    Оператор SUPPRESS (ПОДАВИТЬ) x
    Оператор TERMINATE (ЗАКОНЧИТЬ) x
    Оператор USE (ИСПОЛЬЗОВАТЬ) x
    фраза EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ) x
    ON имя-файла (ДЛЯ имя-файла) x
    ON несколько имен-файлов (ДЛЯ несколько имен-файлов) x
    ON OUTPUT (ДЛЯ ВЫХОДНЫХ) x
    ON EXTEND (ДЛЯ ДОПОЛНЯЕМЫХ) x
    фраза BEFORE REPORTING (ДО ВЫДАЧИ) x

    2.10.Список элементов в модуле коммуникаций
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем имя-коммуникации x x
    РАЗДЕЛ ДАННЫХ
    Секция коммуникации
    Статья описания коммуникации х x
    индикатор уровня CD (ОК) x x
    фраза FOR INPUT (ДЛЯ ВВОДА) x x
    фраза INITIAL (НАЧАЛЬНОГО) - x
    фраза END KEY (КЛЮЧ КОНЦА) x x
    фраза MESSAGE COUNT (ЧИСЛО СООБЩЕНИЙ) x x
    фраза MESSAGE DATA (ДАТА СООБЩЕНИЯ) x x
    фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) x x
    фраза SYMBOLIC QUEUE (СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ) x x
    фраза SYMBOLIC SOURCE (СИМВОЛИЧЕСКИЙ ИСТОЧНИК) x x
    фраза SYMBOLIC SUB-QUEUE-1 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-1) - x
    фраза SYMBOLIC SUB-QUEUE-2 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-2) - х
    фраза SYMBOLIC-SUB-QUEUE-3 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3) - x
    фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) x x
    фраза TEXT LENGTH (ДЛИНА ТЕКСТА) x x
    несколько имен-данных - x
    фраза FOR OUTPUT (ДЛЯ ВЫВОДА) x x
    фраза DESTINATION COUNT (ЧИСЛО АДРЕСАТОВ) x x
    должен быть один x -
    может быть один или несколько - x
    фраза DESTINATION TABLE (ТАБЛИЦА АДРЕСАТОВ) - x
    фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) - х
    фраза ERROR KEY (КЛЮЧ ОШИБКИ) x x
    фраза SYMBOLIC DESTINATION (СИМВОЛИЧЕСКИЙ АДРЕСАТ) x x
    фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) х x
    фраза TEXT LENGTH (ДЛИНА ТЕКСТА) х x
    фраза I-O (ДЛЯ ВВОДА-ВЫВОДА) х x
    фраза INITIAL (НАЧАЛЬНОГО) - x
    фраза END KEY (КЛЮЧ КОНЦА) х x
    фраза MESSAGE DATE (ДАТА СООБЩЕНИЯ) х x
    фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) х x
    фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) x х
    фраза SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ) x x
    фраза TEXT LENGTH (ДЛИНА ТЕКСТА) x x
    несколько имен-данных - х
    Статья описания записи x x
    РАЗДЕЛ ПРОЦЕДУР
    Оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ) x x
    Оператор DISABLE (ЗАПРЕТИТЬ) - x
    фраза INPUT (ВВОД) - x
    фраза TERMINAL (С ТЕРМИНАЛА) - x
    фраза I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) - x
    фраза OUTPUT (ВЫВОД) - x
    фраза WITH KEY (КЛЮЧ) - +
    Оператор ENABLE (РАЗРЕШИТЬ) - x
    фраза INPUT (ВВОД) - x
    фраза TERMINAL (С ТЕРМИНАЛА) - x
    фраза I-O TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) - x
    фраза OUTPUT (ВЫВОД) - x
    фраза WITH KEY (КЛЮЧ) - x
    Оператор PURGE (ОЧИСТИТЬ) - x
    Оператор RECEIVE (ПОЛУЧИТЬ) x x
    фраза MESSAGE (СООБЩЕНИЕ) x x
    фраза SEGMENT (СЕГМЕНТ) - x
    фраза INTO идентификатор (В идентификатор) x x
    фраза NO DATA (НЕТ ДАННЫХ) x x
    фраза WITH DATA (ЕСТЬ ДАННЫЕ) x x
    фраза END-RECEIVE (КОНЕЦ-ПОЛУЧИТЬ)
    Оператор SEND (ПОСЛАТЬ) x x
    FROM идентификатор (ИЗ ПОЛЯ идентификатор) (часть сообщения) - x
    FROM идентификатор (ИЗ ПОЛЯ идентификатор) (полное сообщение) x x
    фраза WITH идентификатор (С идентификатор) - x
    фраза WITH ESI (С ИКС) - x
    фраза WITH EMI (С ИКЩ) x x
    фраза WITH EGI (С ИКГ) x x
    фраза BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) х x
    целое-1 LINE/LINES (целое-1 СТРОК) х х
    идентификатор LINE/LINES (идентификатор СТРОК) x x
    мнемоническое-имя - х
    PAGE (СТРАНИЦЫ) x x
    REPLACING LINE (ЗАМЕНЯЯ СТРОКУ) - x

    2.11.Список элементов в модуле отладки
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Зарезервированные слова
    Специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) + +
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Секция конфигурации
    Параграф SOURCE-COMPUTER (ИСХОДНАЯ МАШИНА)
    фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) + +
    РАЗДЕЛ ПРОЦЕДУР
    Декларативные процедуры
    DECLARATIVES (ДЕКЛАРАТИВЫ) + +
    END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) + +
    Оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) + +
    имя-процедуры + +
    ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ) + +
    ALL REFERENCES идентификатор-1 (ПРИ ВСЕХ ССЫЛКАХ идентификатор-1) - +
    имя-коммуникации - +
    имя-файла - +

    2.12.Список элементов в модуле сегментации
    Элемент Уровень 1 Уровень 2
    ПОНЯТИЯ ЯЗЫКА
    Слова, определенные пользователем
    Номер сегмента + +
    РАЗДЕЛ ОБОРУДОВАНИЯ
    Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА)
    фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) - +
    РАЗДЕЛ ПРОЦЕДУР
    Номера-сегментов от 0 до 49 для постоянных сегментов + +
    Номера-сегментов от 50 до 99 для независимых сегментов + +
    Все секции, имеющие одинаковый номер сегмента, должны быть смежными в исходной программе + -
    Секции, имеющие одинаковый номер сегмента, могут быть несмежными в исходной программе - +

    3.СПИСОК ЭЛЕМЕНТОВ ПО РАЗДЕЛАМ КОБОЛА
    3.1.Общее описание
    Ниже приводится список элементов стандарта Кобола соответственно разделам Кобола.
    В столбце, озаглавленном "Модуль", указывается модуль и уровень этого модуля для элемента. Для указания модулей используются следующие обозначения:
    Ядро ЯДР
    Последовательный ввод-вывод ПОД
    Относительный ввод-вывод ОТД
    Индексный ввод-вывод ИПД
    Межпрограммные связи МПС
    Сортировка-слияние СРТ
    Обработка исходных текстов ОИТ
    Генератор отчетов ГОТ
    Коммуникации КОМ
    Отладка ОТЛ
    Сегментация СЕГ

    Для каждого элемента указан модуль, к которому он принадлежит, и минимальный уровень сложности этого модуля, на котором допустим элемент. Например, 2 ЯДР указывает, что элемент допустим на уровне 2 ядра, а 1 ИПД указывает, что элемент допустим на уровне 1 модуля индексного ввода-вывода. Литера +, следующая за сокращенным обозначением модуля, обозначает, что элемент является устаревшим элементом языка и будет удален в следующей редакции стандарта.
    3.2.Список элементов понятий языка
    Элемент Модуль
    3.2. Список элементов понятий языка
    ПОНЯТИЯ ЯЗЫКА
    Набор литер
    Литеры, используемые для слов в английской нотации 0-9, А-Z, - (дефис) в русской нотации А-Я, D, F, G, I, J, L, N, Q, R, S, U, V, W, Y, Z, 0-9, - (дефис) 1 ЯДР
    Литеры, используемые для пунктуации " ( ) . , ; пробел 1 ЯДР
    Литеры, используемые для пунктуации : (двоеточие) 2 ЯДР
    Литеры, используемые для пунктуации = 1 ОИТ
    Литеры, используемые в арифметических операциях + - * / ** 2 ЯДР
    Литеры, используемые в отношениях = > < > = < = 1 ЯДР
    Литеры, используемые в редактировании В + - . , Z (П) * 0 CR (КР) DB (ДБ) / 1 ЯДР
    Литеры, используемые при индексировании + - 1 ЯДР
    Разрешена замена одной литерой 1 ЯДР
    Разрешена замена двумя литерами 1 ЯДР +
    Разделители
    " ( ) . , ; пробел 1 ЯДР
    : (двоеточие) 2 ЯДР
    Строка-литер
    Слова Кобола
    Максимум 30 литер 1 ЯДР
    Слова, определенные пользователем
    имя-алфавита 1 ЯДР
    имя-библиотеки 2 ОИТ
    имя данного 1 ЯДР
    имя записи 1 ПОД
    1ОТД
    1 ИПД
    1 СРТ
    имя индекса 1 ЯДР
    имя класса 1 ЯДР
    имя коммуникации 1 КОМ
    имя отчета 1 ГОТ
    имя параграфа 1 ЯДР
    имя программного модуля 1 ЯДР +
    имя программы 1 ЯДР
    имя секции 1 ЯДР
    имя текста 1 ОИТ
    имя условия 2 ЯДР
    имя файла 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    мнемоническое имя 1 ЯДР
    номер сегмента 1 СЕГ +
    номер уровня 1 ЯДР
    символическая литера 2 ЯДР
    Системные имена
    имя машины 1 ЯДР
    имя реализации 1 ЯДР
    имя языка 1 ЯДР +
    Зарезервированные слова
    Обязательные слова 1 ЯДР
    Ключевые слова 1 ЯДР
    Слова специальные литеры
    знаки арифметических операций + - * / ** 2 ЯДР
    знаки арифметических операций при индексировании + - 1 ЯДР
    литеры отношения = > < > = < = 1 ЯДР
    Необязательные слова 1 ЯДР
    Слова специального назначения
    Стандартные константы: ZERO (НУЛЬ), ZEROS, ZEROES (НУЛИ), SPACE (ПРОБЕЛ), SPACES (ПРОБЕЛЫ), HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ), HIGH-VALUES (НАИБОЛЬШИЕ-ЗНАЧЕНИЯ), LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), LOW-VALUES (НАИМЕНЬШИЕ-ЗНАЧЕНИЯ), QUOTE (КАВЫЧКА), QUOTES (КАВЫЧКИ) 1 ЯДР
    Стандартные константы: символическая-литера, ALL литерал (ВСЕ литерал), ALL стандартная-константа (ВСЕ стандартная-константа), ALL символическая-литера (ВСЕ символическая-литера) 2 ЯДР
    Специальные регистры
    LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) 2 ПОД
    LINE-COUNTER (СЧЕТЧИК-СТРОК) 1 ГОТ
    PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) 1 ГОТ
    DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) 1 ОТЛ +
    Литералы
    Числовые литералы: от 1 до 18 цифр 1 ЯДР
    Нечисловые литералы: от 1 до 160 литер 1 ЯДР
    строка-литер (ШАБЛОН строка-литер) 1 ЯДР
    Статья-комментарий 1 ЯДР +
    Однозначность ссылки
    Уточнение
    уточнение недопустимо, имена должны быть однозначны при ссылке 1 ЯДР
    50 уточнителей 2 ЯДР
    Индексирование
    3 уровня индексов 1 ЯДР
    7 уровней индексов 2 ЯДР
    индексирование литералом 1 ЯДР
    индексирование именем-данного 1 ЯДР
    индексирование именем-индекса 1 ЯДР
    относительное индексирование 1 ЯДР
    Модификация ссылки 2 ЯДР
    Формат представления
    Порядковый номер 1 ЯДР
    Продолжение строк
    продолжение нечисловых литералов 1 ЯДР
    продолжение слов Кобола, числовых литералов, строк-литер шаблона 2 ЯДР
    Строки пробелов 1 ЯДР
    Строки комментария
    строки комментария со звездочкой ( * ) 1 ЯДР
    строки комментария с дробной чертой ( / ) 1 ЯДР
    Отладочная строка с литерой D (Т) в поле индикатора 1 ЯДР
    Структура исходной программы
    Раздел идентификации обязателен 1 ЯДР
    Раздел оборудования необязателен 1 ЯДР
    Раздел данных необязателен 1 ЯДР
    Раздел процедур необязателен 1 ЯДР
    Заголовок конца программы 2 ЯДР
    Вложенные исходные программы 2 МПС
    3.3. Список элементов раздела идентификации
    РАЗДЕЛ ИДЕНТИФИКАЦИИ
    Параграф PROGRAM-1D (ПРОГРАММА) 1 ЯДР
    имя-параграфа 1 ЯДР
    фраза COMMON (ОБЩАЯ) 2 МПС
    фраза INITIAL (НАЧАЛЬНАЯ) 2 МПС
    Параграф AUTHOR (АВТОР) 1 ЯДР +
    Параграф INSTALLATION (ПРЕДПРИЯТИЕ) 1 ЯДР +
    Параграф DATE-WRITTEN (ДАТА-НАПИСАНИЯ) 1 ЯДР +
    Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) 2 ЯДР +
    Параграф SECURITY (ПОЛНОМОЧИЯ) 1 ЯДР +
    Обработка исходных текстов в разделе идентификации
    Оператор COPY (КОПИРОВАТЬ) 1 ОИТ
    OF/IN имя-библиотеки (ИЗ имя-библиотеки) 2 ОИТ
    фраза REPLACING (ЗАМЕНЯЯ) 2 ОИТ
    псевдотекст 2 ОИТ
    идентификатор 2 ОИТ
    литерал 2 ОИТ
    слово 2 ОИТ
    Оператор REPLACE (ЗАМЕНИТЬ) 2 ОИТ
    псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) 2 ОИТ
    OFF (ОТКЛЮЧИТЬ) 2 ОИТ
    3.4. Список элементов раздела оборудования
    РАЗДЕЛ ОБОРУДОВАЦИЯ
    Секция конфигурации 1 ЯДР
    Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) 1 ЯДР
    имя-машины 1 ЯДР
    фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) 1 ЯДР
    1 ОТЛ +
    Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) 1 ЯДР
    имя-машины 1 ЯДР
    фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) 1 ЯДР +
    фраза PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ-АЛФАВИТ) 1 ЯДР
    фраза SEGMENT-LIMIT (ГРАНИЦА СЕГМЕНТОВ) 1 СЕГ +
    Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) 1 ЯДР
    фраза ALPHABET (АЛФАВИТ) 1 ЯДР
    вариант STANDARD-1 (СТАНДАРТ-А) 1 ЯДР
    вариант STANDARD-2 (СТАНДАРТ-М) 1 ЯДР
    вариант NATIVE (ВНУТРЕННИЙ) 1 ЯДР
    вариант имя-реализации 1 ЯДР
    вариант литерал 2 ЯДР
    фраза CLASS (КЛАСС) 1 ЯДР
    фраза CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) 1 ЯДР
    фраза DECIMAL-POINT (ДЕСЯТИЧНАЯ ТОЧКА) 1 ЯДР
    фраза имя-реализации 1 ЯДР
    вариант IS мнемоническое имя 1 ЯДР
    вариант ON STATUS IS имя-условия (ВКЛЮЧЕНО имя-условия) 1 ЯДР
    вариант OFF STATUS IS имя-условия (ВЫКЛЮЧЕНО имя-условия) 1 ЯДР
    фраза SYMBOLIC CHARACTERS (СИМВОЛИЧЕСКАЯ ЛИТЕРА) 2 ЯДР
    Секция ввода-вывода 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    Статья управления файлом 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    фраза SELECT (ДЛЯ) 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    вариант OPTIONAL (НЕОБЯЗАТЕЛЬНО) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    только входные, входные-выходные и дополняемые 2 ПОД
    2 ОТД
    2 ИПД
    только дополняемые фраза ACCESS MODE (ДОСТУП) 1 ГОТ
    SEQUENTIAL (ПОСЛЕДОВАТЕЛЬНЫЙ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    RANDOM (ПРОИЗВОЛЬНЫЙ) 1 ОТД
    1 ИПД
    DYNAMIC (ДИНАМИЧЕСКИЙ) 2 ОТД
    2 ИПД
    фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) 1 ОТД
    фраза ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) 2 ИПД
    фраза WITH DUPLICATES (С ДУБЛИРОВАНИЕМ) 2 ИПД
    фраза ASSIGN (НАЗНАЧИТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    имя-реализации 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    литерал 1 ГОТ
    1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) 1 ПОД
    1 ОТД
    1 ИПД
    фраза ORGANIZATION (ОРГАНИЗАЦИЯ) 1 ГОТ
    SEQUENTIAL (ПОСЛЕДОВАТЕЛЬНАЯ) 1 ПОД
    1 ГОТ
    RELATIVE (ОТНОСИТЕЛЬНАЯ) 1 ОТД
    INDEXED (ИНДЕКСНАЯ) 1 ИПД
    фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) 2 ПОД
    1 ГОТ
    фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) 2 ПОД
    1 ГОТ
    фраза RECORD KEY (КЛЮЧ ЗАПИСИ) 1 ИПД
    фраза RESERVE AREA (РЕЗЕРВИРОВАТЬ) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) 2 ПОД +
    1 ГОТ +
    фраза RERUN (ПЕРЕПРОГОН) 1 ПОД +
    1 ГОТ +
    1 ИПД +
    фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) 2 ПОД
    2 ОТД
    2 ИПД
    1 СРТ
    фраза SAME SORT/SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ/СОРТИРОВКИ-СЛИЯНИЯ) 1 СРТ
    Обработка исходных текстов в разделе оборудования
    Оператор COPY (КОПИРОВАТЬ) 1 ОИТ
    OF/IN имя-библиотеки (ИЗ имя-библиотеки) 2 ОИТ
    фраза REPLACING (ЗАМЕНЯЯ) 2 ОИТ
    псевдотекст 2 ОИТ
    идентификатор 2 ОИТ
    литерал 2 ОИТ
    слово 2 ОИТ
    Оператор REPLACE (ЗАМЕНИТЬ) 2 ОИТ
    псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) 2 ОИТ
    OFF (ОТКЛЮЧИТЬ) 2 ОИТ
    3.4. Список элементов раздела данных __________________ * Нумерация соответствует оригиналу. - Примечание изготовителя базы данных.
    РАЗДЕЛ ДАННЫХ 1 ПОД
    Секция файлов 1 ОТД
    1 ИПД
    1 СРТ
    1 ГОТ
    Статья описания файла 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    индикатор уровня FD (ОФ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза BLOCK CONTAINS (В БЛОКЕ)
    целое RECORDS/CHARACTERS (целое ЗАПИСЕЙ/ЛИТЕР) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    целое-1 ТО целое-2 RECORDS/CHARACTERS (целое-1 ДО целое-2 ЗАПИСЕЙ/ЛИТЕР) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    фраза CODE-SET (АЛФАВИТ) 1 ПОД
    1 ГОТ
    фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) 1 ПОД +
    1 ОТД +
    1 ИПД +
    фраза EXTERNAL (ВНЕШНЕЕ) 2 МПС
    фраза GLOBAL (ГЛОБАЛЬНОЕ) 2 МПС
    фраза LABEL RECORDS (МЕТКИ) 1 ПОД +
    1 ОТД +
    1 ИПД +
    1 ГОТ+
    фраза LINAGE (ВЕРСТКА) 2 ПОД
    фраза FOOTING (КОНЦОВКА) 2 ПОД
    фраза ТОР (ВЕРХНЕЕ ПОЛЕ) 2 ПОД
    фраза BOTTOM (НИЖНЕЕ ПОЛЕ) 2 ПОД
    фраза RECORD (В ЗАПИСИ)
    целое-1 CHARACTERS (целое-1 ЛИТЕР) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) 2 ПОД
    2 ОТД
    2 ИПД
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза REPORT (ОТЧЕТ) 1 ГОТ
    фраза VALUE OF (ЗНАЧЕНИЕ)
    имя-реализации литерал 1 ПОД +
    1 ОТД +
    1 ИПД +
    1 ГОТ +
    имя-реализации несколько литералов 1 ПОД +
    1 ОТД +
    1 ИПД +
    1 ГОТ +
    имя-реализации имя-данного 2 ПОД +
    2 ОТД +
    2 ИПД +
    1 ГОТ +
    имя-реализации несколько имен-данных 2 ПОД +
    2 ОТД +
    2 ИПД +
    1 ГОТ +
    Статья описания сортируемого-сливаемого файла 1 СРТ
    индикатор уровня SD (ОС) 1 СРТ
    фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) 1 СРТ +
    фраза RECORD (В ЗАПИСИ)
    целое-1 CHARACTERS (целое-1 ЛИТЕР) 1 СРТ
    фраза VARYING IN SIZE (ПЕРЕМЕННОЕ ЧИСЛО) 1 СРТ
    целое-4 ТО целое-5 CHARACTERS (целое-4 ДО целое-5 ЛИТЕР) 1 СРТ
    Статья описания записи в секции файлов 1 ПОД
    1 ОТД
    1 ИПД
    1 СРТ
    Секция рабочей памяти 1 ЯДР
    Статья описания записи 1 ЯДР
    Статья описания уровня 77 1 ЯДР
    Секция связи 1 МПС
    Статья описания записи 1 МПС
    Статья описания уровня 77 1 МПС
    Секция коммуникаций 1 КОМ
    Статья описания коммуникации 1 КОМ
    индикатор уровня CD (ОК) 1 КОМ
    фраза FOR INPUT (ДЛЯ ВВОДА) 1 КОМ
    фраза INITIAL (НАЧАЛЬНОГО) 2 КОМ
    фраза END KEY (КЛЮЧ КОНЦА) 1 КОМ
    фраза MESSAGE COUNT (ЧИСЛО СООБЩЕНИЙ) 1 КОМ
    фраза MESSAGE DATE (ДАТА СООБЩЕНИЯ) 1 КОМ
    фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) 1 КОМ
    фраза SYMBOLIC QUEUE (СИМВОЛИЧЕСКАЯ ОЧЕРЕДЬ) 1 КОМ
    фраза SYMBOLIC SOURCE (СИМВОЛИЧЕСКИЙ ИСТОЧНИК) 1 КОМ
    фраза SYMBOLIC SUB-QUEUE-1 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-1) 2 КОМ
    фраза SYMBOLIC SUB-QUEUE-2 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-2) 2 КОМ
    фраза SYMBOLIC SUB-QUEUE-3 (СИМВОЛИЧЕСКАЯ ПОДОЧЕРЕДЬ-3) 2 КОМ
    фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) 1 КОМ
    фраза TEXT LENGTH (ДЛИНА ТЕКСТА) 1 КОМ
    несколько имен-данных 2 КОМ
    фраза FOR OUTPUT (ДЛЯ ВЫВОДА) 1 КОМ
    фраза DESTINATION COUNT (ЧИСЛО АДРЕСАТОВ) 1 КОМ
    должен быть один 1 КОМ
    должен быть один или несколько 2 КОМ
    фраза DESTINATION TABLE (ТАБЛИЦА АДРЕСАТОВ) 2 КОМ
    фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) 2 КОМ
    фраза ERROR KEY (КЛЮЧ ОШИБКИ) 1 КОМ
    фраза SYMBOLIC DESTINATION (СИМВОЛИЧЕСКИЙ АДРЕСАТ) 1 КОМ
    фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) 1 КОМ
    фраза TEXT LENGTH (ДЛИНА ТЕКСТА) 1 КОМ
    фраза FOR I-O (ДЛЯ ВВОДА-ВЫВОДА) 1 КОМ
    фраза INITIAL (НАЧАЛЬНОГО) 2 КОМ
    фраза END KEY (КЛЮЧ КОНЦА) 1 КОМ
    фраза MESSAGE DATA (ДАТА СООБЩЕНИЯ) 1 КОМ
    фраза MESSAGE TIME (ВРЕМЯ СООБЩЕНИЯ) 1 КОМ
    фраза STATUS KEY (КЛЮЧ СОСТОЯНИЯ) 1 КОМ
    фраза SYMBOLIC TERMINAL (СИМВОЛИЧЕСКИЙ ТЕРМИНАЛ) 1 КОМ
    фраза TEXT LENGTH (ДЛИНА ТЕКСТА) 1 КОМ
    несколько имен-данных 2 КОМ
    Статья описания записи 1 КОМ
    Секция отчетов 1 ГОТ
    Статья описания отчета 1 ГОТ
    индикатор уровня RD (00) 1 ГОТ
    фраза CODE (С КОДОМ) 1 ГОТ
    фраза CONTROL (УПРАВЛЕНИЕ) 1 ГОТ
    фраза GLOBAL (ГЛОБАЛЬНОЕ) 2 МПС
    фраза PAGE (РАЗМЕР СТРАНИЦЫ) 1 ГОТ
    Статья описания группы отчета 1 ГОТ
    Следующие фразы появляются в статье описания записи, статье описания данного, статье описания уровня 77 и в статье описания группы отчета:
    Фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) 1 ЯДР
    1 ГОТ
    Фраза COLUMN NUMBER (НОМЕР СТОЛБЦА) 1 ГОТ
    Фраза имя-данного 1 ЯДР
    1 ГОТ
    Фраза EXTERNAL (ВНЕШНЕЕ) 2 МПС
    Фраза FILLER (ЗАПОЛНИТЕЛЬ) 1 ЯДР
    Фраза GLOBAL (ГЛОБАЛЬНОЕ) 2 МПС
    Фраза GROUP INDICATE (ОПРЕДЕЛЯЕТ ГРУППУ) 1 ГОТ
    Фраза JUSTIFIED (СДВИНУТО) 1 ЯДР
    1 ГОТ
    Фраза номер-уровня 1 ЯДР
    от 01 до 49; одна или две цифры 1 ЯДР
    1 ГОТ
    66 2 ЯДР
    77 1 ЯДР
    88 2 ЯДР
    Фраза LINE NUMBER (НОМЕР СТРОКИ) 1 ГОТ
    Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) 1 ГОТ
    Фраза OCCURS (ПОВТОРЯЕТСЯ) 1 ЯДР
    целое TIMES (целое РАЗ) 1 ЯДР
    фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) 2 ЯДР
    фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) 1 ЯДР
    фраза целое-1 ТО целое-2 DEPENDING ON (целое-1 ДО целое-2 В ЗАВИСИМОСТИ ОТ) 2 ЯДР
    Фраза PICTURE (ШАБЛОН) 1 ЯДР
    1 ГОТ
    строка литер содержит не более 30 литер 1 ЯДР
    1 ГОТ
    литеры данных: X 9 А 1 ЯДР
    1 ГОТ
    операционные символы: S (З) V (T) P (M) 1 ЯДР
    1 ГОТ
    литеры фиксированной вставки В + - . , 0 CR (КР) DB (ДВ) / 1 ЯДР
    1 ГОТ
    литеры замещения или плавающей вставки + - Z (П) * 1 ЯДР
    1 ГОТ
    замена валютного знака 1 ЯДР
    1 ГОТ
    замена десятичной точки 1 ЯДР
    1 ГОТ
    Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) 1 ЯДР
    не может быть вложенной 1 ЯДР
    может быть вложенной 2 ЯДР
    Фраза RENAMES (ПЕРЕИМЕНОВЫВАЕТ) 2 ЯДР
    Фраза SIGN (ЗНАК) 1 ЯДР
    1 ГОТ
    Фраза SOURCE (ИСТОЧНИК) 1 ГОТ
    Фраза SUM (СУММА) 1 ГОТ
    Фраза SYNCHRONIZED (ВЫДЕЛЕНО) 1 ЯДР
    Фраза TYPE (ТИП) 1 ГОТ
    Фраза USAGE (об использовании) 1 ЯДР
    1 ГОТ
    BINARY (ДВОИЧНОЕ) 1 ЯДР
    COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) 1 ЯДР
    DISPLAY (ДЛЯ ВЫДАЧИ) 1 ЯДР
    1 ГОТ
    INDEX (ДЛЯ ИНДЕКСА) 1 ЯДР
    PACKED-DECIMAL (ДЕСЯТИЧНОЕ) 1 ЯДР
    Фраза VALUE (ЗНАЧЕНИЕ) 1 ЯДР
    1 ГОТ
    литерал 1 ЯДР
    1 ГОТ
    несколько литералов 2 ЯДР
    литерал-1 THROUGH литерал-2 (литерал-1 ПО литерал-2) 2 ЯДР
    несколько диапазонов литералов 2 ЯДР
    Обработка исходных текстов в разделе данных
    Оператор COPY (КОПИРОВАТЬ) 1 ОИТ
    OF/IN имя-библиотеки (ИЗ имя-библиотеки) 2 ОИТ
    фраза REPLACING (ЗАМЕНЯЯ) 2 ОИТ
    псевдотекст 2 ОИТ
    идентификатор 2 ОИТ
    литерал 2 ОИТ
    слово 2 ОИТ
    Оператор REPLACE (ЗАМЕНИТЬ) 2 ОИТ
    псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) 2 ОИТ
    OFF (ОТКЛЮЧИТЬ) 2 ОИТ
    3.5 Список элементов раздела процедур
    РАЗДЕЛ ПРОЦЕДУР
    Заголовок раздела процедур 1 ЯДР
    Фраза USING (ИСПОЛЬЗУЯ) 1 МПС
    разрешается по крайней мере 5 операндов 1 МПС
    нет ограничения на число операндов 2 МПС
    Декларативные процедуры 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    1 ОТЛ +
    DECLARATIVES (ДЕКЛАРАТИВЫ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    1 ОТЛ +
    END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    1 ОТЛ +
    Арифметические выражения 2 ЯДР
    Знаки бинарных арифметических операций + - * / ** 2 ЯДР
    Знаки унарных арифметических операций + - 2 ЯДР
    Условные выражения 1 ЯДР
    Простое условие 1 ЯДР
    Условие отношения 1 ЯДР
    Знаки операций отношения
    [NOT] GREATER THAN ([HE] БОЛЬШЕ) 1 ЯДР
    [NOT] > ([НЕ] >) 1 ЯДР
    [NOT] LESS THAN ([HE] МЕНЬШЕ) 1 ЯДР
    [NOT] < ([HE] td> 1 ЯДР
    [NOT] EQUAL TO ([НЕ] РАВНО) 1 ЯДР
    [NOT] = ([НЕ] =) 1 ЯДР
    GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) 1 ЯДР
    > = 1 ЯДР
    LESS THAN OR EQUAL TO (МЕНЬШЕ ИЛИ РАВНО) 1 ЯДР
    < = 1 ЯДР
    Сравнение числовых операндов 1 ЯДР
    Сравнение нечисловых операндов 1 ЯДР
    Сравнение имен-индексов и (или) индексных данных 1 ЯДР
    Условие класса 1 ЯДР
    NUMERIC (ЧИСЛОВОЕ) 1 ЯДР
    ALPHABETIC (БУКВЕННОЕ) 1 ЯДР
    ALPHABETIC-LOWER (СТРОЧНЫЕ) 1 ЯДР
    ALPHABETIC-UPPER (ПРОПИСНЫЕ) 1 ЯДР
    имя-класса 1 ЯДР
    Условие имени-условия 2 ЯДР
    Условие знака 2 ЯДР
    Условие состояния-переключателя 1 ЯДР
    Сложное условие 2 ЯДР
    Знаки логических операций AND (И) OR (ИЛИ) NOT (HE) 2 ЯДР
    Отрицание условия 2 ЯДР
    Комбинированное условие 2 ЯДР
    Условие в скобках 1 ЯДР
    Сокращенные комбинированные условия отношения 2 ЯДР
    Арифметические операторы 1 ЯДР
    Арифметические операнды имеют длину до 18 цифр 1 ЯДР
    Композиция операндов содержит не более 18 цифр 1 ЯДР
    Оператор ACCEPT (ПРИНЯТЬ) 1 ЯДР
    идентификатор 1 ЯДР
    только одна передача данных 1 ЯДР
    число передач данных не ограничивается 2 ЯДР
    фраза FROM мнемоническое-имя (С мнемоническое-имя) 2 ЯДР
    фраза FROM DATE/DAY/DAY-OF-WEEK/TIME (ДАТУ/ДЕНЬ/ДЕНЬ-НЕДЕЛИ/ВРЕМЯ) 2 ЯДР
    Оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ) 1 КОМ
    Оператор ADD (СЛОЖИТЬ) 1 ЯДР
    идентификатор/литерал 1 ЯДР
    несколько идентификаторов/литералов 1 ЯДР
    ТО идентификатор (С идентификатор) 1 ЯДР
    ТО несколько-идентификаторов (С несколько-идентификаторов) 1 ЯДР
    ТО идентификатор/литерал GIVING идентификатор (С идентификатор/литерал ПОЛУЧАЯ идентификатор) 1 ЯДР
    ТО идентификатор/литерал GIVING несколько-идентификаторов (С идентификатор/литерал ПОЛУЧАЯ несколько идентификаторов) 1 ЯДР
    фраза ROUNDED (ОКРУГЛЯЯ) 1 ЯДР
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) 1 ЯДР
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) 1 ЯДР
    фраза END-ADD (КОНЕЦ-СЛОЖИТЬ) 1 ЯДР
    фраза CORRESPONDING (СООТВЕТСТВЕННО) 2 ЯДР
    Оператор ALTER (ИЗМЕНИТЬ) 1 ЯДР +
    только одно имя-процедуры 1 ЯДР +
    несколько имен-процедур 2 ЯДР +
    Оператор CALL (ВЫЗВАТЬ) 1 МПС
    литерал 1 МПС
    идентификатор 2 МПС
    фраза USING (ИСПОЛЬЗУЯ) 1 МПС
    идентификатор 1 МПС
    разрешается по крайней мере 5 операндов 1 МПС
    нет ограничения на число операндов 2 МПС
    фраза BY REFERENCE (ССЫЛКУ) 2 МПС
    фраза BY CONTENT (ЗНАЧЕНИЕ) 2 МПС
    фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) 2 МПС
    фраза ON EXCEPTION (ПРИ ОШИБКЕ) 2 МПС
    фраза NOT ON EXCEPTION (БЕЗ ОШИБКИ) 2 МПС
    фраза END-CALL (КОНЕЦ-ВЫЗВАТЬ) (формат 1) 1 МПС
    фраза END-CALL (КОНЕЦ-ВЫЗВАТЬ) (формат 2) 2 МПС
    Оператор CANCEL (ОСВОБОДИТЬ) 2 МПС
    литерал 2 МПС
    идентификатор 2 МПС
    Оператор CLOSE (ЗАКРЫТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    имя-файла 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    несколько имен-файлов 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза REEL/UNIT (КАТУШКУ/ТОМ) 1 ПОД
    1 ГОТ
    фраза FOR REMOVAL (С УДАЛЕНИЕМ) 2 ПОД
    фраза WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) 2 ПОД
    1 ГОТ
    фраза WITH LOCK (С ЗАМКОМ) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    Оператор COMPUTE (ВЫЧИСЛИТЬ) 2 ЯДР
    арифметическое выражение 2 ЯДР
    несколько идентификаторов 2 ЯДР
    фраза ROUNDED (ОКРУГЛЯЯ) 2 ЯДР
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) 2 ЯДР
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) 2 ЯДР
    фраза END-COMPUTE (КОНЕЦ-ВЫЧИСЛИТЬ) 2 ЯДР
    Оператор CONTINUE (ПРОДОЛЖИТЬ) 1 ЯДР
    Оператор DELETE (УДАЛИТЬ) 1 ОТД
    1 ИПД
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза END-DELETE (КОНЕЦ-УДАЛИТЬ) 1 ОТД
    1 ИПД
    Оператор DISABLE (ЗАПРЕТИТЬ) 2 КОМ
    фраза INPUT (ВВОД) 2 КОМ
    фраза TERMINAL (С ТЕРМИНАЛА) 2 КОМ
    фраза I-O-TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) 2 КОМ
    фраза OUTPUT (ВЫВОД) 2 КОМ
    фраза WITH KEY (КЛЮЧ) 2 КОM +
    Оператор DISPLAY (ВЫДАТЬ) 1 ЯДР
    только одна передача данных 1 ЯДР
    ограничений на число передач нет 2 ЯДР
    идентификатор/литерал 1 ЯДР
    несколько идентификаторов/литералов 1 ЯДР
    фраза UPON мнемоническое-имя (НА мнемоническое-имя) 2 ЯДР
    фраза WITH NO ADVANCING (БЕЗ ПРОДВИЖЕНИЯ) 2 ЯДР
    Оператор DIVIDE (РАЗДЕЛИТЬ) 1 ЯДР
    BY идентификатор/литерал (НА идентификатор/литерал) 1 ЯДР
    GIVING идентификатор (ПОЛУЧАЯ идентификатор) 1 ЯДР
    GIVING несколько-идентификаторов (ПОЛУЧАЯ несколько-идентификаторов) 1 ЯДР
    фраза ROUNDED (ОКРУГЛЯЯ) 1 ЯДР
    фраза REMAINDER (ОСТАТОК) 2 ЯДР
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) 1 ЯДР
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) 1 ЯДР
    фраза END-DIVIDE (КОНЕЦ-РАЗДЕЛИТЬ) 1 ЯДР
    Оператор ENABLE (РАЗРЕШИТЬ) 2 КОМ
    фраза INPUT (ВВОД) 2 КОМ
    фраза TERMINAL (С ТЕРМИНАЛА) 2 КОМ
    фраза I-O-TERMINAL (ВВОД-ВЫВОД С ТЕРМИНАЛА) 2 КОМ
    фраза OUTPUT (ВЫВОД) 2 КОМ
    фраза WITH KEY (КЛЮЧ) 2 КОМ +
    Оператор ENTER (ВОЙТИ) 1 ЯДР +
    Оператор EVALUATE (ОЦЕНИТЬ) 2 ЯДР
    идентификатор/литерал 2 ЯДР
    арифметическое выражение 2 ЯДР
    условное выражение 2 ЯДР
    TRUE/FALSE (ИСТИНА/ЛОЖЬ) 2 ЯДР
    фраза ALSO (ТАКЖЕ) 2 ЯДР
    фраза WHEN (КОГДА) 2 ЯДР
    фраза ALSO (ТАКЖЕ) 2 ЯДР
    фраза WHEN OTHER (ИНАЧЕ) 2 ЯДР
    фраза END-EVALUATE (КОНЕЦ-ОЦЕНИТЬ) 2 ЯДР
    Оператор EXIT (ВЫЙТИ) 1 ЯДР
    Оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) 1 МПС
    Оператор GENERATE (ГЕНЕРИРОВАТЬ) 1 ГОТ
    имя-данного 1 ГОТ
    имя-отчета 1 ГОТ
    Оператор GO TO (ПЕРЕЙТИ) 1 ЯДР
    имя-процедуры обязательно 1 ЯДР
    имя-процедуры необязательно 2 ЯДР +
    фраза DEPENDING ON (В ЗАВИСИМОСТИ ОТ) 1 ЯДР
    Оператор IF (ЕСЛИ) 1 ЯДР
    только повелительные операторы 1 ЯДР
    повелительные и (или) условные операторы 2 ЯДР
    вложенные операторы IF (ЕСЛИ) 1 ЯДР
    необязательное слово THEN (TO) 1 ЯДР
    фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) 1 ЯДР
    фраза ELSE (ИНАЧЕ) 1 ЯДР
    фраза END-IF (КОНЕЦ-ЕСЛИ) 1 ЯДР
    Оператор INITIALIZE (ИНИЦИИРОВАТЬ) 2 ЯДР
    несколько идентификаторов 2 ЯДР
    фраза REPLACING (ЗАМЕНЯЯ) 2 ЯДР
    несколько фраз REPLACING (ЗАМЕНЯЯ) 2 ЯДР
    Оператор INITIATE (НАЧАТЬ) 1 ГОТ
    Оператор INSPECT (ПРОСМОТРЕТЬ) 1 ЯДР
    на вхождение одной литеры 1 ЯДР
    на вхождение нескольких литер 2 ЯДР
    фраза TALLYING (СЧИТАЯ) 1 ЯДР
    фраза BEFORE/AFTER (ДО/ПОСЛЕ) 1 ЯДР
    несколько фраз BEFORE/AFTER (ДО/ПОСЛЕ) 2 ЯДР
    несколько фраз TALLYING (СЧИТАЯ) 2 ЯДР
    фраза REPLACING (ЗАМЕНЯЯ) 1 ЯДР
    фраза BEFORE/AFTER (ДО/ПОСЛЕ) 1 ЯДР
    несколько фраз BEFORE/AFTER (ДО/ПОСЛЕ) 2 ЯДР
    несколько фраз REPLACING (ЗАМЕНЯЯ) 2 ЯДР
    фразы TALLYING (СЧИТАЯ) и REPLACING (ЗАМЕНЯЯ) 1 ЯДР
    фраза CONVERTING (ПРЕВРАЩАЯ) 2 ЯДР
    Оператор MERGE (СЛИТЬ) 1 СРТ
    фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) 1 СРТ
    фраза COLLATING SEQUENCE (АЛФАВИТ) 1 СРТ
    фраза USING (ИСПОЛЬЗУЯ) 1 СРТ
    фраза OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА) 1 СРТ
    имя-процедуры 1 СРТ
    фраза GIVING (ПОЛУЧАЯ) 1 CРT
    Оператор MOVE (ПОМЕСТИТЬ) 1 ЯДР
    ТО идентификатор (В идентификатор) 1 ЯДР
    ТО несколько идентификаторов (В несколько идентификаторов) 1 ЯДР
    фраза CORRESPONDING (СООТВЕТСТВЕННО) 2 ЯДР
    дередактирование цифровых редактируемых данных 2 ЯДР
    Оператор MULTIPLY (УМНОЖИТЬ) 1 ЯДР
    BY идентификатор (НА идентификатор) 1 ЯДР
    BY несколько идентификаторов (НА несколько идентификаторов) 1 ЯДР
    GIVING идентификатор (ПОЛУЧАЯ идентификатор) 1 ЯДР
    GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) 1 ЯДР
    фраза ROUNDED (ОКРУГЛЯЯ) 1 ЯДР
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) 1 ЯДР
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) 1 ЯДР
    фраза END-MULTIPLY (КОНЕЦ-УМНОЖИТЬ) 1 ЯДР
    Оператор OPEN (ОТКРЫТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    имя-файла 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    несколько имен-файлов 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза INPUT (ВХОДНОЙ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) 2 ПОД
    фраза REVERSED (PEBEPCHO) 2 ПОД +
    фраза OUTPUT (ВЫХОДНОЙ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    WITH NO REWIND (БЕЗ ПЕРЕМОТКИ) 2 ПОД
    1 ГОТ
    фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза EXTEND (ДОПОЛНЯЕМЫЙ) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    несколько фраз INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ), I-O (ВХОДНОЙ-ВЫХОДНОЙ) 1 ПОД
    1 ОТД
    1 ИПД
    несколько фраз EXTEND (ДОПОЛНЯЕМЫЙ) 2 ПОД
    2 ОТД
    2 ИПД
    Оператор PERFORM (ВЫПОЛНИТЬ) 1 ЯДР
    имя-процедуры необязательно 1 ЯДР
    фраза THROUGH имя-процедуры (ПО имя-процедуры) 1 ЯДР
    вариант повелительный-оператор 1 ЯДР
    фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ) 1 ЯДР
    фраза TIMES (РАЗ) 1 ЯДР
    фраза UNTIL (ДО) 1 ЯДР
    фраза TEST BEFORE/AFTER (С ПРОВЕРКОЙ В НАЧАЛЕ/ В КОНЦЕ) 2 ЯДР
    фраза VARYING (МЕНЯЯ) 2 ЯДР
    фраза TEST BEFORE/AFTER (С ПРОВЕРКОЙ В НАЧАЛЕ/ В КОНЦЕ) 2 ЯДР
    фраза AFTER (ЗАТЕМ) 2 ЯДР
    допускаются по крайней мере 6 фраз AFTER (ЗАТЕМ) 2 ЯДР
    Оператор PURGE (ОЧИСТИТЬ) 2 КОМ
    Оператор READ (ЧИТАТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза NEXT (СЛЕДУЮЩУЮ) 2 ПОД
    2 ОТД
    2 ИПД
    фраза INTO (В) 1 ПОД
    1 ОТД
    1 ИПД
    фраза AT END (В КОНЦЕ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза NOT AT END (HE В КОНЦЕ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза KEY (КЛЮЧ) 2 ИПД
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза END-READ (КОНЕЦ-ЧИТАТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    Оператор RECEIVE (ПОЛУЧИТЬ) 1 КОМ
    фраза MESSAGE (СООБЩЕНИЕ) 1 КОМ
    фраза SEGMENT (СЕГМЕНТ) 1 КОМ
    фраза INTO идентификатор (В идентификатор) 1 КОМ
    фраза NO DATA (НЕТ ДАННЫХ) 1 КОМ
    фраза WITH DATA (ЕСТЬ ДАННЫЕ) 1 КОМ
    фраза END-RECEIVE (КОНЕЦ-ПОЛУЧИТЬ) 1 КОМ
    Оператор RELEASE (ПЕРЕДАТЬ) 1 СРТ
    фраза FROM (ИЗ ПОЛЯ) 1 СРТ
    Оператор RETURN (ВЕРНУТЬ) 1 СРТ
    фраза INTO (В) 1 СРТ
    фраза AT END (В КОНЦЕ) 1 СРТ
    фраза NOT AT END (HE В КОНЦЕ) 1 СРТ
    фраза END-RETURN (КОНЕЦ-ВЕРНУТЬ) 1 СРТ
    Оператор REWRITE (ОБНОВИТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза FROM (ИЗ ПОЛЯ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза END-REWRITE (КОНЕЦ-ОБНОВИТЬ) 1 ОТД
    1 ИПД
    Оператор SEARCH (ИСКАТЬ) 2 ЯДР
    фраза VARYING (МЕНЯЯ) 2 ЯДР
    фраза AT END (В КОНЦЕ) 2 ЯДР
    фраза WHEN (КОГДА) 2 ЯДР
    несколько фраз WHEN (КОГДА) 2 ЯДР
    фраза END-SEARCH (КОНЕЦ-ИСКАТЬ) 2 ЯДР
    Оператор SEARCH ALL (ИСКАТЬ ОСОБО) 2 ЯДР
    фраза AT END (В КОНЦЕ) 2 ЯДР
    фраза WHEN (КОГДА) 2 ЯДР
    фраза END-SEARCH (КОНЕЦ-ИСКАТЬ) 2 ЯДР
    Оператор SEND (ПОСЛАТЬ) 1 КОМ
    фраза FROM идентификатор (ИЗ ПОЛЯ идентификатор) (часть сообщения) 2 КОМ
    фраза FROM идентификатор (ИЗ ПОЛЯ идентификатор) (полное сообщение) 1 КОМ
    фреза WITH идентификатор (С идентификатор) 2 КОМ
    фраза WITH ESI (С ИКС) 2 КОМ
    фраза WITH EMI (С ИКЩ) 2 КОМ
    фраза WITH EGI (С ИКГ) 2 КОМ
    фраза BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) 1 КОМ
    целое LINE/LINES (целое СТРОК) 1 КОМ
    идентификатор LINE/LINES (идентификатор СТРОК) 1 КОМ
    мнемоническое-имя 2 КОМ
    PAGE (СТРАНИЦЫ) 1 КОМ
    фраза REPLACING LINE (ЗАМЕНЯЯ СТРОКУ) 2 КОМ
    Оператор SET (УСТАНОВИТЬ) 1 ЯДР
    имя-индекса/идентификатор ТО (НА) 1 ЯДР
    имя-индекса UP BY/DOWN BY (имя-индекса ПРИБАВЛЯЯ/ВЫЧИТАЯ) 1 ЯДР
    мнемоническое-имя ТО ON/OFF (мнемоническое-имя НА ВКЛЮЧЕНО/ВЫКЛЮЧЕНО) 1 ЯДР
    имя-условия ТО TRUE (имя-условия НА ИСТИНА) 2 ЯДР
    Оператор SORT (СОРТИРОВАТЬ) 1 СРТ
    фраза ASCENDING/DESCENDING KEY (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) 1 СРТ
    фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) 1 СРТ
    фраза COLLATING SEQUENCE (АЛФАВИТ) 1 СРТ
    фраза INPUT PROCEDURE (ПРОЦЕДУРА ВВОДА) 1 СРТ
    имя-процедуры 1 СРТ
    фраза USING (ИСПОЛЬЗУЯ) 1 СРТ
    фраза OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА) 1 СРТ
    имя-процедуры 1 СРТ
    фраза GIVING (ПОЛУЧАЯ) 1 СРТ
    Оператор START (ПОДВЕСТИ) 2 ОТД
    2 ИПД
    фраза KEY (КЛЮЧ) 2 ОТД
    2 ИПД
    EQUAL TO (РАВНО) 2 ОТД
    2 ИПД
    = 2 ОТД
    2 ИПД
    GREATER THAN (БОЛЬШЕ) 2 ОТД
    2 ИПД
    > 2 ОТД
    2 ИПД
    NOT LESS THAN (HE МЕНЬШЕ) 2 ОТД
    2 ИПД
    NOT < (HE td> 2 ОТД
    2 ИПД
    GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) 2 ОТД
    2 ИПД
    > = 2 ОТД
    2 ИПД
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) 2 ОТД
    2 ИПД
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) 2 ОТД
    2 ИПД
    фраза END-START (КОНЕЦ-ПОДВЕСТИ) 2 ОТД
    2 ИПД
    Оператор STOP (ОСТАНОВИТЬ) 1 ЯДР
    STOP (РАБОТУ) 1 ЯДР
    литерал 1 ЯДР +
    Оператор STRING (СОБРАТЬ) 2 ЯДР
    несколько DELIMITED BY (ОГРАНИЧИВАЯСЬ) 2 ЯДР
    фраза WITH POINTER (УКАЗАТЕЛЬ) 2 ЯДР
    фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) 2 ЯДР
    фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) 2 ЯДР
    фраза END-STRING (КОНЕЦ-СОБРАТЬ) 2 ЯДР
    Оператор SUBTRACT (ОТНЯТЬ) 1 ЯДР
    идентификатор/литерал 1 ЯДР
    несколько идентификаторов/литералов 1 ЯДР
    FROM идентификатор (ОТ идентификатор) 1 ЯДР
    FROM несколько идентификаторов (ОТ несколько идентификаторов) 1 ЯДР
    GIVING идентификатор (ПОЛУЧАЯ идентификатор) 1 ЯДР
    GIVING несколько идентификаторов (ПОЛУЧАЯ несколько идентификаторов) 1 ЯДР
    фраза ROUNDED (ОКРУГЛЯЯ) 1 ЯДР
    фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) 1 ЯДР
    фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) 1 ЯДР
    фраза END-SUBTRACT (КОНЕЦ-ОТНЯТЬ) 1 ЯДР
    фраза CORRESPONDING (СООТВЕТСТВЕННО) 2 ЯДР
    Оператор SUPPRESS (ПОДАВИТЬ) 1 ГОТ
    Оператор TERMINATE (ЗАКОНЧИТЬ) 1 ГОТ
    Оператор UNSTRING (РАЗОБРАТЬ) 2 ЯДР
    фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) 2 ЯДР
    фраза DELIMITER IN (ОГРАНИЧИТЕЛЬ В) 2 ЯДР
    фраза COUNT IN (СЧЕТ В) 2 ЯДР
    фраза WITH POINTER (УКАЗАТЕЛЬ) 2 ЯДР
    фраза TALLYING (СЧИТАЯ) 2 ЯДР
    фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) 2 ЯДР
    фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) 2 ЯДР
    фраза END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ) 2 ЯДР
    Оператор USE (ИСПОЛЬЗОВАТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    1 ОТЛ+
    фраза EXCEPTION/ERROR PROCEDURE (ПРОЦЕДУРЫ ОШИБКИ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    фраза GLOBAL (ГЛОБАЛЬНО) 2 МПС
    ON имя-файла (ДЛЯ имя-файла) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    ON несколько имен-файлов (ДЛЯ несколько имен-файлов) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    ON INPUT (ДЛЯ ВХОДНЫХ) 1 ПОД
    1 ОТД
    1 ИПД
    ON OUTPUT (ДЛЯ ВЫХОДНЫХ) 1 ПОД
    1 ОТД
    1 ИПД
    1 ГОТ
    ON I-O (ДЛЯ ВХОДНЫХ-ВЫХОДНЫХ) 1 ПОД
    1 ОТД
    1 ИПД
    ON EXTEND (ДЛЯ ДОПОЛНЯЕМЫХ) 2 ПОД
    2 ОТД
    2 ИПД
    1 ГОТ
    фраза BEFORE REPORTING (ДО ВЫДАЧИ) 1 ГОТ
    фраза GLOBAL (ГЛОБАЛЬНО) 2 МПС
    фраза FOR DEBUGGING (ДЛЯ ОТЛАДКИ) 1 ОТЛ +
    имя-процедуры 1 ОТЛ +
    ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ) 1 ОТЛ +
    ALL REFERENCES OF идентификатор-1 (ПРИ ВСЕХ ССЫЛКАХ НА идентификатор-1) 2 ОТЛ +
    имя-коммуникации 2 ОТЛ +
    имя-файла 2 ОТЛ +
    Оператор WRITE (ПИСАТЬ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза FROM (ИЗ ПОЛЯ) 1 ПОД
    1 ОТД
    1 ИПД
    фраза BEFORE/AFTER ADVANCING (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ) 1 ПОД
    целое LINE/LINES (целое СТРОК) 1 ПОД
    идентификатор LINE/LINES (идентификатор СТРОК) 1 ПОД
    мнемоническое-имя 2 ПОД
    PAGE (СТРАНИЦЫ) 1 ПОД
    фраза AT END-OF-PAGE/EOP (В КОНЦЕ СТРАНИЦЫ) 2 ПОД
    фраза NOT AT END-OF-PAGE/EOP (HE В КОНЦЕ СТРАНИЦЫ) 2 ПОД
    фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) 1 ОТД
    1 ИПД
    фраза END-WRITE (КОНЕЦ-ПИСАТЬ) 2 ПОД
    2 ОТД
    2 ИПД
    Сегментация
    Номера-сегментов от 0 до 49 для постоянных сегментов 1 СЕГ +
    Номера-сегментов от 50 до 99 для независимых сегментов 1 СЕГ +
    Все секции, имеющие одинаковый номер-сегмента, должны быть смежными в исходной программе 1 СЕГ +
    Секции, имеющие одинаковый номер-сегмента, могут быть несмежными в исходной программе 2 СЕГ +
    Обработка исходных текстов в разделе процедур
    Оператор COPY (КОПИРОВАТЬ) 1 ОИТ
    фраза OF/IN имя-библиотеки (ИЗ имя-библиотеки) 2 ОИТ
    фраза REPLACING (ЗАМЕНЯЯ) 2 ОИТ
    псевдотекст 2 ОИТ
    идентификатор 2 ОИТ
    литерал 2 ОИТ
    слово 2 ОИТ
    Оператор REPLACE (ЗАМЕНИТЬ) 2 ОИТ
    псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) 2 ОИТ
    OFF (ОТКЛЮЧИТЬ) 2 ОИТ

  3. Часть 2.Концепции и средства языка

  4. 1.ВВЕДЕНИЕ
    Кобол предлагает множество средств, позволяющих пользователю применять необходимую функцию, не программируя ее в деталях. Ниже обсуждается каждое из этих средств, рассматриваются доводы для включения его в язык и смысл его использования и организации.
    2.ФАЙЛЫ
    Файл - это совокупность записей, которые могут быть помещены в запоминающую среду или извлечены из нее. Пользователь выбирает не только организацию файла, но выбирает также метод и последовательность обработки. Для последовательной запоминающей среды организация файла и метод обработки ограничены, для массовой памяти таких ограничений нет.
    Используются следующие соглашения при описании возможностей Кобол-программ для манипулирования файлами. Термин "имя-файла" обозначает определенное пользователем слово, используемое в исходной Кобол-программе для ссылки на файл. Термины "файл, на который ссылается имя-файла" и "файл" обозначают физический файл независимо от имени-файла, используемого в Кобол-программе. Термин "определитель файла" обозначает объект, содержащий информацию относительно файла. Все доступы к физическим файлам осуществляются через определитель файла. В различных реализациях определитель файла может быть таблицей информации о файле, блоком управления файлом и т.п.
    2.1.Свойства файла
    Файл имеет несколько свойств, которые придаются файлу при его создании и не могут изменяться за время существования файла. Основным свойством является организация файла, описывающая его логическую структуру. Имеются три организации: последовательная, относительная и индексная. Другими фиксированными свойствами файла, обеспечиваемыми Кобол-программой, являются основной ключ записи, дополнительные ключи записи, набор кодов, минимальный и максимальный размер логической записи, тип записи (фиксированной или переменной длины), основная последовательность для ключей индексных файлов, фактор блокирования, литера заполнитель и ограничитель записи.
    2.1.1.Последовательная организация
    Последовательные файлы организованы так, что каждая запись, за исключением последней, имеет единственную последующую запись; каждая запись, за исключением первой, имеет единственную предшествующую запись. Отношение "предшественник-преемник" устанавливается порядком выполнения оператора WRITE (ПИСАТЬ) при создании файла. Установленный порядок предшествования не изменяется за исключением случая, когда записи добавляются в конец файла.
    Последовательно организованный файл массовой памяти имеет такую же логическую структуру, как и файл любой последовательной запоминающей среды; тем не менее последовательный файл массовой памяти может быть обновлен на месте. При использовании этой техники новые записи не могут быть добавлены в файл и каждая обновленная запись должна быть одного размера с записью-оригиналом.
    2.1.2.Относительная организация
    Файл с относительной организацией - это файл массовой памяти, доступ к записям которого осуществляется по значению относительного номера записи.
    Концептуально файл с относительной организацией состоит из последовательной цепочки областей, каждая из которых может содержать логическую запись. Каждая из этих областей обозначена относительным номером записи. Каждая логическая запись в относительном файле идентифицируется относительным номером записи для ее области памяти. Например, десятая запись - это запись, адресованная относительным номером записи 10 и находящаяся в десятой области записи независимо от того, занесены или не занесены записи в области записи от первой до девятой.
    С целью более эффективного доступа к записям в относительном файле количество позиций литер, резервируемых в запоминающей среде для хранения отдельной логической записи, может отличаться от количества позиций литер, указанного в описании этой записи в программе.
    2.1.3.Индексная организация
    Файл с индексной организацией - это файл массовой памяти, доступ к записям которого осуществляется заданием значения определенного ключа в этой записи. Для каждого ключа, определенного для записей файла, поддерживается индекс. Каждый такой индекс представляет набор значений соответствующего ключа в каждой записи. Кроме того, каждый индекс является механизмом, обеспечивающим доступ к любой записи файла.
    Каждый индексный файл имеет основной индекс, представляющий основной ключ записи каждой записи в файле. Каждая запись помещается в файл, изменяется или удаляется из файла только на основании значения ее основного ключа записи. Основной ключ каждой записи в файле должен быть однозначным (уникальным) и не должен изменяться при обновлении записи. Основной ключ записи объявляется в фразе RECORD KEY (КЛЮЧ ЗАПИСИ) статьи управления файлом для данного файла.
    Дополнительные ключи записи обеспечивают дополнительные способы извлечения записей файла. Такие ключи называются в фразах ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) статьи управления файлом. Значение отдельного дополнительного ключа в каждой записи не обязательно должно быть однозначным. В случае, когда значения могут быть неоднозначными, в фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) должен быть указан вариант DUPLICATES (С ДУБЛИРОВАНИЕМ).
    2.1.4.Логические записи
    2.1.4.1.Записи фиксированной длины
    Записи фиксированной длины должны содержать одно и то же количество позиций литер во всех записях файла. Все операции ввода-вывода могут обрабатывать записи только такого размера. Записи фиксированной длины можно определить явно форматом 1 фразы RECORD (В ЗАПИСИ) статьи описания файла независимо от индивидуальных описаний записи.
    2.1.4.2.Записи переменной длины
    Записи переменной длины могут содержать различное количество позиций литер в записях файла. Для явного определения записей переменной длины можно указать вариант VARYING (ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР) фразы RECORD (В ЗАПИСИ) статьи описания файла. Длина записи зависит от данного, на которое имеется ссылка в варианте DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы RECORD (В ЗАПИСИ) или в варианте DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы OCCURS (ПОВТОРЯЕТСЯ), или от длины записи статьи описания записи в файле.
    2.1.4.3.Типы записей, определяемые реализацией
    Если в статье описания файла не указана фраза RECORD (В ЗАПИСИ) для файла или если фраза RECORD (В ЗАПИСИ) определяет диапазон позиций литер, реализация определяет, какой получается тип записей - переменной длины или фиксированной длины.
    Логическая запись - это порция данных, которую можно поместить в файл или извлечь из него. Количество записей, содержащихся в файле, ограничивается только возможностью запоминающей среды. Имеются два типа записей: запись фиксированной длины и запись переменной длины. При создании файла объявляется, какой тип записей он будет содержать. В любом случае содержимое области записи не отражает никакой информации, которую реализация может добавлять к записи в физической памяти (например, заголовок длины записи); длина записи, используемая программистом в Коболе, также не отражает таких добавлений.
    2.2.Обработка файлов
    2.2.1.Операции над записями
    Фраза ACCESS (ДОСТУП) статьи описания файла указывает способ, которым объектная программа оперирует записями в файле. Доступ может быть последовательным, произвольным и динамическим.
    К файлам с относительной и индексной организацией возможен любой из методов доступа к файлу независимо от метода доступа, используемого при создании файла. К файлу с последовательной организацией возможен только последовательный доступ.
    Для выходного отчета его содержимое, организация и формат могут быть определены при использовании средств генератора отчетов (ч.2, п.3.1).
    2.2.1.1.Последовательный доступ
    Последовательный доступ возможен для любых файлов, безотносительно к организации файла.
    При последовательной организации порядок последовательного доступа является порядком, в котором записи заносились в файл.
    При относительной организации порядок последовательного доступа возрастающий по значению относительных номеров записи. Доступны только записи, существующие в текущий момент в файле. Для установления начальной точки следующих друг за другом последовательных извлечений может быть использован оператор START (ПОДВЕСТИ).
    При индексной организации порядок последовательного доступа возрастающий по значению ключа ссылки в соответствии с основной последовательностью, связанной с внутренним набором литер. Каждый из ключей, связанных с файлом, может быть установлен в качестве ключа ссылки во время обработки файла. Порядок извлечения из набора записей, имеющих дублирующиеся значения ключа ссылки, является первоначальным порядком занесения этих записей в набор. Для установления начальной точки в индексном файле для ряда следующих друг за другом последовательных извлечений может быть использован оператор START (ПОДВЕСТИ).
    2.2.1.2.Произвольный доступ
    При произвольном доступе к файлу операторы ввода-вывода используются для доступа к записям в порядке, определенном пользователем. Произвольный доступ может применяться только к файлам с относительной или индексной организацией.
    Для файла с относительной организацией программист указывает требуемую запись, помещая ее относительный номер записи в поле данного относительного ключа. При индексной организации программист указывает требуемую запись, помещая значение одного из ключей записи в поле данного основного ключа записи или дополнительного ключа записи.
    2.2.1.3.Динамический доступ
    При динамическом доступе программист может переходить от последовательного доступа к произвольному, используя соответствующие формы операторов ввода-вывода. Динамический доступ может использоваться только для файлов с относительной и индексной организацией.
    2.2.1.4.Режим открытия
    Режим открытия файла связан с действиями, которые должны быть выполнены для записей файла. Режимы открытия и их назначение следующие:
    для ввода - для извлечения записей;
    для вывода - для занесения записей в файл;
    для дополнения - для добавления записей к существующему файлу;
    для ввода-вывода - для извлечения и обновления записей.
    Режим открытия определяется оператором OPEN (ОТКРЫТЬ).
    Если файл открыт для ввода, возможен доступ к файлу по оператору READ (ЧИТАТЬ). Для файлов с индексной или относительной организацией, для которых указан последовательный или динамический доступ, может быть также использован оператор START (ПОДВЕСТИ).
    Если файл открыт для вывода, записи помещаются в файл выполнением операторов GENERATE (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).
    Если файл открыт для дополнения, новые записи добавляются в логический конец файла выполнением операторов GENERATE (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).
    В режиме открытия для ввода-вывода можно обращаться только к файлам массовой памяти. Дополнительные возможности устройств массовой памяти позволяют обновление записей на месте, таким образом, всегда могут быть использованы операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ). Файлы массовой памяти могут быть обновлены таким же образом, как и файлы в последовательной запоминающей среде, перезаписыванием файла полностью в другой файл (возможно в другой участок массовой памяти), используя операторы READ (ЧИТАТЬ) и WRITE (ПИСАТЬ). Тем не менее, иногда более эффективно обновлять файлы массовой памяти на месте. При такой методике обработки файла массовой памяти оператор REWRITE (ОБНОВИТЬ) используется для возврата на то же место запоминающей среды только тех записей, которые были изменены. Операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ) являются единственными операторами, использование которых допускается во время обновления на месте последовательных файлов. Для индексных и относительных файлов применяются следующие дополнительные функции: оператор START (ПОДВЕСТИ) может быть использован при последовательном или динамическом доступе для изменения последовательности извлечения записей; оператор DELETE (УДАЛИТЬ) может быть использован при любом доступе для логического удаления записи из файла; оператор WRITE (ПИСАТЬ) может быть использован при произвольном или динамическом доступе для вставки новой записи в файл.
    2.2.1.5.Указатель текущего тома
    Указатель текущего тома - логическое понятие, используемое в этом документе для облегчения точного определения текущего физического тома последовательного файла. На состояние указателя текущего тома влияют операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ).
    2.2.1.6.Индикатор позиции файла
    Индикатор позиции файла - логическое понятие, используемое в этом документе для облегчения точного определения следующей записи в данном файле, которая станет доступной в конкретной последовательности операций ввода-вывода. На установку индикатора позиции файла влияют только операторы START (ПОДВЕСТИ), OPEN (ОТКРЫТЬ) и READ (ЧИТАТЬ). Понятие индикатора позиции файла не имеет смысла для файлов, открытых для вывода или дополнения.
    2.2.1.7.Понятие верстки
    При определении выходного отчета может быть использована фраза LINAGE (ВЕРСТКА). Она облегчает определение логической страницы и размещение на логической странице верхнего и нижнего полей и области концовки. Использование фразы LINAGE (ВЕРСТКА) неявно определяет соответствующий специальный регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ), который действует как указатель строки в теле страницы.
    2.2.2.Операции над файлами
    Несколько операторов Кобола обрабатывают файлы как единое целое или как набор записей. Это операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), MERGE (СЛИТЬ) и SORT (СОРТИРОВАТЬ).
    2.2.2.1.Сортировка и слияние
    2.2.2.1.1.Сортировка
    При использовании сортировки бывает необходимо применить некоторую специальную обработку к содержимому сортируемого файла. Специальная обработка может заключаться в добавлении, удалении, создании, изменении, редактировании либо в других модификациях отдельных записей в файле. Применение специальной обработки может понадобиться до или после переупорядочения записей в результате сортировки, или же такая обработка может потребоваться и до, и после сортировки. Средства сортировки в Коболе позволяют пользователю записать эти процедуры и указать, в каком месте, до или после сортировки, они должны выполняться. Кобол-программа может содержать любое количество сортировок и каждая из них может иметь свои процедуры ввода и вывода. Средства сортировки автоматически приводят к выполнению этих процедур в указанном месте.
    В процедуре ввода для создания сортируемого файла используется оператор RELEASE (ПЕРЕДАТЬ). Это значит, что по завершении выполнения процедуры ввода те записи, которые обработаны посредством оператора RELEASE (ПЕРЕДАТЬ) (а не оператором WRITE (ПИСАТЬ)), составляют сортируемый файл, доступ к которому возможен только по оператору SORT (СОРТИРОВАТЬ). Выполнение оператора SORT (СОРТИРОВАТЬ) упорядочивает весь набор записей в сортируемом файле соответственно ключам, указанным в операторе SORT (СОРТИРОВАТЬ).
    К отсортированным записям сортируемого файла возможен доступ посредством оператора RETURN (ВЕРНУТЬ) во время выполнения процедуры вывода.
    Для сортируемого файла нет процедур обработки меток, которыми мог бы управлять программист, и правила блокирования и распределения внутренней памяти определяются оператором SORT (СОРТИРОВАТЬ). Операторы RELEASE (ПЕРЕДАТЬ) и RETURN (ВЕРНУТЬ) ничего не предполагают относительно буферных полей, блоков или катушек. Следовательно, сортируемый файл можно рассматривать как внутренний файл, созданный (оператором RELEASE (ПЕРЕДАТЬ)) из входного файла, обработанный (оператором SORT (СОРТИРОВАТЬ)) и затем доступный (оператором RETURN (ВЕРНУТЬ)) выходному файлу. Обращение и доступ к самому сортируемому файлу возможны только в операторе SORT (СОРТИРОВАТЬ). Описание сортируемого-сливаемого файла можно рассматривать как особый тип описания файла. То есть, сортируемый файл, как и любой файл, является набором записей.
    2.2.2.1.2.Слияние
    При использовании слияния бывает необходимо применить специальную обработку содержимого сливаемого файла. Специальная обработка может заключаться в добавлении, удалении, изменении, редактировании либо каких-либо других модификациях отдельных записей в файле. Средства слияния в Коболе позволяют пользователю задать процедуру вывода, которая должна выполняться при создании выходного результата слияния. Сливаемые записи становятся доступными из сливаемого файла при использовании оператора RETURN (ВЕРНУТЬ) в процедуре вывода.
    Для сливаемого файла нет процедур обработки меток, которыми мог бы управлять программист, и правила блокирования и распределения внутренней памяти определяются оператором MERGE (СЛИТЬ). Оператор RETURN (ВЕРНУТЬ) ничего не предполагает относительно буферных полей, блоков или катушек.
    Сливаемый файл, таким образом, можно рассматривать как внутренний файл, созданный из входных файлов их комбинацией (оператором MERGE (СЛИТЬ)) и доступный затем (по оператору RETURN (ВЕРНУТЬ)) выходному файлу. Обращение и доступ к самому сливаемому файлу возможны только в операторе MERGE (СЛИТЬ). Описание сортируемого-сливаемого файла можно рассматривать как особый тип описания файла. То есть, сливаемый файл, как и любой файл, является набором записей.
    2.2.3.Обработка особых ситуаций
    2.2.3.1.Состояние ввода-вывода
    Состояние ввода-вывода - это логическое понятие, используемое в этом документе для облегчения точного определения состояния выполнения операции ввода-вывода.
    На установку состояния ввода-вывода влияют только операторы CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) и WRITE (ПИСАТЬ).
    Значение состояния ввода-вывода для данного файла доступно программе только посредством имени-данного, указанного в фразе: FILE STATUS (СОСТОЯНИЕ ФАЙЛА) статьи управления файлом для этого файла. Значение состояния ввода-вывода помещается в это данное во время выполнения оператора ввода-вывода и до выполнения любого повелительного оператора, связанного с этим оператором ввода-вывода, или до выполнения декларативы ошибки.
    2.2.3.2.Декларативы ошибки
    Если для файла указана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ОШИБКИ), процедура выполняется каждый раз, когда возникают условия ввода или вывода, приводящие к неуспешной операции ввода-вывода. Однако декларатива ошибки не выполняется, если имеется условие неверного ключа и указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), или при наличии условия конца и указанной фразе AT END (В КОНЦЕ).
    2.2.3.3.Необязательные фразы
    Фразы INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) могут быть указаны в операторах DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) или WRITE (ПИСАТЬ). Некоторые из условий, приводящие к условию ошибки ключа, возникают, когда запрашиваемый ключ не существует в файле (операторы DELETE (УДАЛИТЬ), READ (ЧИТАТЬ) или START (ПОДВЕСТИ)); когда ключ уже есть в файле и дублирования не разрешаются (оператор WRITE (ПИСАТЬ)); когда ключа в файле нет или когда ключ не является последним прочитанным ключом (оператор REWRITE (ОБНОВИТЬ)).
    Если условие ошибки ключа возникает во время выполнения оператора, для которого указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), выполняется оператор, определяемый этой фразой INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА).
    В операторе READ (ЧИТАТЬ) может быть указана фраза AT END (В КОНЦЕ). Условие "в конце" возникает:
    в файле с последовательным доступом, когда в файле не существует следующей логической записи;
    когда число значащих цифр в относительном номере записи больше размера данного - относительного ключа;
    когда необязательный файл отсутствует;
    при попытке выполнения оператора READ (ЧИТАТЬ) при уже существующем условии "в конце". Если во время выполнения оператора, для которого указана фраза AT END (В КОНЦЕ), возникает условие "в конце", выполняется оператор, определенный фразой AT END (В КОНЦЕ).
    Во время выполнения любой операции ввода или вывода могут возникнуть особые условия, препятствующие нормальному завершению операции. Имеются три метода сообщения объектной программе об этих условиях: ключи состояния, декларативы ошибок и необязательные фразы, связанные с повелительным оператором.
    Файл может обрабатываться выполнением операций как над отдельными записями, так и над файлом как целым. Особые условия, которые встречаются во время обработки, сообщаются программе.
    3.ГЕНЕРАТОР ОТЧЕТОВ
    Назначением генератора отчетов является организация, форматирование и представление содержания выдаваемых отчетов. Хотя отчет может быть составлен без использования этих средств, генератор отчетов обеспечивает более удобные возможности для построения и составления отчетов. Программирование процедур, которое обычно производит программист, автоматически обеспечивается системой управления генератором отчетов. Таким образом, программист избавлен от написания процедур перемещения данных, конструирования печатаемых строк, подсчета строк на странице, нумерации страниц, составления строк заголовка и строк концовки, распознавания конца логических подразделений данных, обновления счетчиков сумм и т.п. Все эти действия выполняются автоматически на основании спецификаций, главным образом, секции отчетов раздела данных исходной программы.
    3.1.Секция отчетов
    Секция отчетов в разделе данных содержит одну или несколько статей описания отчета RD (00), каждая из которых представляет полное описание отчета.
    Отчет, имя которого указано в статье описания отчета, не относится прямо к выходному файлу. Вместо этого он связан с именем-файла в секции файлов и это имя-файла связывается с файлом, когда выполняется оператор OPEN (ОТКРЫТЬ), указывающий имя-файла. С одним и тем же именем файла может быть связано несколько отчетов и чтобы отличить отчеты друг от друга, используется фраза CODE (С КОДОМ). Для внешнего определителя файла, соотнесенного имени-файла, отдельно компилируемые программы могут указывать различные отчеты для одного и того же имени-файла. Статья описания файла, к которому относится отчет, не может содержать статей описания записей, описывающих записи данных. Эта статья описания файла должна указывать имя статьи описания отчета для каждого отчета, связанного с этим именем-файла в данной программе.
    Статья описания отчета содержит набор фраз, именующих отчет и снабжающих специфической информацией о формате печатаемой страницы и организации подразделений отчета. В статье описания отчета может быть задан код идентификации так, чтобы каждый отчет можно было идентифицировать отдельно в промежуточном выходном файле.
    За каждой статьей описания отчета следуют одна или несколько статей с номером уровня 01, за каждой из которых следует иерархическая структура, подобная описаниям записи в Коболе. Каждая статья с номером уровня 01 и ее подчиненные статьи описывают группу отчета. Каждая группа отчета состоит из нуля, одной или нескольких печатаемых строк, рассматриваемых как одно целое. Группа отчета, которую нужно напечатать, печатается целиком на одной логической странице; группа никогда не разбивается при переходе на следующую страницу.
    3.2.Структура отчета
    При определении структуры отчета главное внимание должна быть уделено требованиям вертикального и горизонтального позиционирования, манипулированию данными, физическим и логическим подразделениям отчета.
    3.2.1.Вертикальное позиционирование
    Средства генератора отчетов позволяют пользователю описывать группы отчета, содержащие множество строк. Вертикальное позиционирование строк на странице определяется фразой LINE NUMBER (НОМЕР СТРОКИ), связанной с каждой строкой. Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) указывает, сколько строк следует пропустить после представления последней строки группы. Первая фраза LINE NUMBER (НОМЕР СТРОКИ) следующей группы определяет дополнительную информацию о пропуске строк, которую нужно использовать при позиционировании этой группы.
    3.2.2.Горизонтальное позиционирование
    Генератор отчетов позволяет пользователю позиционировать поля данных в строке отчета посредством фразы COLUMN NUMBER (НОМЕР СТОЛБЦА). Система управления генератором отчетов обеспечивает заполнение пробелами промежутка между всеми определяемыми полями.
    3.2.3.Манипулирование данными
    При использовании средств генератора отчетов перемещением данных в группу отчета управляют фразы секции отчетов, а не операторы раздела процедур. Фразы секции отчетов, осуществляющие манипулирование данными, следующие: SOURCE (ИСТОЧНИК), SUM (СУММА) и VALUE (ЗНАЧЕНИЕ).
    Фраза SOURCE (ИСТОЧНИК) определяет посылаемое данное неявного оператора MOVE (ПОМЕСТИТЬ). Принимающее печатаемое данное определяется описанием данного группы отчета, в котором появляется фраза SOURCE (ИСТОЧНИК).
    Фраза SUM (СУММА) приводит к автоматическому учреждению счетчика суммы. Объект фразы SUM (СУММА) называет данное (данные), которое прибавляется к счетчику суммы при выполнении оператора GENERATE (ГЕНЕРИРОВАТЬ). Пересылка содержимого счетчика суммы в принимающее печатаемое данное, определенное описание данного группы отчета, в которой имеется фраза SUM (СУММА), совершается автоматически при представлении этой группы отчета.
    Фраза VALUE (ЗНАЧЕНИЕ) указывает литерал, который появляется в печатаемом данном группы отчета каждый раз при представлении группы отчета.
    Итак, данное в группе отчета представляется, если оно сопровождается фразой COLUMN NUMBER (НОМЕР СТОЛБЦА), указывающей, где оно должно быть представлено. Значение, помещаемое в печатаемое данное, определяется фразами VALUE (ЗНАЧЕНИЕ), SOURCE (ИСТОЧНИК) или SUM (СУММА), находящимися в описании группы отчета. Ни при каких обстоятельствах печатаемое данное группы отчета не может получить значение непосредственно от оператора раздела процедур.
    3.2.4.Подразделения отчета
    3.2.4.1.Физическое подразделение отчета
    Длина страницы, размер полей заголовка и концовки, размер поля, в котором будут располагаться строки фрагментов, определяется фразой PAGE (РАЗМЕР СТРАНИЦЫ). Система управления генератором отчетов использует фразы LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для размещения этих групп отчета, и, если необходимо, для перехода на новую страницу с автоматическим воспроизведением групп отчета PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ) и PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ).
    3.2.4.2.Логическое подразделение отчета
    Группы отчета типа фрагмент могут быть выстроены во вложенный набор управляемых групп. Каждая управляемая группа может начинаться группой отчета управляемый заголовок и заканчиваться группой отчета управляемая концовка.
    Если определены вложенные управляемые группы, распознавание изменения значения управляющего данного в иерархии управления называется прерыванием управления, а строки заголовков и концовок, связанных с управляющим именем-данного, называются группами отчета управляемый заголовок и управляемая концовка.
    Во время выполнения оператора GENERATE (ГЕНЕРИРОВАТЬ) система управления генератором отчетов использует иерархию управления для автоматической проверки прерывания управления. Если имеет место прерывание управления, считается, что для всех младших управляющих данных в иерархии управления также имеет место прерывание управления, даже если в действительности их значения не изменились. Распознавание прерывания управления вызывает следующую последовательность действий:
    (1) представляются все группы управляемой концовки от младшей до уровня, на котором произошло прерывание управления, включая его;
    (2) представляются все группы управляемого заголовка от уровня, соответствующего прерыванию управления, до самого младшего;
    (3) представляется группа фрагмента отчета, имя которого указано в операторе GENERATE (ГЕНЕРИРОВАТЬ).
    При определении того, что представляется на странице, учитываются физическая и логическая организация отчета.
    3.3.Операторы раздела процедур генератора отчетов
    Операторы раздела процедур генератора отчетов следующие: INITIATE (НАЧАТЬ), GENERATE (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ), SUPPRESS (ПОДАВИТЬ) и USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
    Оператор INITIATE (НАЧАТЬ) приводит к автоматическому выполнению ряда инициирующих действий системой управления генератором отчетов. Отчет должен быть инициирован прежде, чем можно будет выполнять для него детальную обработку.
    Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя-данного приводит к форматизации и записи на устройство вывода указанной группы отчета типа DETAIL (ФРАГМЕНТ). Кроме того, система управления генератором отчетов настраивается на выполнение ряда неявных действий, описанных в п.3.2 настоящей части.
    Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя-отчета обеспечивает средства генерации итогов. В отчете, производимом оператором данного типа, автоматически подавляется печать всех строк фрагментов и отчет состоит только из суммарных итогов, накопленных во время обработки групп отчета типа DETAIL (ФРАГМЕНТ). Действия, производимые системой управления генератором отчетов по оператору GENERATE имя-отчета (ГЕНЕРИРОВАТЬ имя-отчета), аналогичны действиям, производимым по оператору GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного), за исключением того, что в первом случае подавляется печать строк фрагмента.
    Оператор TERMINATE (ЗАКОНЧИТЬ) вызывает выполнение системой управления генератором отчетов всех автоматических функций, связанных с завершением отчета. Оператор TERMINATE (ЗАКОНЧИТЬ) должен быть выполнен до закрытия файла, содержащего отчет.
    Оператор SUPPRESS (ПОДАВИТЬ) обеспечивает средства подавления печати целой группы отчета во время выполнения программы.
    Вариант BEFORE REPORTING (ДО ВЫДАЧИ) оператора USE (ИСПОЛЬЗОВАТЬ) обеспечивает механизм, при помощи которого в автоматических процедурах, выполняемых системой управления генератором отчетов, в отдельных случаях могут быть выполнены операторы раздела процедур. Операторы процедуры USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) могут изменять содержимое данных, имена которых указаны во фразах SOURCE (ИСТОЧНИК). Таким образом, имеется возможность управления содержимым данных, которые производятся автоматически в группах отчета.
    4.ОБРАБОТКА ТАБЛИЦ
    Таблицы данных являются наиболее общим компонентом задач обработки данных. Хотя повторяющиеся данные, составляющие таблицу, могут быть описаны рядом статей описания данных, имеющих один и тот же номер уровня и подчиненных одному и тому же групповому данному, существуют две причины, почему такой подход не может быть удовлетворительным. Во-первых, с точки зрения документации однородность таких данных не очевидна и, во-вторых, доступ во время выполнения к отдельным элементам при таком подходе затрудняется.
    Таблицы данных определяются в Коболе включением фразы OCCURS (ПОВТОРЯЕТСЯ) в статьи описания данных. Эта фраза указывает, что данное должно быть повторено установленное число раз. Данное рассматривается как элемент таблицы, и его имя и описание применяются к каждому повторению или вхождению. Так как каждое вхождение табличного элемента не имеет приписанного ему особого имени данного, ссылка на конкретное вхождение может быть сделана только указанием имени данного табличного элемента вместе с номером вхождения этого элемента. Номер вхождения называется индексом.
    Число вхождений табличного элемента может быть фиксированным или переменным.
    4.1.Определение таблиц
    Чтобы определить одномерную таблицу, программист использует фразу OCCURS (ПОВТОРЯЕТСЯ) как часть описания табличного элемента, но фраза OCCURS (ПОВТОРЯЕТСЯ) не должна появляться в описании групповых данных, которые содержат табличный элемент. Пример 1 показывает одномерную таблицу, определяемую данным TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ).
    Пример 1
    01 TABLE-1.
    02 TABLE-ELEMENT OCCURS 20 TIMES.
    03 FAM...
    03 NAME ...
    01 ТАБЛИЦА-1.
    02 ТАБЛИЧНЫЙ-ЭЛЕМЕНТ ПОВТОРЯЕТСЯ 20 РАЗ.
    03 ФАМИЛИЯ...
    03 ИМЯ ...

    В примере 2 TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) определяет одномерную таблицу, но FIO (ФИО) не определяет одномерную таблицу, поскольку в описании группового данного TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ), содержащего FIO (ФИО), имеется фраза OCCURS (ПОВТОРЯЕТСЯ).
    Пример 2
    02 TABLE-1.
    03 TABLE-ELEMENT OCCURS 20 TIMES.
    04 FIO OCCURS 5 TIMES.
    05 FAM...
    05 NAME...
    02 ТАБЛИЦА-1.
    03 ТАБЛИЧНЫЙ-ЭЛЕМЕНТ ПОВТОРЯЕТСЯ 20 РАЗ.
    04 ФИО ПОВТОРЯЕТСЯ 5 РАЗ.
    05 ФАМИЛИЯ...
    05 ИМЯ...

    В обоих случаях полному набору вхождений данного TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) присвоено имя TABLE-1 (ТАБЛИЦА-1). Тем не менее, нет необходимости давать таблице имя группы, если не требуется ссылка на всю таблицу как на групповое данное.
    Ни одна из трех одномерных таблиц, приведенных в двух следующих примерах, не имеет имени группы.
    Пример 3
    01 INFORMATION.
    02 OTDEL ...
    02 FIO OCCURS 20 TIMES ...
    02 N-ROOM....
    01 СВЕДЕНИЯ.
    02 ОТДЕЛ ...
    02 ФИО ПОВТОРЯЕТСЯ 20 РАЗ ...
    02 N-КОМНАТЫ ...
    Пример 4
    01 INFORMATION.
    02 DEPARTMENT OCCURS 20 TIMES ...
    02 FIO ...
    02 N-ROOM OCCURS 5 TIMES ...
    01 СВЕДЕНИЯ.
    02 ЦЕХ ПОВТОРЯЕТСЯ 20 РАЗ ...
    02 ФИО ...
    02 N-КОМНАТЫ ПОВТОРЯЕТСЯ 5 РАЗ ...

    Определение одномерной таблицы внутри каждого вхождения элемента другой одномерной таблицы приводит к образованию двумерной таблицы. Для определения двумерной таблицы фраза OCCURS (ПОВТОРЯЕТСЯ) должна появиться в описании данных табличного элемента и в описании только одного группового элемента данных, который содержит этот табличный элемент. Так, в примере 5 N-ROOM (N-КОМНАТЫ) является элементом двумерной таблицы - он входит 5 раз в каждый элемент данного DEPARTMENT (ЦЕХ), который сам повторяется 20 раз.
    FIO (ФИО) является элементом одномерной таблицы.
    Пример 5
    02 DEPARTMENT OCCURS 20 TIMES ...
    03 FIO...
    03 N-ROOM OCCURS 5 TIMES ...
    02 ЦЕХ ПОВТОРЯЕТСЯ 20 РАЗ ...
    03 ФИО ...
    03 N-КОМНАТЫ ПОВТОРЯЕТСЯ 5 РАЗ ...

    В общем случае для определения n-мерной таблицы фраза OCCURS (ПОВТОРЯЕТСЯ) должна появиться в описании данного элемента таблицы и в описаниях (n-1) групповых данных, содержащих этот элемент.
    4.2.Начальные значения таблиц
    Начальные значения элементов таблиц определяются в секции рабочей памяти одним из следующих способов:
    (1) таблица может быть описана как ряд отдельных статей описания данных, подчиненных одному и тому же групповому данному, каждая из которых определяет значение элемента или части элемента таблицы. При определении записи и ее элементов можно использовать любую фразу описания данного (фраза USAGE (об использовании), PICTURE (ШАБЛОН), и т.п.), если это необходимо для полноты определения. Иерархическая структура таблицы затем показывается использованием статьи REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и связанных с ней подчиненных статей. Подчиненные статьи, следующие за статьей REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и повторяющиеся соответственно фразам OCCURS (ПОВТОРЯЕТСЯ), не могут содержать фразу VALUE (ЗНАЧЕНИЕ);
    (2) величины всех размерностей таблицы могут быть инициированы фразой VALUE (ЗНАЧЕНИЕ), относящейся к описанию статьи, определяющей таблицу в целом. Статьи самого низкого уровня покажут иерархическую структуру таблицы; статьи самого низкого уровня не могут содержать фразы VALUE (ЗНАЧЕНИЕ);
    (3) значения отдельных элементов таблицы могут быть определены использованием фразы VALUE (ЗНАЧЕНИЕ).
    4.3.Ссылки на табличные элементы
    Всякий раз, когда пользователь ссылается на табличный элемент или имя-условия, связанное с табличным элементом, за исключением операторов USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и SEARCH (ИСКАТЬ), ссылка должна указывать, какое именно вхождение предполагается. Для доступа к одномерной таблице достаточно одного номера вхождения требуемого элемента. Для таблиц размерности больше единицы номер вхождения должен быть указан для каждой размерности таблицы. Таким образом, в примере 5 ссылка на четвертый DEPARTMENT (ЦЕХ) или четвертый FIO (ФИО) будет полной, в то время как ссылка на четвертый N-ROOM (N-КОМНАТЫ) полной не будет. Для ссылки на N-ROOM (N-КОМНАТЫ), который является элементом двумерной таблицы, пользователь должен указать, например, четвертый элемент N-ROOM (N-КОМНАТЫ) в пятом элементе DEPARTMENT (ЦЕХ).
    4.4.Индексирование
    4.4.1.Индексирование с помощью целого или имени-данного
    Если для представления индекса используется целое или имя-данного, они могут использоваться для ссылки на данные в разных таблицах. Элементы таблиц не обязательно должны быть одного и того же размера для всех таблиц. Одно и то же целое или имя-данного может появляться как единственный индекс одного данного и как один из двух и более индексов другого данного.
    4.4.2.Индексирование с помощью имени-индекса
    Для облегчения операций поиска в таблице и манипулирования отдельными данными допускается индексирование с помощью имени-индекса. Чтобы использовать это средство, программист соотносит одно или несколько имен-индексов данному, в статье описания которого имеется фраза OCCURS (ПОВТОРЯЕТСЯ). Значение имени-индекса соответствует номеру вхождения для данного, с которым связано имя-индекса.
    Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ), посредством которой идентифицируется имя-индекса и соотносится определенной таблице, является необязательной частью фразы OCCURS (ПОВТОРЯЕТСЯ). В Коболе нет отдельной статьи для описания имени-индекса, поскольку его определение полностью зависит от оборудования. Во время выполнения значение имени-индекса будет соответствовать номеру вхождения для той конкретной размерности таблицы, с которой было связано имя-индекса; способ соответствия определяется реализацией. Начальное значение имени-индекса во время выполнения не определено, то есть начальное значение нужно установить перед использованием.
    Начальное значение имени-индекса присваивается оператором PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ), оператором SEARCH ALL (ИСКАТЬ ОСОБО) или оператором SET (УСТАНОВИТЬ).
    Использование целого или имени-данного в качестве индекса для ссылки на табличный элемент или данное в табличном элементе не вызывает изменений значения имени-индекса, связанного с этой таблицей.
    Имя-индекса может быть использовано для ссылки только на ту таблицу, которой оно соотнесено фразой INDEXED BY (ИНДЕКСИРУЕТСЯ).
    Операции поиска данных, организованных в таблицы, обеспечиваются в Коболе оператором SEARCH (ИСКАТЬ), позволяющим осуществлять последовательный или непоследовательный (например, бинарный) поиск. Оператор используется для поиска в таблице элемента, удовлетворяющего определенному условию, и для установки значения соответствующего имени-индекса для указания этого табличного элемента.
    Относительное индексирование является дополнительным вариантом для ссылок на табличные элементы или на данное в табличном элементе. Когда за именем табличного элемента следует индекс в виде (имя-индекса + или - целое), номер вхождения, требуемый для завершенной (полной) ссылки, такой же, как если бы перед ссылкой имя-индекса было увеличено или уменьшено на целое посредством оператора SET (УСТАНОВИТЬ). Использование относительного индексирования не изменяет значения имени-индекса.
    Значение имени-индекса может быть сделано доступным объектной программе путем его запоминания в индексном данном. Индексные данные описываются в программе статьей описание данного, содержащей фразу USAGE IS INDEX (ДЛЯ ИНДЕКСА). Значение имени-индекса помещается в индексное данное выполнением оператора SET (УСТАНОВИТЬ).
    4.4.3.Примеры индексирования
    Предполагая следующее описание данных:
    02 ANK ...
    02 A1 OCCURS 20 TIMES INDEXED BY A1-INDEX ...
    03 B1 ...
    03 B2 OCCURS 5 TIMES ...
    04 C1 ...
    88 MAX VALUE IS ...
    04 C2 ...
    05 D1 OCCURS 10 TIMES...
    06 E1 ...
    06 E2 ...
    02 AHK...
    02 A1 ПОВТОРЯЕТСЯ 20 РАЗ ИНДЕКСИРУЕТСЯ
    A1-ИНДЕКС...
    03 B1 ...
    03 В2 ПОВТОРЯЕТСЯ 5 РАЗ ...
    04 С1 ...
    88 МАХ ЗНАЧЕНИЕ ...
    04 С2 ...
    05 D1 ПОВТОРЯЕТСЯ 10 РАЗ...
    06 Е1 ...
    06 Е2 ...

    в ссылках на А1 и В1 требуется только один индекс, в ссылках на В2, С1, МАХ и С2 требуются два индекса, и в ссылках на D1, Е1 и Е2 требуются три индекса.
    Проиллюстрируем требования указания индексов в порядке от старшего к младшим:
    Е1 (18, 2, 7) значит Е1 в седьмом D1, во втором В2 и в восемнадцатом А1.
    Возможность одновременного использования целых, имен-данных и имен-индексов проиллюстрирована на следующем примере:
    El (A1-INDEX, 4, ANK+5).
    (EI (А1-ИНДЕКС, 4, АНK+5)).
    Номера вхождений указываются добавлением одного или нескольких индексов к имени-данного.
    Индексом может быть либо целое, либо имя-данного, относящееся к целому числовому элементарному данному, либо имя-индекса, связанное с таблицей. За именем-данного или именем-индекса может следовать знак операции + или - и целое, используемое соответственно как приращение или уменьшение. Допустимо одновременное использование целых, имен-данных и имен-индексов.
    Индексы, заключенные в круглые скобки, записываются непосредственно за уточнением имени элемента таблицы. Количество индексов в такой ссылке должно равняться размерности таблицы, в которую входит данный элемент. Таким образом, каждой фразе OCCURS (ПОВТОРЯЕТСЯ) в иерархии, содержащей имя-данного, включая и само имя-данного, должен быть соотнесен индекс.
    Когда требуется более одного индекса, они записываются в порядке последовательного снижения уровня вложенности размерностей организации данных. Если многомерную таблицу рассматривать как последовательность вложенных таблиц и наиболее объемлющую или внешнюю таблицу рассматривать как старший уровень, а самую внутреннюю или наименее объемлющую таблицу - как младший уровень, индексы записываются слева направо в порядке: старший уровень, промежуточный, младший.
    В ссылке на данное нельзя использовать индексирование, если данное не является табличным элементом или данным или именем-условия в табличном элементе.
    Наименьший допустимый номер вхождения равняется единице. Наибольший допустимый номер вхождения в каждом отдельном случае равняется максимальному числу вхождений данного, определяемому фразой OCCURS (ПОВТОРЯЕТСЯ).
    5.ОБЩАЯ ОБЛАСТЬ ПАМЯТИ
    Это средство в основном ориентировано на экономию памяти в объектной программе, так как позволяет нескольким файлам иметь одну и ту же область файла и области ввода-вывода.
    Если использована фраза SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), общей является только область записи, а области ввода-вывода для каждого файла остаются независимыми. В этом случае любое количество файлов, имеющих общей одну и ту же область записи, могут быть активными одновременно. Этот фактор может дать экономию времени при выполнении объектной программы.
    Проиллюстрируем это. Если программист назначил одну и ту же область записи и старому, и новому файлам, он не только сэкономил память в объектной программе, но поскольку эта техника исключает пересылку каждой записи из области ввода в область вывода, получит в результате экономию и во времени. Кроме того, при использовании этой техники программисту нет необходимости определять в деталях запись и старого, и нового файлов. Вместо этого он полностью определяет запись в одном случае, и просто включает статью с номером уровня 01 в другом. Поскольку эти области записей фактически являются одной и той же областью, один набор имен достаточен для всех потребностей обработки без необходимости уточнения.
    Если используется фраза SAME (ОБЩАЯ ОБЛАСТЬ) без варианта RECORD (ЗАПИСИ), общими являются не только области файла, но и области ввода-вывода.
    В результате только один из файлов, разделяющих один и тот же набор общих областей, может быть активным в определенное время. Эта форма фразы предназначена для применения, когда ряд файлов используется на разных фазах объектной программы. В этих случаях фраза SAME (ОБЩАЯ ОБЛАСТЬ) позволяет программисту экономить память.
    6.ОРГАНИЗАЦИЯ ПРОГРАММ И ПРОГРАММНЫХ СВЯЗЕЙ
    Довольно часто полные проблемы обработки данных решаются разработкой отдельно компилируемых, но логически скоординированных программ, которые на некотором этапе до выполнения можно компилировать отдельно и затем собрать для полного решения проблемы. Организация программ на Коболе и единицы исполнения поддерживает такой подход разделения решения больших проблем на малые, более управляемые порции, которые можно программировать и тестировать независимо.
    6.1.Понятие программы и единицы исполнения
    Имеются два уровня компьютерных программ в Коболе: исходный уровень и объектный уровень.
    На исходном уровне наиболее объемлющей единицей компьютерной программы является исходная программа. Исходная программа может содержать другие исходные программы. Исходная программа - синтаксически правильный набор операторов Кобола, по определению настоящего документа состоящий из раздела идентификации, за которым необязательно следуют раздел оборудования и (или) раздел данных, и (или) раздел процедур. Исходная программа, не содержащаяся в другой исходной программе, может быть преобразована компилятором в объектную программу, которая может быть выполнена либо одна, либо вместе с другими объектными программами.
    В общем случае программа, содержащаяся в другой программе, не может быть преобразована компилятором в объектную программу, так как по определениям этого документа в содержащейся программе явно разрешается ссылаться на данные, описанные в содержащей ее исходной программе.
    Раздел процедур исходной программы организован как последовательность процедур двух типов. Декларативные процедуры, обычно именуемые декларативами, - это процедуры, которые будут выполняться только при появлении специальных условий во время выполнения программы. Недекларативные процедуры - процедуры, выполняемые соответственно нормальному ходу управления в программе. Декларативы могут содержать недекларативные процедуры, но последние будут выполняться только во время выполнения декларатив, в которых они содержатся. Недекларативные процедуры могут содержать другие недекларативные процедуры, но не должны содержать декларативы. Ни декларативы, ни недекларативные процедуры не могут содержать в себе программы. Другими словами, в Коболе термины "процедура" и "программа" не являются синонимами.
    На объектном уровне наиболее объемлющей единицей организации компьютерных программ является единица исполнения. Единица исполнения - это полное решение проблемы, состоящее из объектной программы или из нескольких взаимосвязанных объектных программ. Единица исполнения - это независимая единица, которая может выполняться без связей или координирования с другой единицей исполнения, за исключением того, что может обрабатывать файлы данных и сообщения и устанавливать или проверять переключатели, которые записаны или будут считываться другими единицами исполнения.
    При вызове программы параметры, которыми она должна оперировать, могут быть переданы ей вызывающей ее программой. Поскольку любая компилируемая программа может быть первой программой, выполняемой в единице исполнения, первая выполняемая программа единицы исполнения может получать параметры.
    Единица исполнения может также содержать объектный код и области памяти для данных, получаемые в результате компиляции программы, записанной на языке, отличном от Кобола; в этом случае требования к организации связей между Кобол-программой и программой, записанной не на Коболе, определяются реализацией.
    6.2.Доступные данные и файлы
    Некоторые данные имеют связанную с ними концепцию памяти, определяющую, где представляются значения и другие свойства данных относительно программ единицы исполнения. Подобно этому, определители файла тоже имеют связанную с ними концепцию памяти, определяющую, где представляется информация о позиционировании и состоянии файла, а также о других свойствах обработки файла, относительно программ единицы исполнения.
    6.2.1.Имена
    Имя-данного именует данное. Имя-файла именует определитель файла. Эти имена классифицируются как глобальные или локальные.
    Глобальное имя используется для ссылки на объект, которому оно соотнесено, либо из программы, в которой глобальное имя объявлено, либо из любой другой программы, содержащейся в программе, объявляющей это глобальное имя.
    Локальное имя можно использовать для ссылки на объект, которому оно соотнесено, только из программы, в которой локальное имя объявлено. Некоторые имена всегда глобальны, некоторые - всегда локальны, а некоторые являются либо локальными, либо глобальными в зависимости от спецификаций программы, в которой имена объявлены.
    Имя-записи глобально, если указана фраза GLOBAL (ГЛОБАЛЬНОЕ) в статье описания записи, объявляющей это имя, или в случае статьи описания записи в секции файлов, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в описании файла для имени-файла, связанного с описанием записи. Имя-данного глобально, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана либо в статье описания данного, объявляющей это имя-данного, либо в другой статье, которой подчинена упомянутая статья описания данного. Имя-условия, объявленное в статье описания данного, глобально, если эта статья подчинена другой статье, в которой указана фраза GLOBAL (ГЛОБАЛЬНОЕ). Однако иногда особые правила запрещают указание фразы GLOBAL (ГЛОБАЛЬНОЕ) для определенных статей описания данных, описания файла или описания записи.
    Имя-файла глобально, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в соответствующей ему статье описания файла.
    Если имя-данного, имя-файла или имя-условия, объявленное в описании данного, не глобально, имя является локальным.
    Глобальные имена транзитивны в программах, содержащихся в других программах.
    6.2.2.Объекты
    Для обеспечения доступности данных обычно требуется сохранение в памяти определенных представлений данных. Определители файлов также требуют сохранения в памяти определенной информации, относящейся к файлу. Память, соотнесенная данному или определителю файла, может быть внешней или внутренней по отношению к программе, в которой объект объявлен.
    6.2.2.1.Типы объектов
    6.2.2.1.1.Записи рабочей памяти.
    Записи рабочей памяти - это участки памяти, удовлетворяющие статьям описания записей в секции рабочей памяти.
    Каждая статья описания записи в программе объявляет отдельный объект. Переименование и переопределение не объявляет новых объектов; они обеспечивают альтернативную группировку или описание объектов, ранее объявленных.
    6.2.2.1.2.Определители файлов
    Определитель файла - это область памяти, содержащая информацию о файле и используемая для связывания имени-файла с физическим файлом и имени-файла с соответствующей ему областью записи.
    6.2.2.1.3.Области записи для файлов
    Считается, что никакая отдельная статья описания записи в секции файлов не объявляет область памяти для записи. Область памяти - это скорее максимально требуемая память для удовлетворения соответствующих статей описания записей. Статьи могут описывать записи фиксированной или переменной длины. В этом представлении статьи описания записи считаются соответствующими в двух случаях. Во-первых, когда описания записи подчинены одной и той же статье описания файла, они всегда соответствующие. Во-вторых, когда описания записи подчинены различным статьям описания файлов и на эти статьи описания файлов имеется ссылка во фразе SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), описания записей соответствующие.
    Все соответствующие статьи описания записи являются переопределениями одной и той же области памяти.
    6.2.2.1.4.Другие объекты
    Примерами других объектов, объявляемых в Кобол-программе, являются: описания коммуникации, описания отчетов и управляющая информация, связанная с секциями коммуникаций, отчетов и связей.
    6.2.2.2.Свойства объектов
    6.2.2.2.1.Записи рабочей памяти
    Записи данных, описанной в секции рабочей памяти, присваивается свойство внешней посредством фразы EXTERNAL (ВНЕШНЕЕ) в статье описания записи. Каждое данное, описанное статьей описания данного, подчиненной статье, описывающей внешнюю запись, также получает свойство внешнего.
    Если запись или данное не обладают свойством внешних, они являются частью внутренних данных программы, в которой они описаны.
    6.2.2.2.2.Определители файла
    Определителю файла придается свойство внешнего посредством фразы EXTERNAL (ВНЕШНЕЕ) в соответствующей статье описания файла. Если определитель файла не обладает свойством внешнего, он является внутренним для программы, в которой описано соответствующее имя-файла.
    6.2.2.2.3.Области записи для файлов
    Записи данных, описанные как подчиненные статье описания файла, не содержащей фразу EXTERNAL (ВНЕШНЕЕ), или статье описания сортируемого-сливаемого файла, так же как и любые данные, описанные как подчиненные статьям описания данных для таких записей, всегда внутренние для программы, описывающей имя-файла. Если фраза EXTERNAL (ВНЕШНЕЕ) включена в статью описания файла, записи данных и данные получают свойство внешних.
    6.2.2.2.4.Другие объекты
    Записи данных, подчиненные данные и разнообразная соответствующая управляющая информация, описанная в секциях связи, коммуникаций и отчетов программы, всегда рассматриваются как внутренние для программы, описывающей эти данные. Специальные соглашения применяются к данным, описанным в секции связи, при установлении связи между описанными записями данных и другими данными, доступными другим программам (п.6.4.2 настоящей части).
    Данное или определитель файла является внешним, если память, связанная с этим объектом, связана с единицей исполнения в целом, а не с отдельной программой единицы исполнения. На внешний объект может ссылаться любая программа, описывающая этот объект. Ссылки на внешний объект из различных программ, использующих разные описания объекта, являются ссылками на один и тот же объект.
    Объект является внутренним, если память, связанная с этим объектом, связана только с программой, описывающей этот объект.
    Внешние и внутренние объекты могут иметь либо глобальные, либо локальные имена.
    6.2.3.Разрешение имени
    Если программы, содержащиеся в других программах, присваивают одни и те же имена данным, условиям и определителям файла, применяются определенные соглашения. Рассмотрим ситуацию, когда программа А содержит программу В1, которая в свою очередь содержит программу С1; кроме того, программы А и В1 (но не С1) содержат статьи раздела данных для имени условия, имени данного или имени файла с одинаковым именем DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ):
    (1) если каждое из имен DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) относится к внутреннему объекту, существуют два разных, хотя и с идентичными именами, объекта; если оба имени относятся к внешнему объекту, существует один объект;
    (2) ссылки программы А на DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) - всегда ссылки на объект, объявляемый ею. Ссылки программы В1 на DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) - всегда ссылки на объект, объявляемый программой В1;
    (3) если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) - локальное имя в обеих программах А и В1, программа С1 не может ссылаться на это имя;
    (4) если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) в программе В1 - глобальное имя, объект, именованный им, доступен программе С1 посредством ссылки на имя в программе В1, независимо от того, является ли DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) глобальным именем в программе А;
    (5) если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) в программе А глобальное имя, а в программе В1 - локальное, ссылка программы С1 на DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) является ссылкой на объект с именем, объявленным в программе А.
    6.3.Классы программ
    Все программы, образующие часть единицы исполнения, могут не обладать никаким, обладать одним или обоими из свойств: общая и начальная.
    6.3.1.Общие программы
    Общая программа - это программа, которая, несмотря на то, что непосредственно содержится в другой объемлющей программе, может быть вызвана любой программой, прямо или косвенно содержащейся в этой объемлющей программе. Свойство "общая" присваивается указанием фразы COMMON (ОБЩАЯ) в разделе идентификации программы. Фраза COMMON (ОБЩАЯ) облегчает написание подпрограмм, которые предназначены для использования всеми программами, содержащимися в программе.
    6.3.2.Начальные программы
    Начальная программа - это программа, состояние которой инициируется при вызове программы. Таким образом, когда бы начальная программа ни вызывалась, ее состояние всегда такое же, каким оно было, когда программа была вызвана первый раз в этой единице исполнения. Во время инициации начальной программы инициируются все внутренние данные этой программы; следовательно, каждому из внутренних данных программы, имеющему в своем описании фразу VALUE (ЗНАЧЕНИЕ), присваивается указанное для него значение, для данных, в статье описания которых нет фразы VALUE (ЗНАЧЕНИЕ), устанавливаются неопределенные значения. Файлы с внутренними определителями файла, связанные с программой, не находятся в режиме открытия. Механизмы управления для всех содержащихся в программе операторов PERFORM (ВЫПОЛНИТЬ) устанавливаются в начальные состояния. Свойство "начальная" устанавливается указанием фразы INITIAL (НАЧАЛЬНАЯ) в разделе идентификации программы.
    6.4.Межпрограммные связи
    Когда полное решение проблемы обработки данных разделено на несколько программ, составляющие программы должны иметь возможность взаимной связи. Эта взаимосвязь может быть четырех видов: передача управления, передача параметров, ссылка на общие данные и ссылка на общие файлы. Указанные четыре вида межпрограммных связей обеспечиваются и когда взаимосвязанные программы компилируются отдельно, и когда одна из взаимосвязанных программ содержится в другой программе. Механизмы, обеспечиваемые в последних двух случаях, отличаются от механизмов в первых двух случаях; например, программа, содержащаяся в другой программе, может ссылаться на любое имя-данного или имя-файла, являющееся глобальным именем в содержащей программе (см. п.6.2.1 настоящей части).
    6.4.1.Передача управления
    Оператор CALL (ВЫЗВАТЬ) обеспечивает возможность передачи управления от одной программы другой программе в единице исполнения. Вызываемая программа в свою очередь может содержать операторы CALL (ВЫЗВАТЬ). Когда управление передается вызываемой программе, выполнение продолжается от оператора к оператору, начиная с первого недекларативного оператора. Если управление достигает оператора STOP RUN (ОСТАНОВИТЬ РАБОТУ), это означает логический конец единицы исполнения. Если управление достигает оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), это означает логический конец только вызываемой программы, затем управление возвращается следующему в вызывающей программе после оператора CALL (ВЫЗВАТЬ) выполнимому оператору. Таким образом, оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) завершает выполнение только той программы, в которой он имеется, в то время как оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) завершает выполнение единицы исполнения.
    Оператор CALL (ВЫЗВАТЬ) может быть использован для вызова программы, записанной на языке, отличном от Кобола, но механизм возврата и передачи данных между программами в настоящем документе не определяется. Кобол-программа также может быть вызвана из программы, записанной на языке, отличном от Кобола, но механизм вызова и передачи данных между программами в настоящем документе не определяется. В обоих вышеизложенных случаях в настоящем документе определены только те части механизма передачи параметров, которые относятся к Кобол-программе.
    6.4.1.1.Имена программ
    Чтобы вызвать программу, оператор CALL (ВЫЗВАТЬ) идентифицирует имя программы. Имена, присваиваемые программам, непосредственно или косвенно содержащимся в других программах, должны быть однозначными (уникальными).
    Имена, присваиваемые каждой из отдельно компилируемых программ, образующих единицу исполнения, должны быть также однозначны (уникальны).
    6.4.1.2.Область действия оператора CALL (ВЫЗВАТЬ)
    Вызывающая программа может обладать или не обладать любым свойством программы; она может компилироваться отдельно или нет; она может или содержаться в другой программе, или содержать другую программу:
    (1) любая вызывающая программа может вызвать любую отдельно компилируемую программу в единице исполнения;
    (2) вызывающая программа может вызвать любую программу, непосредственно содержащуюся в вызывающей программе;
    (3) любая вызывающая программа может вызвать любую программу, обладающую свойством "общая" и содержащуюся непосредственно в программе, которая косвенно или непосредственно содержит вызывающую программу, если только вызывающая программа сама не содержится в программе, обладающей свойством "общая";
    (4) вызывающая программа может вызвать программу, не обладающую свойством "общая" и не компилируемую отдельно, тогда и только тогда, когда эта программа непосредственно содержится в вызывающей программе.
    6.4.1.3.Область действия имен программ
    а) если программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, обладает свойством "общая", то вызывается она;
    б) если программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, не обладает свойством "общая", вызывается отдельно компилируемая программа.
    (3) Если программа DD или программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, вызывает программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), вызываемой программой является отдельно компилируемая программа.
    (4) Если любая отдельно компилируемая программа в единице исполнения или любая другая программа, содержащаяся в такой программе, вызывает программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), вызываемой программой является отдельно компилируемая программа, именуемая DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ).
    Определенные соглашения применяются, если в единице исполнения имя содержащейся программы в отдельно компилируемой программе идентично имени другой отдельно компилируемой программы.
    Рассмотрим случай, когда программа А содержит программу В1 и программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), программа В1 содержит программу ВВ и программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) содержит программу DD.
    Имя DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) также указано для отдельно компилируемой программы.
    (1) Если программа А, но ни одна из программ, содержащихся в ней, вызывает программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), активируется программа, содержащаяся в программе А.
    (2) Если программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) вызывает программа В1 или ВВ, то:
    6.4.2.Передача параметров программам
    Программа вызывает другую программу, чтобы вызванная программа выполнила от имени вызывающей программы некоторую часть решения проблемы обработки данных. В большинстве случаев необходимо, чтобы вызывающая программа определила вызываемой программе точную часть решения проблемы, задавая определенные значения данных, требующихся вызываемой программе и доступных ей. Одним из методов обеспечения доступности значений данных является передача параметров программе, описываемая в данном пункте. Другой метод - использование общих данных (п.6.4.3 настоящей части). Значения данных, передаваемых в качестве параметров, также идентифицируют некоторые данные для совместного использования; следовательно, два метода не являются взаимно независимыми.
    6.4.2.1.Идентификация параметров
    Данные, передаваемые вызывающей программой в качестве параметров другой программе, должны быть доступны для вызывающей программы, и данные, получающие передаваемые данные, должны быть объявлены в разделе данных вызываемой программы. В вызываемой программе требуемые параметры идентифицируются списком ссылок на параметры заголовка раздела процедур этой программы с помощью имен, присвоенных параметрам в статьях описания данных этой программы. В вызывающей программе значения параметров, передаваемых вызываемой программе, идентифицируются списком ссылок в операторе CALL (ВЫЗВАТЬ), используемом для вызова этой программы. Для этих списков во время выполнения устанавливается позиционное соответствие между значениями их элементов, как они известны каждой программе, то есть, первому параметру в одном списке соответствует первый параметр в другом списке, второму - второй и т.д. Так, например, программа, которую может вызвать другая программа, может включать строки:
    PROGRAM-ID. EXAMPLE.
    PROCEDURE DIVISION USING NUM, PCODE, COST.
    ПРОГРАММА. ПРИМЕР.
    РАЗДЕЛ ПРОЦЕДУР ИСПОЛЬЗУЯ НОМ, РКОД, СТОИМ. и может быть вызвана выполнением оператора
    CALL "EXAMPLE" USING NBR, PTYPE, PRICE.
    ВЫЗВАТЬ "ПРИМЕР" ИСПОЛЬЗУЯ ЧИС, РТИП, ЦЕНА.
    При этом устанавливается следующее соответствие:
    Вызываемая программа Вызывающая программа
    NUM (НОМ) NBR (ЧИС)
    PCODE (РКОД) PTYPE (РТИП)
    COST (СТОИМ) PRICE (ЦЕНА)

    Существенны только позиции имен-данных, но не сами имена.
    6.4.2.2.Значения параметров
    Вызывающая программа управляет методами, по которым вызываемая программа вычисляет значения передаваемых ей параметров и возвращает результаты как измененные значения параметров.
    Отдельные параметры, на которые имеются ссылки в фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ), можно передавать как значение или ссылку.
    Вызываемая программа может использовать и изменять значение данного, упомянутого в операторе CALL (ВЫЗВАТЬ) вызывающей программы в качестве параметра, передаваемого как ссылка. Вызываемой программе запрещено обращаться и изменять данное вызывающей программы, если оно указано в операторе CALL (ВЫЗВАТЬ) в качестве параметра, передаваемого как значение. Значение параметра вычисляется при выполнении оператора CALL (ВЫЗВАТЬ) и предоставляется вызываемой программе. Это значение может быть изменено вызываемой программой во время ее выполнения, но значение соответствующего данного в вызывающей программе не изменяется. Таким образом, параметр, передаваемый как ссылка, может использоваться вызываемой программой для возврата значения вызывающей программе, в то время как параметр, передаваемый как значение, не может быть так использован.
    Параметры, ссылки на которые указаны в заголовке раздела процедур вызываемой программы, должны быть описаны в секции связи раздела данных этой программы.
    6.4.3.Общие данные
    Две программы в единице исполнения могут ссылаться на общие данные в следующих случаях:
    (1) на содержимое данного внешней записи данных можно ссылаться из любой программы при условии, что в программе описана эта запись данных (см. п.6.2.2 настоящей части);
    (2) если программа содержится в другой программе, обе программы могут ссылаться на данные, обладающие свойством "глобальное" либо в содержащей программе, либо в любой программе, которая непосредственно или косвенно содержит содержащую программу (см. п.6.2.1 настоящей части);
    (3) механизм, при помощи которого значение параметра передается как ссылка из вызывающей программы в вызываемую программу, устанавливает общее данное; вызываемая программа, используя, возможно, другой идентификатор, может ссылаться на данное в вызывающей программе.
    6.4.4.Общие файлы
    Две программы в единице исполнения могут ссылаться на общие определители файла при следующих обстоятельствах:
    (1) на внешний определитель файла можно ссылаться из любой программы, описывающей этот определитель файла (см. п.6.2.2 настоящей части);
    (2) если программа содержится в другой программе, обе программы могут ссылаться на общий определитель файла, используя соответствующее глобальное имя-файла либо в содержащей программе, либо в любой программе, которая непосредственно или косвенно содержит содержащую программу (см. п.6.2.1 настоящей части).
    6.5.Внутрипрограммные связи
    Процедуры, составляющие раздел процедур программы, сообщаются друг с другом посредством передачи управления или обращения к общим данным.
    6.5.1.Передача управления
    Имеются четыре способа передачи управления в программах:
    (1) Оператор GO TO (ПЕРЕЙТИ К).
    (2) Оператор PERFORM (ВЫПОЛНИТЬ).
    (3) Процедура ввода, связанная с оператором SORT (СОРТИРОВАТЬ), или процедура вывода, связанная с оператором SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ).
    (4) Декларативная процедура, которая активируется при возникновении определенных условий, включая условия ошибки.
    Процедуру ввода-вывода можно рассматривать как неявный оператор PERFORM (ВЫПОЛНИТЬ), который выполняется совместно с оператором MERGE (СЛИТЬ) или SORT (СОРТИРОВАТЬ); по этой причине ограничения на оператор PERFORM (ВЫПОЛНИТЬ) относятся в равной степени к процедурам ввода-вывода.
    К декларативным процедурам применяются более строгие ограничения, чем ограничения для оператора PERFORM (ВЫПОЛНИТЬ).
    6.5.2.Общие данные
    На все данные, объявленные в разделе данных программы, можно ссылаться в операторах процедур, процедур ввода-вывода и декларатив, составляющих эту программу. При определенных условиях программа может ссылаться на данные, не объявленные в ее разделе данных (см. п.6.2 настоящей части).
    6.6.Сегментация
    Средства сегментации дают возможность пользователю физически подразделять на более мелкие части раздел процедур объектной Кобол-программы. Все исходные параграфы, которые содержат одинаковые номера сегментов в заголовках их секций, будут рассматриваться во время выполнения как единый сегмент. Так как номера сегментов могут принимать значения от 00 до 99, то объектная программа может быть разделена максимум на 100 сегментов.
    Сегменты программы могут быть трех типов: фиксированные постоянные (неперекрываемые), фиксированные перекрываемые и независимые. Тип задается номерами сегментов.
    Фиксированные неперекрываемые сегменты находятся всегда в памяти во время выполнения всей программы; они не могут перекрываться в памяти, за исключением того случая, когда система выполняет другую программу; в таком случае фиксированные сегменты могут быть временно "свернуты".
    Фиксированные перекрываемые сегменты могут перекрываться в памяти во время выполнения программы, но такое перекрытие не должно касаться пользователя, то есть они логически идентичны фиксированным сегментам, но физически отличны от них.
    Независимые сегменты могут налагаться один на другой в памяти, но такое перекрытие приведет к инициализации сегмента. Поэтому независимые сегменты логически отличны от фиксированных перекрываемых или фиксированных неперекрываемых сегментов и физически отличны от фиксированных сегментов.
    7.СРЕДСТВА КОММУНИКАЦИЙ
    7.1.Система управления сообщениями
    Реализация средств коммуникации в программах на Коболе требует наличия системы управления сообщениями в операционной среде объектной Кобол-программы.
    Система управления сообщениями логически связана с операционной системой, под управлением которой выполняется объектная Кобол-программа. Система управления сообщениями выполняет следующие основные функции:
    (1) осуществляет связь между объектной Кобол-программой и сетью коммуникационных устройств, подобно тому как операционная система осуществляет связь между объектной программой Кобола и такими устройствами, как устройства ввода перфокарт, устройства печати, магнитные ленты и устройства массовой памяти;
    (2) поддерживает порядок на линии, выполняя вызов адресата, упорядочение передач сообщений по каналам связи и синхронизацию;
    (3) выполняет такие зависящие от устройства работы, как перекодировка символов и вставка управляющих символов, что дает возможность пользователю Кобола создавать программы, независимые от устройств.
    Первая функция - связь между объектной программой Кобола и коммуникационными устройствами - наиболее очевидна для пользователя. О наличии двух других функций пользователь может и не знать. Сообщения от коммуникационных устройств помещаются системой управления сообщениями во входные очереди в ожидании передачи объектной Кобол-программе. Выходные сообщения объектной Кобол-программы помещаются системой управления сообщениями в выходные очереди в ожидании передачи на коммуникационные устройства. Структура, форматы и символические имена очередей определяются для системы управления сообщениями пользователем до выполнения объектной программы. До выполнения программы определяются также символические имена источников сообщений и адресатов. В программе на Коболе могут использоваться только символические имена, известные системе управления сообщениями.
    Во время выполнения объектной программы система управления сообщениями выполняет все необходимые действия по обновлению различных очередей.
    7.2.Объектная программа Кобола
    Объектная программа взаимодействует с системой управления сообщениями, когда необходимо переслать и получить данные или опросить состояние различных очередей, которые создаются и поддерживаются системой управления сообщениями. Кроме того, объектная программа может потребовать от системы управления сообщениями установить или прервать логическую связь между коммуникационным устройством и заданной частью структуры очереди. Способ реализации физической связи является функцией системы управления сообщениями.
    7.3.Связь программы на Коболе с системой управления сообщениями и коммуникационными устройствами
    Взаимосвязь с коммуникационными устройствами устанавливается в Коболе посредством статьи описания коммуникации CD (OK) в секции коммуникаций раздела данных.
    Различают два вида связи:
    (1) между объектной программой и системой управления сообщениями;
    (2) между системой управления сообщениями и коммуникационными устройствами.
    Для управления связью с системой управления сообщениями в исходной программе на Коболе используют три оператора:
    (1) RECEIVE (ПОЛУЧИТЬ), который вызывает передачу объектной программе данных из очереди;
    (2) SEND (ПОСЛАТЬ), который вызывает передачу данных из объектной программы в одну или более очередей;
    (3) ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ), который указывает системе управления сообщениями, что она должна сообщить объектной программе число полных сообщений в данной структуре очереди.
    Для управления связью между системой управления сообщениями и коммуникационными устройствами в исходной программе используются два оператора:
    (1) ENABLE (РАЗРЕШИТЬ), который устанавливает логическую связь между системой управления сообщениями и одним или несколькими заданными коммуникационными устройствами;
    (2) DISABLE (ЗАПРЕТИТЬ), который разрывает логическую связь между системой управления сообщениями и одним или несколькими заданными коммуникационными устройствами.
    На рис.1 показана взаимосвязь программы на Коболе с коммуникационными устройствами (п.7.5.2 настоящей части).

    Рис.1
    7.3.1.Вызов объектной программы Кобола
    7.3.1.1.Запланированный запуск объектной программы Кобола
    Объектная программа Кобола, использующая средства коммуникаций, может быть вызвана для выполнения через обычные операционные средства, например, язык управления заданиями. В этом случае программа может использовать три метода для определения того, какие сообщения, если они имеются, доступны во входных очередях:
    (1) оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ);
    (2) оператор ACCEPT (ПРИНЯТЬ) с вариантом NO DATA (НЕТ ДАННЫХ);
    (3) оператор ACCEPT (ПРИНЯТЬ) без варианта NO DATA (НЕТ ДАННЫХ). В этом случае подразумевается, что программа переходит в состояние ожидания, если нет доступных данных.
    7.3.1.2.Вызов объектной программы Кобола системой управления сообщениями
    Иногда желательно вызвать для выполнения объектную программу, использующую средства коммуникаций, только тогда, когда для нее имеется требуемая информация. Такой вызов осуществляется системой управления сообщениями, когда она определяет, что требуется объектная программа для обработки имеющегося сообщения. Каждая объектная программа, вызываемая системой управления сообщениями, создает единицу исполнения. До начала выполнения объектной программы система управления сообщениями помещает имена символических очередей и подочередей в области данных, определенные статьей описания коммуникаций с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА), или система управления сообщениями помещает символическое имя терминала в область данных, определенную статьей описания коммуникации с фразой FOR INITIAL I-O (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА).
    В результате выполнения последующего оператора RECEIVE (ПОЛУЧИТЬ), связанного с данной статьей описания коммуникации, имеющееся сообщение будет передаваться объектной программе.
    7.3.1.3.Определение метода вызова
    Исходную программу можно написать так, что объектная программа может быть вызвана для выполнения любым из двух методов. Для определения метода вызова объектной программы необходимо следующее:
    (1) исходная программа, должна содержать одну статью описания коммуникации, содержащую фразу FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА) или FOR INITIAL I-O (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА);
    (2) если программа содержит статью описания коммуникации с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА), в разделе процедур могут содержаться операторы для проверки, начального значения имени символической очереди в этой статье описания коммуникации. Если оно заполнено пробелами, использованы операторы управления заданием для вызова объектной программы. Если не заполнено пробелами, объектную программу вызвала система управления сообщениями и инициировала данное с символическим именем очереди, содержащей сообщение для обработки;
    (3) когда программа содержит статью описания коммуникации с фразой FOR INITIAL I-O (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), в разделе процедур могут содержаться операторы для проверки начального значения символического имени терминала в данной статье CD (OK). Если оно заполнено пробелами, использованы операторы управления заданием для вызова объектной программы. Если оно не заполнено пробелами, система управления сообщениями вызвала объектную программу и инициировала данное с символическим именем коммуникационного терминала, который является источником сообщения, подлежащего обработке.
    Существуют два метода вызова объектной программы Кобола, использующей средства коммуникаций: запланированный запуск и вызов системой управления сообщениями.
    Разница между этими методами заключается только в том, как производится заполнение некоторых областей в указанной статье CD (OK).
    7.4.Понятие сообщений и сегментов сообщения
    Сообщение состоит из некоторого произвольного количества информации (обычно последовательности литер), начало и конец, которой определены или подразумеваются. Сообщения являются основной, но необязательно самой элементарной единицей данных, которую можно обработать средствами коммуникаций Кобола.
    Сообщения могут логически делиться на меньшие единицы данных, называемые сегментами сообщений. Внутри сообщения сегменты разграничиваются посредством индикаторов конца сегмента ESI (ИКС). Сообщение, состоящее из одного или более сегментов, отделяется от следующего сообщения посредством индикатора конца сообщения EMI (ИКЩ). Аналогично, группа из нескольких сообщений может быть логически отделена от следующих сообщений посредством индикатора конца группы EGI (ИКГ). Когда программа на Коболе получает сообщение или его сегмент, область описания коммуникации обновляется системой управления сообщениями так, что она указывает, какой индикатор, если он имеется, связан с текстом, переданным при выполнении оператора RECEIVE (ПОЛУЧИТЬ). При выводе индикатор, связанный с текстом, передаваемым системе управления сообщениями через оператор SEND (ПОСЛАТЬ), определяется в операторе SEND (ПОСЛАТЬ). Таким образом, существование логических индикаторов распознается и задается как системой управления сообщениями, так и объектной программой Кобола. Однако индикаторы не включаются в тексты сообщений, обрабатываемые программами Кобола.
    Между индикаторами EGI, EMI, ESI (ИКГ, ИКЩ и ИКС) существует отношение предшествования. EGI (ИКГ) является наиболее объемлющим индикатором, a ESI (ИКС) - наименее объемлющим. Наличие некоторого индикатора, связанного с текстом сообщения, предполагает существование всех менее объемлющих индикаторов, связанных с этим текстом. Например, наличие индикатора EGI (ИКГ) предполагает наличие EMI (ИКЩ) и ESI (ИКС).
    7.5.Понятие очередей
    Следующие рассуждения применимы только в том случае, когда коммуникационное оборудование устанавливается посредством описания коммуникации без фразы FOR I-O (ДЛЯ ВВОДА-ВЫВОДА).
    Очереди состоят из одного или нескольких сообщений, получаемых от одного или более коммуникационных устройств, и как таковые образуют буферы данных между объектной программой и системой управления сообщениями. Входные очереди логически отделены от выходных.
    Система управления сообщениями логически помещает в очереди или извлекает из них только полные сообщения. Части сообщений логически не помещаются в очередь, пока системе не будет доступно полное сообщение, то есть система управления сообщениями не передает сегмент сообщения объектной программе, пока все сегменты сообщения не будут во входной очереди, даже если используется оператор RECEIVE (ПОЛУЧИТЬ) с вариантом SEGMENT (СЕГМЕНТ). Для выходных сообщений система не посылает ни одного сегмента сообщения, пока все сегменты не будут в выходной очереди. Запрос о глубине очереди или числе сообщений данной очереди отражает только число полных сообщений, существующих в ней.
    Процесс помещения сообщений в очередь называется постановкой в очередь, а процесс получения из очереди - извлечением из очереди.
    7.5.1.Независимые постановка в очередь и извлечение из очереди
    Некоторые сообщения могут быть получены системой управления сообщениями с коммуникационного устройства до выполнения объектной программы Кобола. В этом случае система помещает сообщение в подходящую входную очередь (при условии, что входная очередь разрешена) до тех пор, пока объектная программа не потребует извлечения его из очереди с помощью оператора RECEIVE (ПОЛУЧИТЬ). В свою очередь, объектная программа Кобола имеет возможность постановки в выходные очереди сообщений, которые не передаются на коммуникационное устройство вплоть до завершения выполнения программы. Это может произойти в следующих случаях:
    а) когда запрещен обмен данными между заданной выходной очередью и ее адресатом;
    б) когда объектная программа создает выходные очереди быстрее, чем адресат может их принять.
    7.5.2.Разрешение и запрещение очередей
    Обычно система управления сообщениями разрешает или запрещает очереди, основываясь на времени дня, активности сообщений или других факторах, не связанных с программой Кобола. Однако программа Кобола может выполнить эти функции сама с помощью операторов ENABLE (РАЗРЕШИТЬ) и DISABLE (ЗАПРЕТИТЬ).
    7.5.3.Методы постановки в очередь и извлечения из очереди
    В системах, которые разрешают пользователю задавать определенные функции системы управления сообщениями, может возникнуть необходимость еще до выполнения программ, использующих средства коммуникации, задать для системы управления сообщениями алгоритм постановки в очередь и извлечения из очереди. Типичный алгоритм постановки в очередь будет, например, указывать, что все сообщения из одного источника надо помещать в данную входную очередь, или все сообщения, посылаемые данному адресату, должны быть помещены в данную выходную очередь.
    Выборка сообщений из очереди часто производится так, что первым из очереди выбирается то сообщение, которое в нее было первым поставлено. Однако пользователь может задать другой алгоритм выборки, например, воспользоваться приоритетной очередностью.
    7.5.4.Иерархия очередей
    а) сообщение помещается в очередь в соответствии со значением некоторого данного в каждом сообщении;
    б) если на некотором уровне подочередь не задана, то при выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями выберет подочередь этого уровня в алфавитном порядке. Например, если пользователем не задана подочередь-1, система управления сообщениями выберет сообщение из подочереди-1, обозначенной буквой Б.
    Нижеследующие примеры иллюстрируют действия алгоритма для очереди, имеющей структуру, показанную на рис.2.
    Пример 1
    В статье описания коммуникации задана очередь А. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Т1.
    Пример 2
    В статье описания коммуникации заданы очередь А и подочередь-1 В. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение С7.
    Пример 3
    В статье описания коммуникации заданы: очередь А, подочередь-1 Б, подочередь-2 Д. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Р1.
    Пример 4
    В статье описания коммуникации заданы: очередь А, подочередь-1 В, подочередь-2 Ж и подочередь-3 О. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Р6.
    Если требуется получить следующее сообщение очереди, независимо от того, в какой подочереди оно находится, в статье описания коммуникации необходимо указать только имя очереди. При передаче сообщения система управления сообщениями сообщит объектной программе Кобола имя соответствующей подочереди через данное в статье описания коммуникации. Если требуется получить следующее сообщение в данной подочереди, в статье описания коммуникации необходимо указать имя очереди и имена подочередей.
    Для вывода пользователь Кобола указывает только адресат сообщения, а система управления сообщениями помещает сообщение в подходящую выходную очередь.
    Не существует однозначного соответствия между коммуникационным устройством и источником (адресатом). Источник или адресат может состоять из одного или более физических устройств. Устройство или устройства, являющиеся источником (адресатом), должны быть определены для системы управления сообщениями.
    Для более гибкого управления сообщениями, помещаемыми в очередь и извлекаемыми из очереди, можно определить в системе управления сообщениями иерархию входных очередей, то есть очереди, состоящие из очередей. Пользователю Кобола доступны 4 уровня очередей. В порядке уменьшения значимости уровни очередей названы так: очередь, подочередь-1, подочередь-2 и подочередь-3. Иерархия очередей показана на рис.2.

    А, Б, ..., П - очереди и подочереди; G1, ..., Р1, ..., Т1, ... - сообщения, обозначенные в соответствии с их источником и порядковым номером
    Рис.2
    По рис.2 рассмотрим действия системы управления сообщениями. Предположим, что система управления сообщениями помещает сообщения в очередь и извлекает сообщения из очереди по следующему алгоритму:
    7.6.Понятие коммуникации транзакций
    В противоположность вышеизложенному механизму очередей, некоторые применения требуют прямого диалога между коммуникационным устройством и объектной программой. В этом случае нет необходимости создания очередей сообщений, поскольку сообщения обрабатываются безотлагательно. В Коболе возможно определить такого рода обработку использованием в статье CD (OK) фразы FOR I-O (ДЛЯ ВВОДА-ВЫВОДА). Описание коммуникации, содержащее фразу FOR I-O (ДЛЯ ВВОДА-ВЫВОДА), может поддерживать связь только с одним терминалом; тем не менее единица исполнения может содержать более одного описания коммуникации с фразой FOR I-O (ДЛЯ ВВОДА-ВЫВОДА) и эти описания коммуникаций могут поддерживать связь с одним и тем же терминалом или с различными терминалами. Если указана фраза FOR INITIAL I-O (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), программа должна быть вызвана системой управления сообщениями.
    Средства коммуникаций дают возможность получения, обработки и создания сообщений или их частей. Посредством системы управления сообщениями они позволяют связываться с местными и дистанционными коммуникационными устройствами.
  5. Часть 3.Глоссарий

  6. 1.ВВЕДЕНИЕ
    Приведенные ниже определения терминов соответствуют смыслу, который приписывается им в Коболе, и могут иметь иное значение в других языках.
    Определения служат справочным или вводным материалом, который следует просмотреть прежде, чем читать следующее далее детальное описание языка. Определения в большинстве случаев краткие и не содержат подробных синтаксических правил. Полные спецификации элементов, определяемых ниже, находятся в частях данного документа.
    2.ОПРЕДЕЛЕНИЯ
    1) прописные буквы: Б, Г, Д, Ж, 3, И, Й, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ы, Ь, Э, Ю, Я, А, В, С, D, E, F, G, Н, I, J, K, L, M, N, О, P, Q, R, S, T, U, V, W, X, Y, Z;
    2) строчные буквы: б, в, г, д, ж, з, и, й, к, л, м, н, п, т, ф, ц, ч, ш, щ, ы, ь, э, ю, я, а, b, с, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.
    а) в разделе идентификации
    PROGRAM-ID. (ПРОГРАММА.)
    AUTHOR. (АВТОР.)
    INSTALLATION. (ПРЕДПРИЯТИЕ.)
    DATE-WRITTEN. (ДАТА-НАПИСАНИЯ.)
    ДАТЕ-COMPILED. (ДАТА-ТРАНСЛЯЦИИ.)
    SECURITY. (ПОЛНОМОЧИЯ.)
    б) в разделе оборудования
    SOURCE-COMPUTER. (ИСХОДНАЯ-МАШИНА.)
    OBJECT-COMPUTER. (РАБОЧАЯ-МАШИНА.)
    SPECIAL-NAMES. (СПЕЦИАЛЬНЫЕ-ИМЕНА.)
    FILE-CONTROL. (УПРАВЛЕНИЕ-ФАЙЛАМИ.)
    I-O-CONTROL. (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ.)

    Заголовок раздела - комбинация слов, оканчивающаяся разделителем точка и указывающая начало раздела. Заголовки разделов Кобол-программы следующие:
    IDENTIFICATION DIVISION.
    ENVIRONMENT DIVISION.
    DATA DIVISION.
    PROCEDURE DIVISION [USING {имя-данного-1} ...].
    РАЗДЕЛ ИДЕНТИФИКАЦИИ.
    РАЗДЕЛ ОБОРУДОВАНИЯ.
    РАЗДЕЛ ДАННЫХ.
    РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ {имя-данного-1} ...].

    Заголовок секции - комбинация слов, за которыми следует разделитель точка; эта комбинация указывает начало секции в разделах оборудования, данных и процедур. Допустимые заголовки секций следующие:
    а) в разделе оборудования
    CONFIGURATION SECTION.
    (СЕКЦИЯ КОНФИГУРАЦИИ.)
    INPUT-OUTPUT SECTION.
    (СЕКЦИЯ ВВОДА-ВЫВОДА.)
    б) в разделе данных:
    FILE SECTION.
    (СЕКЦИЯ ФАЙЛОВ.)
    WORKING-STORAGE SECTION.
    (СЕКЦИЯ РАБОЧЕЙ-ПАМЯТИ.)
    LINKAGE SECTION.
    (СЕКЦИЯ СВЯЗИ.)
    COMMUNICATION SECTION.
    (СЕКЦИЯ КОММУНИКАЦИЙ.)
    REPORT SECTION.
    (СЕКЦИЯ ОТЧЕТОВ.)
    в) в разделе процедур заголовок секции состоит из зарезервированного слова SECTION (СЕКЦИЯ), перед (за) которым следует имя секции, далее номер сегмента (необязательно) и, наконец, разделитель точка.
    Заголовок страницы - группа отчета, которая представляется в начале страницы отчета, как это определено системой управления генератором отчетов.
    Запись - наиболее объемлющее данное. Номер уровня записи равен 01. Запись может быть элементарным или групповым данным. Термин является синонимом термина логическая запись.
    Запись переменной длины - запись файла, статья описания которого позволяет записям содержать переменное число позиций литер.
    Запись фиксированной длины - запись, соответствующая файлу, статья описания файла или статья описания сортируемого-сливаемого файла которого требует, чтобы все записи содержали одно и то же количество литер.
    Зарезервированное слово - слова Кобола из фиксированного списка слов, которые могут быть использованы в исходных Кобол-программах только в определенном смысле и которые не могут использоваться как слова, определенные пользователем, или как системные имена.
    Знак арифметической операции - одна литера или фиксированная двухлитерная комбинация, которая принадлежит следующему множеству:
    Знак Операция
    + сложение
    - вычитание
    * умножение
    / деление
    ** возведение в степень

    Знак логической операции - одно из зарезервированных слов: AND (И), OR (ИЛИ) или NOT (HE). При формировании условий оба или любое из AND (И) или OR (ИЛИ) могут использоваться как логические связки. NOT (HE) может использоваться для логического отрицания.
    Знак операции отношения - зарезервированное слово, литера отношения, группа последовательных зарезервированных слов или группа последовательных зарезервированных слов и литер отношения, используемые при построении условий отношения. Допустимыми знаками операций отношения являются:
    Знак Операция
    IS [NOT] GREATER THAN ([HE] БОЛЬШЕ) IS [NOT]> ([HE]>) Больше чем или не больше чем
    IS NOT LESS THAN ([HE] МЕНЬШЕ) IS [NOT]< ([HE]td> Меньше чем или не меньше чем
    IS NOT EQUAL TO ([HE] РАВНО) IS NOT= [HE]=) Равно или не равно
    IS GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО) IS > = (> =) Больше чем или равно
    IS LESS THAN OR EQUAL TO (МЕНЬШЕ ИЛИ РАВНО) IS < = (< = ) Меньше чем или равно

    Знак унарной операции - плюс (+) или минус (-), находящийся перед переменной или левой скобкой арифметического выражения и который равносилен умножению выражения на +1 или - 1 соответственно.
    Знак числа - алгебраический знак, связанный с числовым данным или числовым литералом для указания положительного или отрицательного его значения.
    Значение истинности - представление результата вычисления условного выражения в терминах одного из двух значений: "истина" или "ложь".
    Идентификатор - синтаксически правильная комбинация имени-данного и его уточнителей, индексов и модификаторов ссылки, если они требуются для однозначности ссылки, именующая данное. Тем не менее правила для "идентификатора" в общих форматах в особых случаях могут запрещать уточнение, индексирование или модификацию ссылок.
    Идентификатор результата - определенное пользователем данное для хранения результата арифметической операции.
    Иерархия управления - определенная последовательность подразделов отчета, указанная порядком перечисления варианта FINAL (ПО КОНЦУ) и имен данных во фразе CONTROL (УПРАВЛЕНИЕ).
    Имя алфавита - определенное пользователем слово в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования, которое именует определенный набор литер и (или) основную последовательность (ч.6, п.4.5).
    Имя библиотеки - определенное пользователем слово, которое именует библиотеку Кобола, используемую компилятором при компиляции данной исходной программы.
    Имя данного - определенное пользователем слово, которое именует данное, описанное в статье описания данного. В общих форматах "имя-данного" представляет слово, которое не может ни уточняться, ни индексироваться, ни быть модифицированной ссылкой, если в правилах для этого формата нет специального разрешения.
    Имя записи - определенное пользователем слово, которое именует запись, описанную статьей описания записи в разделе данных Кобол-программы.
    Имя индекса - определенное пользователем слово, именующее позицию или регистр памяти, связанные с конкретной таблицей.
    Имя класса - слово, определенное пользователем в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования, предоставляющее имя выражению, для которого может быть определено значение истинности того, что данное состоит исключительно из тех литер, которые указаны в определении имени-класса.
    Имя коммуникации - определенное пользователем слово, именующее область взаимодействия с системой управления сообщениями и описанное в статье описания коммуникации в секции коммуникаций раздела данных.
    Имя машины - системное имя, идентифицирующее машину, на которой должна компилироваться или исполняться программа.
    Имя отчета - определенное пользователем слово, которое именует отчет, описываемый статьей описания отчета в секции отчетов раздела данных.
    Имя очереди - символическое имя, указывающее системе управления сообщениями логический путь, по которому может быть доступно сообщение или часть законченного сообщения в очереди.
    Имя параграфа - определенное пользователем слово, которое идентифицирует и начинает параграф в разделе процедур.
    Имя программы - определенное пользователем слово, которое идентифицирует исходную Кобол-программу в разделе идентификации и заголовке конца программы.
    Имя программного модуля или имя модуля - определенное пользователем слово, которое идентифицирует процедуру, записанную на языке, отличном от Кобола.
    Имя процедуры - определенное пользователем слово, используемое для именования параграфа или секции в разделе процедур. Имя процедуры может быть именем параграфа, возможно уточненным, или именем секции.
    Имя реализации - системное имя, относящееся к определенным особенностям, имеющимся в распоряжении вычислительной системы данной реализации.
    Имя секции - определенное пользователем слово, которое именует секцию в разделе процедур.
    Имя текста - определенное пользователем слово, которое именует библиотечный текст.
    Имя условия - определенное пользователем слово, поставленное в соответствие специальному значению, набору значений или некоторому диапазону значений внутри полного множества значений, которые может принимать условная переменная, или определенное пользователем слово, присвоенное состоянию определенного реализацией переключателя или устройства.
    Когда используется "имя-условия" в общих форматах, оно представляет уникальную ссылку на данное, состоящую из синтаксически правильной комбинации имени-условия вместе с уточнителями или индексами, как того требует однозначность ссылки.
    Имя файла - определенное пользователем слово, которое именует определитель файла, описываемый статьей описания файла или сортируемого-сливаемого файла в секции файлов раздела данных.
    Имя языка - системное имя, указывающее определенный язык программирования.
    Индекс - номер вхождения, идентифицирующий отдельный элемент таблицы. Индекс может быть представлен целым, именем-данного, за которым может следовать целое со знаком + или -, или именем-индекса, за которым может следовать целое со знаком + или -.
    Индексируемое имя данного - идентификатор, состоящий из имени данного, за которым следует один или несколько индексов, заключенных в скобки.
    Индексная организация - постоянная логическая структура файла, при которой каждая запись идентифицируется значением одного или более ключей внутри этой записи.
    Индексное данное - данное, в котором в определенной реализацией форме может запоминаться значение, связанное с именем индекса.
    Индексный файл - файл с индексной организацией.
    Индикатор уровня - две буквенные литеры, определяющие специальный тип файла или позицию в иерархии. Индикаторами уровня в разделе данных являются FD (ОФ), CD (OK), RD (ОО), SD (ОС).
    Индикаторы сообщения. EGI (ИКГ) - индикатор конца группы, EMI (ИКЩ) - индикатор конца сообщения и ESI (ИКС) - индикатор конца сегмента являются логическими индикаторами, указывающими системе управления сообщениями на определенное условие (конца группы, конца сообщения, конца сегмента).
    В иерархии EGI (ИКГ), EMI (ИКЩ) и ESI (ИКС) логически EGI (ИКГ) является эквивалентом ESI (ИКС), EMI (ИКЩ) и EGI (ИКГ). Логически EMI (ИКЩ) эквивалентно ESI (ИКС) и EMI (ИКЩ). Таким образом, сегмент может заканчиваться ESI (ИКС), EMI (ИКЩ) или EGI (ИКГ). Сообщение может заканчиваться EMI (ИКЩ) или EGI (ИКГ).
    Источник - символическое обозначение инициатора передачи сообщения в очередь.
    ИСХОДНАЯ-МАШИНА - имя параграфа в разделе оборудования, описывающего компьютерную среду, в которой компилируется исходная программа.
    Исходная программа - синтаксически правильный набор операторов Кобола, начинающийся с раздела идентификации, оператора COPY (КОПИРОВАТЬ) или оператора REPLACE (ЗАМЕНИТЬ). Кобол-программа заканчивается заголовком конца программы, если он определен, или отсутствием дальнейших строк исходной программы.
    Катушка - отдельная часть запоминающей среды, размеры которой определяются реализацией, содержащая часть файла, файл или несколько файлов. Термин является синонимом тома и устройства.
    Ключ - данное, идентифицирующее местоположение записи, или набор данных, идентифицирующих упорядоченность данных.
    Ключ записи - ключ, содержимое которого идентифицирует запись в индексном файле. В индексном файле ключ может быть основным или дополнительным.
    Ключ ссылки - ключ, основной или дополнительный, используемый для доступа к записям индексного файла в текущий момент времени выполнения.
    Ключевое слово - зарезервированное слово, вхождение которого в формат, содержащий это слово, обязательно при использовании этого формата в исходной программе.
    Комбинированное условие - условие, полученное посредством связывания двух или более условий при помощи знаков логических операций AND (И) или OR (ИЛИ).
    Коммуникационное устройство - механизм (оборудование или оборудование и системные программы), обеспечивающий отправку данных в очередь сообщений и (или) получение данных из этой очереди. Эти функции может выполнять как вычислительная машина, так и периферийное устройство. Одна или несколько программ некоторой вычислительной машины, содержащих статьи описания коммуникаций, определяют один или несколько таких механизмов.
    Конец младшего порядка - самая правая литера строки литер.
    Конец раздела процедур - физическая позиция в исходной Кобол-программе, за которой не следуют никакие процедуры.
    Конец старшего порядка - самая левая литера в строке литер.
    Концовка отчета - группа отчета, которая представляется только в конце отчета.
    Концовка страницы - группа отчета, которая представляется в конце страницы отчета, как это определено системой управления генератором отчетов.
    Литера - основная неделимая единица языка.
    Литера заполнитель - литера, используемая для заполнения неиспользуемых позиций литер в физической записи.
    Литера отношения - литера, которая принадлежит следующему множеству:
    Литера Значение
    > больше
    < меньше
    = равно

    Литера пунктуации - литера, которая принадлежит следующему набору литер:
    Литера Значение
    , запятая
    : двоеточие
    ; точка с запятой
    . точка
    " кавычки
    ( левая круглая скобка
    ) правая круглая скобка
    пробел
    = равно

    Литера редактирования - отдельная литера или двухлитерная комбинация в строке литер шаблона, принадлежащая следующему набору литер:
    Литера Значение
    пробел
    0 нуль
    + плюс
    - минус
    CR (КР) кредит
    DB (ДБ) дебет
    Z(П) подавление нулей
    * защита чека
    , запятая (десятичная точка)
    . точка (десятичная точка)
    валютный знак
    / дробная черта

    Литерал - строка литер, значение которой определяется упорядоченным набором литер, составляющих эту строку.
    Логическая запись - наиболее объемлющее данное. Номер уровня записи равен 01. Запись может быть элементарным или групповым данным. Термин является синонимом записи.
    Логическая запись генератора отчетов - запись, состоящая из печатаемой генератором отчета строки и соответствующей управляющей информации, необходимой для ее отбора и вертикального позиционирования.
    Логическая страница - логическое понятие, состоящее из верхнего поля, тела страницы и нижнего поля.
    Массовая память - среда памяти, в которой данные могут быть организованы и сохраняемы как в последовательной, так и в непоследовательной форме.
    Метод доступа - метод обращения к записям в файле.
    Мнемоническое имя - определенное пользователем слово, соотнесенное в разделе оборудования указанному имени реализации.
    Модификатор ссылки - самая левая позиция литеры и длина, используемые для образования данного и ссылки на него (ч.4. п.4.3.8.3).
    Набор литер Кобола - полный набор литер Кобола состоит из перечисленных ниже литер:
    для английской нотации:
    Литера Значение
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9 цифра
    А, В, С, D, Е, F, G, Н, I, J, K, L, М, N, О, Р, Q, R, S, Т, U, V, W, Х, У, Z буква прописная
    а, b, с, d, е, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z буква строчная
    пробел
    + плюс
    - минус
    * звездочка
    / дробная черта
    = равно
    , запятая (десятичная точка)
    ; точка с запятой
    . точка (десятичная точка)
    " кавычки
    ( левая круглая скобка
    ) правая круглая скобка
    > больше
    < меньше
    валютный знак
    : двоеточие

    Для русской нотации набор литер Кобола включает перечисленный выше набор литер Кобола для английской нотации, а также следующие литеры русского алфавита, не совпадающие по начертанию с буквами латинского алфавита:
    Б, Г, Д, Ж, 3, И, Й, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ы, Ь, Э, Ю, Я буква прописная
    б, в, г, д, ж, з, и, й, к, л, м, н, п, т, ф, ц, ч, ш, щ, ы, ь, э, ю, я буква строчная

    Начальная программа - программа, которая приводится в начальное состояние каждый раз при вызове ее в единице исполнения.
    Начальное состояние - состояние программы при первом вызове ее в единице исполнения (ч.10, п.2.4).
    Необязательное слово - зарезервированное слово, включаемое в конкретный формат по желанию пользователя для придания тексту удобочитаемости. Присутствие такого слова в формате необязательно.
    Необязательный файл - файл, который не обязательно должен иметься в наличии во время выполнения объектной программы. Объектная программа производит запрос о наличии или отсутствии файла.
    Несвязанные данные - элементарные данные в секции рабочей памяти и в секции связи, не имеющие иерархических взаимосвязей с какими-либо другими данными.
    Неуспешное завершение - попытка выполнить оператор, в результате которой выполняются не все действия, определенные этим оператором. Неуспешное завершение оператора не изменяет данные, на которые есть ссылки в операторе, но может изменить индикаторы состояния.
    Нечисловое данное - данное, описанное таким образом, что его значение может быть любой комбинацией литер из набора литер вычислительной машины. Определенные категории нечисловых данных могут формироваться из более ограниченного набора литер.
    Нечисловой литерал - строка литер, ограниченная слева и справа кавычками. Строка литер может включать любую литеру из набора литер машины.
    Неявный ограничитель области действия - разделитель точка, заканчивающая область действия предшествующего незавершенного оператора, или фраза оператора, указывающая на конец области действия любого оператора, содержащегося в предыдущей фразе.
    Нижнее поле - пустое поле, следующее за телом страницы.
    Номер записи - порядковый номер записи в файле с последовательной организацией.
    Номер сегмента - определенное пользователем слово, которое классифицирует секции в разделе процедур для целей сегментации. Номера сегмента могут состоять только из цифр 0, 1, ..., 9 и могут быть выражены одной или двумя цифрами.
    Номер строки - целое, обозначающее вертикальную позицию строки отчета на странице.
    Номер уровня - определенное пользователем слово, состоящее из одной или двух цифр, которое указывает позицию данного в иерархической структуре логической записи или специальные свойства статьи описания данного. Номера уровней в диапазоне от 1 до 49 указывают позицию данного в иерархической структуре логической записи. Номера уровней от 1 до 9 могут быть представлены одной цифрой или цифрой с предшествующим нулем. Номера уровней 66, 77 и 88 идентифицируют специальные свойства статьи описания данного.
    Область записи - область памяти, отведенная для целей обработки записи, описанной в статье описания записи секции файлов раздела данных. Текущее число позиций литер в области записи определяется явной или неявной фразой RECORD (В ЗАПИСИ) в секции файлов.
    Общая программа - программа, которую, несмотря на то, что она непосредственно содержится в другой программе, можно вызвать из любой программы, прямо или косвенно содержащейся в этой другой программе.
    Объект статьи - набор операндов и зарезервированных слов в статье раздела данных Кобол-программы, следующий непосредственно за субъектом статьи.
    Объектная программа - совокупность выполнимых машинных команд и других средств, предназначенных для взаимодействия с данными, обеспечивающая решение проблемы. Объектная программа обычно является результатом обработки исходной программы компилятором Кобола. Там, где нет опасности неоднозначности, слово "объектная программа" может заменяться словом "программа".
    Ограничитель - литера или последовательность смежных литер, которая идентифицирует конец строки литер и отделяет эту строку литер от следующей строки литер. Ограничитель не является частью строки литер, которую он ограничивает.
    Ограничитель псевдотекста - две последовательные литеры = (равно), используемые для ограничения псевдотекста.
    Операнд - компонента, над которой производится действие. В настоящем документе любое слово (или слова), записанное строчными буквами в формате оператора или статьи, рассматривается как операнд и как таковой представляет ссылку на данное, указанное операндом.
    Оператор - синтаксически правильная комбинация слов, литералов и разделителей, начинающаяся глаголом и записанная в исходной Кобол-программе.
    Оператор ввода-вывода - оператор, побуждающий к обработке файлов выполнением операций над отдельными записями или над всем файлом. Операторы ввода-вывода: ACCEPT (ПРИНЯТЬ) - с вариантом идентификатор, CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), DISABLE (ЗАПРЕТИТЬ), DISPLAY (ВЫДАТЬ), ENABLE (РАЗРЕШИТЬ), OPEN (ОТКРЫТЬ), PURGE (ОЧИСТИТЬ), READ (ЧИТАТЬ), RECEIVE (ПОЛУЧИТЬ), REWRITE (ОБНОВИТЬ), SEND (ПОСЛАТЬ), SET (УСТАНОВИТЬ) - с вариантом ТО ON (ВКЛЮЧЕНО) или ТО OFF (ВЫКЛЮЧЕНО), START (ПОДВЕСТИ) и WRITE (ПИСАТЬ).
    Оператор ветвления процедуры - оператор, совершающий явную передачу управления не следующему выполнимому оператору в последовательности операторов исходной программы. Операторы ветвления процедур: ALTER (ИЗМЕНИТЬ), CALL (ВЫЗВАТЬ), EXIT (ВЫЙТИ), EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), GO ТО (ПЕРЕЙТИ К), MERGE (СЛИТЬ) - с вариантом OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА), PERFORM (ВЫПОЛНИТЬ) и SORT (СОРТИРОВАТЬ) - с вариантом INPUT PROCEDURE (ПРОЦЕДУРА ВВОДА) или OUTPUT PROCEDURE (ПРОЦЕДУРА ВЫВОДА).
    Оператор с ограничителем области действия - любой оператор, включающий явный ограничитель области действия (ч.4, п.4.4.3).
    Оператор, управляющий компиляцией - оператор, вызывающий выполнение компилятором специальных действий во время компиляции.
    Описание записи - совокупность статей описания данных, относящихся к отдельной записи. Термин является синонимом термина статья описания записи.
    Определенное пользователем слово - слово Кобола, которое должно быть задано пользователем в соответствии с форматом фразы или оператора.
    Определитель файла - область памяти, содержащая информацию о файле и используемая для связи между именем-файла и физическим файлом и между именем-файла и соответствующей областью записи.
    Организация файла - постоянная логическая структура файла, устанавливаемая при создании файла.
    Основная последовательность - последовательность, в которой воспринимаемые машиной литеры упорядочены для целей сортировки, слияния или сравнения и для последовательной обработки индексных файлов.
    Основной ключ записи - ключ, содержимое которого однозначно идентифицирует запись в индексном файле.
    Отдельно компилируемая программа - программа, компилируемая со всеми содержащимися в ней программами отдельно от всех остальных программ.
    Отладочная секция - секция Кобол-программы, содержащая оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
    Отладочная строка - строка Кобол-программы, содержащая литеру D (Т) в поле индикатора строки.
    Относительная организация - постоянная логическая структура файла, в которой каждая запись единственным образом идентифицируется целой положительной величиной, указывающей порядковую позицию записи в файле.
    Относительный ключ - ключ, значение которого идентифицирует логическую запись в относительном файле.
    Относительный номер записи - порядковый номер записи в файле с относительной организацией. Этот номер рассматривается как числовой литерал, являющийся целым.
    Относительный файл - файл с относительной организацией.
    Отношение. Термин является синонимом знака операции отношения.
    Отрицание комбинированного условия - знак логической операции NOT (HE), непосредственно за которым следует в скобках комбинированное условие.
    Отрицание простого условия - знак логической операции NOT (НЕ), непосредственно за которым следует простое условие.
    Очередь - логический набор сообщений, ожидающих передачи или обработки.
    Параграф - в разделе процедур это имя параграфа, за которым следует разделитель точка и нуль, одно или несколько предложений. В разделе идентификации и разделе оборудования - это заголовок параграфа, за которым следует нуль, одна или несколько статей.
    Переменная - данное, значение которого может изменяться при выполнении объектной программы. Переменные, используемые в арифметическом выражении, должны быть числовыми элементарными данными.
    Переменно повторяющееся данное - переменно повторяющееся данное является табличным элементом, повторяющимся переменное число раз. В статье описания такого данного должна содержаться фраза OCCURS DEPENDING ON (ПОВТОРЯЕТСЯ В ЗАВИСИМОСТИ ОТ) или оно должно входить в другое данное с такой статьей описания.
    Печатаемая группа - группа отчета, содержащая по крайней мере одну печатаемую строку.
    Печатаемое данное - данное, размер и содержимое которого указаны элементарной статьей отчета, содержащей фразы СОLUMN NUMBER (НОМЕР СТОЛБЦА), PICTURE (ШАБЛОН), а также SOURCE (ИСТОЧНИК), SUM (СУММА) или VALUE (ЗНАЧЕНИЕ).
    Повелительный оператор - оператор, который начинается с повелительного глагола, указывающий безусловное действие, которое нужно выполнить, или условный оператор с явным ограничителем области действия. Повелительный оператор может состоять из последовательности повелительных операторов.
    Подочередь - логическое иерархическое подразделение очереди.
    Подпрограмма - программа, являющаяся объектом оператора CALL (ВЫЗВАТЬ), объединяемая в рабочее время с вызывающей программой для образования единицы исполнения. Термин является синонимом термина вызываемая программа.
    Подразумеваемая десятичная точка - позиция десятичной точки в данном, которой не соответствует явное физическое представление литеры точки.
    Позиция литеры - объем физической памяти, необходимый для хранения одной литеры стандартного формата данных, описанных DISPLAY (ДЛЯ ВЫДАЧИ). Более подробные характеристики физической памяти определяются реализацией.
    Позиция цифры - объем физической памяти, необходимый для хранения одной цифры. Этот объем может изменяться в зависимости от фразы об использовании в статье описания данного, определяющей данное. Если в статье описания данного указана фраза DISPLAY (ДЛЯ ВЫДАЧИ), позиция цифры является синонимом позиции литеры. Более подробные характеристики физической памяти определяются реализацией.
    Поле концовки - позиция тела страницы, примыкающая к нижней границе.
    Последовательная организация - постоянная логическая структура файла, при которой записи идентифицированы отношением "предшественник-преемник", установленным при занесения записи в файл.
    Последовательный доступ - метод доступа, при котором логические записи извлекаются из файла или размещаются в нем в последовательности, упорядоченной отношением "предшественник-преемник", устанавливаемым при создании файла.
    Последовательный файл - файл с последовательной организацией.
    Предложение - последовательность из одного или нескольких операторов, последний из которых заканчивается разделителем точкой.
    Прерывание управления - изменение значения данного, указанного во фразе CONTROL (УПРАВЛЕНИЕ), используемое для управления иерархической структурой отчета.
    Произвольный доступ - метод доступа, при котором указанное программой значение ключа идентифицирует логическую запись, получаемую или удаляемую из относительного или индексного файла или помещаемую в него.
    Простое условие - любое одиночное условие, принадлежащее следующему множеству:
    условие отношения;
    условие класса;
    условие имени условия;
    условие состояния переключателя;
    условие знака;
    (простое условие).
    Процедура - параграф или группа логически последовательных параграфов либо секция или группа логически последовательных секций в разделе процедур.
    Процедура ввода - набор операторов, которому передается управление во время выполнения оператора SORT (СОРТИРОВАТЬ) для управления передачей сортируемых записей.
    Процедура вывода - набор операторов, которым передается управление во время выполнения оператора SORT (СОРТИРОВАТЬ) после завершения функции сортировки или во время выполнения оператора MERGE (СЛИТЬ) после завершения функции слияния.
    Псевдотекст - последовательность слов текста, строк комментариев или разделителя пробел, заключенная в ограничители псевдотекста, причем последние не принадлежат псевдотексту. Псевдотекст представляет фрагмент исходной программы или фрагмент библиотечного текста.
    OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) - имя параграфа в разделе оборудования, описывающего конфигурацию машины, на которой следует выполнять объектную программу.
    Раздел - набор из нуля, одной или нескольких секций или параграфов, образующих тело раздела, который формируется и составляется в соответствии со специальными правилами. Каждый раздел состоит из заголовка раздела и соответствующего тела раздела. Имеется четыре раздела Кобол-программы: раздел идентификации, раздел оборудования, раздел данных и раздел процедур.
    Разделитель - литера или две последовательные литеры, используемые для ограничения строк литер.
    Режим ввода - состояние файла после выполнения оператора OPEN (ОТКРЫТЬ), указанного с вариантом INPUT (ВХОДНОЙ), для этого файла и до выполнения оператора CLOSE (ЗАКРЫТЬ) без варианта REEL (КАТУШКУ) или UNIT (ТОМ) для этого файла.
    Режим ввода-вывода - состояние файла после выполнения оператора OPEN (ОТКРЫТЬ), указанного с вариантом I-O (ВХОДНОЙ-ВЫХОДНОЙ), для этого файла и до выполнения оператора CLOSE (ЗАКРЫТЬ) без варианта REEL (КАТУШКУ) или UNIT (ТОМ) для этого файла.
    Режим вывода - состояние файла после выполнения оператора OPEN (ОТКРЫТЬ) для этого файла с вариантом OUTPUT (ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ) и до выполнения оператора CLOSE (ЗАКРЫТЬ) без варианта REEL (КАТУШКУ) или UNIT (ТОМ) для этого файла.
    Режим дополнения - состояние файла после выполнения для него оператора OPEN (ОТКРЫТЬ), указанного с вариантом EXTEND (ДОПОЛНЯЕМЫЙ) и до выполнения оператора CLOSE (ЗАКРЫТЬ) для этого же файла.
    Режим открытия - состояние файла после выполнения оператора OPEN (ОТКРЫТЬ) для этого файла и до выполнения оператора CLOSE (ЗАКРЫТЬ) без варианта REEL (КАТУШКУ) или UNIT (ТОМ) для этого файла. Определенный режим открытия определяется в операторе OPEN (ОТКРЫТЬ) вариантом INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ), I-O (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ) соответственно как режим открытия для ввода, вывода, ввода-вывода или дополнения.
    Ресурс - возможность или средство, управляемые операционной системой, которые могут быть использованы выполняющейся программой.
    Связанные данные - данные, описанные посредством последовательных статей раздела данных и имеющие определенную иерархическую взаимосвязь друг с другом.
    Сегмент сообщения - логическое подразделение сообщения, обычно связанное с индикатором конца сегмента (см. индикаторы сообщения).
    Секция - набор из нуля, одного или нескольких параграфов или статей, называемый телом секции, которому предшествует заголовок секции. Каждая секция состоит из заголовка секции и относящегося к нему тела секции.
    Секция ввода-вывода - секция раздела оборудования, которая называет файлы и внешнюю среду, требуемые для объектной программы, и которая задает информацию, необходимую для передачи и обработки данных в процессе выполнения объектной программы.
    Секция коммуникаций - секция раздела данных, состоящая из одной или нескольких статей описания коммуникаций CD (OK) и описывающая области взаимодействия между системой управления сообщениями и программой.
    Секция конфигурации - секция раздела оборудования, которая описывает общие спецификации исходной и рабочей программ.
    Секция отчетов - секция раздела данных, содержащая статьи описания составляемых Кобол-программой отчетов и связанные с ними статьи описания групп отчетов.
    Секция рабочей памяти - секция раздела данных, которая описывает данные рабочей памяти, состоящие из несвязанных данных, либо из записей рабочей памяти, либо из тех и других.
    Секция связи - секция в разделе данных вызываемой программы, описывающая данные, доступные из вызывающей программы. К этим данным можно обращаться как вызывающей программе, так и вызываемой.
    Секция файлов - секция раздела данных, которая содержит статьи описания файлов и статьи описания сортируемых-сливаемых файлов вместе с описаниями соответствующих им записей.
    Символическая литера - определенное пользователем слово, указывающее определенную пользователем стандартную константу.
    Система управления генератором отчетов (СУГО) - обеспечиваемая реализацией система управления, которая осуществляет построение отчетов во время выполнения.
    Система управления массовой памятью (СУМП) - система управления вводом-выводом, которая управляет обработкой файлов в массовой памяти.
    Система управления сообщениями - система управления коммуникациями, которая поддерживает обработку сообщений.
    Системное имя - слово Кобола, используемое для связи с операционной средой.
    Следующая запись - запись, которая логически следует за текущей записью файла.
    Следующее выполнимое предложение - следующее предложение, которому будет передано управление после завершения выполнения текущего оператора (ч.4, п.4.4.2).
    Следующий выполнимый оператор - следующий оператор, которому будет передано управление после завершения выполнения текущего оператора (ч.4, п.4.4.2).
    Сливаемый файл - совокупность записей, подлежащих слиянию посредством выполнения оператора MERGE (СЛИТЬ). Сливаемый файл создается и может использоваться только при выполнении функции слияния.
    Слово - строка литер, состоящая не более чем из 30 литер и образующая определенное пользователем слово, системное имя или зарезервированное слово (ч.4, п.4.2.2.1).
    Слово Кобола - строка литер, состоящая не более чем из 30 литер и образующая определенное пользователем слово, системное имя или зарезервированное слово (ч.4, п.4.2.2.1).
    Слово-специальная литера - зарезервированное слово, являющееся знаком арифметической операции или литерой отношения.
    Слово текста - литера или непрерывная последовательность литер между полем А и полем R в библиотеке Кобола, исходной программе или в псевдотексте.
    Словом текста являются:
    (1) разделитель за исключением пробела, ограничителя псевдотекста, открывающего и закрывающего ограничителя нечислового литерала. Правая и левая скобки, независимо от контекста в библиотеке, исходной программе или псевдотексте, всегда рассматриваются как слова текста;
    (2) нечисловой литерал вместе с ограничивающими его открывающими и закрывающими кавычками или числовой литерал;
    (3) любая другая непрерывная последовательность литер Кобола, за исключением строк комментария и слова COPY (КОПИРОВАТЬ), ограниченная разделителями и не являющаяся разделителем или литералом.
    Сложное условие - условие, в котором одно или несколько условий связаны одной или несколькими логическими операциями (см. отрицание простого условия; комбинированное условие; отрицание комбинированного условия).
    Сокращенное комбинированное условие отношения - комбинированное условие, в котором опущены общие для последовательности образующих его условий субъекты, и, возможно, знаки операции отношения.
    Сообщение - данные, с которыми связан индикатор конца сообщения или индикатор конца группы (см. индикаторы сообщения).
    Сортируемый файл - совокупность записей, подлежащих сортировке посредством оператора SORT (СОРТИРОВАТЬ). Сортируемый файл создается и может быть использован только функцией сортировки.
    Состояние ввода-вывода. Логический объект, содержащий двухлитерное значение, указывающее заключительное состояние операции ввода-вывода. Это значение, однако, доступно программе при использовании фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлами.
    Специальная литера - литера, которая принадлежит следующему набору литер:
    Литера Значение
    + плюс
    - минус
    * звездочка
    / дробная черта
    = равно
    , запятая (десятичная точка)
    ; точка с запятой
    . точка (десятичная точка)
    " кавычки
    ( левая круглая скобка
    ) правая круглая скобка
    > больше
    < меньше
    валютный знак
    : двоеточие

    SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) - имя параграфа раздела оборудования, в котором имена реализации соотнесены с мнемоническими именами, определенными пользователем.
    Специальные регистры - области памяти вычислительной машины, учреждаемые компилятором Кобола и используемые для запоминания служебной информации при выполнении специфических функций Кобола.
    Стандартная константа - генерируемое компилятором значение, на которое ссылаются посредством определенных зарезервированных слов (ч.4, п.4.2.2.2.3).
    Стандартный формат данного - концепция, используемая при описании данных в разделе данных Кобола, согласно которой характеристики или свойства данных выражены в форме, ориентированной на появление данного на печатаемой странице неопределенной длины и ширины, а не в форме, ориентированной на способ размещения данного в памяти вычислительной машины или на некотором внешнем носителе.
    Статья - набор последовательных фраз описания в разделе идентификации, разделе оборудования или разделе данных исходной программы, заканчивающийся разделителем точкой.
    Статья имени программы - статья параграфа PROGRAM-ID (ПРОГРАММА) раздела идентификации, содержащая фразы, которые определяют имя программы и назначают программе избранные свойства.
    Статья исходной машины - статья параграфа SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) в разделе оборудования, содержащая фразы с описанием компьютерной среды, в которой будет компилироваться исходная программа.
    Статья-комментарий - статья в разделе идентификации, которая может представлять собой любую комбинацию литер из набора литер машины.
    Статья описания группы отчета - статья в секции отчетов раздела данных, состоящая из номера уровня 01, необязательного имени данного, фразы TYPE (ТИП) и необязательного набора фраз отчета.
    Статья описания данного - статья в разделе данных, состоящая из номера уровня, за которым следует, если требуется, имя данного, а затем, если требуется, набор фраз данных определенного вида.
    Статья описания записи - совокупность статей описания данных, содержащихся в записи. Термин является синонимом термина описание записи.
    Статья описания коммуникации - статья секции коммуникаций раздела данных, состоящая из индикатора уровня CD (OK), за которым следует имя коммуникации и, если требуется, ряд фраз описания. Эта статья описывает интерфейс между системой управления сообщениями и Кобол-программой.
    Статья описания отчета - статья в секции отчетов раздела данных, состоящая из индикатора уровня RD (00), за которым следует имя отчета и затем, если это требуется, набор фраз отчета.
    Статья описания сортируемого-сливаемого файла - статья в секции файлов раздела данных, которая состоит из индикатора уровня SD (ОС), за которым следует имя файла, а затем набор фраз файла.
    Статья описания уровня 77 - статья описания данного в секции рабочей памяти, описывающая несвязанное данное с номером уровня 77.
    Статья описания файла - статья в секции файлов раздела данных, состоящая из индикатора уровня FD (ОФ), за которым следует имя файла и затем набор требуемых фраз.
    Статья объектной машины - статья параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) раздела оборудования, содержащая фразы, которые описывают компьютерную среду, в которой будет выполняться объектная программа.
    Статья специальных имен - статья параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) в разделе оборудования, обеспечивающая средства определения валютного знака; выбора десятичной точки; определения символических литер; установления соответствия между именами реализации и мнемоническими именами, определяемыми пользователем; установления соответствия между именами алфавитов и наборами литер или основными последовательностями и установления соответствия между именами классов и наборами литер.
    Статья управления вводом-выводом - статья параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) в разделе оборудования, содержащая фразы с информацией, необходимой для передачи и обработки данных названных файлов во время выполнения программы.
    Статья управления файлом - фраза SELECT (ДЛЯ) в разделе оборудования и все подчиненные ей фразы, которые объявляют соответствующие физические свойства файла.
    Столбец - позиция литеры в печатаемой строке. Номера столбцов начинаются с единицы, определяющей самую левую позицию литеры в печатаемой строке, и увеличиваются на единицу при продвижении к самой правой позиции в этой строке.
    Страница - вертикальное подразделение данных отчета, базирующееся на внутренних требованиях выдачи и (или) внешних характеристиках носителя отчета.
    Строка - часть страницы, представляющая один горизонтальный ряд позиций литер. Каждая позиция литеры строки отчета выровнена по вертикали с соответствующей позицией литеры строки отчета, находящейся над ней. Строки отчета нумеруются от 1, изменяясь на 1, начиная сверху. Термин является синонимом строки отчета.
    Строка комментария - строка исходной программы, содержащая литеру * (звездочка) в поле индикатора строки и любые литеры из набора литер машины в полях А и В. Строка комментария служит только для документации в программе. Специальная форма строки комментария, содержащая литеру / (дробная черта) в поле индикатора строки и любые литеры из набора литер машины в полях А и В, вызывают переход на следующую страницу перед печатью комментария.
    Строка литер - последовательность смежных литер, образущая слово Кобола, литерал, строку литер шаблона или статью-комментарий (ч.4, п.4.2.2.1).
    Строка отчета - часть страницы, представляющая один горизонтальный ряд позиций литер. Каждая позиция литеры строки отчета выровнена по вертикали с соответствующей позицией литеры строки отчета, находящейся над ней. Строки отчета нумеруются от 1, изменяясь на 1, начиная сверху. Термин является синонимом строки.
    Структура данных внутри записи - полный набор групповых и элементарных данных записи, определяемый последовательным подмножеством статей описания данного, описывающих эту запись. Эти статьи описания данного включают все статьи с номером уровня, большим номера уровня первой статьи, описывающей структуру данных внутри записи.
    Субъект статьи - операнд или зарезервированное слово, указанное непосредственно после индикатора уровня или номера уровня в статье раздела данных.
    СУГО - система управления генератором отчетов; обеспечиваемая реализацией система управления времени выполнения, которая осуществляет построение отчетов.
    СУМП - система управления массовой памятью; система управления вводом-выводом, которая управляет обработкой файлов в массовой памяти.
    Счетчик - данное, используемое для хранения чисел или представлений чисел в виде, позволяющем эти числа увеличивать или уменьшать на значение другого числа, или изменять, или устанавливать в нуль или в произвольное положительное или отрицательное значение.
    LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) - специальный регистр, значение которого указывает текущую позицию в теле страницы.
    Счетчик суммы - числовое данное со знаком, учреждаемое фразой SUM (СУММА) в секции отчетов раздела данных. Счетчик суммы используется системой управления генератором отчетов для хранения результатов операций суммирования, производимых при генерации отчета.
    Таблица - набор логически следующих друг за другом данных, которые определены в разделе данных Кобол-программы с помощью фразы OCCURS (ПОВТОРЯЕТСЯ).
    Текущая запись - запись, доступная в области записи, соответствующей файлу.
    Тело страницы - часть логической страницы, в которой могут быть представлены печатаемые строки и (или) оставлены пустые строки (ч.7, п.3.7).
    Терминал - источник передачи в очередь или получатель передачи из очереди.
    Том - отдельная часть запоминающей среды, размеры которой определяются реализацией и которая может содержать часть файла, весь файл или несколько файлов. Термин является синонимом термина катушка.
    Убывающий ключ - ключ, по значениям которого данное упорядочено в соответствии с правилами для сравнения данных от наибольшего до наименьшего значения ключа.
    Указатель позиции файла - логическое понятие, содержащее значение текущего ключа в ключе ссылки для индексного файла, или номер текущей записи для последовательного файла, или относительный номер текущей записи для относительного файла, или указывающее, что следующей логической записи не существует, или что число значащих цифр в относительном номере записи больше размера относительного ключа, или что необязательный входной файл отсутствует, или что уже существует условие AT END (В КОНЦЕ), или что не установлена существующая следующая запись.
    Указатель текущего тома - логическое понятие, указывающее текущий том последовательного файла.
    I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) - имя параграфа раздела оборудования, в котором указаны требования рабочей программы к точкам перепрогона, совместному использованию общих областей несколькими файлами и размещению нескольких файлов на одном устройстве ввода-вывода.
    FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) - имя параграфа раздела оборудования, в котором объявляются имена файлов данных для конкретной исходной программы.
    Управляемая группа - набор групп тела отчета, представляемый для данного значения управляющего данного или в конце отчета FINAL (ПО КОНЦУ). Каждая управляемая группа может начинаться группой управляемый заголовок, заканчиваться группой управляемая концовка и содержать в себе группы фрагмент.
    Управляемая концовка - группа отчета, представляемая в конце управляемой группы, в которую она входит.
    Управляемый заголовок - группа отчета, представляемая в начале управляемой группы, в которую она входит.
    Управляющее данное - данное, изменение значения которого вызывает прерывание управления.
    Управляющее имя данного - имя данного, указанное во фразе CONTROL (УПРАВЛЕНИЕ) и относящееся к управляющему данному.
    Уровень прерывания управления - относительная позиция в иерархии управления, на которой встретилось самое старшее из обнаруженных прерываний управления.
    Условие - состояние программы во время ее выполнения, для которого можно определить значение истинности. Термин "условие" (условие-1, условие-2, ...), появляющийся в спецификациях языка или в ссылках общего формата, соответствует условному выражению, для которого может быть определено значение истинности и которое состоит из простого условия или комбинированных условий, представляющих синтаксически правильные комбинации простых условий, знаков логических операций и скобок.
    Условие "в конце" - условие, имеющее место:
    (1) если при выполнении оператора READ (ЧИТАТЬ) для файла с последовательным доступом не существует следующей логической записи в файле или если количество значащих цифр в относительном номере записи больше размера относительного ключа, или отсутствует входной необязательный файл;
    (2) если при выполнении оператора RETURN (ВЕРНУТЬ) для соответствующего сортируемого или сливаемого файла не существует следующей логической записи;
    (3) если при выполнении оператора SEARCH (ИСКАТЬ) операция поиска заканчивается и ни одно из условий, указанных в соответствующих вариантах WHEN (КОГДА), не удовлетворяется.
    Условие знака - выражение, для которого может быть определено значение истинности того, что алгебраическое значение данного или арифметического выражения меньше нуля, больше нуля или равно нулю.
    Условие имени-условия - выражение, для которого может быть определено значение истинности того, что значение условной переменной является одним из значений, соотнесенных имени-условия, соответствующему этой условной переменной.
    Условие класса - выражение, для которого может быть определено значение истинности того, что значение данного полностью буквенное или полностью числовое или состоит исключительно из литер, указанных в определении имени-класса.
    Условие конфликтных свойств файла - имела место неуспешная попытка выполнить операцию ввода-вывода для файла и указанные в программе свойства этого файла не совпадают с фиксированными свойствами файла.
    Условие отношения - выражение, для которого может быть определено значение истинности того, что значение арифметического выражения, данного нечислового литерала или имени-индекса находится в определенном отношении со значением другого арифметического выражения, данного, нечислового литерала или имени-индекса (см. знак операции отношения).
    Условие INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) - условие, возникающее во время выполнения, если значение ключа, соотнесенного индексному или относительному файлу, определяется как ошибочное.
    Условие состояния переключателя - выражение, для которого может быть определено значение истинности того, что определенный реализацией переключатель, который может находиться в одном из состояний "включено" или "выключено", установлен в определенное состояние.
    Условная переменная - данное, одному или нескольким значениям которого соотнесено имя условия.
    Условная фраза - условная фраза; определяет действие, которое должно быть выполнено при определении значения истинности условия, получаемого в результате выполнения условного оператора.
    Условное выражение - простое или сложное условие, указанное в операторах EVALUATE (ОЦЕНИТЬ), IF (ЕСЛИ), PERFORM (ВЫПОЛНИТЬ) или SEARCH (ИСКАТЬ) (см. простое условие; сложное условие).
    Условный оператор - оператор, указывающий, что должно быть определено значение истинности условия и что последующие действия рабочей программы зависят от этого значения истинности. Условные операторы приведены в ч.4, п.6.4.2.
    Устаревший элемент - элемент языка Кобол, который предполагается удалить из языка в следующей редакции стандарта языка Кобол.
    Уточненное имя данного - идентификатор, состоящий из имени данного, за которым следует одна или более пар из связки OF или IN (ИЗ) и последующего уточнителя имени данного.
    Уточнитель:
    (1) Имя-данного или имя, связанное с индикатором уровня, которое используется в ссылках либо вместе с другим именем-данного, подчиненным уточнителю, либо вместе с именем-условия.
    (2) Имя секции, которое указывается в ссылках на имя параграфа, содержащееся в этой секции.
    (3) Имя-библиотеки, используемое в ссылках на имя текста, связанного с этой библиотекой (ч.4, п.4.3.8.1).
    Файл - совокупность логических записей.
    Файл массовой памяти - совокупность записей, соотнесенных к среде массовой памяти.
    Файл отчетов - выходной файл, статья описания которого содержит фразу REPORT (ОТЧЕТ). Файл отчетов состоит из записей, записанных под управлением системы управления генератором отчетов.
    Физическая запись - термин является синонимом блока.
    Физическая страница - понятие, зависящее от устройства оборудования и определяемое реализацией.
    Фиксированные свойства файла - информация о файле, формируемая во время создания файла и которая не может в дальнейшем изменяться во время существования файла. Эти свойства включают организацию файла (последовательную, относительную или индексную), основной ключ записи, дополнительные ключи записи, набор кодов, минимальный или максимальный размер записи, тип записи (фиксированная или переменная), основную последовательность ключей для индексных файлов, блокирующий фактор, литеру заполнитель и ограничитель записи.
    Формат - определенное упорядочение набора данных.
    Формат представления - формат, который обеспечивает стандартный способ описания исходных Кобол-программ.
    Фраза - упорядоченный набор последовательных строк литер Кобола, описывающих свойства в статье или часть оператора Кобола.
    Фраза данных - фраза статьи описания данного раздела данных, описывающая определенное свойство данного.
    Фраза оборудования - фраза, которая указана как часть статьи раздела оборудования.
    Фраза отчета - фраза в секции отчетов раздела данных, которая указана в статье описания отчета или статье описания группы отчета.
    Фраза файла - фраза, указанная в разделе данных как часть статьи описания файла и статьи описания сортируемого-сливаемого файла.
    Целое - числовой литерал или числовое данное, которое не содержит ни одной позиции литеры справа от подразумеваемой десятичной точки. Термин "целое", указанный в общих форматах, не должен представлять числовое данное или значение, имеющее знак или равное нулю, если это не оговорено явно правилами данного формата.
    Цифровая литера - литера, принадлежащая следующему набору цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
    Число сообщений - счетчик числа завершенных сообщений, имеющихся в указанной очереди сообщений.
    Числовое данное - данное, описание которого ограничивает представление его значения литерами цифр; данное со знаком может содержать также +, - или другое представление знака числа.
    Числовой литерал - литерал, состоящий из одной или более цифровых литер, который может также содержать десятичную точку или знак числа либо и то и другое. Десятичная точка не должна быть самой правой литерой. Если указан знак числа, он должен быть самой левой литерой.
    Элемент таблицы - одно из набора повторяющихся данных, составляющих таблицу.
    Элементарное данное - данное, которое рассматривается как логически неделимое.
    Явная десятичная точка - физическое представление позиции десятичной точки в данном, использующее одну из литер, обозначающих десятичную точку в Коболе: "." (точку) или "," (запятую).
    Явный ограничитель области действия - зарезервированное слово, которое заканчивает область действия определенного оператора раздела процедур.
    В английской нотации литеры русского алфавита не являются буквами.
    Буквенная литера - буква или пробел.
    Буквенно-цифровая литера - любая литера из набора литер машины.
    Валютный знак - литера из набора литер Кобола, представляющая обозначение валютной единицы, принятое в Коболе.
    Валютный символ - литера, определенная фразой CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) для представления символа валютной единицы. Если в исходной Кобол-программе нет фразы CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК), валютный символ идентичен валютному знаку.
    Вариант - упорядоченный набор из одной или более строк литер Кобола, образующий часть оператора Кобола или часть фразы Кобола.
    Верхнее поле - пустое поле, предшествующее телу страницы.
    Внешнее данное - данное, описанное как часть внешней записи в одной или нескольких программах единицы исполнения и на которое можно ссылаться из любой программы, в которой оно описано.
    Внешние данные - данные, описанные в программе как внешние данные, и внешние определители файлов.
    Внешний определитель файла - определитель файла, доступный одной или нескольким объектным программам единицы исполнения.
    Внешний переключатель - устройство оборудования или программное средство, определяемое и именуемое реализацией, которое используется для указания одного из двух альтернативных состояний.
    Внешняя запись данных - логическая запись, описанная в одной или нескольких программах единицы исполнения, на составляющие данные которой можно ссылаться из любой программы, в которой они описаны.
    Внутреннее данное - данное, описанное только в одной программе единицы исполнения. Внутреннее данное может иметь глобальное имя.
    Внутренние данные - данные, описанные в программе, за исключением всех внешних данных и внешних определителей файла. Данные, описанные в секции связи программы, рассматриваются как внутренние данные.
    Внутренний набор литер - определенный реализацией набор литер, допустимых для машины, указанной в параграфе OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА).
    Внутренний определитель файла - определитель файла, доступный только одной объектной программе единицы исполнения.
    Внутренняя основная последовательность - определенная реализацией основная последовательность, принятая для машины, указанной в параграфе OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА).
    Возрастающий ключ - ключ, по значениям которого данные упорядочены в соответствии с правилами сравнения данных от наименьшего до наибольшего значения ключа.
    Время выполнения - время, в которое происходит выполнение объектной программы.
    Время компиляции - время, в которое происходит компиляция исходной Кобол-программы в объектную программу.
    Входной файл - файл, открытый в режиме ввода.
    Входной-выходной файл - файл, открытый в режиме ввода-вывода.
    Вызываемая программа - программа, являющаяся объектом оператора CALL (ВЫЗВАТЬ), объединяемая во время выполнения с вызывающей программой для образования единицы исполнения.
    Вызывающая программа - программа, выполняющая оператор CALL (ВЫЗВАТЬ) по отношению к другой программе.
    Выражение - арифметическое или условное выражение.
    Выходной файл - файл, открытый в режиме вывода или в режиме дополнения.
    Глагол - слово, обозначающее действие, которое нужно произвести компилятору Кобола или объектной программе.
    Глобальное имя - имя, объявленное только в одной программе, но на которое можно ссылаться из этой программы и из любой программы, содержащейся в ней. Глобальными именами могут быть имена-условий, имена-данных, имена-файлов, имена-записей, имена-отчетов и некоторые специальные регистры (ч.10, пп.1.3.8.2, 4.2.4, 4.4.4).
    Группа отчета - порция отчета, описанная в секции отчетов раздела данных статьей с номером уровня 01 и подчиненными ей статьями.
    Группа тела отчета - общее имя для группы отчета типа DETAIL (ФРАГМЕНТ), CONTROL FOOTING (УПРАВЛЯЕМАЯ КОНЦОВКА) или CONTROL HEADING (УПРАВЛЯЕМЫЙ ЗАГОЛОВОК).
    Групповое данное - данное, состоящее из подчиненных данных.
    Данное - единица данных (за исключением литералов), определенная Кобол-программой.
    Данное-источник - данное, идентификатор которого указан во фразе SOURCE (ИСТОЧНИК) и которое поставляет значение печатаемого данного.
    Декларативное предложение - управляющее компиляцией предложение, состоящее из единственного оператора USE (ИСПОЛЬЗОВАТЬ), который заканчивается точкой с последующим пробелом.
    Декларативы - набор из одной или более секций специального назначения, записанных в начале раздела процедур; первой из этих секций предшествует ключевое слово DECLARATIVES (ДЕКЛАРАТИВЫ), а за последней из них следуют ключевые слова END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ). Каждая из этих секций определяется заголовком секции, за которым следует управляющий компиляцией оператор USE (ИСПОЛЬЗОВАТЬ) и далее нуль, один или несколько параграфов.
    Дередактирование - логическое удаление всех литер редактирования из числового редактируемого данного с тем, чтобы получить это значение как числовое нередактируемое.
    Динамический доступ - метод доступа, при котором отдельные логические записи могут быть получены из файла или помещены в файл массовой памяти непоследовательным образом и могут быть получены из файла последовательным образом в области действия одного и того же оператора OPEN (ОТКРЫТЬ) (см. произвольный доступ; последовательный доступ).
    Дополнительный ключ записи - ключ, отличный от основного ключа записи, значение которого идентифицирует запись в индексном файле.
    Единица исполнения - множество из одной или нескольких программ, которые функционируют во время выполнения как одно целое для обеспечения решения проблемы.
    Заголовок конца программы - комбинация слов, заканчивающаяся разделителем точка и указывающая конец исходной Кобол-программы. Заголовок конца программы имеет вид:
    END PROGRAM имя-программы.
    КОНЕЦ ПРОГРАММЫ имя-программы.
    Заголовок отчета - группа отчета, которая представляется только в начале отчета.
    Заголовок параграфа - зарезервированное слово, за которым непосредственно следует разделитель точка и которое указывает начало параграфа в разделах идентификации и оборудования. Допустимыми заголовками параграфов являются:
    Адресат - символическое обозначение получателя передач из очереди.
    Арифметическая операция - действие, вызываемое выполнением арифметического оператора или вычислением арифметического выражения, имеющее результатом математически правильное значение.
    Арифметический оператор - оператор, вызывающий выполнение арифметической операции. Арифметическими операторами являются ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) и SUBTRACT (ОТНЯТЬ).
    Арифметическое выражение - идентификатор элементарного числового данного, числовой литерал или идентификаторы и литералы, разделенные знаками арифметических операций, или два арифметических выражения, разделенные знаком арифметической операции, или арифметическое выражение, заключенное в скобки.
    Библиотечный текст - последовательность слов текста, строк комментария, разделителя пробел или разделителя ограничитель псевдотекста в библиотеке Кобола.
    Блок - физическая порция данных, которая обычно состоит из одной или нескольких логических записей. Для файлов массовой памяти блок может содержать часть логической записи. Размер блока не зависит ни от размера файла, внутри которого он содержится, ни от размера логической записи (записей), которая либо содержится в блоке, либо перекрывает блок (ч.4, п.4.3.1.2). Термин является синонимом термина физическая запись.
    Буква - в русской нотации литера, принадлежащая одному из следующих двух множеств:
  7. Часть 4.Основные понятия

  8. 1.ВВЕДЕНИЕ
    Понятия языка и правила, описанные ниже, относятся к полному языку Кобол. Если отдельный уровень модуля не допускает какие-либо из этих понятий, то в части, описывающей этот модуль, указываются соответствующие ограничения. Всюду в настоящем документе определения, относящиеся к высшему уровню, выделены рамкой. Следует также отметить, что ограничения, содержащиеся в одном модуле, могут, вообще говоря, затрагивать другие модули. Например, на уровне 1 ядра недопустимы уточнения, поэтому любой модуль, используемый с уровнем 1 ядра, должен иметь такое же ограничение. Приведенные для отдельных операторов в настоящем документе схемы алгоритмов иллюстрируют логику соответствующих операторов и не являются указаниями о способах их реализации.
    2.ОБОЗНАЧЕНИЯ, ИСПОЛЬЗУЕМЫЕ В ФОРМАТАХ И ПРАВИЛАХ
    2.1.Определение общего формата
    2.1.1.Элементы
    Элементы, составляющие фразу или оператор, представляются: словами, составленными из прописных букв; словами, составленными из строчных букв; номерами уровней; квадратными и фигурными скобками, связками и специальными литерами.
    2.1.2.Слова
    Все подчеркнутые слова из прописных букв называются ключевыми словами и обязательны при использовании форматов, частями которых они являются. Неподчеркнутыми словами из прописных букв пользоваться не обязательно; их можно не включать в исходную программу. Слова из прописных букв, независимо от подчеркивания, должны быть написаны правильно.
    Слова из строчных букв в общем формате являются общими терминами, используемыми для представления слов Кобола, литералов, строк литер шаблона, статей-комментариев или цельных синтаксических конструкций, задаваемых пользователем. При повторении общих терминов в общем формате к каждому из них добавляется номер или буква для идентификации этих терминов при объяснении или обсуждении.
    2.1.3.Номера уровней
    Если определенные номера уровней входят в форматы статей раздела данных, то именно они должны быть использованы в соответствующих статьях в Кобол-программе. В этом документе пары цифр 01, 02, …, 09 используют для задания номеров уровня от 1 до 9.
    2.1.4.Квадратные, фигурные скобки и указатели выбора
    Если часть общего формата заключена в квадратные скобки [ ], то один из вариантов, заключенных в скобки, может быть явно указан или эта часть общего формата может быть опущена.
    Если часть общего формата заключена в фигурные скобки { }, то один из вариантов, заключенных в скобки, должен быть указан явно или неявно выбран.
    Если выражение в фигурных скобках содержит только зарезервированные слова, не являющиеся ключевыми, то такой вариант является вариантом по умолчанию, если только один из остальных вариантов не будет явно указан.
    Указатели выбора {| |}, заключающие часть общего формата, означают, что должен быть сделан выбор одного или нескольких из заключенных в них вариантов, но каждый из вариантов может быть указан только один раз.
    Варианты в общем формате или части общего формата указываются вертикально расположенными альтернативными возможностями, квадратными и фигурными скобками или указателями выбора, или комбинацией скобок и указателей выбора. Вариант выбирается определением одной из указанных альтернативных возможностей или определением однозначной комбинации возможностей из ряда квадратных, фигурных скобок или указателей выбора.
    2.1.5.Многоточие
    В тексте, за исключением форматов, многоточие (...) указывает на пропуск слова или слов, если такой пропуск не нарушает понимание текста. Это общепринятое значение многоточия и его назначение становится очевидным из контекста.
    В общем формате многоточие представляет позицию, в которой допускается повторение. Часть формата, которая может повторяться, определяется следующим образом:
    если в формате встречается многоточие, берется непосредственно слева от многоточия скобка ], } или |} и при продолжении просмотра справа налево определяется логически соответствующая [, { или {|; многоточие относится к части формата между определенной таким образом парой ограничителей.
    2.1.6.Пунктуация в формате
    Разделительная запятая и точка с запятой могут использоваться везде, где используется разделительный пробел в форматах (п.4.2.1 настоящей части). В исходной программе эти разделители взаимозаменяемы.
    Разделительная точка, используемая в форматах, имеет статус зарезервированного слова.
    2.1.7.Использование слов-специальных литер в форматах
    Слова-специальные литеры +, -, >, , >=, <= в форматах не подчеркиваются, однако они обязательны.
    Общий формат - это определенное упорядочение элементов фразы или оператора. Элементы фразы или оператора определяются ниже. В настоящем документе формат рассматривается в связи с информацией, определяющей фразы или операторы. Если допускается более одного определенного упорядочения, общий формат разделяется на перенумерованные форматы. Фразы должны записываться в последовательности, указываемой общими форматами. Если используются необязательные фразы, они должны подчиняться указанной последовательности. В определенных случаях, явно устанавливаемых правилами, фразы могут записываться в последовательности, отличной от указанной соответствующим форматом. Применение, требования или ограничения формулируются в виде правил.
    3.ПРАВИЛА
    3.1.Синтаксические правила
    Синтаксическими правилами являются такие правила, которые определяют или объясняют порядок расположения слов или элементов при образовании более крупных языковых конструкций, таких как фразы или операторы. Синтаксические правила также накладывают или снимают ограничения на отдельные слова или элементы.
    Эти правила используются для определения или объяснения того, как должен быть записан оператор, то есть каков порядок элементов в нем и каковы ограничения или расширения на представление каждого элемента.
    3.2.Общие правила
    Общими правилами являются такие правила, которые определяют или объясняют смысл элементов или их взаимосвязь; они используются для определения или объяснения семантики операторов и действий, оказываемых ими на выполнение или компиляцию.
    4.ПОНЯТИЯ ЯЗЫКА
    4.1.Набор литер
    Основной и неделимой единицей языка является литера. Набор литер, используемых при образовании строк литер Кобола и разделителей, определен в глоссарии (см. ч.3). Для нечисловых литералов, статей-комментариев и строк комментария набор литер расширяется и включает весь набор литер машины.
    Литеры, допустимые для каждого типа строк литер и в качестве разделителей, определены в п.4.2 настоящей части.
    Некоторые литеры, составляющие набор литер Кобола, не могут быть представлены графически литерами национального или интернационального стандарта на набор литер. В таком случае допускается замена непредставимых литер.
    Если набор литер содержит меньше 72 литер, недостающие литеры могут быть заменены парами литер. Такая замена рассматривается как устаревшее средство в этом варианте стандарта и будет исключена при следующем пересмотре стандарта.
    4.2.Структура языка
    4.2.1.Разделители
    Разделителями является цепочка из одной или нескольких литер. Правила образования разделителей следующие:
    (1) литера пунктуации пробел является разделителем. Всюду, где пробел используется в качестве разделителя или части разделителя, может стоять несколько пробелов. Все пробелы, следующие непосредственно за разделителями: запятой, точкой с запятой или точкой, являются частью этих разделителей и не рассматриваются как отдельный разделительный пробел;
    (2) литеры пунктуации запятая (если она не используется в строке литер шаблона) и точка с запятой, за которыми следует пробел, являются разделителями и могут использоваться везде, где используется разделитель пробел. Они могут использоваться для удобочитаемости программы;
    (3) литера пунктуации точка, за которой следует пробел, является разделителем (разделитель точка). Она должна использоваться только для указания конца предложения или там, где это указано в форматах;
    (4) литеры пунктуации правая и левая скобки являются разделителями. Скобки могут проставляться (при соблюдении баланса левых и правых скобок) как ограничители в арифметических выражениях, для условий, индексов и модификаторов ссылки;
    (5) литера пунктуации " (кавычки) является разделителем. Непосредственно перед открывающими кавычками должен стоять пробел или левая скобка; непосредственно за закрывающими кавычками, соответствующими открывающим кавычкам, должен - стоять один из разделителей: пробел, запятая, точка с запятой, точка или правам скобка;
    (6) ограничители псевдотекста являются разделителями. Непосредственно перед открывающим ограничителем псевдотекста должен стоять пробел; за закрывающим ограничителем псевдотекста должен стоять один из разделителей: пробел, запятая, точка с запятой или точка.
    Ограничители псевдотекста могут использоваться только в паре, ограничивая псевдотекст;
    (7) литера пунктуации двоеточие (:) является разделителем и должна использоваться только там, где это указано в общих форматах;
    (8) разделитель пробел может быть проставлен по желанию непосредственно перед любым разделителем, однако следует учитывать:
    а) правила, определенные форматом представления (п.7 настоящей части);
    б) в случае разделителя "закрывающая кавычка" предшествующий пробел рассматривается как часть нечислового литерала, а не как разделитель;
    в) в случае открывающего ограничителя псевдотекста предшествующий пробел необходим;
    (9) разделитель пробел может по желанию проставляться непосредственно за любым разделителем, за исключением открывающих кавычек, для которых пробел рассматривается как часть нечислового литерала, а не как разделитель.
    Любая литера пунктуации, которая используется как часть спецификации строки литер шаблона или числового литерала, рассматривается не как литера пунктуации, а как символ, используемый в спецификации строки литер шаблона или числового литерала. Строки литер шаблона ограничиваются только разделителями: пробелом, запятой, точкой с запятой или точкой.
    Правила, установленные для образования разделителей, не применяются к литерам, которые составляют нечисловые литералы, статьи-комментарии или строки комментария.
    4.2.2.Строки литер
    4.2.2.1.Слова Кобола
    4.2.2.1.1.Слова, определенные пользователем
    Словом, определенным пользователем, является слово Кобола, задаваемое пользователем в соответствии с форматом фразы или оператора. Каждая литера такого слова выбирается для английской нотации из набора литер А, ..., Z, 0, 1, ..., 9, - (для русской нотации из набора литер А, ..., Я, D, F, G, I, J, L, N, Q, R, S, U, V, W, Y, Z, 0, 1, 2, ..., 9, -). Слово не может начинаться или заканчиваться дефисом. Имеются следующие типы слов, определенных пользователем:
    Словом Кобола является строка литер, состоящая не более чем из 30 литер и образующая слово, определенное пользователем, системное имя или зарезервированное слово. Каждая литера слова Кобола принадлежит набору букв, цифр и дефиса. Дефис не может быть первой или последней литерой слова. Каждая строчная буква рассматривается как эквивалент соответствующей ей прописной буквы. В исходной программе зарезервированные слова и слова, определенные пользователем, образуют непересекающиеся множества; системные имена и слова, определенные пользователем, образуют пересекающиеся множества. Одно и то же слово Кобола может использоваться как системное имя и как слово, определенное пользователем, внутри исходной программы. Отдельное появление такого слова Кобола классифицируется контекстом статьи или фразы, в котором оно появляется.
    Строка литер есть литера или последовательность смежных литер, которые образуют литерал, слово Кобола, строку литер шаблона или статью-комментарий. Строка литер ограничивается разделителями.
    Отдельные литеры языка связываются в строки литер и разделители. Разделители определяют границы строк литер. Допускается несколько идущих подряд разделителей. Последовательность строк литер и разделителей образует текст исходной программы.
    1.Имя алфавита;
    2.Имя библиотеки;
    3.Имя данного;
    4.Имя записи;
    5.Имя индекса;
    6.Имя класса;
    7.Имя коммуникации;
    8.Имя отчета;
    9.Имя параграфа;
    10.Имя программного модуля;
    11.Имя программы;
    12.Имя секции;
    13.Имя текста;
    14.Имя условия;
    15.Имя файла;
    16.Мнемоническое имя;
    17.Номер сегмента;
    18.Номер уровня;
    19.Символическая литера.
    Внутри заданной исходной программы, за исключением любой содержащейся в ней программы, определенные пользователем слова группируются в следующие непересекающиеся множества:
    1.Имена алфавитов;
    2.Имена библиотек;
    3.Имена индексов;
    4.Имена классов;
    5.Имена коммуникаций;
    6.Имена отчетов;
    7.Имена параграфов;
    8.Имена программных модулей;
    9.Имена программ;
    10.Имена секций;
    11.Имена текстов;
    12.Имена условий, имена данных, имена записей;
    13.Имена файлов;
    14.Мнемонические имена;
    15.Символические литеры.
    Все слова, определенные пользователем, за исключением номеров сегментов и номеров уровней, могут принадлежать только одному из этих непересекающихся множеств. Кроме того, все слова, определенные пользователем, в данном непересекающемся множестве либо не должны дублироваться, либо должны допускать установление однозначности, определяемое правилами однозначности ссылок (п.4.3.8 настоящей части).
    За исключением имени параграфа, имени секции, номера уровня и номера сегмента, все слова, определенные пользователем, должны содержать по крайней мере одну буквенную литеру. Номера сегментов и номера уровней могут повторяться: представление номера сегмента или номера уровня может совпадать с любым другим номером сегмента или номером уровня.
    4.2.2.1.1.1.Имя условия
    Имя условия - имя, поставленное в соответствие специальному значению, множеству значений или области значений внутри полного множества значений, допустимых для некоторого имени данного. Само имя данного называется условной переменной.
    Имена условий могут быть определены в разделе данных или в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования, где переключателям, определенным реализацией, должно быть приписано имя условия для состояния "включено" или "выключено", или для того и другого.
    Имя условия используется для сокращения записи условия отношения, определяющего, что соответствующая условная переменная равна одному из множества значений, предписанных этому имени условия. Имя условия используется также в оператора SET (УСТАНОВИТЬ), указывая, что соответствующее значение должно быть помещено в условную переменную.
    4.2.2.1.1.2.Мнемоническое имя
    Мнемоническое имя - это слово, определенное пользователем, которое ставится в соответствие имени реализации. Это соответствие устанавливается в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования (ч.6. п.4.5).
    4.2.2.1.1.3.Имя параграфа
    Именем параграфа является слово, которое называет параграф в разделе процедур. Имена параграфов эквивалентны тогда и только тогда, когда они составлены из одной и той же последовательности одного и того же количества цифр и (или) других литер.
    4.2.2.1.1.4.Имя секции
    Имя секции - слово, которое называет секцию в разделе процедур. Имена секций эквивалентны только тогда, когда они составлены из одной и той же последовательности одного и того же количества цифр и (или) других литер.
    4.2.2.1.1.5.Другие имена, определяемые пользователем
    4.2.2.1.2.Системные имена
    Системным именем является слово Кобола, которое используется для связи с операционной средой. Правила для образования системных имен определяются реализацией с тем ограничением, что каждая литера, используемая при образовании системного имени, должна быть выбрана из набора литер для слов, определенных пользователем (см. п.4.2.2.1.1 настоящей части), причем "-" не может быть первой или последней литерой системного имени.
    Имеются следующие типы системных имен:
    Спецификации всех других типов слов, определяемых пользователем (см. ч.3).
    1.Имя машины;
    2.Имя реализации;
    3.Имя языка.
    В каждой реализации эти три типа системных имен образуют непересекающиеся множества; отдельное системное имя может принадлежать только одному из них. Для каждого из перечисленных типов системных имен имеется определение (см. ч.3).
    4.2.2.1.3.Зарезервированные слова
    Зарезервированным словом является слово Кобола из определенного списка слов, которые могут быть использованы в исходной Кобол-программе, но которые не могут использоваться как слова, определяемые пользователем, или как системные имена. Зарезервированные слова могут использоваться только в соответствии с общими форматами (п.8 настоящей части).
    Имеются следующие типы зарезервированных слов:
    1.Обязательные слова;
    2.Необязательные слова;
    3.Слова специального назначения.
    4.2.2.1.3.1.Обязательные слова
    Обязательное слово - это слово, вхождение которого обязательно при использовании формата, содержащего это слово. Имеются два типа обязательных слов:
    (1) ключевые слова. В каждом формате такие слова записаны прописными буквами и подчеркнуты;
    (2) слова-специальные литеры. Это знаки арифметических операций и литеры отношения.
    4.2.2.1.3.2.Необязательные слова
    Внутри каждого из форматов слова, записанные прописными буквами и не подчеркнутые, называются необязательными и могут включаться в текст по желанию пользователя для придания тексту удобочитаемости. Наличие или отсутствие необязательного слова внутри формата не изменяет семантики Кобол-программы, в которой оно используется.
    4.2.2.1.3.3.Слова специального назначения
    Имеются два типа слов специального назначения:
    1.Специальные регистры;
    2.Стандартные константы.
    4.2.2.1.3.3.1.Специальные регистры
    Для ссылок на специальные регистры используются определенные зарезервированные слова. Специальными регистрами являются фиксированные поля памяти вычислительной машины, которые главным образом используются для запоминания информации, получаемой при выполнении специфических функций Кобола. Если не оговорено противное, для каждой программы создается один специальный регистр каждого типа. Специальный регистр может использоваться в общих форматах всюду, где используются имена данных или идентификаторы, принадлежащие той же категории, что и специальный регистр, если не оговорено противное.
    Если разрешаются уточнения, специальные регистры при необходимости могут уточняться для обеспечения однозначности (п.4.3.8.1 настоящей части).
    Специальными регистрами являются следующие:
    1.DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) (ч.15, п.1.3.2);
    2.LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) (ч.7, п.1.3.8);
    3.LINE-COUNTER (СЧЕТЧИК-СТРОК) (ч.13, п.1.2.3);
    4.PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) (ч.13, п.1.2.2).
    4.2.2.1.3.3.2.Стандартные константы
    4.2.2.2.Литералы
    Литерал - строка литер, значение которой определяется упорядоченным набором литер, из которых она составлена, или спецификацией зарезервированного слова, являющегося стандартной константой. Каждый литерал принадлежит к одному из двух видов: числовому или нечисловому.
    4.2.2.2.1.Нечисловые литералы
    Нечисловой литерал определяется как ограниченная кавычками слева и справа строка литер. Реализация должна допускать длину литерала от одной до 160 литер. Длина нечислового литерала относится к его представлению в объектной программе.
    4.2.2.2.1.1.Общий формат
    "{литера-1} ..."
    4.2.2.2.1.2.Синтаксические правила
    (1) Литера-1 может быть любой литерой из набора литер машины.
    (2) Если литера-1 должна представлять литеру кавычек, для представления одной литеры кавычек должны использоваться две следующие друг за другом литеры кавычек.
    4.2.2.2.1.3.Общие правила
    (1) Значением нечислового литерала в рабочей программе является значение, представляемое литерой-1.
    (2) Ограничивающие нечисловой литерал кавычки не являются частью значения нечислового литерала.
    (3) Все нечисловые литералы относятся к буквенно-цифровой категории.
    4.2.2.2.2.Числовые литералы
    Числовой литерал определяется как строка литер, состоящая из цифр от 0 до 9, знака плюс, знака минус и десятичной точки. Реализация должна разрешать длину числового литерала от 1 до 18 цифр. Правила образования числового литерала следующие:
    (1) литерал должен содержать по меньшей мере одну цифру;
    (2) литерал не должен содержать более одной литеры знака.
    Если указан знак, то он должен быть самой левой литерой в литерале. Если литерал не имеет знака, то он является положительным;
    (3) литерал не должен содержать более одной десятичной точки. Десятичная точка рассматривается как подразумеваемая десятичная точка и может занимать в литерале любую позицию, кроме самой правой. Если литерал не содержит десятичной точки, то он является целым числом.
    Литерал, составленный по правилам для образования числовых литералов, но заключенный в кавычки, является нечисловым и обрабатывается компилятором как нечисловой;
    (4) значением числового литерала является алгебраическая величина, представленная литерами числового литерала. Каждый числовой литерал относится к числовой категории (ч.6, п.5.9.1).
    Размер числового литерала в терминах литер стандартного формата данных равен количеству составляющих его цифр.
    4.2.2.2.3.Значения стандартных констант
    Значения стандартных констант генерируются компилятором. Пользователь может ссылаться на них посредством зарезервированных слов, приведенных ниже. Эти слова при использовании их в качестве стандартных констант не должны заключаться в кавычки. Единственная и множественная форма стандартных констант эквивалентны и могут при употреблении заменяться одна другой.
    Значения стандартных константы зарезервированные слова, используемые для обращения к ним, следующие:
    (1) [ALL] ZERO, [ALL] ZEROES ([ВСЕ] НУЛЬ, [ВСЕ] НУЛИ) представляют числовое значение 0 или одну или более литер 0 из набора литер машины;
    (2) [ALL] SPACE, [ALL] SPACES ([ВСЕ] ПРОБЕЛ, [ВСЕ] ПРОБЕЛЫ) представляют одну или несколько литер пробела из набора литер машины;
    (3) [ALL] HIGH-VALUE, [ALL] HIGH-VALUES ([ВСЕ] НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ, [ВСЕ] НАИБОЛЬШИЕ-ЗНАЧЕНИЯ) - везде, за исключением параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА), представляют одну или несколько литер, имеющих наибольшую порядковую позицию в программной основной последовательности;
    (4) [ALL] LOW-VALUE, [ALL] LOW-VALUES ([ВСЕ] НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ, [ВСЕ] НАИМЕНЬШИЕ-ЗНАЧЕНИЯ) - везде, за исключением параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА), представляют одну или несколько литер, имеющих наименьшую порядковую позицию в программной основной последовательности;
    (5) [ALL] QUOTE, [ALL] QUOTES ([ВСЕ] КАВЫЧКА, [ВСЕ] КАВЫЧКИ) представляет одну или более литер. Слова QUOTE, QUOTES (КАВЫЧКА, КАВЫЧКИ) не могут использоваться вместо литер кавычек в исходной программе для ограничения нечислового литерала. Например, QUOTE ABC QUOTE (КАВЫЧКА ABC КАВЫЧКА) не является правильным представлением нечислового литерала "ABC";
    (6) ALL литерал (ВСЕ литерал) представляет всю строку или часть строки, генерируемой последовательной конкатенацией литер, образующих литерал. Литерал должен быть нечисловым. Литерал не может быть стандартной константой;
    (7) [ALL] символическая-литера ([ВСЕ] символическая-литера) представляет одну или несколько литер, определяемых как значение этой символической литеры в фразе SYMBOLIC CHARACTERS (СИМВОЛИЧЕСКАЯ ЛИТЕРА) параграфа SPECIAL NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) (ч.6, п.4.5).
    Когда стандартная константа представляет собой строку из одной или нескольких литер, длина такой строки определяется компилятором из контекста согласно следующим правилам:
    (1) когда стандартная константа указана в фразе VALUE (ЗНАЧЕНИЕ) или когда стандартной константе сопоставляется другое данное, например, в случае перемещения или сравнения с некоторым данным, строка литер, представленная стандартной константой, повторяется литера за литерой вправо до тех пор, пока результирующая строка не станет равной или большей по размеру (в литерах) соответствующему данному.
    Затем результирующая строка усекается справа до размера (в литерах) соответствующего данного. Такое повторение выполняется независимо от фразы JUSTIFIED (СДВИНУТО), относящейся к этому данному.
    (2) когда стандартная константа, отличная от ALL литерал (ВСЕ литерал), не сопоставляется с другим данным, например, в случае, когда она появляется в операторах DISPLAY (ВЫДАТЬ), STOP (ОСТАНОВИТЬ), STRING (СОБРАТЬ) или UNSTRING (РАЗОБРАТЬ), ее длина равна длине строки в одну литеру;
    (3) когда стандартная константа ALL литерал (ВСЕ литерал) не сопоставляется с другим данным, ее длина равна длине литерала.
    Стандартная константа может использоваться всюду в форматах вместо литерала, за следующим исключением:
    (1) вместо числового литерала разрешается использовать только стандартную константу ZERO, ZEROS, ZEROES (НУЛЬ, НУЛИ);
    (2) сопоставление стандартной константы ALL литерал (ВСЕ литерал) при длине литерала больше одной литеры с числовым или числовым редактируемым данным рассматривается в настоящем стандарте как устаревшее средство. При следующем пересмотре стандарта оно будет исключено;
    (3) когда стандартная константа используется вместо литерала во фразе ALL литерал (ВСЕ литерал), слово ALL (ВСЕ) избыточно и используется только для удобочитаемости.
    За исключением параграфа SPECIAL-NAMES (СПЕЦИАЛЬ-НЫЕ-ИМЕНА), в исходной программе, где используются стандартные константы HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ) и LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), действительные литеры, соотнесенные с каждой стандартной константой, зависят от определенного программного алфавита, (ч.6, пп.4.4.1, 4.5).
    Каждое зарезервированное слово, которое используется для обращения к значению стандартной константы, является отдельной строкой литер, за исключением конструкций, использующих слово ALL (ВСЕ), таких как ALL литерал (ВСЕ литерал), ALL SPACES (ВСЕ ПРОБЕЛЫ) и т.п., которые состоят из двух отдельных строк литер.
    4.2.2.3.Строка литер шаблона
    Строка литер шаблона представляется определенной комбинацией набора литер Кобола, используемых в качестве символов, и валютным символом. Объяснение строки литер шаблона и правила, управляющие шаблоном, приведены ниже (ч.6, п.5.9).
    Любая литера пунктуации, используемая в строке литер шаблона, рассматривается не как знак пунктуации, а как символ спецификации строки литер шаблона.
    4.2.2.4.Статья-комментарий
    Статья-комментарий - это статья в разделе идентификации, которая может быть любой комбинацией литер из набора литер вычислительной машины. Статья-комментарий рассматривается в настоящем стандарте как устаревший элемент и будет исключена при следующем пересмотре стандарта.
    4.3.Понятие машинно-независимого описания данного
    4.3.1.Понятие логической записи
    Чтобы отделить логические характеристики данных от физических характеристик среды памяти данных, используются определенные специальные фразы или набор фраз, рассматриваемые ниже.
    Чтобы сделать данные максимально машинно-независимыми, особенности или свойства данных описываются по отношению к стандартному формату данного, а не к формату, ориентированному на оборудование. Этот стандартный формат данного ориентирован на общие применения в обработке данных и использует десятичную систему для представления чисел (независимо от основания системы счисления, используемой в машине) и остальные литеры набора литер Кобола для изображения нечисловых данных.
    4.3.1.1.Физические характеристики файла
    Физические характеристики файла относятся к представлению данных на вводе или выводе и включают такие особенности как:
    (1) группирование логических записей в пределах физических границ среды файла;
    (2) средства, с помощью которых файл может быть идентифицирован.
    4.3.1.2.Логические характеристики файла
    Логические характеристики файла представлены явным определением каждой логической единицы в самом файле. В Кобол-программе оператор ввода и вывода обращается к одной логической записи.
    Важно отметить различие между физической и логической записями. Логическая запись в Коболе - это порция связанной информации, однозначно идентифицируемой и обрабатываемой как единое целое.
    Физическая запись - это физическая единица информации, размер и способ записи которой удобен для запоминания данных на входном или выходном устройстве определенной машины. Размер физической записи зависит от оборудования и не находится в прямой связи с размером хранимого файла информации.
    Логическая запись может содержаться внутри одной физической записи или несколько логических записей могут содержаться внутри одной физической записи; в случае файлов массовой памяти логическая запись может содержаться в нескольких физических записях. Во входном языке имеются несколько методов для описания взаимосвязи логических и физических записей. После установления взаимосвязи управление доступом к логической записи, связанной с физической записью, обеспечивается взаимодействием объектной программы с предоставляемыми реализацией оборудованием и системами программного обеспечения. В этом документе ссылка на запись означает ссылку на логическую запись, если специально не оговорен термин "физическая запись".
    Понятие логической записи применимо не только к файлам данных, но распространяется также на рабочую память. Таким образом, рабочая память может быть сгруппирована в логические записи и определена последовательностью статей описания записи.
    При занесении логической записи или извлечении ее из физической записи выполняются все преобразования, требуемые указанной фразой CODE-SET (АЛФАВИТ). При необходимости добавляются или удаляются литеры заполнители. Ни одна из фраз, используемых для описания данных в логической записи, не влияет на эти преобразования.
    4.3.1.3.Понятие записи
    Описание записи состоит из ряда статей описания данных, которые описывают особенности отдельной записи. Каждая статья описания данных состоит из номера уровня, за которым следует имя, если оно требуется, и далее, при необходимости, следует ряд независимых фраз.
    4.3.2.Понятие уровня
    Понятие уровня неотъемлемо от понятия структуры логической записи. Это понятие вводится в целях описания подразделений записи для обращения к составляющим ее данным. Подразделение может быть продолжено для возможности обращения к более мелким данным.
    Неделимые составляющие записи называются элементарными данными; соответственно запись состоит из последовательности элементарных данных, либо сама запись является элементарным данным.
    Для обращения к ряду элементарных данных последние объединяются в группы, или групповые данные. Каждая группа представляет названную последовательность, включающую одно или более элементарных данных. Группы, в свою очередь, могут быть объединены в группы из двух или нескольких групп и т.д. Таким образом, элементарное данное может принадлежать более чем одной группе.
    4.3.2.1.Номера уровней
    Система номеров уровней задает организацию элементарных данных или групп данных. Записи - наиболее объемлющие данные, им присвоен номер уровня 01. Менее объемлющим данным присваиваются численно большие (не обязательно последовательные) номера уровней, не превосходящие 49. Имеются специальные номера уровней 66, 77, 88, которые являются исключением из этого правила. Каждому используемому номеру уровня в исходной программе соответствует отдельная статья.
    Группа включает в себя все группы и элементарные данные, следующие за ней, пока не встретится номер уровня, меньший или равный номеру уровня группы. Все данные, которые подчинены непосредственно некоторому групповому данному, должны описываться с одинаковым номером уровня и иметь номер уровня больший, чем номер уровня, используемый для описания этого группового данного.
    Имеется три типа статей, для которых понятие уровня не имеет силы:
    (1) статьи, описывающие элементарные данные или группы, вводимые фразой RENAMES (ПЕРЕИМЕНОВЫВАЕТ);
    (2) статьи, описывающие несвязанные данные в секциях рабочей памяти и связи;
    (3) статьи, которые описывают имена условий.
    Данным, описанным фразой RENAMES (ПЕРЕИМЕНОВЫВАЕТ) с целью перегруппировки данных, присвоен специальный номер уровня 66.
    Несвязанным данным, которые не являются подразделением других данных и сами не подразделяются, присвоен специальный номер уровня 77.
    Статьям, которые описывают имена условий, соответствующие отдельным значениям условных переменных, присвоен специальный номер уровня 88.
    4.3.3.Понятие класса данного
    Пять категорий данных (ч.6, п.5.9) сгруппированы в три класса: буквенный, числовой и буквенно-цифровой. Для буквенных и числовых данных понятия класс и категория являются синонимами. Буквенно-цифровой класс включает категории буквенно-цифровую редактируемую, числовую редактируемую и буквенно-цифровую (без редактирования). Каждое элементарное данное принадлежит одному из классов и одной из категорий. Групповые данные обрабатываются как буквенно-цифровые данные, независимо от класса элементарных данных, на которые подразделяется это групповое данное. Таблица показывает отношение между классами и категориями данных.
    4.3.4.Выбор представления литер и основания системы счисления
    Значение числового данного может быть представлено в нескольких формах, таких как двоичная или десятичная, в зависимости от оборудования. Кроме того, имеется несколько способов представления десятичных чисел. Так как эти представления являются в действительности комбинациями битов, они обычно называются двоично-кодированной десятичной формой. Выбор основания системы счисления обычно зависит от арифметических возможностей машины. Если допустима более чем одна арифметическая форма, то выбранная форма указывается фразой об использовании. Двоично-кодированная десятичная форма используется также для представления литер и символов, которые являются буквенно-цифровыми данными. Выбор надлежащей двоично-кодированной буквенно-цифровой или двоично-кодированной десятичной формы зависит от возможностей машины и ее внешней среды.
    Когда ЭВМ обеспечивает несколько значений представления данных, должен быть использован стандартный формат данных, если описание данного не оговаривает противного. Если как внешняя среда, так и машина допускают более чем одну форму представления или если внешняя среда, соответствующая данному, отсутствует, выбор оговаривается во фразе об использовании, фразе PICTURE (ШАБЛОН) и других фразах описания данных. Каждая реализация предоставляет полное объяснение возможных форм представления для ЭВМ, на которой она реализует Кобол. Метод выбора подходящей формы представления данного, используемый реализацией, позволяет программисту предвидеть и (или) управлять этим выбором.
    Данное Класс Категория
    Буквенный Буквенная
    Элементарное Числовой Числовая
    Буквенно-цифровой Числовая редактируемая, буквенно-цифровая редактируемая, буквенно-цифровая
    Неэлементарное (групповое) Буквенно-цифровой Буквенная, числовая, числовая редактируемая, буквенно-цифровая редактируемая, буквенно-цифровая

    Под размером элементарного данного или группы данных понимается число литер в представлении данного в стандартном формате данных. Выделение данных и особенности использования могут привести к различию между этим размером и действительным числом литер, необходимых для внутреннего представления.
    4.3.5.Алгебраические знаки
    Алгебраические знаки разделяются на две категории: знак числа, который относится к числовому данному и числовому литералу со знаком, и знак редактирования, который появляется в редактирующей фразе для установления знака данного.
    Фраза SIGN (ЗНАК) позволяет программисту задать предоставление знака числа. Эта фраза необязательна; если она не используется, представление знака числа определяется реализацией.
    Редактирующие знаки вставляются в данное посредством использования символов фразы PICTURE (ШАБЛОН), управляемых знаком.
    4.3.6.Стандартные правила выравнивания
    Стандартные правила для расположения значения в поле элементарного данного зависят от категории принимающего поля. Это следующие правила:
    (1) если принимающее поле описано как числовое, то:
    а) данное выравнивается по десятичной точке и помещается в принимающее поле с дополнением нулями или усечением при необходимости на каждом из его концов;
    б) когда подразумеваемая десятичная точка явно не задана, данное рассматривается так, как если бы оно имело подразумеваемую десятичную точку, расположенную непосредственно за ее самой правой литерой, и было выровнено так, как указано выше;
    (2) если принимающее данное является числовым редактируемым данным, то пересылаемое данное выравнивается по десятичной точке и дополняется нулями или усекается на каждом из концов, как указано позициями литер принимающего данного; кроме того, если это требуется редактированием, замещаются ведущие нули;
    (3) если принимающее данное буквенно-цифровое (отличное от числового редактируемого данного), буквенно-цифровое редактируемое или буквенное, пересылаемое данное помещается в принимающие позиции литер выровненным по самой левой позиции литер в данном и справа дополняется пробелами или усекается при необходимости.
    Если задана фраза JUSTIFIED (СДВИНУТО) для принимающего данного, перечисленные стандартные правила изменяются в соответствии с описанием для фразы JUSTIFIED (СДВИНУТО) (ч.6, п.5.6).
    4.3.7.Выравнивание данного для повышения эффективности объектного кода
    В некоторых вычислительных машинах память организована таким образом, что существуют естественные адресуемые границы машинной памяти, например, границы слова, полуслова, байта. Способ хранения данных определяется объектной программой и нет необходимости учитывать эти естественные границы при описании данного.
    Однако определенное использование данных (например, в арифметических операциях или при индексировании) может быть облегчено, если данные хранятся выровненными относительно естественных границ памяти. В частности, если части двух или нескольких данных расположены между соседними естественными границами или некоторая естественная граница дробит единое данное, для организации доступа к этим данным и их запоминания в рабочей программе могут потребоваться дополнительные машинные операции.
    Данные, выровненные относительно естественных границ памяти с целью избежания дополнительных машинных операций при доступе к ним, объявляются выделенными.
    Выделение может достигаться двумя путями:
    (1) применением фразы SYNCHRONIZED (ВЫДЕЛЕНО);
    (2) соответствующей естественным границам организацией данных без использования фразы SYNCHRONIZED (ВЫДЕЛЕНО).
    Каждая реализация, обеспечивающая специальные виды выравнивания, должна указывать точную интерпретацию действий, подлежащих выполнению. Использование выровненных данных в группе может быть эффективным при выполнении операторов, использующих группу в качестве операнда. Каждая реализация, обеспечивающая специальные типы выравнивания данного, должна описать воздействие неявного заполнителя и семантику оператора, использующего эту группу.
    4.3.8.Однозначность ссылок
    Каждое имя, определенное пользователем в Кобол-программе, присваивается им определенному ресурсу, который будет использоваться в решении проблемы обработки данных (см. п.4.2.2 настоящей части). Что касается использования ресурсов, оператор в Кобол-программе должен содержать ссылку, которая однозначно идентифицирует эти ресурсы.
    Для гарантии однозначности ссылки имя, определенное пользователем, можно уточнять, индексировать или модифицировать ссылку согласно правилам, описанным ниже.
    Когда одно и то же имя используется в отдельных программах для двух или более появлений ресурсов одного и того же типа и когда само по себе уточнение не позволяет в одной из этих программ отличить два идентично названных ресурса, тогда применяются специальные соглашения, ограничивающие область действия имен. Эти соглашения гарантируют, что ресурсы идентифицированы так, как описано в программе, содержащей ссылку (ч.10, п.1.3.8).
    Если это не оговорено правилами для оператора, любое индексирование и модификация ссылки производятся только один раз как первая операция при выполнении оператора.
    4.3.8.1.Уточнение
    Каждое определенное пользователем имя, явно используемое в Кобол-программе, должно быть однозначным в силу одного из перечисленных ниже обстоятельств:
    (1) никакое другое имя не имеет идентичного написания;
    (2) имя однозначно в контексте фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) (ч.6, п.5.10);
    (3) имя определяется внутри такой иерархии имен, что ссылка на него может быть сделана однозначной посредством упоминания одного или более старших уровней иерархии.
    Старшие уровни называются уточнителями, а процесс, определяющий однозначность ссылок, называется уточнением. В исходной программе могут появляться идентичные определенные пользователем имена; однако затем должна быть установлена однозначность посредством уточнения для каждого определенного пользователем имени, на которое имеется явная ссылка, за исключением случая переопределения. Нет необходимости указывать все имеющиеся в распоряжении уточнители для установления однозначности. Зарезервированные слова, именующие специальные регистры, требуют уточнения для обеспечения однозначности всякий раз, когда исходная программа приводит к появлению более одного экземпляра какого-либо из специальных регистров. На имя параграфа или имя секции, появляющиеся в программе, нельзя ссылаться из любой другой программы;
    (4) программа содержится в другой программе либо содержит другую программу (ч.10, п.1.3.8).
    Независимо от вышесказанного, одно и то же имя данных не может использоваться как имя внешней записи и как имя любого другого внешнего данного в программе, содержащей другую программу или содержащейся в некоторой программе и описывающей эту внешнюю запись данных. Одно и то же имя данных не может употребляться как имя данного, обладающего свойством глобального, и как имя любого другого данного, описанного в программе, описывающей это глобальное данное.
    Общими форматами для уточнения являются:
    Формат 1

    Правила уточнения:
    (1) Для каждого неоднозначного имени, определенного пользователем, на которое имеется явная ссылка, однозначность должна устанавливаться посредством последовательности уточнителей, которая устраняет неоднозначность ссылки.
    (2) Имя может уточняться даже тогда, когда нет необходимости в уточнении; если имеется несколько комбинаций уточнителей, обеспечивающих однозначность, использоваться может любая из таких комбинаций.
    (3) IN и OF являются логическими эквивалентами.
    (4) В формате 1 уточнитель должен быть именем, относящимся к индикатору уровня, или именем группы, в которую входит уточняемое данное, или именем условной переменной, связанной с уточняемым именем-условия. Уточнители указываются в порядке последовательного нарастания уровней иерархии.
    (5) В формате 1 имя-данного-1 или имя-данного-2 может быть именем-записи.
    (6) Если имеется явная ссылка на имя параграфа, то имя параграфа не должно дублироваться внутри секции. Когда имя параграфа уточняется именем секции, слово SECTION (СЕКЦИЯ) опускается. Имя параграфа не нужно уточнять, если к нему обращаются внутри той же секции. На имя параграфа или имя секции, появляющееся в программе, нельзя ссылаться из любой другой программы.
    (7) Если во время компиляции компилятору доступна более чем одна библиотека Кобола, имя текста должно уточняться при каждом обращении к нему.
    (8) Если в исходной программе имеется несколько статей описания файла, содержащих фразу LINAGE (ВЕРСТКА), LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) должен уточняться каждый раз при обращении к нему.
    (9) Если в исходной программе определено несколько статей описания отчета, LINE-COUNTER (СЧЕТЧИК-СТРОК) должен быть уточнен при каждом обращении к нему в разделе процедур. В секции отчетов неуточненная ссылка на LINE-COUNTER (СЧЕТЧИК-СТРОК) неявно уточнена именем отчета, в статье описания которого имеется эта ссылка. При обращении к счетчику строк разных отчетов, LINE-COUNTER (СЧЕТЧИК-СТРОК) должен явно уточняться соответствующим именем отчета.
    (10) Если в исходной программе определено несколько статей описания отчета, PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) должен быть уточнен при каждом обращении к нему в разделе процедур. В секции отчетов неуточненная ссылка на PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) неявно уточнена именем отчета, в статье описания которого имеется эта ссылка. При обращении к счетчику страниц разных отчетов PAGE-COUNTER (СЧЕТЧИК-СТРАНИЦ) должен явно уточняться соответствующим именем отчета.
    4.3.8.2.Индексирование
    4.3.8.2.1.Назначение
    Индексы используются при обращении к отдельному элементу из списка или таблицы однотипных элементов, которым не поставлены в соответствие индивидуальные имена данных (ч.6, п.5.8).
    4.3.8.2.2.Общий формат

    4.3.8.2.3.Синтаксические правила
    (1) Статья описания данного, содержащая имя-данного-1 или имя-данного, соотнесенное имени-условия-1, должна содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или должна подчиняться статье описания данного, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ).
    (2) За исключением случаев, указанных в синтаксическом правиле (4), при обращении к табличному элементу количество индексов должно равняться числу фраз OCCURS (ПОВТОРЯЕТСЯ) в описании данного табличного элемента. При использовании нескольких индексов они записываются в порядке от старшего к младшим уровням иерархии таблицы.
    (3) Имя-индекса-1 должно соответствовать статье описания данного в иерархии таблицы, содержащей фразу INDEXED (ИНДЕКСИРУЕТСЯ), определяющую это имя-индекса.
    (4) При каждом обращении к табличному элементу должно использоваться индексирование, за исключением следующих случаев:
    а) в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ);
    б) в качестве субъекта в операторе SEARCH (ИСКАТЬ);
    в) во фразе REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ);
    г) в варианте ASCENDING/DESCENDING KEY IS (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА) фразы OCCURS (ПОВТОРЯЕТСЯ).
    (5) Имя-данного-2 может уточняться и должно быть числовым элементарным данным, представляющим целое.
    (6) Целое-1 может быть со знаком; знак должен быть только положительным.
    4.3.8.2.4.Общие правила
    (1) Значение индекса должно быть положительным целым. Наименьшее допустимое значение, представляемое индексом, равняется 1 и оно указывает на первый элемент таблицы. Следующие за ним элементы таблицы указываются с помощью номера вхождения 2, 3, ... . Наибольший допустимый номер вхождения в каждом отдельном случае равен максимальному числу повторений данного, указанному фразой OCCURS (ПОВТОРЯЕТСЯ).
    (2) Значение имени-индекса-1 соответствует номеру вхождения элемента таблицы, связанного с ним. Это соответствие определяется реализацией.
    (3) Значение имени-индекса-1 должно устанавливаться до его использования в качестве индекса. Начальное значение имени-индекса может быть задано оператором PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ); оператором SEARCH (ИСКАТЬ) с фразой ALL (ОСОБО) или оператором SET (УСТАНОВИТЬ). Значение имени-индекса может изменяться только операторами. PERFORM (ВЫПОЛНИТЬ), SEARCH (ИСКАТЬ) или SET (УСТАНОВИТЬ).
    (4) Если указано целое-2 или целое-3, значение индекса определяется как номер вхождения, представленный значением имени-индекса-1, либо значением данного, указанного именем-данного-2, увеличенным на значение целого-2 или целого-3 (когда указан знак арифметической операции +) или уменьшенным на значение целого-2 или целого-3 (когда указан знак арифметической операции -).
    4.3.8.3.Модификация ссылки
    4.3.8.3.1.Назначение
    Модификация ссылки определяет данное указанием его самой левой позиции литеры и длины данного.
    4.3.8.3.2.Общий формат имя-данного-1 (позиция-самой-левой-литеры: [длина])
    4.3.8.3.3.Синтаксические правила
    (1) Имя-данного-1 должно быть именем данного, статья описания которого содержит фразу об использовании USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ).
    (2) Позиция самой левой литеры и длина должны быть арифметическими выражениями.
    (3) Если особо не оговорено, модификация ссылки допустима, везде, где разрешен идентификатор соотнесенный данному, принадлежащему к буквенно-цифровому классу.
    (4) Имя-даиного-1 может быть уточнено или индексировано.
    4.3.8.3.4.Общие правила
    а) если для операнда указано индексирование, модификация ссылки производится сразу же после вычисления индексов;
    б) если для операнда индексирование не указано, модификация: ссылки производится, тогда, когда производилось бы вычисление индексов, если бы были указаны индексы.
    (4) Модификация ссылки создает уникальное данное, являющееся подстрокой данного, соотнесенного имени-данного-1. Это данное определяется по следующим правилам:
    а) вычисление позиции-самой-левой-литеры определяет порядковую позицию самой левой литеры единственного данного по отношению к самой левой литере данного, соотнесенного имени-данного-1. Результатом вычисления позиции самой левой литеры должно быть положительное целое число, не равное нулю, меньшее или равное количеству литер в данном, соотнесенном имени-данного-1;
    б) вычисление длины определяет размер данного, которое будет использовано в операции. Результатом вычисления длины должно быть положительное целое число, не равное нулю. Сумма позиции-самой-левой-литеры и длины минус единица должна быть меньше или равна количеству литер в данном, соотнесенном имени-данного-1.
    Если длина не указана, создаваемое модификацией ссылки данное распространяется от позиции-самой-левой-литеры (включая ее) и до самой правой литеры (тоже включая ее) данного, соотнесенного имени-данного-1.
    (4) Создаваемое модификацией ссылки данное рассматривается как элементарное данное без фразы JUSTIFIED (СДВИНУТО). Оно относится к тому же классу и категории, что и данное, соотнесенное имени-данного-1, учитывая то обстоятельство, что класс числовой, числовой редактируемый и буквенно-цифровой редактируемый рассматриваются как класс и категория буквенно-цифровые.
    (1) Каждой литере данного, соотнесенного имени-данного-1 приписывается порядковый номер, который равен 1 для самой левой позиции и увеличивается на единицу для каждой следующей позиции вплоть до самой правой позиции. Если статья описания данного для имени-данного-1 содержит фразу SIGN IS SEPARATE (ЗНАК ОТДЕЛЬНО), позиции знака приписывается порядковый номер в этом данном.
    (2) Если данное, соотнесенное имени-данного-1, описано как числовое, числовое редактируемое, буквенное или буквенно-цифровое редактируемое, над ним производятся действия по модификации ссылок, как если бы оно было переопределено как буквенно-цифровое данное того же размера, что и данное, соотнесенное имени-данного-1.
    (3) Модификация ссылки для операнда выполняется по следующим правилам:
    4.3.8.4.Идентификатор
    Термин идентификатор используется в случае, когда имя данного, дублируемое в программе, должно сопровождаться синтаксически правильной комбинацией уточнителей, индексов или модификаторов ссылки, необходимой для обеспечения однозначности ссылки.
    Общий формат идентификатора:

    4.3.8.5.Имя условия
    4.4.Явные и неявные спецификации
    Имеется четыре типа явных и неявных определений, встречающихся в исходной Кобол-программе:
    (1) явные и неявные обращения (ссылки) к данным в разделе процедур;
    (2) явные и неявные передачи управления;
    (3) явные и неявные свойства;
    (4) явные и неявные ограничители области действия.
    4.4.1.Явные и неявные обращения к данным в разделе процедур
    Исходная Кобол-программа может явно или неявно обращаться к данным в операторах раздела процедур. Явное обращение имеет место в том случае, когда имя данного, к которому происходит обращение, записывается в операторе раздела процедур или копируется в разделе процедур с помощью оператора COPY (КОПИРОВАТЬ). Неявное обращение имеет место в том случае, когда оператор раздела процедур обращается к данному без указания его имени. Неявное обращение имеет место также во время выполнения оператора PERFORM (ВЫПОЛНИТЬ), когда индекс или данное, представленное именем индекса или идентификатором во фразах VARYING, AFTER, UNTIL (МЕНЯЯ, ЗАТЕМ, ДО), устанавливаются в начало, изменяются или вычисляются механизмом управления, относящимся к этому оператору PERFORM (ВЫПОЛНИТЬ). Такое неявное обращение имеет место только в том случае, когда данное участвует в выполнении оператора.
    4.4.2.Явные и неявные передачи управления
    Механизм, управляющий программным потоком, передает управление от оператора к оператору в той последовательности, в которой они записаны в исходной программе, пока явная передача управления не прервет эту последовательность или не останется ни одного выполнимого оператора, которому можно передать управление. Передача управления от оператора к оператору может происходить без явного указания в операторах раздела процедур; в этом случае она является неявной передачей управления.
    Язык Кобол обеспечивает явные и неявные средства передачи управления.
    В дополнение к неявной передаче управления в последовательности операторов, неявная передача управления имеет место и тогда, когда нормальный ход выполнения операторов меняется без выполнения оператора ветвления процедуры. Кобол обеспечивает следующие типы неявного изменения управления, прерывающие передачу управления от оператора к оператору:
    (1) если параграф выполняется под управлением другого оператора (например, PERFORM (ВЫПОЛНИТЬ), USE (ИСПОЛЬЗОВАТЬ), SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ)) и этот параграф является последним в области управляющего оператора, тогда неявная передача управления происходит от последнего оператора в параграфе к механизму управления последнего выполняемого управляющего оператора. Дальше, если параграф, выполняемый под управлением оператора PERFORM (ВЫПОЛНИТЬ), является первым параграфом в области действия этого оператора PERFORM (ВЫПОЛНИТЬ), то неявная передача управления имеет место между механизмом управления, относящимся к этому оператору, и первым оператором в этом параграфе при каждой итерации выполнения параграфа;
    (2) при выполнении оператора SORT (СОРТИРОВАТЬ) и MERGE (СЛИТЬ) происходит неявная передача управления к соответствующей процедуре ввода и вывода;
    (3) при выполнении оператора Кобола, приводящего к выполнению декларативной секции, происходит неявная передача управления к этой секции. Заметим, что другая неявная передача управления происходит после выполнения декларативной секции, как указано выше (пункт (1)).
    Явная передача управления состоит в изменении механизма неявной передачи посредством оператора ветвления процедуры или условного оператора. Явная передача управления может быть вызвана только в результате выполнения оператора ветвления процедуры или условного оператора. Выполнение оператора ветвления процедуры ALTER (ИЗМЕНИТЬ) само по себе не осуществляет явной передачи управления, но влияет на нее при выполнении соответствующего оператора GO TO (ПЕРЕЙТИ). Оператор ветвления EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) приводит к явной передаче управления только при выполнении этого оператора в вызванной программе.
    В этом документе термин "следующий выполнимый оператор" используется для обращения к следующему оператору Кобола, которому передается управление согласно приведенным выше правилам и правилам, соответствующим каждому элементу языка.
    Нет следующего выполнимого оператора, когда программа нe содержит раздел процедур, а также для перечисленных ниже операторов:
    (1) последний оператор в декларативной секций, когда содержащий его параграф не выполняется под управлением некоторого другого оператора Кобола;
    (2) последний оператор в декларативной секции, когда оператор, находящийся в области активного оператора PERFORM (ВЫПОЛНИТЬ), выполняется в другой секции и этот последний оператор декларативной секции не является в то же время последним оператором процедуры, которая является выходом из активного оператора PERFORM (ВЫПОЛНИТЬ);
    (3) последний оператор в программе, когда содержащий его параграф не выполняется под управлением некоторого другого оператора Кобола в этой программе;
    (4) оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) или EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), который передает управление за пределы Кобол-программы;
    (5) заголовок конца программы.
    Когда нет следующего выполнимого оператора и управление не передается за пределы Кобол-программы, передача управления в программе не определена. Если выполнение программы активировано в недекларативной части процедур другой программы посредством оператора CALL (ВЫЗВАТЬ), выполняется неявный оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ).
    4.4.3.Явные и неявные свойства
    Свойства могут быть заданы явно и неявно. Любое свойство, которое задано явно, называется явным свойством. Если свойство не задано явно, оно определяется по умолчанию. Такое свойство определяется как неявное.
    Например, использование данного нет необходимости задавать в случае, когда его использование DISPLAY (ДЛЯ ВЫДАЧИ).
    4.4.4.Явные и неявные ограничители области действия
    Ограничители области действия служат для указания границ области действия определенных операторов раздела процедур (п.6.4.2.4 настоящей части). Ограничители области действия бывают двух типов: явные и неявные.
    Явными ограничителями области действия являются следующие:
    END-ADD (КОНЕЦ-СЛОЖИТЬ)
    END-CALL (КОНЕЦ-ВЫЗВАТЬ)
    END-COMPUTE (КОНЕЦ-ВЫЧИСЛИТЬ)
    END-DELETE (КОНЕЦ-УДАЛИТЬ)
    END-DIVIDE (КОНЕЦ-РАЗДЕЛИТЬ)
    END-EVALUATE (КОНЕЦ-ОЦЕНИТЬ)
    END-IF (КОНЕЦ-ЕСЛИ)
    END-MULTIPLY (КОНЕЦ-УМНОЖИТЬ)
    END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ)
    END-READ (КОНЕЦ-ЧИТАТЬ)
    END-RECEIVE (КОНЕЦ-ПОЛУЧИТЬ)
    END-RETURN (КОНЕЦ-ВЕРНУТЬ)
    END-REWRITE (КОНЕЦ-ОБНОВИТЬ)
    END-SEARCH (КОНЕЦ-ИСКАТЬ)
    END-START (КОНЕЦ-ПОДВЕСТИ)
    END-STRING (КОНЕЦ-СОБРАТЬ)
    END-SUBTRACT (КОНЕЦ-ОТНЯТЬ)
    END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ)
    END-WRITE (КОНЕЦ-ПИСАТЬ)
    Неявными ограничителями области действия являются:
    (1) разделитель точка в конце любого предложения, которая заканчивает область действия всех предыдущих операторов, еще не завершенных;
    (2) в любом операторе, содержащем другой оператор, следующая фраза внешнего оператора, находящаяся после внутреннего оператора, завершает область действия любого незавершенного внутреннего оператора. Примерами таких фраз являются ELSE (ИНАЧЕ), WHEN (КОГДА), NOT AT END (HE В КОНЦЕ) и т.п.
    4.5.Внешний переключатель
    Внешний переключатель - это устройство оборудования или программное средство, определяемое и именуемое реализацией, и используемое для указания одного из двух альтернативных состояний. Альтернативные состояния относятся к состоянию "включено" или "выключено" соответствующего внешнего переключателя.
    Состояние внешнего переключателя может быть опрошено проверкой имен-условий, связанных с этим переключателем. Соответствие имени-условия внешнему переключателю и соответствие указанного пользователем мнемонического-имени имени-реализации, именующему внешний переключатель, устанавливается в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования (ч.6, п.4.5.1).
    Реализация определяет область действия (программа, единица исполнения и т.п.) каждого внешнего переключателя и возможности (внешние по отношению к Коболу), используемые для изменения состояния внешнего переключателя. Например, если область действия внешнего переключателя есть единица исполнения, каждое имя-реализации, именующее такой внешний переключатель, соотнесено только одному переключателю, доступному каждой объектной программе, функционирующей в этой единице исполнения.
    Состояние некоторых переключателей может изменяться оператором SET (УСТАНОВИТЬ) (ч.6, п.6.23).
    При наличии явной ссылки каждое из имен условий не должно дублироваться или должно позволять однозначное определение посредством уточнения и (или) индексирования, за исключением случаев, когда соглашения об области действия имен сами обеспечивают однозначность ссылок (ч.10, п.1.3.8).
    Если для определения однозначности имени условия используется уточнение, соответствующая условная переменная может использоваться как первый уточнитель. При уточнении используется иерархия имен, относящихся к условной переменной.
    Если ссылки на условную переменную требуют индексирования, то ссылки на любое из ее имен условия требуют той же комбинации индексов.
    Формат и ограничения на совместное использование уточнениям и индексирования имен-условий в точности совпадают с форматом и ограничениями для идентификатора, при этом имя-данного-1 нужно заменить на имя-условия-1.
    В общем формате и дальнейшем тексте "имя-условия" обозначает уточненное или индексированное имя условия, если это необходимо.
    Определенные зарезервированные слова используются для именования специальных констант и ссылок на них. Эти зарезервированные слова определены в п.4.2.2.2.3 в настоящей части.
    5.ИСХОДНАЯ КОБОЛ-ПРОГРАММА
    5.1.Введение
    Исходная Кобол-программа - это синтаксически правильный набор операторов Кобола.
    5.2.Организация
    За исключением операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ) и заголовка конца программы, операторы, статьи, параграфы и секции исходной Кобол-программы группируются в четыре раздела, расположенные друг за другом в следующем порядке:
    1.Раздел идентификации
    2.Раздел оборудования
    3.Раздел данных
    4.Раздел процедур.
    Конец исходной Кобол-программы указывается либо заголовком конца программы, либо отсутствием дальнейших строк исходной программы.
    5.3.Структура
    5.3.1.Общий формат
    раздел-идентификации
    [раздел-оборудования]
    [раздел-данных]
    [раздел-процедур]
    [заголовок-конца-программы]
    Ниже приведен общий формат и порядок представления статей и операторов, в котором записывается исходная Кобол-программа.
    6.РАЗДЕЛЫ
    6.1.Раздел идентификации
    6.1.1.Общее описание
    Раздел идентификации определяет программу. Кроме этого, пользователь может включать в параграфы показанного ниже общего формата дату написания программы, дату компиляции исходной программы и другую необязательную информацию.
    6.1.2.Организация
    Заголовки параграфов определяют тип информации, содержащейся в каждом параграфе. Имя программы должно быть дано в первом параграфе PROGRAM-ID (ПРОГРАММА). Остальные параграфы необязательны и могут быть включены в этот раздел по выбору пользователя в порядке, приведенном в формате ниже.
    6.1.3.Структура
    6.1.3.1.Общий формат
    IDENTIFICATION DIVISION.
    PROGRAM-ID. имя-программы.
    [AUTHOR. [статья-комментарий] ...]
    [INSTALLATION. [статья-комментарий] …]
    [DATE-WRITTEN. [статья-комментарий] ...]
    [DATE-COMPILED. [статья-комментарий] ...]
    [SECURITY. [статья-комментарий] ...]
    РАЗДЕЛ ИДЕНТИФИКАЦИИ.
    ПРОГРАММА. имя-программы.
    [АВТОР. [статья-комментарий] ...]
    [ПРЕДПРИЯТИЕ. [статья-комментарий] ...]
    [ДАТА-НАПИСАНИЯ. [статья-комментарий] ...]
    [ДАТА-ТРАНСЛЯЦИИ. [статья-комментарий] ...]
    [ПОЛНОМОЧИЯ. [статья-комментарий] ...]

    Ниже приведен формат параграфов раздела идентификации и определен порядок их следования в исходной программе.
    6.2.Раздел оборудования
    6.2.1.Общее описание
    Раздел оборудования описывает стандартные аспекты обработки данных, которые зависят от физических особенностей конкретной машины. Этот раздел позволяет определить конфигурацию компилирующей и объектной машины, а также дать информацию, относящуюся к управлению вводом-выводом, специфическим особенностям оборудования машины и методам управления.
    6.2.2.Организация
    Раздел оборудования состоит из секции конфигурации и секции ввода-вывода.
    Секция конфигурации характеризует исходную и рабочую машины. Эта секция разделена на три параграфа: параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА), описывающий конфигурацию машины, на которой компилируется исходная программа, параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА), описывающий конфигурацию машины, на которой следует выполнять объектную программу, и параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА), который предусматривает средства определения валютного знака, выбора десятичной точки, определения символических литер, установления соответствия между: именами реализации и определенными пользователем мнемоническими именами; именами алфавитов и наборами литер машины или основными последовательностями; именами классов и наборами литер.
    Секция ввода-вывода содержит информацию, необходимую для управления обработкой и передачей данных из внешней среды в объектную программу и обратно. Эта секция разделена на два параграфа. Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) называет файл и ставит его в соответствие внешней среде. Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) определяет специальные методы управления, которые следует использовать в объектной программе.
    6.2.3.Структура
    6.2.3.1.Общий формат
    ENVIRONMENT DIVISION.
    [CONFIGURATION SECTION.
    [SOURCE-COMPUTER. [статья-исходной-машины]]
    [OBJECT-COMPUTER. [статья-объектной-машины]]
    [SPECIAL-NAMES. [статья-специальных-имен]]]
    [INPUT-OUTPUT SECTION.
    FILE-CONTROL. {статья-управления-файлом} ...
    [I-O-CONTROL. [статья-управления-вводом-выводом]]]
    РАЗДЕЛ ОБОРУДОВАНИЯ.
    [СЕКЦИЯ КОНФИГУРАЦИИ.
    [ИСХОДНАЯ-МАШИНА. [статья-исходной-машины]]
    [РАБОЧАЯ-МАШИНА. [статья-объектной-машины]]
    [СПЕЦИАЛЬНЫЕ-ИМЕНА. [статья-специальных-имен]]]
    [СЕКЦИЯ ВВОДА-ВЫВОДА.
    УПРАВЛЕНИЕ-ФАЙЛАМИ. {статья-управления-файлом} ...
    [УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ. [статья-управления-вводом-выводом]]]

    Ниже приводится общий формат секций и параграфов в разделе оборудования и определяется порядок представления их в исходной программе.
    6.3.Раздел данных
    6.3.1.Общий подход
    Раздел данных описывает данные, которые объектная программа должна воспринимать как входные, обрабатывать, создавать и выдавать как выходные.
    6.3.2.Физические и логические аспекты описания данных
    6.3.2.1.Организация раздела данных
    Раздел данных подразделяется на секции: файлов, рабочей памяти, связи, коммуникаций и отчетов.
    Секция файлов определяет структуру файлов данных. Каждый файл определяется статьей описания файла и одним или несколькими описаниями записи, или статьей описания файла и одной или несколькими статьями описаний отчета. Описания записи указываются непосредственно за статьей описания файла. Когда описание файла определяет файл как используемый только в качестве выходного файла генератора отчетов, описание записи должно быть опущено. Статьи описания отчетов указываются в отдельной секции раздела данных - в секции отчетов.
    Секция рабочей памяти описывает записи и подчиненные данные, которые не являются частями внешних файлов данных, а получаются и обрабатываются во внутренней памяти, а также данные, значения которых определены в исходной программе и не меняются в процессе выполнения рабочей программы.
    Секция связи указывается в вызываемой программе и описывает данные, к которым должны обращаться вызывающая и вызываемая программы. Структура этой секции аналогична секции рабочей памяти.
    Секция коммуникаций описывает данные в исходной программе, которые служат для взаимодействия между системой управления сообщениями и программой.
    Секция отчетов описывает содержание и формат подлежащих выдаче отчетов.
    6.3.2.2.Структура раздела данных
    6.3.2.2.1.Общий формат

    Ниже приведен общий формат секций раздела данных и определен порядок их представления в исходной программе.
    6.4.Раздел процедур
    6.4.1.Общее описание
    Раздел процедур содержит декларативы и процедуры.
    6.4.1.1.Декларативы
    Секции декларатив должны быть сгруппированы в начале раздела процедур; им предшествует ключевое слово DECLARATIVES (ДЕКЛАРАТИВЫ) и их заключают ключевые слова END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) (ч.7, п.4.6; ч.8, п.4.8; ч.9, п.4.8; ч.13, пп.4.8, 4.9 и ч.15, п.3.2).
    6.4.1.2.Процедуры
    Процедура состоит из параграфа или группы последовательных параграфов, либо из секции или из группы последовательных секций внутри раздела процедур. Если один параграф включен в секцию, то и все параграфы должны быть включены в секции. Имя процедуры - это слово, используемое для обращения к параграфу или к секции в исходной программе. Имя процедуры может быть именем параграфа, которое может быть уточнено, или именем секции.
    Секция состоит из заголовка секции, за которым следует нуль, один или несколько последовательно записанных параграфов. Секция заканчивается непосредственно перед следующей секцией или по окончании раздела процедур, или в декларативной части раздела процедур ключевыми словами END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ).
    Параграф состоит из имени параграфа, за которым следует точка с пробелом и нуль, одно или несколько последовательно записанных предложений. Параграф оканчивается непосредственно перед следующим именем параграфа или именем секции, или по окончании раздела процедур, или в декларативах в разделе процедур ключевыми словами END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ).
    Предложение состоит из одного или нескольких операторов и заканчивается разделителем точкой.
    Оператор - синтаксически правильная комбинация слов, литералов и разделителей, начинающаяся глаголом языка Кобол.
    Термин "идентификатор" определяется как слово или слова, необходимые для однозначности обращения к данному.
    6.4.1.3.Выполнение
    Выполнение начинается с первого оператора раздела процедур, исключая декларативы. Затем операторы выполняются в том порядке, в котором они представлены для компиляции, исключение из которого составляет порядок, описанный правилами этой части.
    6.4.1.4.Структура раздела процедур
    6.4.1.4.1.Заголовок раздела процедур
    Раздел процедур должен начинаться следующим заголовком:
    PROCEDURE DIVISION [USING {имя-данного-1} ... ].
    РАЗДЕЛ ПРОЦЕДУР [ИСПОЛЬЗУЯ {имя-данного-1}... ].
    6.4.1.4.2.Структура тела раздела процедур
    Тело раздела процедур должно соответствовать одному из следующих форматов:

    6.4.2.Предложения и операторы
    Имеется четыре типа операторов: повелительные, условные, операторы, управляющие компиляцией, и операторы с ограничителем области действия.
    Имеется три типа предложений: повелительные, условные и предложения, управляющие компиляцией.
    6.4.2.1.Условные операторы, предложения и фразы
    6.4.2.1.1.Определение условного оператора
    Условный оператор указывает, что должно быть определено значение истинности условия и что последующие действия объектной программы зависят от этого значения истинности.
    Условным оператором является один из следующих:
    (1) оператор EVALUATE (ОЦЕНИТЬ), IF (ЕСЛИ), SEARCH (ИСКАТЬ) или RETURN (ВЕРНУТЬ);
    (2) оператор READ (ЧИТАТЬ) с фразой AT END (В КОНЦЕ), NOT AT END (HE В КОНЦЕ), INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) или NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА);
    (3) оператор WRITE (ПИСАТЬ) с фразой INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) или NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ);
    (4) операторы DELETE (УДАЛИТЬ), REWRITE (ОБНОВИТЬ) и START (ПОДВЕСТИ) с фразой INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) или NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА);
    (5) арифметические операторы ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ), SUBTRACT (ОТНЯТЬ) с фразой ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) или NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ);
    (6) оператор RECEIVE (ПОЛУЧИТЬ) с фразой NO DATA (НЕТ ДАННЫХ) или WITH DATA (ЕСТЬ ДАННЫЕ);
    (7) оператор STRING (СОБРАТЬ) или UNSTRING (РАЗОБРАТЬ) с фразой ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) или NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ);
    (8) оператор CALL (ВЫЗВАТЬ) с фразой ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), ON EXCEPTION (ПРИ ОШИБКЕ) или NOT ON EXCEPTION (БЕЗ ОШИБКИ).
    6.4.2.1.2.Определение условной фразы
    Условная фраза указывает действие, которое должно быть выполнено при определении значения истинности условия в результате выполнения условного оператора.
    Условной фразой является одна из следующих:
    (1) фраза AT END (В КОНЦЕ) или NOT AT END (HE В КОНЦЕ) в операторе READ (ЧИТАТЬ);
    (2) фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) или NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) в операторах DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) или WRITE (ПИСАТЬ);
    (3) фраза END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) или NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ) в операторе WRITE (ПИСАТЬ);
    (4) фраза SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) или NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ) в операторах ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) или SUBTRACT (ОТНЯТЬ);
    (5) фраза NO DATA (НЕТ ДАННЫХ) или WITH DATA (ЕСТЬ ДАННЫЕ) в операторе RECEIVE (ПОЛУЧИТЬ);
    (6) фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) или NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) в операторе STRING (СОБРАТЬ) или UNSTRING (РАЗОБРАТЬ);
    (7) фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), ON EXCEPTION (ПРИ ОШИБКЕ) или NOT ON EXCEPTION (БЕЗ ОШИБКИ) в операторе CALL (ВЫЗВАТЬ).
    6.4.2.1.3.Определение условного предложения
    Условное предложение является условным оператором, возможно, с предшествующим повелительным оператором, заканчивающимся разделителем точкой.
    6.4.2.2.Операторы и предложения, управляющие компиляцией
    6.4.2.2.1.Определение оператора, управляющего компиляцией
    Оператор, управляющий компиляцией, состоит из глагола, управляющего компиляцией, и операндов. Глаголами, управляющими компиляцией, являются COPY (КОПИРОВАТЬ), REPLACE (ЗАМЕНИТЬ) и USE (ИСПОЛЬЗОВАТЬ) (ч.12, пп.2, 3; ч.7, п.4.6; ч.8, п.4.8; ч.9, п.4.8; ч.13, п.4.8; ч.15, п.3.2). Оператор, управляющий компиляцией, приводит к выполнению определенного действия во время компиляции.
    6.4.2.2.2.Определение предложения, управляющего компиляцией
    Предложение, управляющее компиляцией, состоит из единственного оператора, управляющего компиляцией, заканчивающегося разделителем точкой.
    6.4.2.3.Повелительные операторы и повелительные предложения
    6.4.2.3.1.Определение повелительного оператора
    Повелительный оператор начинается с повелительного глагола и указывает безусловное действие, которое должно выполняться в объектной программе, или является условным оператором, ограниченным явным ограничителем области действия (оператором с ограничителем области действия).
    Повелительный оператор может состоять из последовательности повелительных операторов, каждый из которых может быть отделен от следующего разделителем. Повелительные глаголы следующие:
    ACCEPT (ПРИНЯТЬ)
    (1) ADD (СЛОЖИТЬ)
    ALTER (ИЗМЕНИТЬ)
    (7) CALL (ВЫЗВАТЬ)
    CANCEL (ОСВОБОДИТЬ)
    CLOSE (ЗАКРЫТЬ)
    (1) COMPUTE (ВЫЧИСЛИТЬ)
    CONTINUE (ПРОДОЛЖИТЬ)
    (2) DELETE (УДАЛИТЬ)
    DISABLE (ЗАПРЕТИТЬ)
    DISPLAY (ВЫДАТЬ)
    (1) DIVIDE (РАЗДЕЛИТЬ)
    ENABLE (РАЗРЕШИТЬ)
    EXIT (ВЫЙТИ)
    GENERATE (ГЕНЕРИРОВАТЬ)
    GO TO (ПЕРЕЙТИ)
    INITIALIZE (ИНИЦИИРОВАТЬ)
    INITIATE (НАЧАТЬ)
    INSPECT (ПРОСМОТРЕТЬ)
    MERGE (СЛИТЬ)
    MOVE (ПОМЕСТИТЬ)
    (1) MULTIPLY (УМНОЖИТЬ)
    OPEN (ОТКРЫТЬ)
    PERFORM (ВЫПОЛНИТЬ)
    PURGE (ОЧИСТИТЬ)
    (5) READ (ЧИТАТЬ)
    (4) RECEIVE (ПОЛУЧИТЬ)
    RELEASE (ПЕРЕДАТЬ)
    (2) REWRITE (ОБНОВИТЬ)
    SEND (ПОСЛАТЬ)
    SET (УСТАНОВИТЬ)
    SORT (СОРТИРОВАТЬ)
    (2) START (ПОДВЕСТИ)
    STOP (ОСТАНОВИТЬ)
    (3) STRING (СОБРАТЬ)
    (1) SUBTRACT (ОТНЯТЬ)
    SUPPRESS (ПОДАВИТЬ)
    TERMINATE (ЗАКОНЧИТЬ)
    (3) UNSTRING (РАЗОБРАТЬ)
    (6) WRITE (ПИСАТЬ)

    Цифры в скобках обозначают следующие варианты форматов операторов:
    (1) - без необязательных фраз ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) и NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ);
    (2) - без необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА);
    (3) - без необязательных фраз ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ) и NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ);
    (4) - без необязательных фраз NO DATA (НЕТ ДАННЫХ) и WITH DATA (ЕСТЬ ДАННЫЕ);
    (5) - без необязательных фраз AT END (В КОНЦЕ) и NOT AT END (HE В КОНЦЕ), INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА);
    (6) - без необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ), NOT AT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ);
    (7) - без необязательных фраз ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), ON EXCEPTION (ПРИ ОШИБКЕ) и NOT ON EXCEPTION (БЕЗ ОШИБКИ).
    В общем формате операторов "повелительный-оператор" нужно понимать как последовательность следующих друг за другом повелительных операторов, которая должна оканчиваться точкой или любой фразой оператора, содержащего этот "повелительный-оператор".
    6.4.2.3.2.Определение повелительного предложения
    Повелительное предложение - это повелительный оператор, заканчивающийся разделителем точка.
    6.4.2.4.Операторы с ограничителем области действия
    Оператором с ограничителем области действия является оператор, включающий явный ограничитель области действия (см. п.4.4.4 настоящей части).
    6.4.3.Область действия операторов
    Ограничители области действия определяют область действия конкретных операторов раздела процедур. Операторы, включающие явные ограничители области действия, называются операторами с ограничителем области действия (см. пп.4.4.4, 6.4.2.4 настоящей части). Область действия операторов, содержащихся в других операторах (вложенные операторы), может быть также неявно ограниченной.
    Когда операторы вложены в другие операторы, в которых могут быть необязательные условные фразы, каждая необязательная условная фраза рассматривается, как если бы она была следующей фразой ближайшего предыдущего незавершенного оператора, с которым эта фраза могла бы быть связана, но с которым ни одна такая фраза еще не связана. Незавершенный оператор - это оператор, не имеющий заведомо явного или неявного завершения (см. п.4.4.4 настоящей части).
    7.ФОРМАТ ПРЕДСТАВЛЕНИЯ
    7.1.Общее описание
    Формат представления, который обеспечивает стандартный способ представления исходной Кобол-программы и библиотечного текста Кобола, описывается в терминах позиций литер в строке входной-выходной среды. Каждая реализация должна определять, что понимается под строкой и позицией литер. Согласно этим определениям каждый Кобол-компилятор воспринимает исходную программу, записанную в этом формате представления, и создает выходную распечатку исходной программы в формате представления.
    Правила простановки пробелов, приведенные при рассмотрении формата представления, имеют преимущество по отношению ко всем другим правилам для простановки пробелов.
    Разделы исходной программы должны быть упорядочены следующим образом: раздел идентификации, раздел оборудования, раздел данных, раздел процедур. Каждый раздел должен быть записан в соответствии с правилами для формата представления.
    7.2.Описание формата представления
    Формат представления для строки изображен ниже.

    Отметка L находится левее самой левой позиции литеры в строке.
    Отметка С находится между шестой и седьмой позициями литер в строке.
    Отметка А находится между седьмой и восьмой позициями литер в строке.
    Отметка В находится между одиннадцатой и двенадцатой позициями литер в строке.
    Отметка R находится справа от самой правой позиции литеры в строке.
    Поле порядкового номера занимает шесть позиций литер (1-6) и расположено между отметками L и С.
    Поле индикатора занимает одну позицию литеры, начиная от отметки С.
    Поле А занимает четыре позиции литеры, начиная от отметки А.
    Поле В занимает конечное число позиций литер, оговоренное реализацией, начиная от отметки В.
    7.2.1.Порядковые номера
    Поле порядкового номера может быть использовано для обозначения строк исходной программы. Порядковый номер определяется пользователем и может состоять из любых литер из набора литер машины. Допускается дублирование порядковых номеров и появление их не в последовательном порядке.
    7.2.2.Продолжение строк
    Каждое предложение, статья или фраза, требующие более одной строки, могут быть продолжены посредством помещения в поле В следующей строки (строк). Эти последующие строки называются строками продолжения. Строка, подлежащая продолжению, называется продолжаемой строкой. Каждое слово, литерал или строка литер шаблона может быть расчленена таким образом, что ее часть попадает в строку продолжения.
    Дефис в поле индикатора строки указывает, что первая литера, отличная от пробела в поле В данной строки, является преемником последней литеры (отличной от пробела) предыдущей строки без какого бы то ни было пробела между ними. Однако, если продолжаемая строка содержит нечисловой литерал без заключающей кавычки, то первой отличной от пробела литерой в поле В строки продолжения должен быть знак кавычки и продолжение начинается литерой, непосредственно следующей за знаком кавычки. Все пробелы в конце продолжаемой строки считаются частью литерала. Поле А строки продолжения должно быть заполнено пробелами.
    Если в поле индикатора строки дефис отсутствует, то считается, что за последней литерой предыдущей строки следует пробел.
    Обе литеры, составляющие разделитель "= = ", должны располагаться в одной строке.
    7.2.3.Строка пробелов
    Строка пробелов - строка, в которой от отметки С до отметки R включительно находятся пробелы. Строка пробелов допустима в любом месте исходной программы (см. п.7.2.2 настоящей части).
    7.2.4.Строки комментария
    Строка комментария - строка, содержащая литеру * или / в поле индикатора строк. Строка комментария допустима в любом месте исходной программы после заголовка раздела идентификации и в любом месте библиотечного текста Кобола. В поле А и в поле В этой строки может быть включена любая комбинация литер из набора литер машины. Звездочка или дробная черта и литеры в поле А и В воспроизводятся при распечатке, но служат только для документации и не проверяются на синтаксическую правильность. Литера / в поле индикатора строки вызывает печать комментария на следующей странице распечатки исходной программы; звездочка в поле индикатора строки вызывает печать комментария на следующей доступной строке распечатки.
    7.2.5.Псевдотекст
    Строка литер и ограничители, образующие псевдотекст, могут начинаться либо от отметки А, либо от отметки В. Однако, если имеется дефис в поле индикатора строки, которая следует за открывающим ограничителем псевдотекста, поле А этой строки должно быть заполнено пробелами и к формированию слов текста применяются обычные правила продолжения строк (см. п.7.2.2 настоящей части).
    7.3.Форматы раздела, секции, параграфа
    7.3.1.Заголовок раздела
    Заголовок раздела начинается в поле А.
    7.3.2.Заголовок секции
    Заголовок секции начинается в поле А.
    Секция состоит из нуля, одного или нескольких параграфов в разделах оборудования и процедур или из нуля, одной или нескольких статей в разделе данных.
    7.3.3.Заголовок параграфа, имя параграфа и параграф
    Параграф состоит из имени параграфа, за которым следует разделитель точка, и нуля, одного или нескольких предложений или из заголовка параграфа, за которым следует одна или несколько статей.
    Заголовок или имя параграфа начинается от отметки А и может быть в любой строке, следующей за первой строкой раздела или секции.
    Первое предложение или статья параграфа начинается в той же строке, что и заголовок параграфа или имя параграфа, или в поле В следующей непустой строки, не являющейся строкой комментария. Следующие предложения или статьи либо начинаются в поле В той же строки, что и предыдущее предложение или статья, или в поле В следующей непустой строки, не являющейся строкой комментария.
    Предложения или статьи параграфа могут быть продолжены в последующих строках (см. п.7.2.2 настоящей части).
    7.4.Статьи раздела данных
    Каждая статья раздела данных начинается с индикатора уровня или номера уровня, затем следуют пробел, имя субъекта статьи, если оно указано, и последовательность независимых фраз, описывающих данное. Последняя фраза всегда заканчивается разделителем точка (точка с последующим пробелом).
    Имеется два типа статей раздела данных: начинающиеся с индикатора уровня и начинающиеся с номера уровня.
    Индикатором уровня может быть любое из зарезервированных слов FD (ОФ), SD (ОС), CD (OK), RD (OO).
    В статьях раздела данных, которые начинаются с индикатора уровня, индикатор уровня начинается в поле А, за ним следует хотя бы один пробел и затем имя субъекта статьи и соответствующая описывающая информация.
    Статьи раздела данных, которые начинаются номерами уровней, называются статьями описания данных.
    Номером уровня может быть любое целое из следующего множества: 01, 02, ..., 49, 66, 77, 88. Номера уровня в диапазоне 01, 02, ..., 09 записываются либо в виде одной цифры, либо в виде нуля, за которым следует значащая цифра. По крайней мере один пробел должен отделять номер уровня от следующих за ним слов.
    В статьях описания данных, имеющих номера уровней 01 или 77, номер уровня начинается в поле А, за ним следует хотя бы один пробел, затем соответствующее имя записи или данного, если они определены, и соответствующая описывающая информация.
    Статьи описаний данных могут быть записаны с отступами по отношению к отметке А. Каждая новая статья описания данного может начинаться через любое число пробелов вправо от отметки А, за исключением статей описания данного с номером уровня 01 или 77, которые должны начинаться в поле А. Размер допустимого отступа вправо зависит от величины поля В, которая определяется реализацией. Статьи при выводе записываются с отступами только тогда, когда они записаны с отступами на вводе. Запись с отступами не влияет на значимость номеров уровней.
    7.5.Декларативы
    Никакой другой текст не должен появляться в той же строке, что и ключевое слово DECLARATIVES (ДЕКЛАРАТИВЫ) или ключевые слова END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ), которые обрамляют декларативную часть раздела процедур. Слова DECLARATIVES (ДЕКЛАРАТИВЫ) и END DECLARATIVES (КОНЕЦ ДЕКЛАРАТИВ) должны начинаться в поле А, за ними должен следовать разделитель точка.
    7.6.Заголовок конца программы
    Заголовок конца программы должен начинаться в поле А.
    8.ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА КОБОЛА
    ACCEPT
    ACCESS
    ADD
    ADVANCING
    AFTER
    ALL
    ALPHABET
    ALPHABETIC
    ALPHABETIC-LOWER
    ALPHABETIC-UPPER
    ALPHANUMERIC
    ALPHANUMERIC-EDITED
    ALSO
    ALTER
    ALTERNATE
    AND
    ANY
    ARE
    AREA
    AREAS
    ASCENDING
    ASSIGN
    AT
    AUTHOR
    BEFORE
    BINARY
    BLANK
    BLOCK
    BOTTOM
    BY
    CALL
    CANCEL
    CD
    CF
    CH
    CHARACTER
    CHARACTERS
    CLASS
    CLOCK-UNITS
    CLOSE
    CODE
    CODE-SET
    COLLATING
    COLUMN
    COMMA
    COMMON
    COMMUNICATION
    СОМР
    COMPUTATIONAL
    COMPUTE
    CONFIGURATION
    CONTAINS
    CONTENT
    CONTINUE
    CONTROL
    CONTROLS
    CONVERTING
    COPY
    CORR
    CORRESPONDING
    COUNT
    CURRENCY
    DATA
    DATE
    DATE-COMPILED
    DATE-WRITTEN
    DAY
    DAY-OF-WEEK
    DE
    DEBUG-CONTENTS
    DEBUG-ITEM
    DEBUG-LINE
    DEBUG-NAME
    DEBUG-SUB-1
    DEBUG-SUB-2
    DEBUG-SUB-3
    DEBUGGING
    DECIMAL-POINT
    DECLARATIVES
    DELETE
    DELIMITED
    DELIMITER
    DEPENDING
    DESCENDING
    DESTINATION
    DETAIL
    DISABLE
    DISPLAY
    DIVIDE
    DIVISION
    DOWN
    DUPLICATES
    DYNAMIC
    EGI
    ELSE
    EMI
    ENABLE
    END
    END-ADD
    END-CALL
    END-COMPUTE
    END-DELETE
    END-DIVIDE
    END-EVALUATE
    END-IF
    END-MULTIPLY
    END-OF-PAGE
    END-PERFORM
    END-READ
    END-DECEIVE
    END-RETURN
    END-REWRITE
    END-SEARCH
    END-START
    END-STRING
    END-SUBTRACT
    END-UNSTRING
    END-WRITE
    ENTER
    ENVIRONMENT
    EOP
    EQUAL
    ERROR
    ESI
    EVALUATE
    EVERY
    EXCEPTION
    EXIT
    EXTEND
    EXTERNAL
    FALSE
    FD
    FILE
    FILE-CONTROL
    FILLER
    FINAL
    FIRST
    FOOTING
    FOR
    FROM
    GENERATE
    GIVING
    GLOBAL
    GO
    GREATER
    GROUP
    HEADING
    HIGH-VALUE
    HIGH-VALUES
    I-O
    I-O-CONTROL
    IDENTIFICATION
    IF
    IN
    INDEX
    INDEXED
    INDICATE
    INITIAL
    INITIALIZE
    INITIATE
    INPUT
    INPUT-OUTPUT
    INSPECT
    INSTALLATION
    INTO
    INVALID
    IS
    JUST
    JUSTIFIED
    KEY
    LABEL
    LAST
    LEADING
    LEFT
    LENGTH
    LESS
    LIMIT
    LIMITS
    LINAGE
    LINAGE-COUNTER
    LINE
    LINE-COUNTER
    LINES
    LINKAGE
    LOCK
    LOW-VALUE
    LOW-VALUES
    MEMORY
    MERGE
    MESSAGE
    MODE
    MODULES
    MOVE
    MULTIPLE
    MULTIPLY
    NATIVE
    NEGATIVE
    NEXT
    NO
    NOT
    NUMBER
    NUMERIC
    NUMERIC-EDITED
    OBJECT-COMPUTER
    OCCURS
    OF
    OFF
    OMITTED
    ON
    OPEN
    OPTIONAL
    OR
    ORDER
    ORGANIZATION
    OTHER
    OUTPUT
    OVERFLOW
    PACKED-DECIMAL
    PADDING
    PAGE
    PAGE-COUNTER
    PERFORM
    PF
    PH
    PIC
    PICTURE
    PLUS
    POINTER
    POSITION
    POSITIVE
    PRINTING
    PROCEDURE
    PROCEDURES
    PROCEED
    PROGRAM
    PROGRAM-ID
    PURGE
    QUEUE
    QUOTE
    QUOTES
    RANDOM
    RD
    READ
    RECEIVE
    RECORD
    RECORDS
    REDEFINES
    REEL
    REFERENCE
    REFERENCES
    RELATIVE
    RELEASE
    REMAINDER
    REMOVAL
    RENAMES
    REPLACE
    REPLACING
    REPORT
    REPORTING
    REPORTS
    RERUN
    RESERVE
    RESET
    RETURN
    REVERSED
    REWIND
    REWRITE
    RF
    RH
    RIGHT
    ROUNDED
    RUN
    SAME
    SD
    SEARCH
    SECTION
    SECURITY
    SEGMENT
    SEGMENT-LIMIT
    SELECT
    SEND
    SENTENCE
    SEPARATE
    SEQUENCE
    SEQUENTIAL
    SET
    SIGN
    SIZE
    SORT
    SORT-MERGE
    SOURCE
    SOURCE-COMPUTER
    SPACE
    SPACES
    SPECIAL-NAMES
    STANDARD
    STANDARD-1
    STANDARD-2
    STANDARD-R
    START
    STATUS
    STOP
    STRING
    SUB-QUEUE-1
    SUB-QUEUE-2
    SUB-QUEUE-3
    SUBTRACT
    SUM
    SUPPRESS
    SYMBOLIC
    SYNC
    SYNCHRONIZED
    TABLE
    TALLYING
    TAPE
    TERMINAL
    TERMINATE
    TEST
    TEXT
    THAN
    THEN
    THROUGH
    THRU
    TIME
    TIMES
    TO
    TOP
    TRAILING
    TRUE
    TYPE
    UNIT
    UNSTRING
    UNTIL
    UP
    UPON
    USAGE
    USE
    USING
    VALUE
    VALUES
    VARYING
    WHEN
    WITH
    WORDS
    WORKING-STORAGE
    WRITE
    ZERO
    ZEROES
    ZEROS
    +
    -
    *
    /
    **
    >
    <
    =
    > =
    < =
    АВТОР
    АДРЕСАТ
    АДРЕСАТОВ
    АЛФАВИТ
    БЕЗ
    БЛОКЕ
    БОЛЬШЕ
    БУКВЕННОЕ
    БЦ
    БЦР
    В
    ВАЛЮТНЫЙ
    ВВОД
    ВВОД-ВЫВОД
    ВВОДА
    ВВОДА-ВЫВОДА
    ВЕДУЩИЕ
    ВЕРНУТЬ
    ВЕРСТКА
    ВЕРХНЕЕ
    ВКЛ
    ВКЛЮЧЕНО
    ВЛЕВО
    ВНЕШНЕЕ
    ВНУТРЕННИЙ
    ВОЗРАСТАНИЮ
    ВОЙТИ
    ВПРАВО
    ВРЕМЯ
    ВСЕ
    ВСЕМИ
    ВСЕХ
    ВХОДНОЙ
    ВХОДНОЙ-ВЫХОДНОЙ
    ВХОДНЫХ
    ВХОДНЫХ-ВЫХОДНЫХ
    ВЫВОД
    ВЫВОДА
    ВЫДАТЬ
    ВЫДАЧИ
    ВЫДЕЛЕНО
    ВЫЗВАТЬ
    ВЫЙТИ
    ВЫКЛ
    ВЫКЛЮЧЕНО
    ВЫПОЛНИТЬ
    ВЫХОДНОЙ
    ВЫХОДНЫХ
    ВЫЧ
    ВЫЧИСЛЕНИЙ
    ВЫЧИСЛИТЬ
    ВЫЧИТАЯ
    ГЕНЕРИРОВАТЬ
    ГЛОБАЛЬНО
    ГЛОБАЛЬНОЕ
    ГРАНИЦА
    ГРУППА
    ГРУППУ
    ДАННОЕ
    ДАННЫЕ
    ДАННЫЕ-ОТЛАДКИ
    ДАННЫХ
    ДАТА
    ДАТА-НАПИСАНИЯ
    ДАТА-ТРАНСЛЯЦИИ
    ДАТУ
    ДВОИЧНОЕ
    ДЕКЛАРАТИВ
    ДЕКЛАРАТИВЫ
    ДЕНЬ
    ДЕНЬ-НЕДЕЛИ
    ДЕСЯТИЧНАЯ
    ДЕСЯТИЧНОЕ
    ДИНАМИЧЕСКИЙ
    ДЛИНА
    ДЛЯ
    ДО
    ДОПОЛНИТЕЛЬНЫЙ
    ДОПОЛНЯЕМЫЙ
    ДОПОЛНЯЕМЫХ
    ДОСТУП
    ДУБЛИРОВАНИЕМ
    ЕДИНИЦ-ВРЕМЕНИ
    ЕСЛИ
    ЕСТЬ
    ЗАВИСИМОСТИ
    ЗАГОЛОВОК
    ЗАКОНЧИТЬ
    ЗАКРЫТЬ
    ЗАМЕНИТЬ
    ЗАМЕНЯЯ
    ЗАМКОМ
    ЗАП
    ЗАПИСЕЙ
    ЗАПИСИ
    ЗАПИСЬ
    ЗАПОЛНИТЕЛЬ
    ЗАПРЕТИТЬ
    ЗАПЯТАЯ
    ЗАТЕМ
    ЗНАК
    ЗНАЧ
    ЗНАЧЕНИЕ
    ЗНАЧЕНИЕ-ОТЛАДКИ
    ЗО
    ЗС
    И
    ИДЕНТИФИКАЦИИ
    ИЗ
    ИЗМЕНИТЬ
    ИКГ
    ИКС
    ИКЩ
    ИЛИ
    ИМЯ-ОТЛАДКИ
    ИНАЧЕ
    ИНДЕКСА
    ИНДЕКСИРУЕТСЯ
    ИНДЕКСНАЯ
    ИНДЕКС-ОТЛАДКИ-1
    ИНДЕКС-ОТЛАДКИ-2
    ИНДЕКС-ОТЛАДКИ-3
    ИНИЦИИРОВАТЬ
    ИСКАТЬ
    ИСПОЛЬЗОВАТЬ
    ИСПОЛЬЗУЯ
    ИСТИНА
    ИСТОЧНИК
    ИСХОДНАЯ-МАШИНА
    К
    КАВЫЧКА
    КАВЫЧКИ
    КАЖДОЕ
    КАЖДЫЕ
    КАЖДЫЙ
    КАТУШКЕ
    КАТУШКИ
    КАТУШКУ
    КЛАСС
    КЛЮЧ
    КЛЮЧА
    КО
    КОГДА
    КОДОМ
    КОММУНИКАЦИЙ
    КОНЕЦ
    КОНЕЦ-ВЕРНУТЬ
    КОНЕЦ-ВЫЗВАТЬ
    КОНЕЦ-ВЫПОЛНИТЬ
    КОНЕЦ-ВЫЧИСЛИТЬ
    КОНЕЦ-ЕСЛИ
    КОНЕЦ-ИСКАТЬ
    КОНЕЦ-ОБНОВИТЬ
    КОНЕЦ-ОТНЯТЬ
    КОНЕЦ-ОЦЕНИТЬ
    КОНЕЦ-ПИСАТЬ
    КОНЕЦ-ПОДВЕСТИ
    КОНЕЦ-ПОЛУЧИТЬ
    КОНЕЦ-РАЗДЕЛИТЬ
    КОНЕЦ-РАЗОБРАТЬ
    КОНЕЦ-СЛОЖИТЬ
    КОНЕЦ-СОБРАТЬ
    КОНЕЦ-УДАЛИТЬ
    КОНЕЦ-УМНОЖИТЬ
    КОНЕЦ-ЧИТАТЬ
    КОНФИГУРАЦИИ
    КОНЦА
    КОНЦЕ
    КОНЦОВКА
    КОНЦУ
    КОПИРОВАТЬ
    КС
    ЛИТЕР
    ЛИТЕРА
    ЛИТЕРЫ
    ЛОЖЬ
    ЛЮБОЕ
    МЕНЬШЕ
    МЕНЯЯ
    МЕТКИ
    МОДУЛЕЙ
    НА
    НАЗНАЧИТЬ
    НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ
    НАИБОЛЬШИЕ-ЗНАЧЕНИЯ
    НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ
    НАИМЕНЬШИЕ-ЗНАЧЕНИЯ
    НАЧАЛЕ
    НАЧАЛЬНАЯ
    НАЧАЛЬНОГО
    НАЧАТЬ
    НЕ
    НЕОБЯЗАТЕЛЬНОГО
    НЕТ
    НИЖНЕЕ
    НОМЕР
    НУЛИ
    НУЛЬ
    ОБЛАСТЕЙ
    ОБЛАСТЬ
    ОБНОВИТЬ
    ОБОРУДОВАНИЯ
    ОБЩАЯ
    ОГРАНИЧИВАЯСЬ
    ОГРАНИЧИТЕЛЬ
    ОДНОЙ
    ОК
    ОКРУГЛЯЯ
    ОО
    ОПРЕДЕЛЯЕТ
    ОПУЩЕНЫ
    ОРГАНИЗАЦИЯ
    ОС
    ОСВОБОДИТЬ
    ОСОБО
    ОСТАНОВИТЬ
    ОСТАТОК
    ОТ
    ОТДЕЛЬНО
    ОТКЛЮЧИТЬ
    ОТКРЫТЬ
    ОТЛАДКИ
    ОТНОСИТЕЛЬНАЯ
    ОТНОСИТЕЛЬНЫЙ
    ОТНЯТЬ
    ОТРИЦАТЕЛЬНО
    ОТЧЕТ
    ОТЧЕТА
    ОТЧЕТОВ
    ОТЧЕТЫ
    ОФ
    ОЦЕНИТЬ
    ОЧЕРЕДЬ
    ОЧИСТИТЬ
    ОШИБКЕ
    ОШИБКИ
    ПАМЯТИ
    ПЕРВЫЙ
    ПЕРЕДАТЬ
    ПЕРЕИМЕНОВЫВАЕТ
    ПЕРЕЙТИ
    ПЕРЕМЕННОЕ
    ПЕРЕМОТКИ
    ПЕРЕОПРЕДЕЛЯЕТ
    ПЕРЕПОЛНЕНИИ
    ПЕРЕПОЛНЕНИЯ
    ПЕРЕПРОГОН
    ПЕРЕХОДА
    ПЕЧАТЬ
    ПИСАТЬ
    ПЛЮС
    ПО
    ПОВТОРЯЕТСЯ
    ПОДАВИТЬ
    ПОДВЕСТИ
    ПОДОЧЕРЕДЬ-1
    ПОДОЧЕРЕДЬ-2
    ПОДОЧЕРЕДЬ-3
    ПОЗИЦИЯ
    ПОЛЕ
    ПОЛНОМОЧИЯ
    ПОЛОЖИТЕЛЬНО
    ПОЛУЧАЯ
    ПОЛУЧИТЬ
    ПОЛЯ
    ПОМЕСТИТЬ
    ПОСЛАТЬ
    ПОСЛЕ
    ПОСЛЕДНИЙ
    ПОСЛЕДОВАТЕЛЬНАЯ
    ПОСЛЕДОВАТЕЛЬНЫЙ
    ПРЕВРАЩАЯ
    ПРЕДЛОЖЕНИЕ
    ПРЕДПРИЯТИЕ
    ПРИ
    ПРИБАВЛЯЯ
    ПРИНЯТЬ
    ПРОБЕЛ
    ПРОБЕЛЫ
    ПРОВЕРКОЙ
    ПРОГРАММА
    ПРОГРАММНЫЙ
    ПРОГРАММЫ
    ПРОДВИЖЕНИЯ
    ПРОДОЛЖИТЬ
    ПРОИЗВОЛЬНЫЙ
    ПРОПИСНЫЕ
    ПРОСМОТРЕТЬ
    ПРОЦЕДУР
    ПРОЦЕДУРА
    ПРОЦЕДУРАХ
    ПРОЦЕДУРЫ
    РАБОТУ
    РАБОЧАЯ-МАШИНА
    РАБОЧЕЙ-ПАМЯТИ
    РАВЕН
    РАВНО
    РАЗ
    РАЗА
    РАЗДЕЛ
    РАЗДЕЛИТЬ
    РАЗМЕР
    РАЗМЕРОМ
    РАЗОБРАТЬ
    РАЗРЕШИТЬ
    РЕВЕРСНО
    РЕЖИМЕ
    РЕЗЕРВИРОВАТЬ
    С
    СБРОСИТЬ
    СВЯЗИ
    СДВИНУТО
    СЕГМЕНТ
    СЕГМЕНТОВ
    СЕКЦИЯ
    СИМВОЛИЧЕСКАЯ
    СИМВОЛИЧЕСКИЙ
    СЛЕДУЮЩАЯ
    СЛЕДУЮЩЕЕ
    СЛЕДУЮЩЕЙ
    СЛЕДУЮЩУЮ
    СЛИТЬ
    СЛОВ
    СЛОЖИТЬ
    СОБРАТЬ
    СООБЩЕНИЕ
    СООБЩЕНИЙ
    СООБЩЕНИЯ
    СООТВ
    СООТВЕТСТВЕННО
    СОРТ
    СОРТИРОВАТЬ
    СОРТИРОВКИ
    СОРТИРОВКИ-СЛИЯНИЯ
    СОСТОЯНИЕ
    СОСТОЯНИЯ
    СПЕЦИАЛЬНЫЕ-ИМЕНА
    ССЫЛКАХ
    ССЫЛКУ
    СТАНДАРТ-А
    СТАНДАРТ-Р
    СТАНДАРТ-М
    СТАНДАРТНОЙ
    СТАНДАРТНЫ
    СТОЛБЦА
    СТРАНИЦЕ
    СТРАНИЦЫ
    СТРОК
    СТРОКА-ОТЛАДКИ
    СТРОКИ
    СТРОКУ
    СТРОЧНЫЕ
    СУММА
    СЧЕТ
    СЧЕТЧИК-ВЕРСТКИ
    СЧЕТЧИК-СТРАНИЦ
    СЧЕТЧИК-СТРОК
    СЧИТАЯ
    ТАБЛИЦА
    ТАКЖЕ
    ТЕКСТА
    ТЕРМИНАЛ
    ТЕРМИНАЛА
    ТИП
    ТОМ
    ТОМА
    ТОЧКА
    УБЫВАНИЮ
    УДАЛЕНИЕМ
    УДАЛИТЬ
    УЗ
    УК
    УКАЗАТЕЛЬ
    УМНОЖИТЬ
    УПРАВЛЕНИЕ
    УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ
    УПРАВЛЕНИЕ-ФАЙЛАМИ
    УПРАВЛЯЕМАЯ
    УПРАВЛЯЕМЫЙ
    УСТАНОВИТЬ
    ФАЙЛА
    ФАЙЛОВ
    ФР
    ФРАГМЕНТ
    ЧИСЛО
    ЧИСЛОВОЕ
    ЧИТАТЬ
    ЧР
    Ш
    ШАБЛОН
    >
    <
    +
    -
    *
    /
    **
    =
    < =
    > =
  9. Часть 5.Форматы языка

  10. 1.СВОДКА ФОРМАТОВ АНГЛИЙСКОЙ НОТАЦИИ
    1.1.Общий формат раздела идентификации

    1.2.Общий формат раздела оборудования

    1.3.Общий формат статьи управления файлом
    1.3.1.Последовательный файл

    1.3.2.Относительный файл

    1.3.3.Индексный файл

    1.3.4.Сортируемый-сливаемый файл

    1.3.5.Файл отчетов

    1.4.Общий формат раздела данных

    1.5.Общий формат статьи описания файла
    1.5.1.Последовательный файл

    1.5.2.Относительный файл

    1.5.3.Индексный файл

    1.5.4.Сортируемый-сливаемый файл

    1.5.5.Файл отчетов

    1.6.Общий формат статьи описания данного
    Формат 1

    Формат 2

    Формат 3

    1.7.Общий формат статьи описания коммуникации
    Формат 1

    Формат 2

    Формат 3

    1.8.Общий формат статьи описания отчета

    1.9.Общий формат статьи описания группы отчета
    Формат 1

    Формат 2
    номер-уровня [имя-данного-1]

    Формат 3

    1.10.Общий формат раздела процедур
    Формат 1

    Формат 2

    1.11.Общий формат глаголов Кобола
    1.11.1

    1.11.2

    1.11.3

    1.11.4

    1.11.5

    1.11.6

    1.11.7

    1.11.8

    1.11.9

    1.11.10

    1.11.11

    1.11.12

    1.11.13

    1.11.14

    1.11.15

    1.11.16

    1.11.17

    1.11.18

    1.11.19

    1.11.20

    1.11.21

    1.11.22

    1.11.23

    1.11.24

    1.11.25

    1.11.26

    1.11.27

    1.11.28

    1.11.29

    1.11.30

    1.11.31

    1.11.32

    1.11.33

    1.11.34

    1.11.35

    1.11.36

    1.11.37

    1.11.38

    1.11.39

    1.11.40

    1.11.41

    1.11.42

    1.11.43

    1.11.44

    1.11.45

    1.11.46

    1.12.Общий формат операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ)
    1.12.1


    1.13.Общий формат условий
    1.13.1.Условие отношения

    1.13.2.Условие класса

    1.13.3.Условие имени-условия имя-условия-1
    1.13.4.Условие состояния переключателя имя-условия-1
    1.13.5.Условие знака

    1.13.6.Отрицание условия
    NOT условие-1
    1.13.7.Комбинированное условие

    1.13.8.Сокращенное комбинированное условие отношения

    1.14.Общий формат уточнения
    Формат 1

    Формат 2

    Формат 3

    Формат 4

    Формат 5

    Формат 6

    1.15.Прочие форматы
    1.15.1.Индексирование

    1.15.2.Модификация ссылки имя-данного-1 (позиция-самой-левой-литеры: [длина])
    1.15.3.Идентификатор

    1.16.Общий формат вложенных исходных программ

    1.17.Общий формат вложенной исходной программы

    1.18.Общий формат последовательности исходных программ

    2.СВОДКА ФОРМАТОВ РУССКОЙ НОТАЦИИ
    2.1.Общий формат раздела идентификации

    2.2.Общий формат раздела оборудования

    2.3.Общий формат статьи управления файлом
    2.3.1.Последовательный файл

    2.3.2.Относительный файл

    2.3.3.Индексный файл


    2.3.4.Сортируемый-сливаемый файл

    2.3.5.Файл отчетов

    2.4.Общий формат раздела данных

    2.5.Общий формат статьи описания файла
    2.5.1.Последовательный файл

    _______________
    * Текст документа соответствует оригиналу. - Примечание изготовителя базы данных.
    2.5.2.Относительный файл

    2.5.3.Индексный файл

    2.5.4.Сортируемый-сливаемый файл

    2.5.5.Файл отчетов

    2.6.Общий формат статьи описания данного
    Формат 1

    Формат 2

    Формат 3

    2.7.Общий формат статьи описания коммуникации
    Формат 1

    Формат 2

    Формат 3

    2.8.Общий формат статьи описания отчета

    2.9.Общий формат статьи описания группы отчета
    Формат 1

    Формат 2

    Формат 3

    2.10.Общий формат раздела процедур
    Формат 1

    Формат 2

    2.11.Общий формат глаголов Кобола
    2.11.1

    2.11.2

    2.11.3

    2.11.4

    2.11.5

    2.11.6

    2.11.7

    2.11.8

    2.11.9

    2.11.10

    2.11.11

    2.11.12

    2.11.13

    2.11.14

    2.11.15

    2.11.16

    2.11.17

    2.11.18

    2.11.19

    2.11.20

    2.11.21

    2.11.22

    2.11.23

    2.11.24

    2.11.25

    2.11.26

    2.11.27

    2.11.28

    2.11.29

    2.11.30

    2.11.31

    2.11.32

    2.11.33

    2.11.34

    2.11.35

    2.11.36

    2.11.37

    2.11.38

    2.11.39

    2.11.40

    2.11.41

    2.11.42

    2.11.43

    2.11.44

    2.11.45

    2.11.46

    2.12.Общий формат операторов КОПИРОВАТЬ и ЗАМЕНИТЬ
    2.12.1

    2.12.2

    2.13.Общий формат условий
    2.13.1.Условие отношения

    2.13.2.Условие класса

    2.13.3.Условие имени-условия имя-условия-1
    2.13.4.Условие состояния переключателя имя-условия-1
    2.13.5.Условие знака

    2.13.6.Отрицание условия
    НЕ условие-1
    2.13.7.Комбинированное условие

    2.13.8.Сокращенное комбинированное условие отношения

    2.14.Общий формат уточнения
    Формат 1

    Формат 2

    Формат 3

    Формат 4

    Формат 5

    Формат 6

    2.15.Прочие форматы
    2.15.1.Индексирование

    2.15.2.Модификация ссылки имя-данного-1 (позиция-самой-левой-литеры: [длина])
    2.15.3.Идентификатор

    2.16.Общий формат вложенных исходных программ

    2.17.Общий формат вложенной-исходной-программы

    2.18.Общий формат последовательности исходных программ

  11. Часть 6.Ядро

  12. 1.ВВЕДЕНИЕ В МОДУЛЬ ЯДРА
    1.1.Назначение
    Ядро включает средства для внутренней обработки данных в рамках структуры четырех разделов программы на Коболе. Ядро также включает средства определения таблиц последовательных элементов данных и доступа к элементу по его относительной позиции в таблице. Ядро включает возможности отладки, состоящие из переключателя, действующего во время компиляции, и отладочных строк.
    1.2.Характеристика уровней
    Уровень 1 ядра предоставляет ограниченные возможности параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) и статьи описания данных. В разделе процедур уровень 1 ядра предоставляет ограниченные возможности операторов ACCEPT (ПРИНЯТЬ), ADD (СЛОЖИТЬ), ALTER (ИЗМЕНИТЬ), DISPLAY (ВЫДАТЬ), DIVIDE (РАЗДЕЛИТЬ), IF (ЕСЛИ), MOVE (ПОМЕСТИТЬ), MULTIPLY (УМНОЖИТЬ), PERFORM (ВЫПОЛНИТЬ) и SUBTRACT (ОТНЯТЬ) и полные возможности операторов CONTINUE (ПРОДОЛЖИТЬ), ENTER (ВОЙТИ), EXIT (ВЫЙТИ), GO TO (ПЕРЕЙТИ) и STOP (ОСТАНОВИТЬ). Уровень 1 ядра не обеспечивает всех возможностей Кобола для уточнений, правил образования имен данных и стандартных констант. Уровень 1 ядра предоставляет возможности доступа к элементам трехмерных таблиц фиксированной длины. Уровень 1 ядра предоставляет возможности отладки, состоящие из переключателя, действующего во время компиляции, и отладочных строк.
    Уровень 2 ядра предоставляет полные возможности параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) и статьи описания данных. В разделе процедур уровень 2 предоставляет полные возможности операторов ACCEPT (ПРИНЯТЬ), ADD (СЛОЖИТЬ), ALTER (ИЗМЕНИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DISPLAY (ВЫДАТЬ), DIVIDE (РАЗДЕЛИТЬ), EVALUATE (ОЦЕНИТЬ), IF (ЕСЛИ), INITIALIZE (ИНИЦИИРОВАТЬ), INSPECT (ПРОСМОТРЕТЬ), MOVE (ПОМЕСТИТЬ), MULTIPLY (УМНОЖИТЬ), PERFORM (ВЫПОЛНИТЬ), SEARCH (ИСКАТЬ), SET (УСТАНОВИТЬ), STRING (СОБРАТЬ), SUBTRACT (ОТНЯТЬ), UNSTRING (РАЗОБРАТЬ). Уровень 2 ядра предоставляет полные возможности уточнений, правил образования имен данных и стандартных констант. Уровень 2 ядра предоставляет возможности доступа к элементам таблиц до семи измерений.

    1.3.Ограничения по уровням, касающиеся общих характеристик языка
    1.3.1.Набор литер
    Литера Кобола двоеточие (:) не включена в уровень 1.
    Литера Кобола двоеточие (:) допустима на уровне 2.

    1.3.2.Представление имен
    Уточнение не допускается на уровне 1.
    На уровне 1 все определяемые пользователем слова, к которым имеется обращение, за исключением номеров уровней и номеров сегментов, должны быть уникальны. На уровне 2 допускается 50 уточнителей. На этом уровне определяемые пользователем слова могут быть не уникальны.
    1.3.3.Стандартные константы
    На уровне 1 могут быть использованы следующие стандартные константы: ZERO (НУЛЬ), ZEROS (НУЛИ), ZEROES (НУЛИ), SPACE (ПРОБЕЛ), SPACES (ПРОБЕЛЫ), HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ), HIGH-VALUES (НАИБОЛЬШИЕ-ЗНАЧЕНИЯ), LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), LOW-VALUES (НАИМЕНЬШИЕ-ЗНАЧЕНИЯ), QUOTE (КАВЫЧКА) и QUOTES (КАВЫЧКИ).
    1.3.4. Индексы
    1.3.6. Формат представления

    2.ИСХОДНАЯ ПРОГРАММА НА КОБОЛЕ
    2.1.Общее описание
    Исходная программа на Коболе представляет собой набор синтаксически правильных операторов Кобола.
    2.2.Организация
    За исключением операторов COPY (КОПИРОВАТЬ), REPLACE (ЗАМЕНИТЬ) и заголовка конца программы, операторы, статьи, параграфы и секции исходной Кобол-программы делятся на 4 раздела, расположенных в следующем порядке:
    (1) раздел идентификации;
    (2) раздел оборудования;
    (3) раздел данных;
    (4) раздел процедур.

    2.3.Структура
    Далее дается общий формат и порядок следования статей и операторов, составляющих исходную Кобол-программу.
    2.3.1.Общий формат раздел-идентификации
    [раздел-оборудования]
    [раздел-данных]
    [раздел-процедур]
    [заголовок-конца-программы]

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

    2.3.3.Общие правила
    а) заголовком следующего раздела программы;
    б) заголовком конца программы;
    в) такой физической позицией, после которой нет больше строк исходной программы.
    (1) Начало раздела в программе идентифицируется соответственно заголовком раздела. Конец раздела идентифицируется:
    2.4.Заголовок конца программы
    (2) В последовательности программ все отдельно компилируемые программы должны быть ограничены заголовком конца программы за исключением последней программы в последовательности. 2.4.1. Назначение Заголовок конца программы идентифицирует конец именованной исходной Кобол-программы. 2.4.2. Общий формат END PROGRAM имя-программы. КОНЕЦ ПРОГРАММЫ имя-программы. 2.4.3. Синтаксические правила (1) Имя-программы должно формироваться по правилам образования слов, определенных пользователем. (2) Имя-программы должно быть идентично имени программы, названному в предшествующем параграфе PROGRAM-ID (ПРОГРАММА) (п.3.3 настоящей части). 2.4.4. Общие правила (1) Заголовок конца программы идентифицирует конец указанной исходной Кобол-программы. (2) Следующим оператором после заголовка конца программы может быть только заголовок раздела идентификации программы, компилируемой отдельно от программы, ограниченной заголовком конца программы.

    3.РАЗДЕЛ ИДЕНТИФИКАЦИИ В ЯДРЕ
    3.1.Общее описание
    Раздел идентификации идентифицирует программу. Раздел идентификации обязателен в каждой исходной Кобол-программе. К тому же пользователь может включать дату написания программы и другую требуемую информацию в параграфы, общий формат которых показан ниже.
    3.2.Организация
    Заголовки параграфов идентифицируют тип информации, содержащейся в параграфе. Имя программы должно быть дано в первом параграфе, которым является параграф PROGRAM-ID (ПРОГРАММА). Другие параграфы необязательны и могут быть включены в раздел по желанию пользователя в порядке, указанном в общем формате.
    Параграф AUTHOR (АВТОР), параграф INSTALLATION (ПРЕДПРИЯТИЕ), параграф DATE-WRITTEN (ДАТА-НАПИСАНИЯ), параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) и параграф SECURITY (ПОЛНОМОЧИЯ) рассматриваются в настоящем стандарте как устаревшие и будут удалены в следующей редакции стандарта.
    3.2.1.Структура
    3.2.1.1.Общий формат

    3.2.1.2.Синтаксическое правило
    (1) Статья-комментарий может быть любой комбинацией литер из набора литер машины. Перенос слов статьи-комментария посредством использования дефиса в поле индикатора не допускается, хотя статья-комментарий может располагаться на одной или нескольких строках.
    Далее следует общий формат параграфов раздела идентификации, определяющий порядок их следования в исходной программе.
    В пп.3.3 и 3.4 настоящей части определяются параграф PROGRAM-ID (ПРОГРАММА) и параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ). Определения остальных параграфов не приводятся, так как они аналогичны.
    3.3.Параграф PROGRAM-ID (ПРОГРАММА)
    3.3.1.Назначение
    Параграф PROGRAM-ID (ПРОГРАММА) указывает имя, с помощью которого идентифицируется программа.
    3.3.2.Общий формат
    PROGRAM-ID. имя-программы.
    ПРОГРАММА. имя-программы.
    3.3.3.Синтаксическое правило.
    (1) Имя-программы должно формироваться по правилам образования слов, определенных пользователем.
    3.3.4.Общее правило
    (1) Имя-программы идентифицирует исходную программу, объектную программу и все относящиеся к ней выдачи.
    3.4.Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ)
    3.4. Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) 3.4.1. Назначение Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) обеспечивает включение даты компиляции в выдачи раздела идентификации исходной программы. Параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) рассматривается в настоящем стандарте как устаревший элемент и будет удален в следующей редакции стандарта. 3.4.2. Общий формат DATE-COMPILED. [статья-комментарий] ... ДАТА-ТРАНСЛЯЦИИ. [статья-комментарий] ... 3.4.3. Синтаксическое правило (1) Статья-комментарий может представлять любую комбинацию литер из допустимого набора литер. Перенос слов статьи-комментария с помощью дефиса в поле индикатора не разрешается, однако статья-комментарий может занимать более одной строки. 3.4.4. Общее правило (1) Имя параграфа DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) вызывает во время компиляции программы включение текущей даты в выдаваемый текст. Если параграф DATE-COMPILED (ДАТА-ТРАНСЛЯЦИИ) указан, он заменяется во время компиляции параграфом следующей формы: DATE-COMPILED. текущая-дата. ДАТА-ТРАНСЛЯЦИИ. текущая-дата.

    4.РАЗДЕЛ ОБОРУДОВАНИЯ В ЯДРЕ
    4.1.Общее описание
    Раздел оборудования определяет стандартный метод описания таких аспектов обработки данных, которые зависят от физических характеристик конкретной машины. Раздел оборудования не обязателен в исходной Кобол-программе.
    4.2.Секция конфигурации
    Секция конфигурации располагается в разделе оборудования исходной программы. Секция конфигурации связана с характеристиками исходной машины и рабочей машины. В этой секции также обеспечиваются средства спецификации валютного знака; выбора символа для десятичной точки; установления соответствия между мнемоническими именами, задаваемыми пользователем, и именами реализации; установления соответствия имени алфавита набору литер и (или) основной последовательности; установление соответствия имени класса набору литер. Секция конфигурации не обязательна в разделе оборудования исходной Кобол-программы.

    Общий формат секции конфигурации приводится ниже.

    Секция конфигурации не должна содержаться в программе, которая косвенно или непосредственно содержится в другой программе.
    Статьи, явно или неявно присутствующие в секции конфигурации программы, включающей другие программы, относятся к каждой содержащейся программе.
    4.3.Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА)
    4.3.1.Назначение
    Параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) описывает вычислительную машину, на которой должна компилироваться программа.
    4.3.2.Общий формат

    4.3.3.Синтаксическое правило
    Имя-машины является системным именем.
    4.3.4.Общие правила
    (1) Все фразы, явно или неявно указанные в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА), применимы как в программе, в которой они указаны, так и в любой содержащейся в ней программе.
    (2) Если параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) не определен и программа не содержится в другой программе, содержащей такой параграф, то машина, на которой будет компилироваться исходная программа, является исходной машиной.
    (3) Если параграф SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) определен, но фраза, указывающая машину, не определена, то машина, на которой будет компилироваться исходная программа, будет исходной машиной.
    (4) Если в программе указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), то все отладочные строки компилируются так, как это определено в настоящем документе для ядра (п.7.1 настоящей части).
    (5) Если в программе не указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) и программа не включается в другую программу, содержащую такую фразу, то отладочные строки компилируются как комментарии.
    4.4.Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА)
    4.4.1.Назначение
    Параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) обеспечивает средства описания машины, на которой программа будет выполняться. Фраза MEMORY SIZE (РАЗМЕР ПАМЯТИ) рассматривается в настоящем стандарте как устаревший элемент стандарта и будет удалена в последующей редакции стандарта.
    4.4.2.Общий формат

    4.4.3.Синтаксические правила
    (1) Имя-машины является системным именем.
    4.4.4.Общие правила
    (1) Имя-машины может служить для определения конфигурации оборудования; в этом случае имя-машины и ее подразумеваемая конфигурация задаются каждой реализацией. Определение конфигурации содержит специальную информацию, касающуюся размера памяти.
    Если подмножество, задаваемое пользователем, меньше минимальной конфигурации, требуемой для выполнения объектной программы, необходимые меры определяются реализацией.
    (2) Все фразы параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) применяются к программе, в которой они явно или неявно определены, и к любой содержащейся в ней программе.
    (3) При отсутствии параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) в программе и во всех программах, включающих данную программу, рабочая машина определяется реализацией.
    (4) Если параграф OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА) указан, но фраза, определяющая рабочую машину, не указана, рабочая машина определяется реализацией.
    (5) При наличии фразы PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) в программе используется основная последовательность, заданная именем-алфавита, указанным в этой фразе.
    (6) При отсутствии фразы PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) используется внутренняя основная последовательность.
    (7) Если задана фраза PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ), то для определения значения истинности нечисловых сравнений, явно указанных в условиях отношения (п.6.3.1.1 настоящей части), явно указанных в условиях имени-условия (п.6.3.1.3 настоящей части) или неявно указанных наличием фразы CONTROL (УПРАВЛЕНИЕ) в статье описания отчета (ч.13, п.3.7), используется основная последовательность, определяемая именем алфавита.
    (8) Программная основная последовательность, определенная в параграфе OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА), применяется к любым нечисловым ключам сортировки или слияния, если в соответствующих операторах SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) не задана фраза COLLATING SEQUENCE (АЛФАВИТ) (ч.11, пп.4.1, 4.4).
    4.5.Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА)
    4.5.1.Назначение
    Параграф SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) обеспечивает средства спецификации валютного знака; выбора символа для десятичной точки; установления соответствия между мнемоническими именами, задаваемыми пользователем, и именами реализации; установления соответствия имени алфавита набору литер или основной последовательности; установления соответствия имени класса набору литер.

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

    4.5.3.Синтаксические правила
    (1) Если имя-реализации-1 относится к внешнему переключателю, то соответствующее мнемоническое имя может быть указано только в операторе SET (УСТАНОВИТЬ).
    (2) Если имя-реализации-1 не относится к внешнему переключателю, то соответствующее мнемоническое имя может быть указано только в операторах ACCEPT (ПРИНЯТЬ), DISPLAY (ВЫДАТЬ), SEND (ПОСЛАТЬ), WRITE (ПИСАТЬ).
    (3) Во фразе имя-алфавита одно и то же значение литерала может указываться только один раз. (4) Если во фразе имя-алфавита указаны литералы, то: а) числовые литералы должны быть целыми без знака и иметь значения от 1 до целого, равного количеству литер во внутреннем наборе литер; б) нечисловые литералы, указанные после слов THROUGH (ПО) и ALSO (ТАКЖЕ), должны состоять из одной литеры. (5) Литерал-1, литерал-2, литерал-3, литерал-4 и литерал-5 не должны совпадать по написанию со стандартными константами, являющимися символическими литерами. (6) Слова THROUGH и THRU эквивалентны. (7) Во фразе SYMBOLIC CHARACTERS (СИМВОЛИЧЕСКАЯ ЛИТЕРА) одна и та же литера может встречаться только один раз. (8) Соответствие между символической-литерой-1 и целым-1 определяется позицией во фразе SYMBOLIC CHARACTERS (СИМВОЛИЧЕСКАЯ ЛИТЕРА). Первая символическая литера-1 соответствует первому целому-1, вторая - второму и так далее. (9) Между экземплярами символического-имени-1 и экземплярами целого-1 должно быть взаимно однозначное соответствие. (10) Порядковая позиция, определяемая целым-1, должна существовать во внутреннем наборе кодов литер. Если указана фраза IN (ИЗ), то эта порядковая позиция должна существовать в наборе литер, определяемом именем-алфавита-2.

    (11) Правила для литералов фразы литерал-4 следующие:
    а) числовые литералы должны быть целыми без знака и иметь значения от 1 до целого, равного количеству литер во внутреннем наборе литер;
    б) нечисловые литералы, указанные после слова THROUGH (ПО), должны состоять из одной литеры.
    (12) Литерал не должен быть стандартной константой.
    4.5.4.Общие правила
    а) если задана фраза STANDARD-R (СТАНДАРТ-Р), набор кодов литер или соответствующая основная последовательность определяется в соответствии с упорядоченностью русского алфавита.
    Если задана фраза STANDARD-1 (СТАНДАРТ-А), набор кодов литер или соответствующая основная последовательность определяется Американским Национальным Стандартным Кодом для Обмена Информацией, ХЗ.4-1968.
    Если задана фраза STANDARD-2 (СТАНДАРТ-М), то набор кодов определяется Международной версией 7-битового кода, определенной в Международном стандарте 646, 7-битовый Код литер для обмена информацией.
    Если между отдельными литерами стандартного и внутреннего наборов отсутствует соответствие, это соответствие устанавливает реализация;
    б) если задана фраза NATIVE (ВНУТРЕННИЙ), используется внутренний набор кодов литер или внутренняя основная последовательность;
    в) если задана фраза имя-реализации-2, набор кодов литер или соответствующая основная последовательность, а также их соответствие внутренней основной последовательности определяются реализацией. Реализация также определяет соответствие между литерами или литерой набора кодов литер, специфицированного фразой имя-реализации-2, и литерами внутреннего набора кодов литер;
    г) если фраза имя-алфавита содержит литералы, соответствующее имя-алфавита не может упоминаться во фразе CODE-SET (АЛФАВИТ) (ч.7, п.3.4), при этом основная последовательность определяется следующим образом: значение каждого числового литерала определяет порядковый номер литеры во внутреннем наборе литер; это значение не должно превосходить количество литер во внутреннем наборе литер; значение каждого нечислового литерала определяет явную литеру во внутреннем наборе литер. Если нечисловой литерал содержит несколько литер, каждая его литера, начиная с самой левой, ставится в соответствие последовательным возрастающим позициям в определяемой основной последовательности; порядок, в котором литералы появляются во фразе имя-алфавита, точно определяет используемую основную последовательность (в возрастающем порядке); не указанные явно литералами литеры внутренней основной последовательности занимают позиции в основной последовательности, следующие за явно заданными во фразе имя-алфавита литерами. Относительный порядок литер, не указанных в определяемой основной последовательности, соответствует внутренней основной последовательности;
    если задана фраза THROUGH (ПО), последовательность литер внутреннего набора, начиная от литеры, заданной значением литерала-1, и кончая литерой, заданной значением литерала-2, занимает последовательные позиции определяемой основной последовательности. Кроме того, последовательность литер, заданных фразой THRU (ПО), может задавать литеры внутреннего набора либо в возрастающем, либо в убывающем порядке;
    если указана фраза ALSO (ТАКЖЕ), литеры внутреннего набора, заданные значением литерала-1, литерала-3, литерала-4... , ставятся в соответствие одной и той же позиции определяемой основной последовательности или набора кодов литер, используемых для представления данных, и если имя-алфавита-1 используется во фразе SYMBOLIC CHARACTERS (СИМВОЛИЧЕСКАЯ ЛИТЕРА), то только литерал-1 используется для представления литеры во внутреннем наборе литер.
    (5) Литера, которая занимает самую старшую позицию в задаваемой программной основной последовательности, ставится в соответствие стандартной константе
    HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ), кроме случая, когда эта последняя стандартная константа используется в качестве литерала в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА).
    Если таких литер несколько, то стандартной константе HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ) ставится в соответствие литера, указанная последней из них.
    (6) Литера, которая занимает самую младшую позицию в задаваемой программной основной последовательности, ставится в соответствие стандартной константе LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), кроме случая, когда эта стандартная константа используется в качестве литерала в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА). Если таких литер несколько, стандартной константе LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ) ставится в соответствие литера, указанная первой из них. (7) Стандартные константы HIGH-VALUE (НАИБОЛЬШЕЕ-ЗНАЧЕНИЕ) и LOW-VALUE (НАИМЕНЬШЕЕ-ЗНАЧЕНИЕ), определенные как литералы в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА), соответствуют литерам, имеющим наибольшую и наименьшую позиции во внутренней основной последовательности. (8) Если не указана фраза IN (ИЗ), то символическая-литера-1 представляет литеру, чья порядковая позиция во внутреннем наборе определяется целым-1. Если фраза IN (ИЗ) указана, то целое-1 определяет порядковую позицию литеры, находящейся в наборе литер, названном именем-алфавита-2. (9) Внутреннее представление символической-литеры-1 является внутренним представлением литеры внутреннего набора.

    (10) Фраза CLASS (КЛАСС) обеспечивает соответствие имени, указанному во фразе набору литер. На имя-класса-1 можно ссылаться только в условии класса. Литеры, указанные значениями литералов в этой фразе, определяют набор литер, из которых состоит значение данного, принадлежащего к этому классу.
    Значение каждого литерала специфицирует:
    порядковый номер литеры во внутреннем наборе, если литерал числовой. Его значение не должно превышать числа литер во внутреннем наборе;
    действительное значение литеры во внутреннем наборе, если литерал нечисловой. Если значение нечислового литерала состоит из нескольких литер, то каждая литера литерала включается в набор литер, идентифицируемый именем-класса-1.
    Если фраза THROUGH (ПО) указана, то все литеры внутреннего набора, начиная с литеры, указанной значением литерала-4, и кончая литерой, указанной значением литерала-5, включаются в набор литер, идентифицируемый именем-класса-1. Кроме того, литеры, указанные во фразе THROUGH (ПО), могут определять литеры внутреннего набора в возрастающей или убывающей последовательности.
    (11) Литерал-6, указанный во фразе CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК), используется во фразе PICTURE (ШАБЛОН) для представления валютного символа. Литерал должен представлять одну литеру и не должен совпадать ни с одной из следующих литер:
    а) цифры: от 0 до 9;
    б) буквы прописные А, В, С, D, P, R, S, V, X, Y, Z (А, Б, В, Д, З, Р, К, М, П, Т, X) и строчные или пробел;
    в) специальные * литеры, +, -, ,, ., ;, (, ), ", /, =. Если эта фраза отсутствует, во фразе PICTURE (ШАБЛОН) используется только валютный символ из набора литер Кобола.
    (12) Фраза DECIMAL POINT IS СОММА (ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ) означает, что в строке-литер фразы PICTURE (ШАБЛОН) и в числовых литералах функции запятой и точки меняются местами.
    (1) Все фразы, указанные в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) некоторой программы, относятся ко всем содержащимся в ней программам. На определенные в данном параграфе имена условий можно ссылаться из любой включенной в эту программу программы.
    (2) Если имя-реализации-1 относится к внешнему переключателю, то состояния переключателя должны быть связаны с именами условий и опрашиваются посредством проверки имен условий (п.6.3.1.4 настоящей части).
    (3) Если имя-реализации-1 относится к внешнему переключателю, то состояние этого переключателя может быть изменено оператором SET (УСТАНОВИТЬ) формата 3, в качестве операнда которого указывается мнемоническое имя, связанное с этим переключателем (п.6.2.3 настоящей части). Разработчик определяет, какие внешние переключатели можно использовать в операторе SET (УСТАНОВИТЬ).
    (4) Указание имени-алфавита-1 обеспечивает средства присвоения некоторого имени заданному набору кодов литер и (или) основной последовательности. Если указанное имя-алфавита-1 используется во фразе PROGRAM COLLATING SEQUENCE (ПРОГРАММНЫЙ АЛФАВИТ) (см. п.4.4 настоящей части) или во фразе COLLATING SEQUENCE (АЛФАВИТ) оператора SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) (ч.11, пп.4.1, 4.4), фраза имя-алфавита задает основную последовательность. Если имя-алфавита-1 используется во фразе CODE-SET (АЛФАВИТ) в описании файла (ч.7, п.3.4), то фраза ALPHABET (имя-алфавита) определяет набор кодов литер:

    5.РАЗДЕЛ ДАННЫХ В ЯДРЕ
    5.1.Общее описание
    Раздел данных описывает данные, которые обрабатываются объектной программой. Раздел данных не обязателен в исходной Кобол-программе.
    5.2.Секция рабочей памяти
    Секция рабочей памяти входит в раздел данных исходной программы. Секция рабочей памяти описывает записи и их элементы, которые не являются частью файлов данных.
    Секция рабочей памяти составляется из заголовка секции, за которым следуют статьи описания записей и (или) статьи описания несвязанных данных. Общий формат секции рабочей памяти следующий:

    5.2.1.Несвязанные данные рабочей памяти
    Данные и константы в рабочей памяти, которые не имеют никакой иерархической связи друг с другом и которые в дальнейшем не потребуется подразделять, нет необходимости группировать в записи. Они классифицируются и определяются как несвязанные элементарные данные. Каждое из этих данных определяется отдельной статьей описания данного, которая начинается со специального номера уровня 77. В каждой статье описания таких данных обязательны следующие фразы: номер уровня 77, имя-данного, PICTURE (ШАБЛОН) или USAGE IS INDEX (ДЛЯ ИНДЕКСА).
    Другие фразы описания данного не обязательны, но могут, при необходимости, дополнять описание данного.
    5.2.2.Записи рабочей памяти
    Элементы данных и константы в рабочей памяти, которые находятся в определенной иерархической связи друг с другом, должны быть сгруппированы в записи согласно правилам образования описания записи. Элементы данных, не находящиеся в иерархической связи друг с другом, могут быть описаны как записи из одного элементарного данного. Фразы, допустимые в описании записей в секции файлов, могут быть использованы для описания записей рабочей памяти.
    5.2.3.Структура описания записи
    Описание записи состоит из набора статей описания данных, которые описывают характеристики отдельной записи. Каждая статья описания данного состоит из номера уровня, за которым может следовать имя данного или фраза FILLER (ЗАПОЛНИТЕЛЬ), после чего следует, если это требуется, ряд независимых фраз. Описание записи может иметь иерархическую структуру, поэтому фразы, используемые в отдельных статьях, могут сильно отличаться, в зависимости от наличия подчиненных статей. Структура описания записи и разрешенные элементы в статье описания записи объясняются в ч.4, п.4.3.2 и в п.5.3 настоящей части.
    5.2.4.Начальные значения
    Начальное значение любого данного в секции рабочей памяти, за исключением индексного данного, задается в описании данного фразой VALUE (ЗНАЧЕНИЕ). Начальное значение индексного данного и данного, не связанного с фразой VALUE (ЗНАЧЕНИЕ), не определено.
    5.3.Статья описания данного
    5.3.1.Назначение
    Статья описания данного задает характеристики отдельного данного.
    5.3.2.Общий формат
    Формат 1

    5.3.3.Синтаксические правила
    (1) Номер уровня в формате 1 может быть любым числом от 01 до 49, или 77.
    (2) В формате 1 имя-данного-1 или фраза FILLER (ЗАПОЛНИТЕЛЬ), если она указана, должны непосредственно следовать за номером уровня. Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), если она указана, должна непосредственно следовать за именем-данного-1 или фразой FILLER (ЗАПОЛНИТЕЛЬ), если они указаны, иначе она должна непосредственно следовать за номером уровня. Остальные фразы могут следовать в любом порядке.
    (3) Фраза PICTURE (ШАБЛОН) должна быть задана для каждого элементарного данного, за исключением индексного данного, для которого употребление этой фразы запрещено.
    (4) Слова THRU и THROUGH эквивалентны.
    5.3.4.Общие правила
    (1) Фразы SYNCHRONIZED (ВЫДЕЛЕНО), PICTURE (ШАБЛОН), JUSTIFIED (СДВИНУТО) и BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) могут задаваться только для элементарного данного.
    (2) Формат 3 используется для имени условия. Каждое имя условия определяется отдельной статьей с номером уровня 88. В формате 3 указывается имя-условия, а также одно значение, несколько значений или диапазон значений, связанных с именем-условия. Статьи имени условия для конкретной условной переменной должны следовать за статьей, описывающей данное, к которому относится имя-условия. Имя-условия может относиться к любому элементарному или групповому данному, за исключением другого имени условия, индексного данного, данного с номером уровня 66, или группы, содержащей данные с описанием, включающим фразы JUSTIFIED (СДВИНУТО), SYNCHRONIZED (ВЫДЕЛЕНО) или фразу об использовании (кроме варианта USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ)).

    (3) Несколько статей с номером уровня 01, подчиненных одному и тому же заданному индикатору уровня, отличному от индикатора уровня RD (00) для статьи описания отчета, переопределяют одно и то же поле памяти.
    5.4.Фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ)
    5.4.1.Назначение
    Фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) позволяет заменить данное пробелом, когда его значение является нулевым.
    5.4.2.Общий формат
    BLANK WHEN ZERO
    ПРОБЕЛ КОГДА НУЛЬ
    5.4.3.Синтаксические правила
    (1) Фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) может быть использована только для элементарного данного, шаблон которого определен как числовой или числовой редактируемый (п.5.9 настоящей части).
    (2) Числовые и числовые редактируемые данные, описанные с фразой BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ), должны быть явно или неявно описаны как USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ).
    5.4.4.Общие правила
    (1) Если в описании данного указана фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ), и значение этого данного равно нулю, это данное заменяется пробелами.
    (2) Если в данном, имеющем числовой шаблон, использована фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ), категория данного считается числовой редактируемой.
    5.5.Фраза имя-данного или FILLER (ЗАПОЛНИТЕЛЬ)
    5.5.1.Назначение
    Имя данного задает имя описываемого данного. Слово FILLER (ЗАПОЛНИТЕЛЬ) задает элементарное данное в логической записи, к которому явно нельзя обращаться.
    5.5.2.Общий формат

    5.5.3.Синтаксические правила
    (1) В секциях рабочей памяти, коммуникации, связи или в секции файлов имя-данного или слово FILLER (ЗАПОЛНИТЕЛЬ), если одно из них указано, должны непосредственно следовать в статье описания данного за номером уровня.
    (2) ЗАП является сокращением слова ЗАПОЛНИТЕЛЬ.
    5.5.4.Общие правила
    (1) Если эта фраз опущена, то считается, что в описании данного указана фраза FILLER (ЗАПОЛНИТЕЛЬ).
    (2) Слово FILLER (ЗАПОЛНИТЕЛЬ) может быть использовано в качестве имени элементарного данного в записи. К данному FILLER (ЗАПОЛНИТЕЛЬ) запрещено явное обращение.
    Тем не менее, слово FILLER (ЗАПОЛНИТЕЛЬ) может использоваться в качестве условной переменной, что не требует явного обращения к данному, названному FILLER (ЗАПОЛНИТЕЛЬ) (а только к его значению).

    5.6.Фраза JUSTIFIED (СДВИНУТО)
    5.6.1.Назначение
    Фраза JUSTIFIED (СДВИНУТО) задает нестандартное расположение данных в поле, отведенном для данного.
    5.6.2.Общий формат

    5.6.3.Синтаксические правила
    (1) Фраза JUSTIFIED (СДВИНУТО) может быть задана только на уровне элементарного данного.
    (2) Фраза JUST является сокращением JUSTIFIED.
    (3) Фраза JUSTIFIED (СДВИНУТО) не может быть задана для данного, описанного как числовое, числовое редактируемое или буквенно-цифровое редактируемое.
    (4) Фраза JUSTIFIED (СДВИНУТО) не может быть задана для индексного данного.
    5.6.4.Общие правила
    (1) Если принимающее данное описывается с фразой JUSTIFIED (СДВИНУТО) и пересылаемое данное по размеру больше принимающего, то отбрасываются самые левые литеры. Если описание принимающего данного имеет JUSTIFIED (СДВИНУТО) и его размер превышает размер пересылаемого данного, то пересылаемое значение располагается с выравниванием к самой правой позиции литеры и дополняется слева пробелами.
    (2) Если фраза JUSTIFIED (СДВИНУТО) опущена, применяются стандартные правила выравнивания элементарных данных (см. ч.4, п.4.3.6).
    5.7.Номер уровня
    5.7.1.Назначение
    Номер уровня указывает на иерархию данных внутри логической записи. Кроме того, он используется, чтобы определить статьи для данных рабочей памяти, данных связи, .
    5.7.2.Общий формат номер-уровня
    5.7.3.Синтаксические правила
    (1) Номер-уровня обязательно должен быть первым элементом в каждой статье описания данного.
    (2) Статьи описания данных, подчиненных статьям FD (ОФ), CD (OK) или SD (ОС), должны иметь номера уровней от 01 до 49, .
    (3) Статьи описания данных в секции рабочей памяти и секции связи должны иметь номера уровней от 1 до 49, 77 .
    5.7.4.Общие правила
    а) номер-уровня 77 присваивается для определения несвязанных данных рабочей памяти, несвязанных данных, используемых для связи, и может быть использован только в формате 1 статьи описания данных (см. п.5.3 настоящей части);
    б) номер-уровня 66 определяет статью переименования и может использоваться только в формате 2 статьи описания данных (см. п.5.3 настоящей части); в) номер-уровня 88 присваивается статьям, которые определяют имена условий, связанных с условными переменными, и может быть использован только в формате 3 статьи описания данных (см. п.5.3 настоящей части).

    (3) Несколько статей уровня 01, подчиненных одному и тому же индикатору уровня, отличному от RD (ОО), неявно переопределяют одно и то же поле памяти.
    (1) Номер уровня 01 определяет первую статью в каждом описании записи.
    (2) Отдельным статьям, для которых понятие уровня не имеет смысла, присваиваются специальные номера-уровня:
    5.8.Фраза OCCURS (ПОВТОРЯЕТСЯ)
    5.8.1.Назначение
    Фраза OCCURS (ПОВТОРЯЕТСЯ) исключает необходимость отдельных статей описания для повторяющихся данных и дает необходимую информацию для индексирования.
    5.8.2.Общий формат
    Формат 1

    5.8.3.Синтаксические правила
    (1) Фраза OCCURS (ПОВТОРЯЕТСЯ) не может быть задана в статьях описания данных с номерами уровней 01, 77,
    88 и в статьях описания данных, имеющих подчиненными переменно повторяющиеся данные. (2) Имя-данного-1 имя-данного-2 могут быть уточнены. (3) Имя-данного-2 должно быть либо именем статьи, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ), либо именем статьи, подчиненной статье, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ). (4) Имя-данного-2 должно быть указано без требуемого для него индексирования. (5) Если указаны целое-1 и целое-2, то целое-1 должно быть больше или равно 0, а целое-2 должно быть больше целого-1. (6) Имя-данного-1 должно быть описано как целое. (7) В формате 2 данное, определенное именем-данного-1, не должно располагаться в области памяти, занимаемой данным, статья описания которого содержит фразу OCCURS (ПОВТОРЯЕТСЯ).

    (8) Если фраза OCCURS (ПОВТОРЯЕТСЯ) указана в статье описания данного, включенного в статью описания записи, содержащую фразу EXTERNAL (ВНЕШНЕЕ), то имя-данного-1, если оно указано, должно ссылаться на данное, описанное в том же разделе данных, со свойством EXTERNAL (ВНЕШНЕЕ).
    (9) Если фраза OCCURS (ПОВТОРЯЕТСЯ) указана в статье описания данного, подчиненного статье, содержащей фразу GLOBAL (ГЛОБАЛЬНОЕ), то имя-данного-1, если оно указано, должно быть глобальным именем и должно ссылаться на данное, описанное в том же разделе данных.
    (10) За статьей описания данного, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ) формата 2, могут следовать только подчиненные ей статьи описания данных. (11) Данное, определяемое именем-данного-2, не должно содержать фразу OCCURS (ПОВТОРЯЕТСЯ) за исключением случая, когда имя-данного-2 является субъектом статьи. (12) Между статьями описания данных, указанными именами данных в варианте KEY IS (ПО ВОЗРАСТАНИЮ/УБЫВАНИЮ КЛЮЧА), и предметом этой статьи не должно быть статьи, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ).

    (13) Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ) обязательна, если обращение к предмету этой статьи или статьи, ей подчиненной, осуществляется с помощью имени-индекса. Имя-индекса, идентифицируемое этой фразой, не определяется в исходной программе, так как его размещение и формат зависят от машины, и, не будучи данными, имена индексов не могут быть связаны с какой-либо структурой данных.
    (14) Имя-индекса-1 должно быть однозначным.
    5.8.4.Общие правила
    а) в формате 1 значение целого-2 представляет точное число повторений;
    б) в формате 2 текущее значение данного, именуемого именем-данного-1, представляет число повторений. Формат 2 указывает, что предмет статьи имеет переменное число повторений. Значение целого-2 представляет максимальное число повторений, а значение целого-1 - минимальное. Это не означает, что размер предмета статьи переменный, а говорит лишь только о том, что переменно число его повторений. Всякий раз, когда ссылаются на предмет статьи или на подчиненное ему данное или на данное, которому подчиняется предмет статьи, значение данного, определенное именем-данного-1, должно принадлежать диапазону от целого-1 до целого-2. Значения данных, номера вхождений которых превышают значение имени-данного-1, не определены. (3) При обращении к групповому данному, содержащему данное, в статье описания которого содержится фраза OCCURS (ПОВТОРЯЕТСЯ) формата 2, используется только часть области таблицы, определяемая следующим образом:
    а) если данное, определяемое именем-данного-1, не входит в группу, то используется только часть области таблицы, определяемая значением имени-данного-1 в момент начала обработки;
    б) если данное, определенное именем-данного-1, входит в группу и групповое данное пересылается, то в пересылке будет использоваться только часть области таблицы, определенная значением имени-данного-1 в момент начала работы. Если группа есть принимающее данное, то будет использоваться максимальная длина группы.
    (4) Вариант DESCENDING (ASCENDING) KEY (ПО УБЫВАНИЮ/ВОЗРАСТАНИЮ КЛЮЧА) указывает, что повторяющиеся данные упорядочены в возрастающем или убывающем порядке в соответствии со значениями имени-данного-2, имени-данного-3 и т.д. Возрастающий или убывающий порядок определяется в соответствии с правилами сравнения операндов (пп.6.3.1.1.1 и 6.3.1.1.2 настоящей части). Имена-данных перечисляются в порядке уменьшения значимости.
    (5) Если формат 2 используется в статье описания записи и соответствующее описание файла или описание сортируемого-сливаемого файла содержит вариант VARYING (ПЕРЕМЕННОЕ ЧИСЛО) во фразе RECORD (В ЗАПИСИ), то запись имеет переменную длину. Если вариант DEPENDING ON (В ЗАВИСИМОСТИ ОТ) во фразе RECORD (В ЗАПИСИ) не указан, то значение данного, определяемого именем-данного-1 во фразе OCCURS (ПОВТОРЯЕТСЯ), должно быть установлено на число записываемых повторений до выполнения любого из операторов RELEASE (ПЕРЕДАТЬ), REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ).

    (1) Исключая фразу OCCURS (ПОВТОРЯЕТСЯ), все фразы описания данных, относящиеся к данному, описание которого включает фразу OCCURS (ПОВТОРЯЕТСЯ), применяются к каждому вхождению описанного данного.
    (2) Число вхождений предмета статьи определяется следующим образом:
    5.9.Фраза PICTURE (ШАБЛОН)
    5.9.1.Назначение
    Фраза PICTURE (ШАБЛОН) описывает общие характеристики и требования редактирования элементарного данного.
    5.9.2.Общий формат

    5.9.3.Синтаксические правила
    (1) Фраза PICTURE (ШАБЛОН) может быть задана только на уровне элементарного данного.
    (2) Строка-литер содержит отдельные допустимые комбинации литер из набора литер, используемых в качестве символов шаблона. Для каждой категории элементарного данного определены допустимые комбинации символов шаблона.
    (3) Для символов шаблона А, В, Р (М), S (З), V (T), X, Z (П), CR (КP), DB (ДБ) строчные буквы эквивалентны в описании строки литер шаблона прописным буквам. Остальные строчные буквы не эквивалентны соответствующим прописным буквам.
    (4) Строка-литер может содержать не более 30 литер.
    (5) Фраза PICTURE (ШАБЛОН) должна быть определена для каждого элементарного данного, за исключением индексного данного В этих случаях использование фразы PICTURE (ШАБЛОН) запрещено.
    (6) PIC (Ш) есть сокращение слова PICTURE (ШАБЛОН).
    (7) Звездочка в строке-литер, используемая как символ подавления нуля, и фраза BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) не могут появляться в одной и той же статье.
    5.9.4.Общие правила
    (1) Имеется пять категорий данных, которые могут быть описаны фразой PICTURE (ШАБЛОН): буквенная, числовая, буквенно-цифровая, буквенно-цифровая редактируемая и числовая редактируемая.
    (2) Данное определяется как буквенное, если:
    строка-литер его шаблона содержит только символ А;
    его значение, будучи представлено в стандартном формате данных, является любой комбинацией одной или более буквенных литер алфавита.
    (3) Данное определяется как числовое, если:
    строка литер шаблона данного состоит только из символов 9, Р (М), S (З) и V (T), при этом количество цифровых позиций, задаваемых строкой-литер шаблона, должно быть от 1 до 18 включительно;
    значение данного, будучи представлено в стандартном формате данных, может быть комбинацией цифр; оно может также включать знак числа.
    (4) Данное определяется как буквенно-цифровое, если:
    строка-литер шаблона данного ограничивается некоторыми комбинациями символов А, X, 9, при этом данное обрабатывается так, будто строка-литер шаблона содержит только литеры X. Строка-литер шаблона, которая состоит только из литер А или только из литер 9, не определяет буквенно-цифровое данное;
    значение данного, будучи представлено в стандартном формате данных, состоит из любых литер набора литер машины.
    (5) Данное определяется как буквенно-цифровое редактируемое если:
    строка-литер шаблона данного представляется некоторыми комбинациями символов А, X, 9, В, 0 (нуль) или /, при этом должна содержать по крайней мере один из символов А или X и по крайней мере один из символов В, 0 (нуль) или /;
    значение данного, будучи представлено в стандартном формате данных, состоит из любых литер набора литер машины.
    (6) Данное определяется как числовое редактируемое, если:
    строка-литер его шаблона представляется некоторыми комбинациями символов В, /, Р (М), V (T), Z (П), 0, 9, ., │ *, +, -, CR(КP), DB (ДБ) и символа валютного знака; допустимые комбинации этих символов определяются правилами предшествования символов и редактирования. Максимальное число цифровых позиций данного, определяемых строкой-литер, равно 18. Строка-литер должна содержать по крайней мере один из символов 0, В, /, Z (П), *, +, ,, ., -, CR (КP), DВ (ДБ) или символ валютного знака;
    содержимое каждой из позиций литер должно соответствовать указанному для нее символу шаблона.
    (7) Размер элементарного данного (число позиций литер в терминах стандартного формата данных, занимаемых элементарным данным) определяется числом допустимых символов, определяющих позиции литер.
    Целое, заключенное в круглые скобки и следующее за символами А, │ X, 9, Р (М), Z (П), *, +, В, 0, /, - или валютным знаком, указывает число повторений символа. Символы S (З), V (T), ., CR (КP), DВ (ДБ) могут появляться в одном шаблоне только один раз.
    (8) Функции символов, используемых для описания элементарного данного, поясняются ниже:
    А - каждый символ А в строке-литер представляет позицию литеры, которая может содержать только букву или пробел.
    В - каждый символ В в строке-литер представляет позицию, в которую будет помещена литера пробела.
    Р (М) - каждый символ Р (М) указывает на подразумеваемую десятичную позицию; кроме того, если точка не находится между цифрами, представляющими число, литеры Р (М) используются для указания места подразумеваемой десятичной точки. Литеры Р (М) не учитываются при определении размера данного. Литеры Р (М) учитываются при определении максимального числа цифровых позиций (не превышающего 18) в числовых редактируемых данных или в данных, которые появляются в качестве операндов в арифметических операторах. Литеры Р (М) могут появляться в строке-литер шаблона только справа или только слева в виде непрерывной последовательности. Так как литера Р (М) предполагает наличие подразумеваемой десятичной точки (слева от всех Р (М), если все Р (М) являются самыми левыми литерами шаблона, и справа от всех Р (М), если все Р (М) являются самыми правыми литерами шаблона), символ подразумеваемой точки V (T) является излишним. Литера Р (М) и литера вставки "." не могут использоваться одновременно в одной и той же строке-литер шаблона.
    Если в некоторой операции ссылаются на данное, шаблон которого содержит символ Р (М), то в ней используется алгебраическое значение данного, а не его действительное литерное представление. Это алгебраическое значение предполагает наличие десятичной точки на указанной позиции и нуля на десятичной позиции, указанной символом Р (М). Размер значения определяется общим числом десятичных позиций, представленных в шаблоне. Вышесказанное относится к следующим операциям:
    любым операциям, требующим пересылки числового операнда;
    оператору MOVE (ПОМЕСТИТЬ), в котором пересылаемый операнд является числовым и его шаблон содержит символ Р (М);
    оператору MOVE (ПОМЕСТИТЬ), в котором пересылаемый операнд является числовым редактируемым и его шаблон содержит символ Р (М), а принимающий операнд является числовым или числовым редактируемым;
    операции сравнения, в которой оба операнда числовые.
    Во всех других операциях десятичные позиции, определенные при помощи символа Р(М), игнорируются и не учитываются при подсчете размера операнда.
    S (З) - символ S (З) используется в строке-литер для указания наличия знака числа, не определяя при этом позицию или представление знака. Символ S (З) должен быть записан как самая левая литера в шаблоне. Символ S (З) не учитывается при определении размера элементарного данного, если статья описания этого данного не содержит фразу SEPARATE CHARACTER (ЗНАК ОТДЕЛЬНО) (п.5.12 настоящей части).
    V (T) - символ V (T) используется в строке-литер для указания расположения подразумеваемой десятичной точки и может появляться в строке-литер только один раз. Символ V (T) не представляет позицию литеры и поэтому не учитывается при определении размера элементарного данного. Если подразумеваемая десятичная точка находится справа от самого правого символа в строке, символ V (T) является излишним и может быть опущен.
    X - каждый символ X в строке-литер представляет позицию литеры, содержащую любую допустимую литеру из набора литер машины и подсчитывается при определении размера данного.
    Z (П) - каждый символ Z (П) в строке-литер представляет левые ведущие позиции цифр числа, которые должны быть заменены пробелами, если содержимое этих позиций окажется нулем. Каждый символ Z (П) подсчитывается при определении размера данного.
    9 - каждый символ 9 в строке-литер представляет позицию литеры, содержащую цифру и учитывается при определении размера данного.
    0 - каждый символ 0 (нуль) в строке-литер представляет позицию литеры, в которую будет помещен числовой нуль. 0 подсчитывается при определении размера данного.
    / - каждый символ / (дробная черта) в строке-литер представляет позицию литеры, в которую будет помещена дробная черта. Символ / подсчитывается при определении размера данного.
    , - каждый символ , (запятая) в строке-литер представляет позицию литеры, в которую будет помещена литера , . Эта позиция литеры подсчитывается при определении размера данного.
    . - символ . (точка) появляется в строке-литер в качестве peдактирующего символа, представляющего десятичную точку, по которой происходит выравнивание и, кроме того, представляет позицию, в которую будет помещена литера ".". Литера "." подсчитывается при определении размера данного. Для данной программы функции точки и запятой меняются, если в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) приведена фраза DECIMAL POINT IS СОММА (ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ); в этом случае правила для точки применяются к запятой и правила для запятой применяются к точке, где бы они ни встречались во фразе PICTURE (ШАБЛОН).
    +, -, CR (КP), DВ (ДБ) - эти символы при использовании представляют позицию литеры, в которую будет помещен редактирующий символ, управляемый знаком. Эти символы являются взаимно исключающими в любой строке-литер, и каждая литера, используемая в качестве символа редактирования, подсчитывается при определении размера данного.
    * - каждый символ * (звездочка) в строке-литер представляет позицию ведущей числовой литеры, в которую, если содержимое этой позиции окажется нулем, будет помещена звездочка. Каждый символ * подсчитывается при определении размера данного.
    Валютный символ - валютный символ в строке-литер представляет позицию литеры в данном, в которую должен быть помещен валютный знак. Валютный символ в строке-литер представляется либо валютным знаком, либо литерой, определенной во фразе CURRENCY SIGN (ВАЛЮТНЫЙ ЗНАК) в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА).
    Валютный символ учитывается при определении размера данного.
    5.9.5.Правила редактирования
    (1) Имеются два общих метода редактирования во фразе PICTURE (ШАБЛОН): либо путем вставки, либо путем подавления и замещения. Допустимы четыре типа редактирования вставкой:
    простая вставка;
    специальная вставка;
    фиксированная вставка;
    плавающая вставка.
    Имеются два типа редактирования посредством подавления и замещения нулей;
    подавление нуля и замещение пробелами;
    подавление нуля и замещение звездочками.
    (2) Тип редактирования, который может выполняться над данным, зависит от категории, к которой данное принадлежит. Ниже определяется тип редактирования, разрешенный для данной категории;
    Категория Тип редактирования
    Буквенная Никакой
    Числовая Никакой
    Буквенно-цифровая Никакой
    Буквенно-цифровая редактируемая Простая вставка 0, В и /
    Числовая редактируемая Все типы с учетом правила 3

    (3) Во фразе PICTURE (ШАБЛОН) редактирование плавающей вставкой и редактирование подавлением и замещением нуля взаимно исключаются. Во фразе PICTURE (ШАБЛОН) может быть использован только один тип замещения при подавлении нуля.
    (4) Редактирование простой вставкой указывается символами шаблона: , (запятая), В (пробел), / (дробная черта) и 0 (нуль). Литеры вставки учитываются при определении размера данного и представляют позицию в данном, в которую будет вставлена литера, соответствующая символу шаблона. Если литера вставки , (запятая) является последним символом в шаблоне, фраза PICTURE (ШАБЛОН) должна быть последней фразой статьи описания данного и за ней непосредственно должен следовать разделитель точка. В результате в статье описания данного появляется комбинация ",." или две последовательные точки, если используется фраза DECIMAL-POINT IS СОММА (ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ).
    (5) При редактировании специальной вставкой в качестве литеры вставки используется символ . (точка), которая кроме того служит для выравнивания. Литера вставки для явной десятичной точки учитывается при определении размера данного. В одной и той же строке-литер шаблона не разрешается использование подразумеваемой десятичной точки, представленной символом V (Т), и явной десятичной точки, представленной символом вставки. Если литера вставки является последней литерой шаблона, то фраза PICTURE (ШАБЛОН) должна быть последней фразой в статье описания данного и за ней непосредственно должен следовать разделитель точка. В результате в статье описания данного появляются две последовательные точки или комбинация,. , если используется фраза DECIMAL-POINT IS COMMA (ДЕСЯТИЧНАЯ ТОЧКА ЗАПЯТАЯ).
    Результатом редактирования специальной вставкой является появление литеры специальной вставки в значении данного на позиции, указанной в строке-литер шаблона.
    (6) Редактирование фиксированной вставкой указывается валютным символом и символами редактирования, управляемыми знаком: +, -, CR (КP), DВ (ДБ).
    В данной строке-литер шаблона может быть использован только один валютный символ и только один из символов редактирования, управляемых знаком. Если используются символы CR (КР) и DB (ДБ), они представляют две самые правые позиции литер и учитываются при определении размера данного. Если используется символ + или -, он должен быть самой левой или самой правой позицией литеры, которая учитывается при определении размера данного. Валютный знак должен быть самой левой позицией литеры, кроме случаев, когда ему может предшествовать символ + или символ -; валютный знак учитывается при определении размера данного. При редактировании фиксированной вставкой в редактируемое данное помещается литера вставки, управляемая знаком, на позицию литеры, которую эта литера занимает в строке-литер шаблона.
    Зависимость результатов редактирования фиксированной вставкой от значения данного приведена ниже.
    Редактирующий символ в строке-литер шаблона Литеры вставки, появляющиеся в редактируемом данном
    Данное положительное или нуль Данное отрицательное
    + + -
    - Пробел -
    CR (КP) 2 пробела CR (КP)
    DB (ДБ) То же DB (ДБ)

    (7) Редактирование плавающей вставкой указывается валютным символом и редактирующими символами, управляемыми знаком + или -, которые являются литерами плавающей вставки, взаимно исключающими друг друга в данной строке-литер шаблона.
    Редактирование плавающей вставкой указывается в строке-литер шаблона цепочкой из двух или более литер плавающей вставки. Цепочка литер плавающей вставки может содержать любые символы фиксированной вставки или предшествовать литерам фиксированной вставки. Литеры простой вставки рассматриваются как часть цепочки литер плавающей вставки. Если литерой плавающей вставки является валютный символ, то цепочка литер плавающей вставки может содержать литеры фиксированной вставки CR (КР) или DB (ДБ) непосредственно справа от этой цепочки.
    Самая левая литера цепочки литер плавающей вставки предоставляет левую границу для размещения литеры плавающей вставки. Самая правая литера цепочки литер плавающей вставки представляет правую границу для размещения литеры плавающей вставки.
    Вторая слева литера плавающей вставки представляет левую границу числового данного, которое может быть помещено в поле данного. Ненулевые числовые данные могут располагаться, начиная от этой позиции, на любой позиции справа от этой границы.
    Строка-литер шаблона определяет два способа редактирования плавающей вставкой. Первый из них заключается в том, что некоторые или все ведущие позиции цифр слева от десятичной точки представляются литерой вставки; при втором способе позиции всех цифр в строке-литер шаблона представляются литерой вставки.
    Если литеры вставки находятся только слева от десятичной точки, то в результате редактирования единственная литера вставки размещается на позиции литеры, непосредственно предшествующей десятичной точке или первой ненулевой цифре в позициях данного, представленных цепочкой символов вставки (в зависимости от того, что встречается ранее в данном). Позиции литер, предшествующие литере вставки, замещаются пробелами.
    Если все позиции цифровых литер в строке-литер шаблона представляются литерой вставки, результат редактирования зависит от значения данных. Если значение равно нулю, все данное будет содержать пробелы. Если значение не равно нулю, результат будет таким, как если бы литеры вставки находились только слева от десятичной точки.
    Если все позиции цифровых литер в строке-литер шаблона представляются литерами вставки, то по крайней мере одна из литер вставки должна находиться слева от десятичной точки.
    Если цепочкой литер плавающей вставки являются управляющие символы редактирования + или -, то вставляемые литеры зависят от значения данного:
    Редактирующий символ в строке-литер шаблона Литеры вставки, появляющиеся в редактируемом данном
    Данное положительно или нуль Данное отрицательно
    + + -
    - Пробел -

    Если все позиции цифровых литер в строке-литер шаблона представлены литерами вставки, результат зависит от значения данного. Если значение нуль, то данное будет содержать пробелы. Если значение не нуль, то результат будет таким же, как и в случае, когда вставляемыми литерами являются литеры только слева от десятичной точки.
    Во избежание отбрасывания литер при перемещении данных, минимальный размер строки-литер шаблона для принимающего поля должен равняться числу литер пересылаемого данного плюс число литер фиксированной вставки в принимающем поле, плюс 1 для литеры плавающей вставки. Если же отбрасывание литер произошло, то значением данных для редактирования будет значение, полученное после отбрасывания литер.
    (8) Подавление ведущих нулей на позициях цифр указывается использованием литер Z (П) или* в качестве символов подавления в строке-литер шаблона. Эти символы являются взаимно исключающими в одной и той же строке-литер шаблона. Каждый символ подавления учитывается при определении размера данного. Если используется Z (П), литерой замещения будет пробел; если используется звездочка, литерой замещения будет *.
    Подавление и замещение нулей указывается в строке-литер шаблона цепочкой из одного или более символов подавления нуля в ведущих позициях цифр, которые должны быть заменены, если соответствующая позиция литеры в данных содержит нуль. Литеры простой вставки, находящиеся в этой цепочке символов или непосредственно справа от нее, рассматриваются как часть этой цепочки.
    В строке-литер шаблона имеется два способа представления подавления нуля: при первом способе некоторые или все ведущие позиции цифр слева от десятичной точки представляются символами подавления; другой способ заключается в представлении всех позиций цифр в строке-литер шаблона символами подавления.
    Если символы подавления оказались только слева от десятичной точки, то любой ведущий нуль в данном на позиции символа подавления в строке-литер шаблона заменяется на литеру замещения. Подавление заканчивается на первой ненулевой цифре из представленных строкой символов подавления или на десятичной точке, в зависимости от того, что встретилось первым.
    Если все позиции цифр в строке-литер шаблона представляются символами подавления и значение данных отлично от нуля, то результат является таким же, как в случае, если бы литеры подавления находились только слева от десятичной точки. Если значение является нулевым, то различаются следующие два случая: если символом подавления является Z (П), все данное, включая литеры редактирования, заменяется пробелами; если символом подавления является *, все данное, кроме явной десятичной точки, заменяется звездочками;
    (9) символы +, -, *, Z (П) и валютный знак при использовании в качестве плавающих литер замещения являются взаимно исключающими внутри одной строки-литер.
    5.9.6.Правила предшествования
    В таблице показан порядок предшествования при использовании литер в качестве символов строки-литер шаблона.
    Символ X в клетке таблицы указывает, что символы, используемые как заголовки соответствующих столбцов, могут предшествовать (но необязательно непосредственно) в строке шаблона символам, указанным в начале соответствующих строк таблицы. Символ "-" указывает на недопустимость такого предшествования. Заключенные в фигурные скобки символы являются взаимно исключающими. Валютный знак указывается с помощью символов "В. зн.".
    В строку литер шаблона должны входить по крайней мере один из символов А, X, Z (П), 9 или *, или по крайней мере два из символов + , -, или В.зн.
    Символы неплавающей вставки + и -, символы плавающей вставки Z (П), *, +, - и В. зн. и символ Р (М) встречаются дважды в таблице. Для каждого символа левый столбец и верхний ряд представляют использование этого символа слева от позиции десятичной точки. Правый столбец и нижний ряд представляют использование символа справа от позиции десятичной точки.
    5.10.Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ)
    5.10.1.Назначение
    Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) позволяет одну и ту же область памяти машины описывать различными статьями описания данных.
    5.10.2.Общий формат

    В вышеприведенном формате номер-уровня, имя-данного-1 и FILLER (ЗАПОЛНИТЕЛЬ) не являются частью фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и приведены для наглядности.
    5.10.3.Синтаксические правила
    (1) Фраза REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), если она указана, должна следовать непосредственно за субъектом статьи.
    (2) Номера уровней имени-данного-1 и имени-данного-2 должны быть одинаковыми .
    Второй символ Допустимость предшествования первого символа
    Символы фиксированной вставки Символы плавающей вставки Другие символы
    В 0 / , . В. зн В. зн В. зн 9 А X S (З) V (Т) P (М) P (М)
    Символы фиксированной вставки В x х x x x x - - x x x x x x x x x - x - x
    0 x x x x x x - - x x x x x x x x x - x - x
    / x x x x x x - - x x x x x x x x x - x - x
    , x х x x x x - - x x x x x x x x - - x - x
    . x x x x - x - - x x - x - x - x - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    x x x x x - - - x x x - - x x x - - x x x
    x x х x х - - - x x x - - x х х - - x x x
    В. зн. - - - - - x - - - - - - - - - - - - - - -
    Символы плавающей вставки x x x x - х - - x x - - - - - - - - - - -
    x x x x x x - - x x x - - - - - - - x - x
    x x x x - - - - x - - x - - - - - - - - -
    x x x х x - - - x - - x x - - - - - x - x
    В. зн. x x х x - x - - - - - - - x - - - - - - -
    В. зн. x x x x x x - - - - - - - x x - - - x - x
    Другие символы 9 x x x x x x - - x x - x - x - x х х х - x
    А X x x x - - - - - - - - - - - - x х - - - -
    S (З) - - - - - - - - - - - - - - - - - - - - -
    V (T) x x х x - х - - x x - x - x - x - x - x -
    Р (М) x x x x - x - - x x - x - x - x - x - x -
    Р (М) - - - - - x - - x - - - - - - - - x x - x

    (3) В секции файлов эта фраза не должна использоваться в статьях уровня 01.
    (4) В секции коммуникаций эта фраза не должна использоваться в статьях уровня 01.

    (6) Если данное имя-данного-2 описано как внешнее либо имеет уровень, отличный от 01, то число содержащихся в нем позиций литер должно быть больше или равно числу позиций литер данного, определенного именем-данного-1. Если данное имя-данного-2 имеет уровень 01 и не является внешним, то такого ограничения нет.
    (7) Имя-данного-2 не должно уточняться, даже если оно неоднозначно, так как в этом случае благодаря расположению фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) в исходной программе двусмысленности не будет.

    (8) Допустимы множественные переопределения одних и тех же позиций литер. Множественные переопределения одних и тех же позиций литер должны использовать имя-данного статьи, в которой впервые была определена область памяти.
    (9) Статьи, дающие новые описания позиций литер, не должны содержать фразу VALUE (ЗНАЧЕНИЕ), за исключением статей описаний имен-условий.
    (10) Между статьями описания имени-данного-2 и субъекта статьи не может появляться статья, имеющая номер-уровня, численно меньший номера уровня имени-данного-2 и субъекта статьи.
    (11) Статьи, дающие новые описания позиций литер, должны следовать за статьей, определяющей область имени-данного-2, без промежуточных статей, описывающих новые позиции литер.
    (12) Для уровня 1 ядра имя-данного-2 не может быть подчинено статье, содержащей фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ).
    Для уровня 2 ядра имя-данного-2 может быть подчинено статье, содержащей фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ).

    5.10.4.Общие правила
    (1) Распределение памяти начинается с имени-данного-2 и продолжается на область памяти, достаточную для размещения данного, определяемого именем-данного-1 или фразой FILLER (ЗАПОЛНИТЕЛЬ).
    (2) Если одна и та же позиция литеры определяется более чем одной статьей описания данного, то для ссылки на эту позицию литеры может быть использовано имя-данного, связанное с любой из этих статей описаний данного.
    5.11.Фраза RENAMES (ПЕРЕИМЕНОВЫВАЕТ)
    5.11. Фраза RENAMES (ПЕРЕИМЕНОВЫВАЕТ) 5.11.1. Назначение Фраза RENAMES (ПЕРЕИМЕНОВЫВАЕТ) позволяет изменять полностью или частично группирование элементарных данных. 5.11.2. Общий формат В приведенном выше формате номер-уровня 66 и имя-данного-1 не являются частью фразы RENAMES (ПЕРЕИМЕНОВЫВАЕТ) и указаны для наглядности. 5.11.3. Синтаксические правила (1) Может быть указано любое число статей RENAMES (ПЕРЕИМЕНОВЫВАЕТ) для логической записи. (2) Все статьи переименования, связанные с данной логической записью, должны следовать сразу за последней из входящих в нее статей описания данных. (3) Имя-данного-1 не может применяться как уточнитель и может уточняться только именами статей уровня 01, FD (ОФ), CD (OK) или SD (ОС). Статьи описания имени-данного-2 или имени-данного-3 не могут содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или подчиняться данному, статья описания которого содержит фразу OCCURS (ПОВТОРЯЕТСЯ).
    (4) Имя-данного-2 и имя-данного-3 должны быть именами элементарных данных или групп данных в соответствующей логической записи и не могут быть именами одного и того же данного. Статья уровня 66 не может переименовывать другую статью того же уровня, а также статьи уровня 77, 88 или 01. (5) Имя-данного-2 и имя-данного-3 могут уточняться. (6) Данные внутри области, определяемой именем-данного-2 (и именем-данного-3, если последнее задано), не должны иметь переменный размер. (7) Начало области, описанной именем-данного-2, должно предшествовать началу области, описанной именем-данного-3, и конец области, описанной именем-данного-3, должен логически следовать за концом области, описанной именем-данного-2. В то же время имя-данного-3 не может входить в группу, определяемую именем-данного-2. 5.11.4. Общие правила (1) Если имя-данного-3 задано, то имя-данного-1 является именем группы, которая содержит все элементарные данные, начиная от имени-данного-2 (если имя-данного-2 является элементарным данным) или первого элементарного данного в имени-данного-2 (если имя-данного-2 является именем группы) и заканчивая именем-данного-3 (если имя-данного-3 является элементарным данным) или последним элементарным данным в имени-данного-3 (если имя-данного-3 относится к групповому данному). (2) Если имя-данного-3 не указано, то все свойства данного, определенного именем-данного-2, становятся свойствами данного, определенного именем-данного-1.

    5.12.Фраза SIGN (ЗНАК)
    5.12.1.Назначение
    Фраза SIGN (ЗНАК) определяет позицию и способ представления знака числа, если эти сведения необходимо явно задать.
    5.12.2.Общий формат

    5.12.3.Синтаксические правила
    (1) Фраза может быть задана только в статьях описания числовых данных, строка литер шаблона которых содержит литеру S (З), или в статьях описания групповых данных, содержащих хоть одну статью описания числовых данных вышеуказанного типа.
    (2) Статьи описания числовых данных, содержащие фразу SIGN (ЗНАК), должны быть описаны явно или неявно с использованием DISPLAY (ДЛЯ ВЫДАЧИ).
    (3) Если в описании файла указана фраза CODE-SET (АЛФАВИТ), то статьи описания входящих в его записи числовых данных со знаком должны содержать фразу SEPARATE (ОТДЕЛЬНО).
    5.12.4.Общие правила
    (1) Фраза SIGN (ЗНАК) необязательна; она определяет позицию и способ представления знака числового данного, в статье описания которого она встречается, или числовых данных, подчиненных групповому данному, статья описания которого содержит эту фразу. Фраза SIGN (ЗНАК) применяется только к статьям описания числовых данных, строка литер шаблона которых содержит символ S (З), указывающий на наличие знака числа, но не на его способ представления или позицию.
    (2) Если фраза SIGN (ЗНАК) указана для группового данного, подчиненного другому групповому данному, для которого фраза SIGN (ЗНАК) тоже указана, то фраза, определенная на младшем уровне иерархии, подавляет фразу SIGN (ЗНАК), указанную на старшем уровне иерархии.
    (3) Если фраза SIGN (ЗНАК) указана в статье описания элементарного числового данного, подчиненного групповому данному, для которого фраза SIGN (ЗНАК) тоже указана, то фраза SIGN (ЗНАК), определенная в статье описания элементарного числового данного подавляет фразу SIGN (ЗНАК) группового данного.
    (4) Если статья описания числового данного не содержит фразу SIGN (ЗНАК), а строка литер его шаблона содержит символ S (З), то позиция и представление знака (по умолчанию) определяются реализацией. Общие правила п.5.12.4 не применимы к таким данным.
    (5) Если вариант SEPARATE (ОТДЕЛЬНО) не указан, то предполагается, что знак числа связывается с первой (или, соответственно, последней) позицией цифры элементарного числового данного; символ S (3), в строке-литер шаблона не учитывается при определении размера данного (в терминах числа литер стандартного формата данного); представление знака данного определяет реализация.
    (6) Если вариант SEPARATE (ОТДЕЛЬНО) указан, то знак числа будет занимать первую (или, соответственно, последнюю) позицию литеры элементарного числового данного; эта позиция литеры не является позицией цифры; символ S (З) в строке-литер шаблона учитывается при определении размера данного (в терминах числа литер стандартного формата данного); положительный или отрицательный знак числа представляют литеры стандартного формата данных + или -.
    (7) Все необходимые преобразования при выполнении вычислений или сравнений для данных, статьи описания которых содержат фразу SIGN (ЗНАК) и символ S (З) в строке литер-шаблона, выполняются автоматически.
    5.13.Фраза SYNCHRONIZED (ВЫДЕЛЕНО)
    5.13.1.Назначение
    Фраза SYNCHRONIZED (ВЫДЕЛЕНО) определяет выравнивание элементарного данного по естественным границам машинной памяти (см. ч.4, п.4.3.7)
    5.13.2.Общий формат

    5.13.3.Синтаксические правила
    (1) Эта фраза может появляться только в статье описания элементарного данного.
    (2) SYNC является сокращением слова SYNCHRONIZED.
    5.13.4.Общие правила
    а) в размер любой группы данных, к которой принадлежит элементарное данное;
    б) в распределяемые позиции литер, когда групповое данное является объектом фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ). Неиспользуемые позиции литер не включаются в переопределяемые позиции, если объектом фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) является элементарное данное.
    (2) Фраза SYNCHRONIZED (ВЫДЕЛЕНО), в которой не указано ни RIGHT (ВПРАВО), ни LEFT (ВЛЕВО), означает, что элементарное данное нужно расположить между естественными границами таким образом, чтобы достичь наиболее эффективного его использования. Особенности размещения определяются реализацией.
    (3) SYNCHRONIZED LEFT (ВЫДЕЛЕНО ВЛЕВО) определяет расположение элементарного данного, начиная с левой крайней позиции литеры, в естественных границах памяти, в которую оно помещается.
    (4) SYNCHRONIZED RIGHT (ВЫДЕЛЕНО ВПРАВО) указывает, что элементарное данное размещается вплотную к правой позиции литеры в естественных границах памяти, в которую оно помещается.
    (5) При обращении в исходной программе к данному, имеющему в описании фразу SYNCHRONIZED (ВЫДЕЛЕНО), при определении любого действия, зависящего от размера (например выравнивания, усечения, переполнения), используется размер данного, задаваемый фразой PICTURE (ШАБЛОН).
    (6) Если описание данного содержит фразу SYNCHRONIZED (ВЫДЕЛЕНО) и знак числа, то последний появляется в позиции знака, явно или неявно указанной фразой SIGN (ЗНАК).
    (7) Если фраза SYNCHRONIZED (ВЫДЕЛЕНО) указана для данного внутри области действия фразы OCCURS (ПОВТОРЯЕТСЯ), то выделяется каждое вхождение повторяющегося данного, для которого при этом порождается необходимый неявный заполнитель.
    (8) Фраза SYNCHRONIZED (ВЫДЕЛЕНО) зависит от оборудования и в дополнение к правилам (1) - (7) при реализации должно быть точно определено, как обрабатываются связанные с этой фразой элементарные данные в зависимости от формата внешнего представления содержащих их записей или групп и порождения необходимых неявных заполнителей (если элементарное данное, непосредственно предшествующее данному, содержащему фразу SYNCHRONIZED (ВЫДЕЛЕНО), не оканчивается на естественной границе). Автоматически порождаемые позиции заполнителя включаются в размер каждой группы, в которой содержится заполнитель, и в переопределяемые поля машинной памяти, если группа данных, частью которой является заполнитель, появляется как объект фразы REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ).
    (9) Реализация может задавать автоматическое выравнивание внутри записи для любого внутреннего формата данных, за исключением данных, использование которых указано DISPLAY (ДЛЯ ВЫДАЧИ). Однако запись в целом может быть выделена.
    (10) Правила выделения записей в файлах данных, вызывающие выделение элементарных данных, должны быть оговорены реализацией.
    (1) Фраза определяет, что при создании внутреннего формата данного процессор Кобола должен разместить это данное в последовательных единицах памяти таким образом, что никакое другое данное не может появиться ни в одной единице памяти между левой и правой естественными границами, заключающими это данное. Если данное по размеру занимает не всю память между заключающими его естественными границами, то неиспользованные единицы памяти (или части их) не могут быть использованы для другого данного.
    Такая неиспользованная память включается:
    5.14.Фраза об использовании
    5.14.1.Назначение
    Фраза об использовании определяет формат данного в памяти машины.
    5.14.2.Общий формат

    5.14.3.Синтаксические правила
    (1) Фраза об использовании может быть указана в любой статье описания данного .
    (2) Если фраза об использовании указана в статье описания группового данного, она также может быть указана в статье описания любого подчиненного элементарного или группового данного, но в обоих случаях должно быть указано одинаковое использование.
    (3) Элементарное данное, описание которого содержит фразы BINARY (ДВОИЧНОЕ), COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) или PACKED-DECIMAL (ДЕСЯТИЧНОЕ), или элементарное данное, подчиненное групповому данному, описание которого содержит указанные фразы, должно быть описано строкой-литер шаблона, определяющей числовые данные, т.е. строкой-литер шаблона, содержащей только символы Р (М), S (З), V (Т), 9.
    (4) СОМР (ВЫЧ) является сокращением слова COMPUTATIONAL (ВЫЧИСЛЕНИЙ).
    (5) На индексное данное явно можно ссылаться только в операторах SEARCH (ИСКАТЬ) или SET (УСТАНОВИТЬ), условии отношения, во фразе USING (ИСПОЛЬЗУЯ) заголовка раздела процедур или во фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ).
    (6) Фразы BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ), JUSTIFIED (СДВИНУТО), PICTURE (ШАБЛОН), SYNCHRONIZED (ВЫДЕЛЕНО) и VALUE (ЗНАЧЕНИЕ) не должны указываться для данного, которое используется как индексное.
    (7) Элементарное данное, описанное фразой INDEX (ДЛЯ ИНДЕКСА), не должно быть условной переменной.
    5.14.4.Общие правила
    (1) Если фраза об использовании написана на уровне группового данного, она относится к каждому элементарному данному группы.
    (2) Фраза указывает способ представления данного в памяти машины. Она не влияет на использование данного, хотя спецификации для некоторых операторов в разделе процедур могут ограничить фразу об использовании для операндов, к которым производится обращение. Фраза об использовании может влиять на выбор основания системы счисления или на тип представления данного.
    (3) Фраза BINARY (ДВОИЧНОЕ) означает, что двоичное основание используется для представления числового данного в памяти машины. Каждая реализация определяет точное воздействие фразы BINARY (ДВОИЧНОЕ) на выравнивание и представление данного в памяти машины, включая представление алгебраического знака. Реализацией должно быть распределено достаточно памяти для размещения десятичных значений максимального диапазона, определяемого строкой литер шаблона.
    (4) Фраза COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) определяет используемые реализацией основание и формат представления числового данного в памяти машины. Конкретная реализация определяет точное воздействие фразы COMPUTATIONAL (ДЛЯ ВЫЧИСЛЕНИЙ) на выравнивание и представление данного в памяти машины, включая представление алгебраического знака и допустимый диапазон значений данных.
    (5) Фраза DISPLAY (ДЛЯ ВЫДАЧИ) (указанная явно или неявно) определяет, что для представления данных в памяти машины используется стандартный формат данных и что данные выравниваются на границе символа.
    (6) Если для элементарного данного или любой группы, к которой принадлежит данное, не задана фраза об использовании, то подразумевается использование DISPLAY (ДЛЯ ВЫДАЧИ).
    (7) Фраза INDEX (ДЛЯ ИНДЕКСА) определяет данное как индексное данное, содержащее значение, соответствующее номеру вхождения элемента таблицы. Точное воздействие фразы INDEX (ДЛЯ ИНДЕКСА) на выравнивание и представление данного в памяти машины, включая действительные значения, присвоенные любому номеру вхождения элемента таблицы, определяет конкретная реализация.
    (8) При выполнении оператора MOVE (ПОМЕСТИТЬ) или оператора ввода-вывода, использующих групповое данное, содержащее индексное данное, никакого преобразования индексного данного не происходит.
    (9) Фраза PACKED-DECIMAL (ДЕСЯТИЧНОЕ) указывает, что для представления числового данного в памяти машины используется десятичное основание. Более того, она указывает, что каждая десятичная позиция должна занимать наименьшую возможную область памяти машины. Каждая реализация определяет точное воздействие фразы PACKED-DECIMAL (ДЕСЯТИЧНОЕ) на выравнивание и представление данного в памяти машины, включая представление любого алгебраического знака. Для размещения максимального значения, соответствующего десятичным позициям числа, определяемого строкой литер шаблона, реализацией должен быть выделен достаточный объем памяти.
    5.15 Фраза VALUE (ЗНАЧЕНИЕ)
    5.15.1.Назначение
    Фраза VALUE (ЗНАЧЕНИЕ) задает начальное значение данных рабочей памяти, начальное значение данных в секции коммуникаций
    5.12.2.Общий формат

    5.12.3.Синтаксические правила
    (1) Для данного, шаблон которого определяет числовое данное со знаком, литерал, представляющий значение, должен иметь знак.
    (2) Все числовые литералы, приведенные во фразе VALUE (ЗНАЧЕНИЕ), должны принадлежать диапазону значений, определяемых фразой PICTURE (ШАБЛОН), и не должны приводить к усечению значащих цифр. Размер нечисловых литералов не должен превышать размер данного, определяемый фразой PICTURE (ШАБЛОН).
    (3) Слова THROUGH и THRU эквивалентны. ЗНАЧ является сокращением слова ЗНАЧЕНИЕ.
    (4) Фраза VALUE (ЗНАЧЕНИЕ) не может быть употреблена ни в одной статье, являющейся частью описания или переопределения внешней записи данных, .
    5.15.4.Общие правила
    (1) Фраза VALUE (ЗНАЧЕНИЕ) не должна противоречить другим фразам в описании данного или фразам в описании данных внутри иерархии, которой принадлежит данное, описание которого содержит эту фразу. Применяются следующие правила:
    а) если категория данного числовая, все литералы во фразе VALUE (ЗНАЧЕНИЕ) должны быть числовыми литералами. Если литерал определяет значение данного из рабочей памяти, этот литерал выравнивается согласно стандартным правилам выравнивания (см. ч.4, п.4.3.6);
    б) если категория данного буквенная, буквенно-цифровая, буквенно-цифровая редактируемая или числовая редактируемая, то все литералы во фразе VALUE (ЗНАЧЕНИЕ) должны быть нечисловыми литералами. Литералы выравниваются как буквенно-цифровые данные (см. ч.4, п.4.3.6).
    Литеры редактирования в строке литер шаблона учитываются при определении размера данного, но не влияют на установку начального значения данного (см. п.5.9 настоящей части); поэтому значение редактируемого данного представляется в отредактированной форме;
    в) присвоение начального значения выполняется независимо от наличия фразы BLANK WHEN ZERO (ПРОБЕЛ КОГДА НУЛЬ) или JUSTIFIED (СДВИНУТО).
    5.15.5. Правила для имен-условий (1) В статье имени условия фраза VALUE (ЗНАЧЕНИЕ) обязательна. Фраза VALUE (ЗНАЧЕНИЕ) и само имя-условия являются единственными допустимыми фразами в такой статье. (2) Формат 2 может использоваться только в связи с именами условий (см. ч.4, п.4.2.2.1.1.1). При использовании фразы THRU (ПО) литерал-2 должен быть меньше, чем литерал-3.

    5.15.6.Статьи описания данных, отличные от имен-условий
    а) в секции файлов на уровне 1 фраза VALUE (ЗНАЧЕНИЕ) не может использоваться. поэтому начальные значения данных секции файлов не определены;
    б) фраза VALUE (ЗНАЧЕНИЕ) не может использоваться в секции связи на уровне 1.

    (2) Фраза VALUE (ЗНАЧЕНИЕ) не должна входить в статью описания данного, которая содержит фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), или в статью, которая подчиняется статье, содержащей такую фразу.
    (3) Если фраза VALUE (ЗНАЧЕНИЕ) используется в статье на уровне группы, то литерал должен быть стандартной константой или нечисловым литералом. В этом случае области памяти для группы присваивается начальное значение без учета особенностей элементарных или групповых данных, содержащихся внутри этой группы; при этом фраза VALUE (ЗНАЧЕНИЕ) не может задаваться на подчиненных уровнях внутри этой же группы.
    (4) Фраза VALUE (ЗНАЧЕНИЕ) не должна задаваться для группы, содержащей данные, описания которых включают фразы JUSTIFIED (СДВИНУТО), SYNCHRONIZED (ВЫДЕЛЕНО) или фразы об использовании (кроме варианта USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ)).
    (5) Если фраза VALUE (ЗНАЧЕНИЕ) указана в статье описания данного, связанного с переменно повторяющимся данным, то инициация начального значения происходит так, как если бы значение данного, указанного в варианте DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы OCCURS (ПОВТОРЯЕТСЯ) было равным максимальному числу вхождений. Переменно повторяющимися данными являются следующие:
    а) групповое данное, содержащее переменно повторяющееся данное;
    б) переменно повторяющееся данное;
    в) данное, подчиненное переменно повторяющемуся данному.
    Если фраза VALUE (ЗНАЧЕНИЕ) указана для данного, указанного в варианте DEPENDING ON (В ЗАВИСИМОСТИ ОТ), то это значение инициируется после инициации значений данного с переменным числом вхождений.
    (6) Если фраза VALUE (ЗНАЧЕНИЕ) формата 1 указана в статье описания данного, содержащей фразу OCCURS (ПОВТОРЯЕТСЯ), или в статье, подчиненной статье с фразой OCCURS (ПОВТОРЯЕТСЯ), то каждому вхождению элемента данного будет присвоено указанное значение.
    Должны выполняться следующие правила.
    (1) Правила употребления фразы VALUE (ЗНАЧЕНИЕ) различны для соответствующих секций раздела данных:
    6.РАЗДЕЛ ПРОЦЕДУР В ЯДРЕ
    6.1.Общее описание
    Раздел процедур содержит процедуры, которые должна выполнять объектная программа (см. ч.4, п.6.4). Раздел процедур не обязателен в исходной Кобол-программе.
    Общие форматы раздела процедур ядра показаны ниже.
    Формат 1

    6.2.Арифметические выражения
    6.2. Арифметические выражения 6.2.1. Определение арифметического выражения Арифметическим выражением может быть идентификатор числового элементарного данного; числовой литерал; стандартная константа ZERO (ZEROS, ZEROES) (НУЛЬ (НУЛИ)), а также идентификаторы, стандартные константы, литералы и выражения, разделенные знаками арифметических операций, либо арифметическое выражение, заключенное в скобки. Любому арифметическому выражению может предшествовать унарная операция. Допустимые комбинации переменных, числовых литералов, скобок и знаков арифметических операций приведены в п.6.2.3 настоящей части. Все идентификаторы и литералы, встречающиеся в арифметическом выражении, должны представлять либо числовые элементарные данные, либо числовые литералы. 6.2.2. Знаки арифметических операций Имеется пять знаков бинарных арифметических операций и два знака унарных арифметических операций, которые могут быть использованы в арифметических выражениях. Они изображаются специальными литерами, с обеих сторон которых должен стоять пробел. Ниже приведены знаки операций и их смысл.
    Знак бинарной операции Смысл операции
    + Сложение
    - Вычитание
    * Умножение
    / Деление
    ** Возведение в степень
    Знак унарной операции Смысл операции
    + Соответствует умножению на числовой литерал +1
    - Соответствует умножению на числовой литерал -1
    6.2.3. Правила вычисления арифметических выражений Арифметические выражения вычисляются по таким правилам: (1) для определения порядка выполнения указанных в арифметических выражениях действий могут применяться скобки. Выражения внутри скобок вычисляются первыми; внутри вложенных скобок вычисление происходит, начиная от самых внутренних скобок к внешним. Если скобки не используются или выражения, заключенные в скобки, находятся на одном и том же уровне вложенности, применяется следующий порядок старшинства выполнения операций: первая по старшинству операция - унарный плюс или минус; вторая - возведение в степень, третья - умножение или деление, четвертая - сложение или вычитание; (2) скобки используются в следующих случаях: для исключения логической неоднозначности, при появлении последовательных операций одного и того же иерархического уровня или для изменения последовательности выполнения операций, установленной порядком старшинства. Если последовательность выполнения не определена скобками, порядок выполнения последовательных операций одного и того же иерархического уровня определен слева направо; (3) ниже указаны способы, которыми идентификаторы, литералы, операции и скобки могут образовывать арифметическое выражение.
    Первый элемент арифметического выражения Второй элемент арифметического выражения
    Идентификатор или литерал + - * / ** Унарный плюс или минус ( )
    Идентификатор или литерал - Р - - Р
    * / ** + - P - Р Р -
    Унарный плюс или минус Р - - Р -
    ( Р - Р Р -
    ) - Р - - Р
    Примечание. Буква Р представляет допустимую пару элементов, знак "-" - недопустимую; (4) арифметическое выражение может начинаться только с идентификатора, литерала или символов (, +, - и может заканчиваться только ), идентификатором или литералом. Между открывающими и закрывающими скобками в арифметическом выражении должно быть взаимно однозначное соответствие, так что каждая открывающая скобка должна быть слева от соответствующей ей закрывающей скобки. Если первая операция в арифметическом выражении унарная и это арифметическое выражение непосредственно следует за идентификатором или другим арифметическим выражением, ей должна непосредственно предшествовать левая скобка; (5) вычисление экспоненты в арифметическом выражении производится по следующим правилам: а) если значение выражения, которое должно быть возведено в степень, равно нулю, степень должна иметь значение большее нуля. В противном случае возникает условие переполнения (п.6.4.2 настоящей части); б) если в результате вычисления может получиться и положительное, и отрицательное число, в качестве результата возвращается положительное; в) если не существует действительного числа, которое может быть результатом вычисления, возникает условие переполнения; (6) арифметические выражения позволяют пользователю комбинировать арифметические операции без ограничений на совокупность операндов и (или) получаемых данных. В каждой реализации указываются способы, которые используются в обработке арифметических выражений.

    6.3.Условные выражения
    Условные выражения задают условия, которые проверяются в объектной программе для выбора альтернативных путей управления в зависимости от значения истинности условия. Условное выражение имеет значение истинности "истина" или "ложь". Условные выражения задаются в операторах IF (ЕСЛИ), PERFORM (ВЫПОЛНИТЬ) и . Есть две категории условий, связанных с условными выражениями: простые условия . Каждое из них может заключаться в любое число парных скобок, в результате чего категория условия не меняется.
    6.3.1.Простые условия
    6.3.1.1.Условия отношения
    Условие отношения вызывает сравнение двух операндов, каждый из которых может быть либо данным, представленным идентификатором, либо литералом, либо именем индекса. Условие отношения имеет значение истинности "истина", если между операндами имеет место указанное отношение. Допускается сравнение двух числовых операндов независимо от формата, определяемого индивидуальными фразами об использовании. Однако для всех других случаев сравнения описания операндов должны задавать одинаковое использование. Если хоть один из операндов является групповым данным, сравнение выполняется по правилам сравнения нечисловых операндов.
    Общий формат для условия отношения следующий:

    Первый операнд (идентификатор-1, литерал-1, или имя-индекса-1) называется субъектом условия; второй операнд (идентификатор-2, литерал-2, или имя-индекса-2) называется объектом условия. Условие отношения должно содержать по крайней мере один идентификатор.
    Знак операции отношения задает тип сравнения, которое должно быть произведено в условии отношения. Знаки операций отношения и зарезервированные слова должны обрамляться пробелами. NOT (HE) (если оно используется) и последующее ключевое слово или литера отношения представляют один знак операции отношения, определяющий тип сравнения для определения значения истинности. Следующие знаки операций отношения эквивалентны: IS NOT GREATER THAN (HE БОЛЬШЕ) эквивалентно IS LESS THAN OR EQUAL TO (МЕНЬШЕ ИЛИ РАВНО); IS NOT LESS THAN (HE МЕНЬШЕ) эквивалентно IS GREATER THAN OR EQUAL TO (БОЛЬШЕ ИЛИ РАВНО). Смысл знаков операций отношения показан ниже.
    Значение Знак операции отношения
    Больше или не больше IS [NOT] GREATER THAN [HE] БОЛЬШЕ
    IS [NOT] > [HE] >
    Меньше или не меньше IS [NOT] LESS THAN [HE] МЕНЬШЕ
    IS [NOT] < [HE] <
    Равно или не равно IS [NOT] EQUAL TO [HE] РАВНО
    IS [NOT] = [HE] =
    Больше или равно IS GREATER THAN OR EQUAL TO БОЛЬШЕ ИЛИ РАВНО
    IS > = > =
    Меньше или равно IS LESS THAN OR EQUAL TO МЕНЬШЕ ИЛИ РАВНО
    IS < = < =

    6.3.1.1.1.Cpавнение числовых операндов
    Для операндов числовой категории производится сравнение алгебраических значений операндов. Длина литерала или операндов арифметического выражения в терминах числа цифр не существенна. Нуль рассматривается как единственное значение, не зависящее от знака.
    Сравнение числовых операндов допускается независимо от способа описания их использования. Числовые операнды, не имеющие знака, рассматриваются при сравнении как положительные.
    6.3.1.1.2.Сравнение нечисловых операндов
    Для нечисловых операндов или для случая, когда один операнд числовой, а второй - нечисловой, производится сравнение в соответствии с указанной основной последовательностью литер. В последнем случае числовой операнд должен быть целым литералом или данным, описанным как целое и:
    (1) если нечисловой операнд является элементарным данным или нечисловым литералом, числовой операнд рассматривается так, как будто выполнено его перемещение в элементарное буквенно-цифровое данное того же размера, что и числовое данное (в терминах литер стандартного формата данных); значение этого буквенно-цифрового данного затем сравнивается с нечисловым операндом (см. п.5.9.4, правило (8), п.6.19 настоящей части);
    (2) если нечисловой операнд является групповым данным, числовой операнд рассматривается так, как будто выполнено его перемещение в групповое данное того же размера, что и числовое данное (в терминах литер стандартного формата данных), и значение этого группового данного затем сравнивается с нечисловым операндом (см. п.5.9.4, правило (8), п.6.19 настоящей части);
    (3) числовой операнд, не представляющий целое число, не может сравниваться с нечисловым операндом.
    Размер операнда равен числу литер стандартного формата данных в операнде. Числовые и нечисловые операнды могут сравниваться только тогда, когда их использование явно или неявно является одинаковым.
    Правила сравнения для операндов равного размера и операндов неравного размера различны.
    (1) Если операнды имеют равный размер, то литеры операндов в соответствующих позициях сравниваются попарно, начиная от самой левой позиции, пока не встретятся неравные литеры или не будет достигнут правый конец.
    Если все пары литер совпадают вплоть до последней пары, операнды считаются равными.
    Для первой появившейся пары несовпадающих литер определяется их относительная позиция в основной последовательности. Считается, что операнд, содержащий литеру, занимающую более высокую позицию в основной последовательности, является большим.
    (2) Если операнды имеют разный размер, сравнение литер производится так, как будто операнд, содержащий меньшее число литер, дополнен справа пробелами до получения операндов одинаковой длины.
    6.3.1.1.3.Сравнения, содержащие имена индексов и (или) индексные данные
    Проверка отношения может быть выполнена только между:
    (1) двумя именами индексов. Результат такой же, как если бы сравнивались номера вхождений;
    (2) именем индекса и данным (отличным от индексного данного) или литералом. Номер вхождения, который соответствует имени индекса, сравнивается с данным или литералом;
    (3) индексным данным и именем индекса или другим индексным данным. Значения сравниваются без преобразования.
    6.3.1.2.Условие класса
    Условие класса определяет, является ли операнд числовым, буквенным, буквенным прописным, буквенным строчным или содержит лишь литеры из множества литер, заданного фразой CLASS (КЛАСС) параграфа SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования. Класс операнда определяется следующим образом:
    (1) операнд числовой, если он состоит из литер 1, 2, 3 ..., 9, 0 со знаком или без;
    (2) операнд буквенный, если он состоит полностью из прописных букв, пробелов, из строчных букв и пробела, или любой комбинации прописных и строчных букв или любой комбинации прописных, строчных букв и пробела;
    (3) операнд буквенный строчный, если он полностью состоит из строчных букв и пробела;
    (4) операнд буквенный прописной, если он полностью состоит из прописных букв и пробелов;
    (5) операнд соответствует имени-класса, если он состоит лишь из литер, перечисленных в определении имени-класса в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА).
    Общий формат для условия класса следующий:

    Проверяемый операнд должен быть описан с использованием DISPLAY (ДЛЯ ВЫДАЧИ).
    NOT (HE) (если оно используется) и следующее за ним ключевое слово задает одно условие класса, которое определяет выполняемую для установления истинности проверку. NOT NUMERIC (НЕ ЧИСЛОВОЕ) указывает проверку истинности для установления того, является ли операнд нечисловым.
    Проверка на NUMERIC (ЧИСЛОВОЕ) не может применяться к данному, описанному как буквенное или как групповое данное, составленное из элементарных данных, описания которых указывают на наличие знака числа. Если описание проверяемого данного не содержит указания на знак числа, то проверяемое данное будет определено как числовое только в том случае, когда оно является числовым без знака. Если описание данного содержит указание на знак числа, проверяемое данное будет определено как числовое только в том случае, если его значение является числовой величиной и имеет правильный знак. Правильным знаком числового данного, описанного с фразой SIGN IS SEPARATE (ЗНАК ОТДЕЛЬНО), является одна из литер + или - в стандартном формате данных; представление правильного знака данных, описание которых не содержит фразу SIGN IS SEPARATE (ЗНАК ОТДЕЛЬНО), определяется реализацией.
    Проверка на ALPHABETIC (БУКВЕННОЕ) не может применяться для данных, описанных как числовые. Результат проверки "истина", если содержимое данного, представленного идентификатором-1, состоит только из буквенных литер.
    Проверка на ALPHABETIC-LOWER (СТРОЧНЫЕ) не может применяться для данных, описанных как числовые. Результат проверки "истина", если содержимое данного, представленного идентификатором-1, состоит только из строчных букв и пробелов.
    Проверка на ALPHABETIC-UPPER (ПРОПИСНЫЕ) не может применяться для данных, описанных как числовые. Результат проверки "истина", если содержимое данного, представленного идентификатором-1, состоит только из прописных букв и пробелов.
    Проверка с использованием имени-класса-1 не может применяться для данных, описанных как числовые.
    6.3.1.3. Условие имени-условия (условная переменная) Для условной переменной в условии имени-условия проверяется равенство ее значения одному из значений, связанных с имеием-условия. Общий формат для условия имени-условия: имя-условия-1 Если имя-условия связано с диапазоном или с несколькими диапазонами значений, то для условной переменной проверяется, попадает ли ее значение в диапазоны, включая концы диапазонов. Правила для сравнения условной переменной со значением имени-условия те же, что и для условий отношения. Результатом проверки является значение "истина", если одно из значений, соответствующих имени-условия-1, равно значению соответствующей условной переменной.

    6.3.1.4.Условие состояния переключателя
    Условие состояния-переключателя определяет, является ли состояние определяемого реализацией переключателя состоянием "включено" или "выключено". Имя-реализации и связанное с ним состояние "включено" или "выключено" должны быть названы в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования. Общий формат для условия состояния-переключателя:
    имя-условия-1
    Результат проверки есть "истина", если переключатель установлен в позицию, соответствующую имени-условия-1.
    6.3.1.5. Условие знака Условие знака определяет, является ли алгебраическое значение арифметического выражения меньшим нуля, большим нуля или равным нулю. Общий формат для условия знака: NOT (HE) (если оно используется) и следующее за ним ключевое слово определяют одно условие знака, которое задает алгебраическую проверку для определения значения истинности; например, NOT ZERO (HE НУЛЬ) является проверкой истинности на ненулевое (положительное или отрицательное) значение. Операнд положителен, если его значение больше нуля, отрицателен, если его значение меньше нуля, и равен нулю, если его значение равно нулю. Арифметическое выражение должно содержать по крайней мере один идентификатор.
    6.3.2. Сложные условия Сложные условия образуются комбинацией простых условий и (или) сложных условий с помощью логических связок (логических операций AND (И) и OR (ИЛИ)) или отрицания этих условий с помощью логического отрицания (логическая операция NOT (HE)). Значением истинности сложного условия, заключенного или незаключенного в скобки, является то значение, которое следует в результате выполнения установленных логических операций над отдельными значениями истинности простых условий. Знаки логических операций и их значения следующие: AND (И) - логическая конъюнкция; значение истинности будет "истина", если оба соединенных ею условия истинны; "ложь", если одно или оба соединенных условия ложны; OR (ИЛИ) - логическая дизъюнкция; значение истинности есть "истина", если одно или оба соединенных этой связкой условий истинны; "ложь", если оба эти условия ложны; NOT (HE) - логическое отрицание или инверсия значения истинности; значение истинности есть "истина", если соответствующее условие ложно; "ложь", если это условие истинно. До и после знаков логических операций должен стоять пробел.
    6.3.2.1. Отрицание условий Отрицание условия производится с помощью логической операции NOT (HE), которая отрицает значение истинности условия, к которому применяется. Таким образом, значением истинности отрицания условия будет "истина" тогда и только тогда, когда значение истинности исходного условия "ложь"; значением истинности отрицания условия будет "ложь" тогда и только тогда, когда значение истинности исходного условия "истина"; заключение отрицания условия в скобки не меняет его значение истинности.
    Общий формат отрицания условия: NOT условие-1 НЕ условие-1
    6.3.2.2. Комбинированные условия
    Комбинированные условия получаются посредством связывания условий одним из знаков логических
    операций AND (И) или OR (ИЛИ). Общий формат комбинированных условий:
    6.3.2.3. Старшинство логических операций и использование скобок При отсутствии парных скобок в сложном условии старшинство (т.е. степень связывания) логических операций задает условия, к которым применяются заданные логические операции, и предполагает эквивалентное связывание скобками. Порядок старшинства следующий: NOT (HE), AND (И), OR (ИЛИ). Таким образом условие вида "условие-1 OR NOT условие-2 AND условие-3" ("условие-1 ИЛИ НЕ условие-2 И условие-3") эквивалентно условию "условие-1 OR ((NOT условие-2) AND условие-3)" ("условие-1 ИЛИ ((НЕ условие-2) И условие-3)"). Когда в сложном условии используются скобки, они определяют связывание условий со знаками логических операций. Таким образом, скобки могут использоваться для изменения обычного старшинства операций, как указано выше. Например, приведенное выше сложное условие будет иметь другой смысл, если его задать в виде (условие-1 OR (NOT условие-2)) AND условие-3 ((условие-1 ИЛИ (НЕ условие-2)) И условие-3) (п.6.3.4 настоящей части). В табл.1 приведены способы комбинирования условий и логических операций и правила употребления скобок. Между открывающими и закрывающими скобками должно быть соответствие. Как видно из табл.1, пара элементов OR NOT (ИЛИ НЕ) является допустимой, в то время как пара NOT OR (HE ИЛИ) недопустима; пара NOT ( (НЕ ( ) допустима, a NOT NOT (HE НЕ) недопустима.
    6.3.3. Сокращенные комбинированные условия отношений Если простые условия отношения или их отрицания комбинируются с помощью логических связок в последовательности, при которой условия отношения содержат совпадающие с предыдущим субъект или субъект и знак операции отношения и при этом не используются скобки, то любое условие отношения, за исключением первого, может быть сокращено следующим образом: (1) может быть опущен субъект условия отношения; (2) могут быть опущены субъект и знак операции отношения в условии отношения. Таблица 1
    Элемент Может располагаться в условном выражении Последовательность элементов слева направо
    первым последним Элементу, если он не первый, может непосредственно предшествовать только За элементом, если он не последний, может непосредственно следовать только
    Простое- условие Да Да OR (ИЛИ), NOT (HE) AND (И), ( OR (ИЛИ), AND (И), )
    OR (ИЛИ) AND (И) Нет Нет Простое-условие, ) Простое-условие, NOT (HE), (
    NOT (HE) Да Нет OR (ИЛИ), AND (И), ( Простое-условие, (
    ( Да Нет OR (ИЛИ), NOT (HE) AND (И), ( Простое-условие, NOT (HE), (
    ) Нет Да Простое-условие, ) OR (ИЛИ), AND (И), )
    Формат для сокращенного условия Внутри последовательности условий отношения могут использоваться оба вида приведенных выше сокращений. Действие такого сокращенного условия такое же, как если бы опущенные части были взяты из ближайшего предшествующего полного условия отношения внутри того же предложения. Соответствия сокращенных и полных условий приведены ниже. Вставка опущенного субъекта и (или) операции отношения завершается, как только в сложном условии встречается полное простое условие. Интерпретация, применяемая к слову NOT (HE), в сокращенном комбинированном условии отношения, следующая: (1) если за словом NOT (HE) непосредственно следует знак операции GREATER (БОЛЬШЕ) (>), LESS (МЕНЬШЕ) (td>
    Сокращенное комбинированное условие отношения Эквивалент
    а>b AND NOT Б И НЕ<Г ИЛИ Д ((a>b) AND (a NOTБ) И (А НЕ<Г)) ИЛИ (А НЕ<Д)
    a NOT EQUAL b OR с A HE РАВНО Б ИЛИ Г (a NOT EQUAL b) OR (a NOT EQUAL c) (A HE РАВНО Б) ИЛИ (А НЕ РАВНО Г)
    NOT a=b OR с НЕ А=Б ИЛИ Г (NOT (a = b)) OR (a = c) (HE (А=Б)) ИЛИ (А=Г)
    NOT (a GREATER b OR <с) НЕ (А БОЛЬШЕ Б ИЛИ <Г) NOT ((a GREATER b) OR (atd>
    NOT (a NOT>b AND с AND NOT d) HE (А НЕ>Б И Г И НЕ Д) NOT ((((a NOT>b) AND (a NOT>c)) AND (NOT (a NOT>d)))) HE ((((А НЕ>Б) И (А НЕ>Г)) И (НЕ (А НЕ>Д))))
    6.3.4. Порядок вычисления условий Скобки явные и неявные задают уровень вложенности в сложном условии. Два или более условий, связанных только знаком логической операции AND (И) или только знаком логической операции OR (ИЛИ) на одном и том же уровне вложенности, устанавливают один уровень иерархии в сложном условии. Таким образом, полное сложное условие может рассматриваться как вложенная структура уровней иерархии. При этом само сложное условие соответствует самому внешнему уровню иерархии. В этом контексте вычисление условий в полном сложном условии начинается слева и продолжается по следующим правилам, рекурсивно применимым, когда необходимо. (1) На одном уровне иерархии связанные составляющие условия вычисляются в порядке слева направо. Вычисление на данном иерархическом уровне завершается сразу, как только значение истинности для него становится определенным независимо от того, все ли связанные в рамках этого уровня составляющие условия вычислены. Значения арифметических выражений вычисляются тогда и только тогда, когда вычисляются содержащие их условия. Аналогично, отрицания условий вычисляются тогда и только тогда, когда необходимо вычислить сложное условие, которое они задают (см. п.6.2.3 настоящей части). Применение вышеперечисленных правил показано на рис.1-4. Эти схемы не определяют требования к реализации.

    Рис.1. Вычисление уровня иерархии

    Рис.1. Вычисление уровня иерархии
    условие-1 AND условие-2 AND ... условие-n (условие-1 И условие-2 И ... условие-n)
    Рис.2. Вычисление уровня иерархии

    Рис.2. Вычисление уровня иерархии
    условие-1 OR условие-2 OR ... условие-n (условие-1 ИЛИ условие-2 ИЛИ ... условие-n)
    Рис.3. Вычисление выражения

    Рис.3. Вычисление выражения
    условие-1 OR условие-2 AND условие-3 (условие-1 ИЛИ условие-2 И условие-3)
    Рис.4. Вычисление выражения

    Рис.4. Вычисление выражения
    (условие-1 OR NOT условие-2) AND условие-3 AND условие-4 ((условие-1 ИЛИ НЕ условие-2) И условие-3 И условие-4)
    Простыми условиями являются условия отношения, класса, состояния-переключателя . Простое условие может иметь значение истинности "истина" или "ложь". Заключение в скобки простых условий не меняет их значения истинности.
    6.4.Общие фразы и правила для форматов операторов
    Ниже приводится описание общих фраз и условий, которые относятся к нескольким различным операторам.
    6.4.1.Фраза ROUNDED (ОКРУГЛЯЯ)
    Если после выравнивания по десятичной точке число позиций в дробной части результата арифметической операции оказывается большим, чем число позиций, заданных для дробной части идентификатора результата, производится усечение цифр в соответствии с размером, заданным для идентификатора результата. Если при этом старшая усекаемая цифра больше или равна 5, то абсолютное значение идентификатора результата при наличии фразы ROUNDED (ОКРУГЛЯЯ) увеличивается на единицу в самом младшем разряде.
    Если младшие позиции целого в значении идентификатора результата представляются в его шаблоне литерой Р (М), то производится округление или отбрасывание цифр относительно самой правой из позиций цифр, для которых отведена память.
    6.4.2.Фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ)
    Условие переполнения возникает в следующих случаях:
    (1) нарушение правил вычисления степени всегда приводит к завершению выполнения арифметической операции и всегда вызывает условие переполнения (см. п.6.2.3 настоящей части);

    (2) деление на нуль всегда вызывает условие переполнения;
    (3) если после выравнивания позиции десятичной точки абсолютное значение результата превышает наибольшее значение, которое может содержаться в соответствующем идентификаторе результата, возникает ошибка переполнения.
    В случае, если для результирующего идентификатора задана фраза USAGE IS BINARY (ДВОИЧНОЕ), наибольшее значение, которое может в нем содержаться, определяется на основании строки-литер фразы PICTURE (ШАБЛОН) для соответствующего десятичного числа. Если задана фраза ROUNDED (ОКРУГЛЯЯ), округление выполняется перед проверкой условия переполнения.
    Если задана фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) и после выполнения арифметических операций, заданных в арифметическом операторе, возникает условие переполнения, значения соответствующих результирующих идентификаторов остаются такими же, какими они были до начала вычисления арифметического выражения. Значения результирующих идентификаторов, для которых не возникало условие переполнения, будут такими же, как если бы условие переполнения не влияло бы ни на какой результирующий идентификатор. После завершения арифметической операции управление передается повелительному оператору, заданному во фразе ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ), и выполнение продолжается в соответствии с правилами для каждого оператора, указанного в этом повелительном операторе. Если им является оператор ветвления процедур или условный оператор, который сам вызывает явную передачу управления, управление передается в соответствии с правилами для данного оператора, иначе после завершения выполнения повелительного оператора, заданного во фразе ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) управление передается на конец арифметического оператора, а фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), если она и задана, игнорируется.
    Если фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) не задана и во время выполнения арифметической операции в арифметическом операторе возникает условие переполнения, значения результирующих идентификаторов не определены. Значения результирующих идентификаторов, для которых ситуация переполнения не возникала, будут такими же, как если бы ситуация переполнения не возникала бы ни для какого результирующего идентификатора. После завершения арифметических операций управление передается на конец арифметического оператора, а фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), если она и задана, игнорируется.
    Если при выполнении арифметических операций в арифметическом операторе переполнения не возникает, фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ), если она и задана, игнорируется, а управление передается на конец арифметического оператоpa или, если задана фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному оператору, определенному в этой фразе. Во втором случае выполнение продолжается в соответствии с правилами выполнения каждого оператора, указанного в этом повелительном операторе. Если выполняется оператор ветвления процедуры или условный оператор, управление передается в соответствии с правилами этого оператора, в противном случае после завершения выполнения повелительного оператора, заданного во фразе NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), управление передается на конец арифметического оператора.
    Если при выполнении операторов ADD (СЛОЖИТЬ) и SUBTRACT (ОТНЯТЬ) с фразой CORRESPONDING (СООТВЕТСТВЕННО) хоть одна отдельная операция вырабатывает условие переполнения, повелительный-оператор фразы ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) не выполняется до тех пор, пока не завершатся все сложения или вычитания. 6.4.3. Фраза CORRESPONDING (СООТВЕТСТВЕННО) Идентификаторы групповых данных для удобства изложения обозначим и . Два данных, одно из и одно из , определяются как соответствующие, если выполняются следующие условия: (1) данное в и данное в не определяются ключевым словом FILLER (ЗАПОЛНИТЕЛЬ) и имеют одно и то же имя и одни и те же уточнители вплоть до и , но исключая последние; (2) в случае использования оператора MOVE CORRESPONDING (ПОМЕСТИТЬ СООТВЕТСТВЕННО) по крайней мере одно из данных является элементарным и соответствующая пересылка допустима по правилам пересылки; оба данных являются элементарными числовыми данными в случае оператора ADD CORRESPONDING (СЛОЖИТЬ СООТВЕТСТВЕННО) или SUBTRACT CORRESPONDING (ОТНЯТЬ СООТВЕТСТВЕННО); (3) ни , ни не могут быть описаны с номером уровня 66, 77 или 88 или с фразой USAGE IS INDEX (ДЛЯ ИНДЕКСА); (4) данные, подчиненные или и содержащие в описании одну из фраз REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), RENAMES (ПЕРЕИМЕНОВЫВАЕТ), OCCURS (ПОВТОРЯЕТСЯ), USAGE IS INDEX (ДЛЯ ИНДЕКСА), или подчиненные данным, описанным с такими фразами, не рассматриваются как соответствующие. Ссылки на и не могут модифицироваться; (5) имя каждого данного, удовлетворяющего вышеперечисленным условиям, должно быть однозначным, с учетом его подразумеваемого уточнения.

    6.4.4.Арифметические операторы
    Арифметическими операторами являются операторы ADD (СЛОЖИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ), SUBTRACT (ОТНЯТЬ). Они имеют несколько общих особенностей.
    (1) Описания операндов могут быть различными. При вычислении обеспечивается необходимое преобразование и выравнивание по десятичной точке.
    (2) Максимальный размер каждого операнда - 18 десятичных цифр. Композиция операндов, представляющая собой гипотетическое данное, порождаемое суперпозицией указанных операндов оператора, выровненных по их десятичным точкам, не должна содержать более 18 цифр (пп.6.6, 6.11, 6.20, 6.26 настоящей части).
    6.4.5.Перекрывающиеся операнды
    Если посылаемое и принимающее данное в любом операторе имеют общую часть или всю область памяти, то, даже если они не определены в одной статье описания данного, результат выполнения такого оператора не определен. Кроме того, будут не определены результаты выполнения некоторых операторов, в которых посылаемые и принимающие данные определены одной и той же статьей описания данного. Эти случаи будут рассматриваться в общих правилах соответствующих операторов.
    6.4.6.Несколько результатов арифметических операторов
    Операторы ADD (СЛОЖИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) и SUBTRACT (ОТНЯТЬ) могут иметь несколько результатов.
    Эти операторы выполняются так, как если бы они были заданы следующим образом:
    (1) оператор, при выполнении которого осуществляется доступ к данным, которые являются частью начальных вычислений этого оператора, выполняет необходимые арифметические операции или комбинирование этих данных и запоминает результат этой операции в промежуточном поле памяти. Элементы, которые принимают участие в начальном вычислении, определяются правилами конкретных операторов;
    (2) выполняется последовательность операторов, выполнение которых передает или комбинирует значение в этом промежуточном поле с каждым отдельным результирующим данным. Эти операторы рассматриваются, как если бы они были записаны слева направо в той же последовательности, в которой заданы множественные результаты.
    Результат оператора
    ADD a, b, с, ТО с, d (c), e
    (СЛОЖИТЬ А, Б, М, С М, Д (М), Е) эквивалентен результатам
    следующих операторов:
    ADD a, b, с GIVING temp
    ADD temp TO с
    ADD temp TO d (с)
    ADD temp TO e
    (СЛОЖИТЬ А, Б, М ПОЛУЧАЯ пром
    СЛОЖИТЬ пром C M
    СЛОЖИТЬ пром С Д (М)
    СЛОЖИТЬ пром С Е)
    и результат оператора
    MULTIPLY a (i) BY i, a (i)
    УМНОЖИТЬ A (M) HA M, A (M)
    эквивалентен
    MOVE a (i) TO temp
    MULTIPLY temp BY i
    MULTIPLY temp BY a (i)
    (ПОМЕСТИТЬ А (М) в пром
    УМНОЖИТЬ пром НА М
    УМНОЖИТЬ пром НА А (М)
    где в обоих случаях "temp" (пром) есть обозначение промежуточного результата, обеспечиваемого реализацией.
    6.4.7.Несовместимые данные
    Если значения данных, к которым происходит обращение в разделе процедур, не соответствуют классу, определенному при описании этих данных с фразой PICTURE (ШАБЛОН), результат обращения не определен. Исключение составляет условие класса (см. п.6.3.1.2 настоящей части).
    6.5.Оператор ACCEPT (ПРИНЯТЬ)
    6.5.1.Назначение
    Оператор ACCEPT (ПРИНЯТЬ) позволяет передать небольшой объем информации от некоторого устройства в указанное данное.
    6.5.2.Общий формат
    Формат 1

    6.5.3.Синтаксическое правило
    Мнемоническое-имя-1 должно указываться в параграфе SPECIAL-NAMES (СЦЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования и должно связываться с устройством оборудования.

    6.5.4.Общие правила
    а) если размер принимающего данного превышает размер передаваемого данного, передаваемое данное запоминается в принимающем поле выровненным влево На уровне 1 осуществляется только одна передача данных;
    б) если размер передаваемого данного превышает размер принимающего поля , в поле принимающего данного или в оставшейся его части запоминаются только самые левые позиции передаваемого данного; остальные его литеры, не помещающиеся в принимающем данном, игнорируются.
    (5) если фраза FROM (С) не задана, то используется устройство, которое определяется реализацией как стандартное.
    (6) при использовании формата 2 оператор ACCEPT (ПРИНЯТЬ) вызывает передачу запрашиваемой информации в данное, заданное идентификатором-2, согласно правилам оператора MOVE (ПОМЕСТИТЬ); дата, день, день недели и время автоматически обеспечиваются реализацией и не описываются в Кобол-программе. (7) дата содержит год столетия, месяц года и день месяца. Последовательность кодов, представляющая DATE (ДАТУ), такова, как если бы это данное было описано как элементарное целое числовое данное размером в шесть цифр, первые две из которых представляют год столетия, следующие две - месяц года, и последние две - число месяца. Например, дата 1 июля 1987 года изображается последовательностью цифр 870701.
    (8) день содержит год столетия и порядковый номер дня в году. Последовательность кодов, представляющая DAY (ДЕНЬ), такова, как если бы это данное было описано как элементарное целое числовое данное размером в пять цифр, первые две из которых (слева направо) представляют год столетия и последние три - порядковый номер дня в году. Например, 1 июля 1987 года представляется последовательностью цифр 87182. (9) Время содержит часы, минуты, секунды и сотые доли секунды. Время отсчитывается на 24-часовой основе, начиная от полуночи. Последовательность кодов, представляющих TIME (ВРЕМЯ), такова, как если бы это данное было описано как элементарное целое число без знака размером в 8 цифр, из которых первые две (слева направо) представляют часы, следующие две - минуты, следующие две - секунды и последние две - сотые доли секунды. Минимальное значение данного (ВРЕМЯ) равно 00000000, максимальное - 23595999. Если система не поддерживает возможности работы с долями секунды, те разряды, которые не могут быть определены, полагаются равными нулю. (10) DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) состоит из одного данного, содержимое которого представляет день недели. DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) доступен Кобол-программе, как если бы он был описан в ней как элементарное целое числовое данное без знака из одной цифры. В DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) значением 1 задается понедельник, значением 2 вторник, ..., 7 - воскресенье.

    Формат 1
    (1) Оператор ACCEPT (ПРИНЯТЬ) вызывает передачу данного с указанного устройства; это данное замещает значение данного, представленного идентификатором-1.
    Любое преобразование данных, требуемое при их перемещении с внешнего устройства в данное, представленное идентификатором-1, определяется реализацией.
    (2) Размер одной передачи для каждого устройства оборудования определяет реализация.
    (3) Если устройство может передавать данные того же размера, что и размер принимающих данных, передаваемое данное запоминается в поле принимающего данного.
    (4) Если устройство не может передавать данные такого же размера, как и принимающие данные, то:
    6.6.Оператор ADD (СЛОЖИТЬ)
    6.6.1.Назначение
    Оператор ADD (СЛОЖИТЬ) позволяет просуммировать два или более числовых операнда и запомнить результат.
    6.6.2.Общий формат
    Формат 1

    Формат 2

    Формат 3

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

    (2) Каждый литерал должен быть числовым литералом.
    (3) Максимальный размер каждого операнда - восемнадцать десятичных цифр.
    а) В формате 1 композиция операндов определяется в результате суммирования всех операндов данного оператора.
    б) В формате 2 композиция операндов определяется путем использования всех операндов оператора, кроме следующих за словом GIVING (ПОЛУЧАЯ).
    в) В формате 3 композиция операндов определяется отдельно для каждой пары соответствующих данных. (4) CORR (СООТВ) есть сокращение слова CORRESPONDING (СООТВЕТСТВЕННО).

    6.6.4.Общие правила
    (1) Если используется формат 1, то значения операндов, предшествующих слову ТО (С), складываются вместе, затем сумма запоминается в промежуточном поле памяти. Значение этого промежуточного поля складывается со значением данного, определенного идентификатором-2, и результат запоминается в поле, заданном идентификатором-2. Этот процесс повторяется для каждого последующего вхождения идентификатора-2 в той же последовательности слева направо, в которой заданы вхождения идентификатора-2.
    (2) Если используется формат 2, то значения операндов, предшествующих слову GIVING (ПОЛУЧАЯ), складываются вместе, затем сумма запоминается как новое значение каждого из результирующих идентификаторов, заданных посредством идентификатора-3.
    (3) Если используется формат 3, данные из группы, определенной идентификатором-1, складываются с соответствующими данными из группы, определенной идентификатором-2 и запоминаются в них.

    (4) Выделение достаточного поля для выполнения вычислений без потери значащих цифр обеспечивается реализацией.
    (5) Дополнительные правила и объяснения, относящиеся к этому оператору, приводятся в соответствующих параграфах (см. ч.4, п.6.4.3; пп.6.4.1-6.4.6 настоящей части).
    6.7.Оператор ALTER (ИЗМЕНИТЬ)
    6.7.1.Назначение
    Оператор ALTER (ИЗМЕНИТЬ) модифицирует определенную ранее последовательность операторов.
    Оператор ALTER (ИЗМЕНИТЬ) в настоящем стандарте является устаревшим элементом, и будет удален в следующей редакции стандарта.
    6.7.2.Общий формат

    6.7.3.Синтаксические правила
    (1) Имя-процедуры-1 является именем параграфа, который содержит только одно предложение, состоящее из оператора GO TO (ПЕРЕЙТИ) без фразы DEPENDING ON (В ЗАВИСИМОСТИ ОТ).
    (2) Имя-процедуры-2 является именем параграфа или секции в разделе процедур.
    6.7.4.Общие правила
    (1) Во время выполнения объектной программы оператор ALTER (ИЗМЕНИТЬ) модифицирует оператор GO TO (ПЕРЕЙТИ) в параграфе, названном имя-процедуры-1, заменяя указанное в нем имя-процедуры именем-процедуры-2. Модифицируемые операторы GO TO (ПЕРЕЙТИ) в независимых сегментах могут в некоторых случаях восстанавливаться в начальное состояние (ч.16, п.1.4.3).
    (2) К оператору GO TO (ПЕРЕЙТИ), указанному в секции с номером сегмента, большим или равным 50, нельзя обращаться в операторе ALTER (ИЗМЕНИТЬ), указанном в секции с другим номером сегмента.
    Все другие применения оператора ALTER (ИЗМЕНИТЬ) являются допустимыми и выполняются даже тогда, когда оператор GO ТО (ПЕРЕЙТИ), на который ссылается оператор ALTER (ИЗМЕНИТЬ), находится в еще не вызванном для выполнения сегменте программы (ч.16).
    6.8.Оператор COMPUTE (ВЫЧИСЛИТЬ)
    6.8. Оператор COMPUTE (ВЫЧИСЛИТЬ) 6.8.1. Назначение Оператор COMPUTE (ВЫЧИСЛИТЬ) присваивает одному или нескольким данным значение арифметического выражения. 6.8.2. Общий формат 6.8.3. Синтаксические правила (1) Идентификатор-1 должен ссылаться либо на элементарное числовое данное, либо на элементарное числовое редактируемое данное. 6.8.4. Общие правила (1) Арифметическое выражение, состоящее из единственного идентификатора или литерала, позволяет установить значение идентификатора-1 равным значению идентификатора или литерала. (2) Если для результата оператора указано несколько идентификаторов, предшествующих знаку равенства, то после вычисления значения арифметического выражения оно запоминается как новое значение каждого из данных, заданных посредством идентификатора-1. (3) Оператор COMPUTE (ВЫЧИСЛИТЬ) позволяет сочетать без ограничений на композиции операндов и результирующих данных арифметические операции, производимые арифметическими операторами ADD (СЛОЖИТЬ), SUBTRACT (ОТНЯТЬ), MULTIPLY (УМНОЖИТЬ) и DIVIDE (РАЗДЕЛИТЬ). Каждая реализация определяет приемы обработки арифметических выражений. (4) Дополнительные правила и объяснения, относящиеся к этому оператору, даются в соответствующих параграфах (см. ч.4, п.6.4.3; пп.6.4.1, 6.4.2, 6.4.4-6.4.6 настоящей части).

    6.9.Оператор CONTINUE (ПРОДОЛЖИТЬ)
    6.9.1.Назначение
    Оператор CONTINUE (ПРОДОЛЖИТЬ) задает отсутствие операции. Он указывает, что никакой выполнимый оператор не присутствует.
    6.9.2.Общий формат
    CONTINUE
    ПРОДОЛЖИТЬ
    6.9.3.Синтаксическое правило
    (1) Оператор CONTINUE (ПРОДОЛЖИТЬ) может использоваться в любом месте условного оператора, в котором может использоваться повелительный оператор.
    6.9.4.Общее правило
    (1) Оператор CONTINUE (ПРОДОЛЖИТЬ) не влияет на выполнение программы.
    6.10.Оператор DISPLAY (ВЫДАТЬ)
    6.10.1.Назначение
    Оператор DISPLAY (ВЫДАТЬ) обеспечивает передачу небольшого объема данных на некоторое подходящее устройство оборудования.
    6.10.2.Общий формат

    6.10.3.Синтаксические правила
    (1) Мнемоническое-имя-1 связывается с устройством оборудования в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования.

    (2) Если литерал-1 числовой, то он должен быть целым без знака.
    6.10.4.Общие правила
    б) если размер данного, которое может принять устройство, превышает размер передаваемого данного, передаваемое данное на принимающем устройстве запоминается выровненным влево.
    (6) Если оператор DISPLAY (ВЫДАТЬ) содержит более одного операнда, размер пересылаемого данного определяется как сумма размеров соответствующих операндов, и значения операндов выдаются в последовательности, соответствующей перечислению операндов без изменения положения текущей позиции внешнего устройства при переходе на последующие операнды.
    (7) используется стандартное выводное устройство реализации.

    (10) Если устройство оборудования не поддерживает вертикальное позиционирование, операционная система будет игнорировать явно или неявно заданное вертикальное позиционирование.
    (1) В результате выполнения оператора DISPLAY (ВЫДАТЬ) значение каждого операнда передается на устройство оборудования в порядке, указанном в списке. Любое преобразование данных, которое может потребоваться при выводе идентификатора-1 или литерала-1 на внешнее устройство, определяется реализацией.
    (2) Размер одной передачи для каждого устройства определяется реализацией.
    (3) Если в качестве одного из операндов указана стандартная константа, то выдается только единственное ее вхождение.
    (4) Если устройство может принимать данные такого же размера, как размер передаваемого данного, то данное передается на устройство.
    (5) Если устройство оборудования не может принимать данных такого размера, как размер передаваемого данного, выполняется одно из следующих действий:

    6.11.Оператор DIVIDE (РАЗДЕЛИТЬ)
    6.11.1.Назначение
    Оператор DIVIDE (РАЗДЕЛИТЬ) позволяет разделить числовое данное и присвоить некоторым данным значения частного и остатка.
    6.11.2.Общий формат
    Формат 1

    Формат 2

    Формат 3

    Формат 4 Формат 5

    6.11.3.Синтаксические правила.
    (1) Каждый идентификатор должен относиться к числовому элементарному данному, за исключением идентификаторов, указанных после слов GIVING (ПОЛУЧАЯ) которые могут представлять элементарное числовое редактируемое данное или элементарное числовое данное.
    (2) Каждый литерал должен быть числовым.
    (3) Максимальный размер каждого операнда или их композиции не должен превышать восемнадцати десятичных цифр.
    6.11.4.Общие правила
    (1) Если используется формат 1, литерал-1 или значение идентификатора-1 запоминается во временном данном. Далее значение идентификатора-2 делится на значение этого данного. Значение делимого (значение идентификатора-2) заменяется этим частным; аналогично значение каждого последующего вхождения идентификатора-2 делится в порядке перечисления на вышеупомянутое временное данное, и полученное частное замещает значение делимого.
    (2) Если используется формат 2, литерал-2 или значение идентификатора-2 делится на литерал-1 или значение идентификатора-1. Результат запоминается в каждом вхождении идентификатора-3.
    (3) Если используется формат 3, литерал-1 или значение идентификатора-1 делится на литерал-2 или значение идентификатора-2 и результат запоминается в каждом вхождении идентификатора-3.
    (4) Если используется формат 4, литерал-2 или значение идентификатора-2 делится на литерал-1, или значение идентификатора-2 и результат запоминается как значение идентификатора-3. Далее вычисляется остаток, и результат запоминается как значение идентификатора-4. Если идентификатор-4 индексирован, индексы вычисляются непосредственно перед присваиванием ему значения. (5) Если используется формат 5, литерал-1 или значение идентификатора-1 делится на литерал-2 или значение идентификатора-2. Далее выполнение деления продолжается как в вышеописанном формате 4. (6) Форматы 4 и 5 используются, когда требуется запомнить остаток операции деления как значение идентификатора-4. Остаток в Коболе определен как результат вычитания произведения частного (идентификатор-3) на делитель из делимого. Если идентификатор-3 определен как числовое редактируемое данное, для вычисления остатка используется промежуточное поле, содержащее неотредактированное частное. Если используется фраза ROUNDED (ОКРУГЛЯЯ), для вычисления остатка используется промежуточное поле, которое содержит неокругленное частное оператора DIVIDE (РАЗДЕЛИТЬ), но с отброшенными избыточными позициями. Промежуточное поле определяется как числовое, которое содержит столько же разрядов, такое же положение десятичной точки и то же наличие или отсутствие знака, что и частное (идентификатор-3).
    (7) Если используются форматы 4 и 5, точность остатка определяется вычислением, описанным выше. Если необходимо, при запоминании данного, представляемого идентификатором-4, производится выравнивание по десятичной точке и усечение (без округления). (8) При использовании в форматах 4 и 5 фразы ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) имеют место следующие правила: а) если имеет место переполнение частного и указана фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ), значение остатка не определено. При этом значения данных, определяемых идентификатором-3 и идентификатором-4, остаются неизменными; б) если имеет место переполнение остатка и указана фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ), значение данного, представленного идентификатором-4, не меняется. При наличии нескольких результатов пользователь должен сам определить, какая именно ситуация встретилась.

    (9) Дополнительные правила и объяснения, относящиеся к этому оператору, приводятся в соответствующих параграфах (см. ч.4, п.6.4.3.

    6.12.Оператор ENTER (ВОЙТИ)
    6.12.1.Назначение
    Оператор ENTER (ВОЙТИ) обеспечивает возможность использования в одной и той же программе нескольких языков программирования.
    Оператор ENTER (ВОЙТИ) является устаревшим элементом в этом стандарте и будет удален из следующей редакции стандарта.
    6.12.2.Общий формат
    ENTER имя-языка-1 [имя-программного-модуля-1].
    ВОЙТИ В имя-языка-1 [имя-программного-модуля-1].
    6.12.3.Синтаксические правила
    (1) Имя-языка может относиться к любому из языков программирования, определенных реализацией как языки, в которые можно войти через Кобол. Имя-языка-1 определяется реализацией.
    (2) Имя-программного-модуля-1 является словом Кобола, к которому можно обращаться только в операторе ENTER (ВОЙТИ).
    (3) После последнего оператора другого языка должно следовать предложение ENTER COBOL (ВОЙТИ В КОБОЛ), указывающее компилятору точку возврата в исходную Кобол-программу.
    6.12.4.Общие правила
    (1) Операторы другого языка выполняются в объектной программе так, как если бы они компилировались в объектную программу вслед за оператором ENTER (ВОЙТИ).
    (2) Все детали записи в других языках определяются реализацией.
    (3) Если операторы языка, указанного именем-языка, не могут быть записаны непосредственно вслед за оператором ENTER (ВОЙТИ), то имя-программного-модуля указывает порцию программы в этом языке, выполняемую в данном месте программы. Если указанные операторы могут быть приведены непосредственно, имя-программного-модуля-1 не указывается.
    6.13.Оператор EVALUATE (ОЦЕНИТЬ)
    6.13. Оператор EVALUATE (ОЦЕНИТЬ) 6.13.1. Назначение Оператор EVALUATE (ОЦЕНИТЬ) описывает структуры со многими ветвлениями и соединениями. Он может вызывать оценку нескольких условий. Соответствующие действия объектной программы зависят от результатов этих оценок. 6.13.2. Общий формат
    6.13.3. Синтаксические правила (1) Каждый из операндов или слов TRUE (ИСТИНА) и FALSE (ЛОЖЬ), заданных перед первой фразой WHEN (КОГДА) оператора EVALUATE (ОЦЕНИТЬ), является субъектом выбора, а все вместе - множеством субъектов выбора. (2) Каждый из операндов или слов TRUE (ИСТИНА), FALSE (ЛОЖЬ), и ANY (ЛЮБОЕ), заданные во фразе WHEN (КОГДА) оператора EVALUATE (ОЦЕНИТЬ), рассматриваются от отдельности как объект выбора, а указанные вместе в одной фразе WHEN (КОГДА) - как множество объектов выбора.
    (3) Слова THROUGH и THRU эквивалентны.
    (4) Оба операнда одной фразы THROUGH (ПО) должны быть одного и того же класса. Связанные таким образом два операнда составляют один объект выбора.
    (5) Количество объектов выбора в каждом множестве объектов выбора должно быть равно количеству субъектов выбора. (6) Каждый объект выбора в множестве объектов выбора должен соответствовать субъекту выбора, имеющему ту же порядковую позицию во множестве субъектов выбора, согласно следующим правилам:
    а) идентификаторы, литералы или арифметические выражения, встречающиеся в объектах выбора, должны быть правильными операндами для сравнения с соответствующими операндами во множестве субъектов выбора (см. п.6.3.11 настоящей части); б) условие-1, условие-2 или слова TRUE (ИСТИНА) или FALSE (ЛОЖЬ), заданные как объекты выбора, должны соответствовать условным выражениям или словам TRUE (ИСТИНА) или FALSE (ЛОЖЬ) во множестве субъектов выбора; в) слово ANY (ЛЮБОЕ) может соответствовать субъекту выбора любого типа.
    6.13.4. Общие правила (1) Оператор EVALUATE (ОЦЕНИТЬ) действует так, как если бы все объекты и субъекты выбора были вычислены и получили бы числовые или нечисловые значения, или значения диапазонов числовых или нечисловых значений, или значений истинности. Эти значения определяются следующим образом: а) любому субъекту выбора, заданному идентификатором-1, идентификатором-2, и любому объекту выбора, заданному идентификатором-3, идентификатором-5, не содержащему фраз NOT (НЕ) или THRU (ПО), присваивается значение и класс данного, на который ссылается идентификатор;
    б) любому субъекту выбора, заданному литералом-1, литералом-2, и любому объекту выбора, заданному литералом-3, литералом-5 и не содержащему фраз NOT (HE) или THRU (ПО), присваивается значение и класс соответствующего литерала. Если литерал-2, литерал-5 является стандартной константой ZERO (НУЛЬ), ему присваивается класс соответствующего субъекта выбора; в) любому субъекту выбора, заданному арифметическим выражением выражение-1, выражение-2, и любому объекту выбора без фраз NOT (HE) и THRU (ПО), представленному арифметическим-выражением-1, арифметическим-выражением-3, присваивается числовое значение в соответствии с правилами вычисления арифметических выражений (см. п.6.2 настоящей части);
    г) любому субъекту выбора, в котором выражение-1, выражение-2 являются условными выражениями, и любому объекту выбора, в котором заданы условие-1, условие-2, присваивается значение истинности в соответствии с правилами вычисления условных выражений (см. п.6.3 настоящей части); д) любому субъекту выбора и любому объекту выбора, заданному словами TRUE (ИСТИНА) или FALSE (ЛОЖЬ), присваивается значение истинности. Значение истинности "истина" присваивается элементам, для которых задано слово TRUE (ИСТИНА) и значение истинности "ложь" присваивается элементам, для которых задано слово FALSE (ЛОЖЬ); е) любой объект выбора, заданный словом ANY (ЛЮБОЕ), далее не вычисляется; ж) если фраза THRU (ПО) задана для объекта выбора без фразы NOT (HE), диапазон значений включает все допустимые значения субъекта выбора, которые больше или равны первому операнду и меньше или равны второму в соответствии с правилами сравнения (см. п.6.3.1.1 настоящей части); з) если для объекта выбора задана фраза NOT (HE), значениями, соответствующими этому элементу, являются все допустимые значения субъекта выбора, не равные значению или не содержащиеся в диапазоне значений, которые соответствовали бы элементу, если бы не была задана фраза NOT (HE).
    (2) Далее выполнение оператора EVALUATE (ОЦЕНИТЬ) производится так, как если бы значения, присвоенные субъектам и объектам выбора, сравнивались, чтобы определить, удовлетворяют ли значения субъектов условиям, указанным соответствующими фразами WHEN (КОГДА). Это сравнение производится следующим образом: а) каждый объект выбора из множества объектов выбора первой фразы WHEN (КОГДА) сравнивается с субъектом выбора, имеющим тот же порядковый номер во множестве субъектов выбора. Чтобы сравнение было удовлетворено, должно выполняться одно из следующих условий:
    1) если сравниваемым элементам присваиваются числовые или нечисловые значения или диапазоны числовых или нечисловых значений, сравнение удовлетворяется, если в соответствии с правилами сравнения значение или одно из значений из диапазона, присвоенного объекту выбора, равно значению, присвоенному субъекту выбора (см. п.6.3.1.1 настоящей части); 2) если сравниваемым элементам присваиваются значения истинности, сравнение удовлетворяется, если сравниваемым элементам соответствуют одинаковые значения истинности; 3) если сравниваемый объект выбора задан словом ANY (ЛЮБОЕ), сравнение удовлетворяется всегда, независимо от значения субъекта выбора;
    б) если выше указанное сравнение удовлетворяется для каждого объекта выбора в сравниваемом множестве объектов выбора, фраза WHEN (КОГДА), содержащая это множество, считается удовлетворяющей множеству субъектов выбора; в) если вышеуказанное сравнение не удовлетворяется для одного или более объектов выбора из сравниваемого множества объектов, это множество не удовлетворяет множеству субъектов выбора; г) эти действия повторяются для множеств объектов выбора в том порядке, в котором эти множества задаются в исходной программе, до тех пор, пока либо встретится фраза WHEN (КОГДА), удовлетворяющая множеству субъектов выбора, либо будут исчерпаны все множества объектов выбора. (3) После завершения операции сравнения, выполнение оператора EVALUATE (ОЦЕНИТЬ) продолжается следующим образом: а) если выбрана некоторая фраза WHEN (КОГДА), начинается выполнение повелительного-оператора-1, следующего за этой фразой; б) если ни одна фраза WHEN (КОГДА) не выбрана и задана фраза WHEN OTHER (ИНАЧЕ), выполнение продолжается с повелительного-оператора-2; в) выполнение оператора EVALUATE (ОЦЕНИТЬ) завершается, когда выполнение достигает или конца повелительного-оператора-1 выбранной фразы WHEN (КОГДА), или конца повелительного-оператора-2, или если нет выбранной фразы WHEN (КОГДА), а фраза WHEN OTHER (ИНАЧЕ) не указана (см. ч.4, п.6.4.3).

    6.14.Оператор EXIT (ВЫЙТИ)
    6.14.1.Назначение
    Оператор EXIT (ВЫЙТИ) обеспечивает общую точку выхода для ряда процедур.
    6.14.2.Общий формат
    EXIT.
    ВЫЙТИ.
    6.14.3.Синтаксическое правило
    (1) Оператор EXIT (ВЫЙТИ) должен составлять предложение, не содержащее других операторов, и быть единственным в параграфе.
    6.14.4.Общее правило
    (1) Оператор EXIT (ВЫЙТИ) служит для того, чтобы поставить в соответствие данной точке программы имя-процедуры. Оператор EXIT (ВЫЙТИ) не оказывает другого действия на компиляцию или выполнение программы.
    6.15.Оператор GO TO (ПЕРЕЙТИ)
    6.15.1.Назначение
    Оператор GO TO (ПЕРЕЙТИ) приводит к передаче управления от одной точки раздела процедур к другой. Необязательность имени-процедуры-1 в формате 1 оператора GO TO (ПЕРЕЙТИ) в данном стандарте является устаревшей и поэтому будет устранена в следующей редакции стандарта.
    6.15.2.Общий формат
    Формат 1

    Формат 2

    6.15.3.Синтаксические правила
    (1) Идентификатор-1 представляет числовое элементарное данное, описанное как целое.
    (2) Если к параграфу, содержащему оператор GO TO (ПЕРЕЙТИ), имеется обращение в операторе ALTER (ИЗМЕНИТЬ), то параграф может состоять только из заголовка параграфа, за которым следует единственный оператор GO TO (ПЕРЕЙТИ) в формате-1.
    (3) Формат 1 оператора GO TO (ПЕРЕЙТИ) без имени-процедуры-1 разрешен только в параграфе, содержащем этот единственный оператор.
    (4) Если оператор GO TO (ПЕРЕЙТИ), представленный форматом 1, появляется в последовательности повелительных операторов внутри предложения, он должен быть последним оператором в этой последовательности.
    6.15.4.Общие правила
    (1) При выполнении оператора GO TO (ПЕРЕЙТИ), представленного форматом 1, управление передается указанному имени-процедуры-1.
    (2) Если имя-процедуры в формате 1 не определено, то оператор ALTER (ИЗМЕНИТЬ), ссылающийся на оператор GO TO (ПЕРЕЙТИ), должен быть выполнен до выполнения оператора GO ТО (ПЕРЕЙТИ).
    (3) При выполнении оператора GO TO (ПЕРЕЙТИ), представленного форматом 2, управление передается той из указанных в списке процедур, названных именем-процедуры-1, порядковый номер которой совпадает со значением идентификатора. Если значение идентификатора не равно одному из целых положительных (или без знака) 1,2, ..., n, то управление передается следующему оператору.
    6.16.Оператор IF (ЕСЛИ)
    6.16.1.Назначение
    Оператор IF (ЕСЛИ) приводит к вычислению условия (см. п.6.3 настоящей части).
    Последующие действия рабочей программы зависят от истинности условия.
    6.16.2.Общий формат

    6.16.3.Синтаксические правила
    (1) Оператор-1 и оператор-2 представляют собой повелительные операторы, . Дальнейшее описание правил управления выполнением оператора-1 и оператора-2 дается в другом месте (см. ч.4, п.6.4.3).
    (2) Фраза ELSE NEXT SENTENCE (ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) может быть опущена, если она непосредственно предшествует точке, ограничивающей предложение.
    (3) Если задана фраза END-IF (КОНЕЦ-ЕСЛИ), фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) не должна задаваться.
    6.16.4.Общие правила
    а) фразой END-IF (КОНЕЦ-ЕСЛИ) на том же уровне вложенности;
    б) разделителем точкой;
    в) если оператор вложенный, то фразой ELSE (ИНАЧЕ) оператора IF (ЕСЛИ) на более высоком уровне вложенности (см. ч.4, п.6.4.3).

    (2) При выполнении оператора IF (ЕСЛИ) имеют место следующие передачи управления:
    а) если условие истинно и задан оператор-1, управление передается первому оператору оператора-1 и выполнение продолжается в соответствии с правилами для каждого оператора из оператора-1. Если выполняется оператор ветвления процедур , который осуществляет явную передачу управления, управление передается явно в соответствии с правилами для этого оператора. После завершения выполнения оператора-1 фраза ELSE (ИНАЧЕ), даже если она указана, игнорируется и управление передается на конец оператора IF (ЕСЛИ);
    б) если условие истинно и вместо оператора-1 задана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ), фраза ELSE (ИНАЧЕ), если она задана, игнорируется и управление передается на следующее выполнимое предложение;
    в) если условие ложно и задан оператор-2, оператор-1 или заменяющая его фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) игнорируется, управление передается на первый оператор оператора-2 и выполнение продолжается в соответствии с правилами для каждого оператора из оператора-2. Если выполняется оператор ветвления процедур или условный оператор, который осуществляет явную передачу управления, управление передается явно в соответствии с правилами для этого оператора. После завершения выполнения оператора-2 управление передается на конец оператора IF (ЕСЛИ);
    г) если условие ложно, а фраза ELSE (ИНАЧЕ) не указана, оператор-1 игнорируется и управление передается на конец оператора IF (ЕСЛИ);
    д) если условие ложно и задана фраза ELSE NEXT SENTENCE (ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ), оператор-1 игнорируется, а управление передается на следующее выполнимое предложение.
    (3) Оператор-1 и (или) оператор-2 могут содержать оператор IF (ЕСЛИ). Оператор IF (ЕСЛИ) в этом случае называется вложенным. Более детальные правила вложенности даются в соответствующем параграфе (см. ч.4, п.6.4.3). Вложенные операторы могут рассматриваться как парные комбинации IF (ЕСЛИ), ELSE (ИНАЧЕ) и END-IF (КОНЕЦ-ЕСЛИ), задаваемые слева направо. Таким образом, любое встретившееся ELSE (ИНАЧЕ) или END-IF (КОНЕЦ-ЕСЛИ) рассматривается как связанное с непосредственно предшествующим IF (ЕСЛИ), которому еще нет парной фразы ELSE (ИНАЧЕ) или END-IF (КОНЕЦ-ЕСЛИ).
    (1) Область действия оператора IF (ЕСЛИ) может ограничиваться одним из следующих способов:
    6.17.Оператор INITIALIZE (ИНИЦИИРОВАТЬ)
    6.17. Оператор INITIALIZE (ИНИЦИИРОВАТЬ) 6.17.1. Назначение Оператор INITIALIZE (ИНИЦИИРОВАТЬ) обеспечивает возможность присваивать выбранным типам полей данных заранее определенные значения, например, числовым данным нули, буквенно-цифровым данным - пробелы. 6.17.2. Общий формат
    6.17.3. Синтаксические правила (1) Литерал-1 и данное, на которое ссылается идентификатор-2, задают посылающую область; данное, на которое ссылается идентификатор-1, представляет принимающую область. (2) Каждая категория, заданная во фразе REPLACING (ЗАМЕНЯЯ), должна быть допустимой для принимающего операнда в операторе MOVE (ПОМЕСТИТЬ), в котором литерал-1 или данное, на которое ссылается идентификатор-2, используется как посылаемый операнд (п.6.19 настоящей части). (3) Одна и та же категория не может повторяться во фразе REPLACING (ЗАМЕНЯЯ). (4) Описание данного, заданного идентификатором-1 или подчиненного идентификатору-1, не должно содержать фразу OCCURS (ПОВТОРЯЕТСЯ) с вариантом DEPENDING (В ЗАВИСИМОСТИ ОТ). (5) Индексное данное не может быть операндом оператора INITIALIZE (ИНИЦИИРОВАТЬ).
    (6) Статья описания данного для данного, заданного идентификатором-1, не должна содержать фразу RENAMES (ПЕРЕИМЕНОВЫВАЕТ).
    6.17.4. Общие правила
    (1) Ключевое слово, следующее за словом REPLACING (ЗАМЕНЯЯ), соответствует категориям данных, как они определяются в этом документе (см. ч.4, п.4.3.3).
    (2) В зависимости от того, ссылается ли идентификатор-1 на элементарное или групповое данное, все действия выполняются, как если бы была написана последовательность операторов MOVE (ПОМЕСТИТЬ), каждый из которых имеет в качестве принимающего поля элементарное данное, подчиняющееся следующим правилам: если задана фраза REPLACING (ЗАМЕНЯЯ):
    а) если идентификатор-1 ссылается на групповое данное, любое подчиненное ему элементарное данное инициируется только в том случае, если оно принадлежит к категории, заданной во фразе REPLACING (ЗАМЕНЯЯ);
    б) если идентификатор-1 ссылается на элементарное данное, то это данное инициируется, только если оно принадлежит к категории, заданной во фразе REPLACING (ЗАМЕНЯЯ). Эта инициация производится следующим образом. Данное, на которое ссылается идентификатор-2 или литерал-1, действует как посылаемый операнд соответствующего неявного оператора MOVE (ПОМЕСТИТЬ). Это действие распространяется на все принимающие элементарные поля, включая все вхождения элементов таблицы в групповом данном за исключением полей, перечисленных в пунктах (3) и (4) общих правил. (3) Действие оператора INITIALIZE (ИНИЦИИРОВАТЬ) не распространяется на индексные данные и элементарные данные FILLER (ЗАПОЛНИТЕЛЬ).
    (4) Любое данное, которое подчиняется идентификатору принимающего данного и содержит фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), или любое подчиненное ему данное исключается из операции инициации. Однако принимающее данное или содержащее его данное может иметь в своем описании фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ). (5) Если оператор задан без фразы REPLACING (ЗАМЕНЯЯ), в данные буквенной, буквенно-цифровой и буквенно-цифровой редактируемой категорий посылаются пробелы, а в данные числовой и числовой редактируемой категории посылаются нули. В этом случае операция выполняется так, как если бы каждое принимающее данное было бы принимающей областью элементарного оператора MOVE (ПОМЕСТИТЬ) с пробелом или нулем в качестве посылаемого данного. (6) Во всех случаях содержимое данных, на которые ссылается идентификатор-1, устанавливается на указанные значения в порядке (слева направо) появления идентификатора-1 в операторе INITIALIZE (ИНИЦИИРОВАТЬ). В пределах этой последовательности, если идентификатор-1 ссылается на групповое данное, подчиненные ему элементарные данные инициируются в порядке их определения внутри группы. (7) Если идентификатор-1 занимает ту же область памяти, что идентификатор-2, результат выполнения оператора не определен, даже если эти данные описаны одной статьей описания данных (см. п.6.4.5 настоящей части).

    6.18.Оператор INSPECT (ПРОСМОТРЕТЬ)
    6.18.1.Назначение
    Оператор INSPECT (ПРОСМОТРЕТЬ) обеспечивает возможность подсчета или замены вхождений единичных литер в данном.
    6.18.2.Общий формат
    Формат 1

    Формат 2

    Формат 3

    Формат 4

    6.18.3.Синтаксические правила
    Для всех форматов:
    (1) Идентификатор-1 должен относиться к групповому данному или к элементарному данному любой категории с заданным (явно или неявно) использованием DISPLAY (ДЛЯ ВЫДАЧИ).
    (2) Идентификатор-3, идентификатор-4 и так далее должны относиться к элементарному данному с заданным (явно или неявно) использованием DISPLAY (ДЛЯ ВЫДАЧИ).
    (3) Каждый литерал должен быть нечисловым и может быть любой стандартной константой, кроме константы ALL (ВСЕ). Если литерал-1, литерал-2 или литерал-4 являются стандартными константами, они неявно относятся к однолитерным элементарным данным.
    (4) Для каждой из фраз ALL (ВСЕ), LEADING (ВЕДУЩИЕ), CHARACTERS (ЛИТЕРЫ), FIRST (ПЕРВЫЙ), CONVERTING (ПРЕВРАЩАЯ) могут быть определены одна фраза BEFORE (ДО) и одна фраза AFTER (ПОСЛЕ).


    (6) При использовании форматов 1 и 3 идентификатор-2 должен представлять элементарное числовое данное.
    (7) При использовании форматов 2 и 3 размер литерала-3 или данного, представляемого идентификатором-5, должны быть равны размеру литерала-1 или данного, представляемого идентификатором-3. Если вместо литерала-3 используется стандартная константа, размер данного, представленного стандартной константой, равен размеру литерала-1 или размеру данного, представляемого идентификатором-3.
    (8) Если используется фраза CHARACTERS (ЛИТЕРЫ), то литерал-2, литерал-3 или значение данных, представляемых идентификатором, идентификатором-5, должны состоять из одной литеры.
    (9) При использовании формата 4 размер литерала-5 или данного, представляемого идентификатором-7, должен быть равен размеру литерала-4 или данного, представляемого идентификатором-6. Если вместо литерала-5 используется стандартная константа, размер данного, представленного стандартной константой, равен размеру литерала-4 или размеру данного, представляемого идентификатором-6. (10) Одна и та же литера не должна содержаться дважды ни в литерале-4, ни в данном, представляемом идентификатором-6.

    6.18.4.Общие правила
    Для всех форматов:
    (1) При просмотре (который включает цикл сравнения, установление границ для фраз BEFORE (ДО) и AFTER (ПОСЛЕ) и механизм подсчета или замещения) данное, представленное идентификатором-1, независимо от его класса, просматривается, начиная от своей самой левой позиции литеры, слева направо до самой правой позиции; выполняемые при этом действия и область их применения оговорены в общих правилах (5)-(7).
    (2) При просмотре содержимое данных, указанных идентификатором-1, идентифиюатором-3, идентификатором-4, идентификатором-5, идентификатором-6, идентификатором-7, трактуется следующим образом:
    а) если какое-либо из данных, представленных идентификатором-1, идентификатором-3, идентификатором-4, идентификатором-5, идентификатором-6 или идентификатором-7, описано как буквенное или буквенно-цифровое, то оператор INSPECT (ПРОСМОТРЕТЬ) обрабатывает значение каждого такого данного как строку литер;
    б) если какое-либо из данных, представленных идентификатором-1, идентификатором-3, идентификатором-4, идентификатором-5, идентификатором-6 или идентификатором-7, описано как буквенно-цифровое редактируемое, числовое редактируемое или числовое без знака, то оператор INSPECT (ПРОСМОТРЕТЬ) обрабатывает значение, каждого такого данного так, как переопределенное на буквенно-цифровое (см. общее правило 2а);
    в) если какой-либо из перечисленных ранее идентификаторов представляет числовое данное со знаком, это данное рассматривается при выполнении оператора так, как если бы оно было помещено в числовое данное без знака того же размера, после чего к нему применяется правило 2б (п.6.19 настоящей части). Если идентификатор-1 представляет числовое данное со знаком, первоначальное значение знака сохраняется после завершения оператора INSPECT (ПРОСМОТРЕТЬ).
    (3) При изложении ниже правил (5)-(17) все, оговоренное для литерала-1, литерала-2, литерала-3, литерала-4 и литерала-5, применяется в равной мере к значениям данных, представленных идентификатором-3, идентификатором-4, идентификатором-5, идентификатором-6 и идентификатором-7 соответственно.
    (4) Индексы, связанные с любым идентификатором, вычисляются один раз в начале выполнения оператора INSPECT (ПРОСМОТРЕТЬ).
    В форматах 1 и 2
    (5) При просмотре значения данного, представленного идентификатором-1, каждое обнаруженное вхождение литерала-1 подсчитывается (при использовании формата 1) или заменяется вхождением литерала-3 (при использовании формата 2).
    (6) Проверка вхождения литерала-1 в идентификатор-1 для подсчета или замены осуществляется по следующим правилам:
    а) операнды фраз TALLYING (СЧИТАЯ) и REPLACING (ЗАМЕНЯЯ) рассматриваются в том порядке, в котором они представлены в операторе слева направо. Первый из литералов-1 сравнивается с соответствующим количеством первых слева позиций литер данного, представленного идентификатором-1. Литерал-1 совпадает с порцией данного, представляемого идентификатором-1, если их литеры попарно совпадают и:
    1) если не определены ни LEADING (ВЕДУЩИЕ), ни FIRST (ПЕРВЫЙ) либо
    2) если LEADING (ВЕДУЩИЕ) относится к литералу-1, а литерал-1 является ведущим вхождением, как определено в общих правилах (10) и (13), либо
    3) если FIRST (ПЕРВЫЙ) относится к литералу-1, а литерал-1 является первым вхождением, как определено в общих правилах (10) и (13);
    б) если для первого литерала-1 и первых позиций литер идентификатора-1 вхождение не найдено, проверяется вхождение следующего литерала-1 и так далее для тех же позиций литер идентификатора-1.
    Если перебраны все указанные литералы-1 и вхождение не обнаружено, переходим к рассмотрению следующих позиций литер данного, представленного идентификатором-1, таким образом, что соседняя справа литера по отношению к самой левой из рассматриваемых в предыдущем цикле сравнений позиций литер данного, представленного идентификатором-1, становится самой левой рассматриваемой позицией этого данного, после чего снова выполняется цикл сравнений для всех указанных литералов-1 (начиная от первого);
    в) если вхождение найдено, выполняется подсчет или замещение согласно правилам (10) и (13).
    Соседняя справа позиция литеры по отношению к самой правой из рассматриваемых в предыдущем цикле сравнения позиций литер данного, представленного идентификатором-1, становится самой левой рассматриваемой позицией этого данного, после чего снова выполняется цикл сравнений, начиная с первого литерала-1;
    г) процесс проверки вхождения продолжается до тех пор, пока самая правая позиция литеры данного, представленного идентификатором-1, не будет рассмотрена как удовлетворяющая проверке вхождения или как самая левая позиция этого данного, после чего оператор INSPECT (ПРОСМОТРЕТЬ) считается выполненным;
    д) если указана фраза CHARACTERS (ЛИТЕРЫ), в описанном выше цикле сравнения вместо литерала-1 всегда участвует однолитерный подразумеваемый операнд, значение которого в каждый момент совпадает с самой левой рассматриваемой позицией данного, представленного идентификатором-1.
    (7) Операции сравнения, определенные правилами (6), ограничиваются фразами BEFORE (ДО) и AFTER (ПОСЛЕ) следующим образом:
    а) если не указаны фразы BEFORE (ДО) и AFTER (ПОСЛЕ), литерал-1 или подразумеваемый операнд фразы CHARACTERS (ЛИТЕРЫ) участвует в сравнении согласно предыдущему правилу с самой левой позиции идентификатора-1;
    б) если указана фраза BEFORE (ДО), то самая левая позиция литеры этого данного становится самой левой рассматриваемой позицией; соседняя слева позиция литеры по отношению к первому вхождению литерала-2 в значение данного, представленного идентификатором-1, становится самой правой рассматриваемой позицией литеры этого данного;
    в) если указана фраза AFTER (ПОСЛЕ), то соседняя справа позиция литеры по отношению к первому вхождению литерала-2 в данное, представленное идентификатором-1, становится самой левой рассматриваемой позицией этого данного, а его самая правая позиция становится самой правой рассматриваемой позицией.
    Если вхождение литерала-2 в значение данного, представленного идентификатором-1, не установлено, цикл сравнения в случае фразы BEFORE (ДО) выполняется так, как если бы фраза BEFORE (ДО) не была задана; в случае фразы AFTER (ПОСЛЕ) считается, что вхождение литерала-1 в значение данного, представленного идентификатором-1, не обнаружено.
    В формате 1
    (8) Слова ALL (ВСЕ), LEADING (ВЕДУЩИЕ) рассматриваются как прилагательные, которые относятся ко всем последующим литералам-1 до появления другого прилагательного.
    (9) При выполнении оператора INSPECT (ПРОСМОТРЕТЬ) значение данного, представленного идентификатором-2, не устанавливается в начальное состояние.
    (10) Правила использования следующие:
    а) Если задана фраза ALL (ВСЕ), значение данного, представленного идентификатором-2, увеличивается на единицу при каждом вхождении литерала-1 в значение данного, представленного идентификатором-1;
    б) если задана фраза LEADING (ВЕДУЩИЕ), значение данного, представленного идентификатором-2, увеличивается на единицу при каждом следующем вхождении литерала-1 в значение данного, на которое ссылается идентификатор-1, при условии, что слева не встретились позиции данного, представленного идентификатором-1, которые не совпали ни с одним из указанных литералов-1;
    в) если задана фраза CHARACTERS (ЛИТЕРЫ), значение данного, на которое ссылается идентификатор-2, увеличивается на единицу при каждом просмотре литеры данного, представленного идентификатором-1.
    (11) При использовании формата 1 в случае, когда идентификатор-1, идентификатор-3 или идентификатор-4 занимают ту же область памяти, что и идентификатор-2, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п.6.4.5 настоящей части).
    В формате 2
    (12) Фразы ALL (ВСЕ), LEADING (ВЕДУЩИЕ), FIRST (ПЕРВЫЙ) применяются к каждой следующей за ними фразе BY (НА) до появления очередного вхождения одной из перечисленных фраз.
    (13) Правила замещения следующие:
    а) если задана фраза CHARACTERS (ЛИТЕРЫ), каждая литера значения данного, представляемого идентификатором-1, заменяется на литерал-3;
    б) если задана фраза ALL (ВСЕ), каждое вхождение литерала-1 в значение данного, представляемого идентификатором-1, заменяется на литерал-3;
    в) если задана фраза LEADING (ВЕДУЩИЕ), каждое смежное вхождение литерала-1 в значение данного, представляемого идентификатором-1, заменяется на литерал-3 при условии, что слева не были обнаружены позиции этого данного, которые не совпали ни с одним из литералов-1;
    г) когда задана фраза FIRST (ПЕРВЫЙ), самое левое вхождение литерала-1 в значение данного, представляемого идентификатором-1, заменяется литералом-3.
    Это правило применяется ко всем последующим указаниям фразы FIRST (ПЕРВЫЙ) независимо от значения литерала-1.
    (14) При использовании формата 2 в случае, когда идентификатор-3, идентификатор-4 или идентификатор-5 занимают одну и ту же область памяти, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п.6.4.5 настоящей части).
    В формате 3
    (15) Оператор INSPECT (ПРОСМОТРЕТЬ) интерпретируется и выполняется так, как будто заданы два следующих друг за другом оператора INSPECT (ПРОСМОТРЕТЬ) для одного и того же идентификатора-1, один из которых имеет формат 1 с фразой TALLYING (СЧИТАЯ), тождественной соответствующей фразе оператора в формате 3, а другой - формат 2 с фразой REPLACING (ЗАМЕНЯЯ), тождественной соответствующей фразе оператора в формате 3. К оператору в формате 1 применяются общие правила сравнения и подсчета. К оператору в формате 2 применяются общие правила сравнения и замены.
    Индексы, связанные с любым идентификатором в операторе формата 2, вычисляются только один раз до выполнения оператора в формате 1.
    В формате 4 (16) Оператор INSPECT (ПРОСМОТРЕТЬ) интерпретируется и выполняется так, как будто задан оператор INSPECT (ПРОСМОТРЕТЬ) в формате 2 для одного и того же идентификатора-1 с последовательностью фраз ALL (ВСЕ) - по одной для каждой литеры литерала-4. Результат оператора такой же, как если бы в каждой фразе ALL (ВСЕ) в качестве литерала-1 указывалась единственная литера литерала-4, а в качестве литерала-3 - соответствующая единственная литера литерала-5. Соответствие между литерами литерала-4 и литерами литерала-5 осуществляется по порядковому номеру литеры в данном. (17) Если идентификатор-4, идентификатор-6 или идентификатор-7 занимают одну и ту же область памяти, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы определены одной и той же статьей описания данных.

    6.18.5.Примеры
    В каждом из следующих примеров оператора INSPECT (ПРОСМОТРЕТЬ) предполагается, что непосредственно перед выполнением оператора значения всех данных СО-0, СО-1, СО-2, СО-3, СО-4 равны нулю. В каждом примере, кроме последнего, приводятся результаты работы двух операторов INSPECT (ПРОСМОТРЕТЬ).
    Пример 1.
    INSPECT ТЕМ TALLYING
    СО-0 FOR ALL "AB", ALL "D"
    СО-1 FOR ALL "ВС"
    CO-2 FOR LEADING "EF"
    СO-3 FOR LEADING "B"
    CO-4 FOR CHARACTERS;
    ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ
    В СО-0, ВСЕ "АВ", ВСЕ "D"
    В СО-1 ВСЕ "ВС"
    В СО-2 ВЕДУЩИЕ "EF"
    В СО-3 ВЕДУЩИЕ "В"
    В СО-4 ЛИТЕРЫ;
    INSPECT ТЕМ REPLACING
    ALL "AB" BY "XY", "D" BY "X"
    ALL "ВС" BY "VW"
    LEADING "EF" BY "TU"
    LEADING "B" BY "S"
    FIRST "G" BY "P"
    CHARACTERS BY "Z"
    ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
    ВСЕ "АВ" НА "XY", "D" НА "X"
    ВСЕ "ВС" НА "VW"
    ВЕДУЩИЕ "EF" НА "TU"
    ВЕДУЩИЕ "В" НА "S"
    ПЕРВЫЙ "G" НА "Р"
    ЛИТЕРЫ НА "Z"
    Результаты действия оператора показаны ниже.

    Начальное значение данного ТЕМ СО-0 СО-1 СО-2 СО-3 СО-4 Результирующее значение данного ТЕМ
    EFABDBCGABEFGG 3 1 1 0 5 TUXYXVWRXYZZPZ
    ВАВАВС 2 0 0 1 1 SXYXYZ
    ВВВС 0 1 0 2 0 SSVW

    Пример 2
    INSPECT ТЕМ TALLYING
    СО-0 FOR CHARACTERS
    СО-0 FOR ALL "A"
    ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ
    В СО-0 ЛИТЕРЫ
    В СО-1 ВСЕ "А"
    INSPECT ТЕМ REPLACING
    CHARACTERS BY "Z"
    ALL "A" BY "X"
    ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
    ЛИТЕРЫ НА "Z"
    ВСЕ "А" НА "X"
    Результаты работы операторов показаны ниже.

    Исходное значение данного ТЕМ СО-0 CO-1 Результирующее значение данного ТЕМ
    ВВВ 3 0 ZZZ
    ABA 3 0 ZZZ

    Пример 3
    INSPECT ТЕМ TALLYING
    СО-0 FOR ALL "AB" BEFORE "ВС"
    CO-1 FOR LEADING "В" AFTER "D"
    СО-2 FOR CHARACTERS AFTER "A" BEFORE "C"
    ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ
    В СО-0 ВСЕ "АВ" ДО "ВС"
    В СО-1 ВЕДУЩИЕ "В" ПОСЛЕ "D"
    В СО-2 ЛИТЕРЫ ПОСЛЕ "А" ДО "С"
    INSPECT ТЕМ REPLACING
    ALL "AB" BY "XY" BEFORE "ВС"
    LEADING "В" BY "W" AFTER "D"
    FIRST "E" BY "V" AFTER "D"
    CHARACTERS BY "Z" AFTER "A" BEFORE "C"
    ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
    ВСЕ "АВ" НА "XY" ДО "ВС"
    ВЕДУЩИЕ "В" НА "W" ПОСЛЕ "D"
    ПЕРВЫЙ "Е" НА "V" ПОСЛЕ "D"
    ЛИТЕРЫ НА "Z" ПОСЛЕ "А" ДО "С"
    Результаты работы операторов показаны ниже.

    Начальное значение ТЕМ СО-0 СО-1 СО-2 Результирующее значение ТЕМ
    BBEABDABABBCABEE 3 0 2 BBEXYZXYXYZCABVE
    ADDDDC 0 0 4 AZZZZC
    ADDDDA 0 0 5 AZZZZZ
    CDDDDC 0 0 0 CDDDDC
    BDBBBDB 0 3 0 BDWWWDB

    Пример 4
    INSPECT ТЕМ TALLYING
    СО-0 FOR ALL "AB" AFTER "BA" BEFORE "ВС"
    ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ
    В СО-0 ВСЕ "АВ" ПОСЛЕ "ВА" ДО "ВС"
    INSPECT ТЕМ REPLACING
    ALL "AB" BY "XY" AFTER "BA" BEFORE "ВС"
    ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
    ВСЕ "АВ" НА "XY" ПОСЛЕ "ВА" ДО "ВС".

    Результаты работы операторов показаны ниже.
    Исходное значение данного ТЕМ СО-0 Результирующее значение данного ТЕМ
    АВАВАВАВС 1 ABABXYABC

    Пример 5
    INSPECT ТЕМ CONVERTING
    "ABCD" TO "XYZX" AFTER QUOTE BEFORE "#"
    ПРОСМОТРЕТЬ ТЕМ ПРЕВРАЩАЯ
    "ABCD" В "XYZX" ПОСЛЕ КАВЫЧКА ДО "#"
    Этот оператор эквивалентен следующему:
    INSPECT ITEM REPLACING
    ALL "A" BY "X" AFTER QUOTE BEFORE "#"
    ALL "B" BY "Y" AFTER QUOTE BEFORE "#"
    ALL "C" BY "Z" AFTER QUOTE BEFORE "#"
    ALL "D" BY "X" AFTER QUOTE BEFORE "#"
    ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
    ВСЕ "А" НА "X" ПОСЛЕ КАВЫЧКА ДО "#"
    ВСЕ "В" НА "Y" ПОСЛЕ КАВЫЧКА ДО "#"
    ВСЕ "С" НА "Z" ПОСЛЕ КАВЫЧКА ДО "#"
    ВСЕ "D" НА "X" ПОСЛЕ КАВЫЧКА ДО "#"
    Результаты работы оператора показаны ниже.

    Начальное значение ТЕМ Результирующее значение ТЕМ
    AC "AEBDFBCD # АВ" D AC "XEYXFYZX # АВ" D

    6.19.Оператор MOVE (ПОМЕСТИТЬ)
    6.19.1.Назначение
    Оператор MOVE (ПОМЕСТИТЬ) пересылает данные в соответствии с правилами редактирования в одно или несколько полей данных.
    6.19.2.Общий формат
    Формат 1

    Формат 2

    6.19.3.Синтаксические правила
    (1) Литерал-1 или данное, представленное идентификатором-1, представляют пересылаемое поле. Данное, представленное идентификатором-2, представляет принимающее поле.
    (2) CORR (СООТВ) является сокращением слова CORRESPONDING (СООТВЕТСТВЕННО). (3) При использовании фразы CORRESPONDING (СООТВЕТСТВЕННО) оба идентификатора должны представлять групповые данные.

    (4) Индексное данное не может появляться как операнд оператора MOVE (ПОМЕСТИТЬ).
    6.19.4.Общие правила
    а) буквенно-цифровое редактируемое, стандартная константа SPACE (ПРОБЕЛ) или буквенное данное не должны перемещаться в числовое или числовое редактируемое данное;
    б) числовое или числовое редактируемое данное, числовой литерал и стандартная константа ZERO (НУЛЬ) не могут перемещаться в буквенное данное;
    в) числовой литерал, не представляющий целое число, или числовое данное, имеющее значение, не являющееся целым числом, не может перемещаться в буквенно-цифровое или буквенно-цифровое редактируемое данное;
    г) на уровне 1 числовое редактируемое данное не должно перемещаться в числовое или числовое редактируемое данное;
    д) прочие элементарные перемещения являются допустимыми и выполняются согласно общему правилу (4).
    (4) Во время выполнения допустимого элементарного перемещения производятся все необходимые преобразования данного из одной формы внутреннего представления в другую, сопровождающиеся редактированием, определенным для принимающего данного,
    Следующие правила применяются к допустимым элементарным перемещениям:
    а) если принимающим данным является буквенно-цифровое редактируемое или буквенно-цифровое данное, производится выравнивание и любое необходимое дополнение пробелами, как это определено стандартными правилами выравнивания (см. ч.4, п.4.3.6). Если пересылаемое данное описано как числовое со знаком, знак числа не пересылается; если знак числа занимает отдельную позицию литеры, то эта литера не пересылается и размер пересылаемого данного на одну литеру меньше, чем его действительный размер в терминах литер стандартного формата данных (см. п.5.12 настоящей части).
    Если пересылаемый операнд описан как числовое редактируемое данное, дередактирования не происходит. Если использование пересылаемого операнда отличается от использования принимающего операнда, происходит преобразование пересылаемого операнда во внутреннее представление принимающего операнда. Если пересылаемый операнд числовой и содержит литеру шаблона Р (М), считается, что все цифровые позиции, определяемые этой литерой, имеют значение нуль и учитываются при определении размера пересылаемого операнда;
    б) если принимающим данным является числовое или числовое редактируемое данное, то производится выравнивание по десятичной точке и любое необходимое дополнение нулями согласно стандартным правилам выравнивания (см. ч.4, п.4.3.6), кроме случая, когда нули замещаются согласно требованиям редактирования.
    Если пересылаемый операнд является числовым редактируемым, требуется дередактирование для установления неотредактированного числового значения операнда, возможно, со знаком, затем это неотредактированное числовое значение помещается в принимающее поле.

    1) Если принимающим является числовое данное со знаком, знак пересылаемого данного помещается в принимающее данное при этом выполняется необходимое преобразование представления знака (см. п.5.12 настоящей части). Если пересылаемое данное описано без знака, принимающему данному присваивается положительный знак.
    2) Если принимающее данное не имеет знака числа, при перемещении используется абсолютное значение пересылаемого данного.
    3) Пересылаемое данное, описанное как буквенно-цифровое, перемещается так, как если бы оно было описано как числовое целое без знака;
    в) если принимающее поле описано как буквенное, имеет место выравнивание и необходимое дополнение пробелами по ранее определенным правилам (см. ч.4, п.4.3.6).
    (5) Перемещение, которое не является элементарным, рассматривается как элементарное перемещение буквенно-цифрового данного в буквенно-цифровое; однако при этом не выполняются преобразования данных из одной формы внутреннего представления в другую. При таком перемещении принимающее поле будет заполняться без рассмотрения особенностей отдельных элементарных или групповых данных, содержащихся в пересылаемом или принимающем поле,
    (6) Ниже иллюстрируются допустимые сочетания категорий операндов оператора MOVE (ПОМЕСТИТЬ).
    Категория пересылаемого данного Категория принимающего данного
    Буквенная Буквенно-цифровая, буквенно-цифровая, редактируемая Числовая (целое), числовая (нецелое), числовая редактируемая
    Буквенная Да По п.4в Да По п.4а Нет По п.3а
    Буквенно-цифровая Да По п.4в Да По п.4а Да По п.4б
    Буквенно-цифровая редактируемая Да По п.4в Да По п.4а Нет По п.3а
    Числовая (целое) Нет По п.3б Да По п.4а Да По п.4б
    Числовая (нецелое) Нет По п.3б Нет По п.3в Да По п.4б
    Числовая редактируемая Нет По п.3б Да По п.4а Да По п.4б

    Примечание. "Да" обозначает допустимость пересылки, "нет" - запрещение. Ссылка на общее правило указывает правило, запрещающее пересылку или объясняющее порядок перемещения.
    (1) Если используется фраза CORRESPONDING (СООТВЕТСТВЕННО), то отдельные компоненты идентификатора-1 перемещаются в соответствующие компоненты идентификатора-2 согласно правилам, приведенным в п.6.4.3 настоящей части. Результат действия фразы такой же, как при использовании отдельного оператора MOVE (ПОМЕСТИТЬ) для каждой пары соответствующих идентификаторов.


    Индексы, связанные с идентификатором-1, вычисляются только один раз непосредственно перед помещением данных в первый из принимающих операндов.
    Длина данного, представленного идентификатором-1, вычисляется только один раз непосредственно перед помещением данных в первый из принимающих операндов.
    На вычисление длины идентификатора-1 или идентификатора-2 может влиять вариант DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы OCCURS (ПОВТОРЯЕТСЯ) (см. п.5.8 настоящей части).

    Результат действия оператора
    MOVE A (M) ТО М, Р (М)
    ПОМЕСТИТЬ А (М) В М, Р (М)
    эквивалентен операторам
    MOVE A (M) TO temp ПОМЕСТИТЬ А (М) В пром
    MOVE temp TO M ПОМЕСТИТЬ пром В М
    MOVE temp ТО Р (М) ПОМЕСТИТЬ пром В Р (М)

    где "temp" ("пром") - промежуточный результат, обеспечиваемый реализацией.
    (3) Перемещение, в котором принимающий операнд является элементарным данным, а пересылаемый операнд - литералом либо элементарным данным, называется элементарным перемещением. Каждое элементарное данное принадлежит одной из следующих категорий: числовой, буквенной, буквенно-цифровой, числовой редактируемой, буквенно-цифровой редактируемой (см. п.5.9 настоящей части). Числовые литералы принадлежат к числовой категории, а нечисловые - к буквенно-цифровой категории. Стандартная константа ZERO, ZEROES (НУЛЬ, НУЛИ) при перемещении в числовое или числовое редактируемое данное относится к числовой категории.
    Во всех прочих случаях она относится к буквенно-цифровой категории.
    Стандартная константа SPACE, SPACES (ПРОБЕЛ, ПРОБЕЛЫ) относится к буквенной категории. Все остальные стандартные константы относятся к буквенно-цифровой категории.
    К элементарному перемещению применяются следующие правила:
    6.20.Оператор MULTIPLY (УМНОЖИТЬ)
    6.21.1.Назначение
    6.20.2.Общий формат
    Формат 1

    Формат 2

    6.20.3.Синтаксические правила
    (1) Каждый идентификатор должен представлять числовое элементарное данное, за исключением формата 2, в котором любой идентификатор, который появляется только справа от слова GIVING (ПОЛУЧАЯ), должен представлять элементарное числовое или элементарное числовое редактируемое данное.
    (2) Каждый литерал должен быть числовым литералом.
    (3) Композиция операндов, полученная в результате умножения операндов, выровненных по положению их десятичной точки, не должна содержать более 18 цифр.
    6.20.4.Общие правила
    (1) При использовании формата 1 литерал-1 или значение данного, представленного идентификатором-1, хранится в промежуточном данном. Затем его промежуточное данное умножается на данное, представленное идентификатором-2. Значение множителя (значение данного, представленного идентификатором-2) заменяется этим произведением; аналогично промежуточное данное умножается на каждое последующее вхождение идентификатора-2 в указанном порядке слева направо.
    (2) При использовании формата 2 литерал-1 или значение данного, представленное идентификатором-1, умножается на литерал-2 или значение данного, представленного идентификатором-2, а результат хранится в данном, представленном каждым идентификатором-3.
    (3) Дополнительные правила и пояснения, относящиеся к этому оператору, приводятся в соответствующих параграфах (см. ч.4, п.6.4.3; ч.6, пп.6.4.1, 6.4.2, 6.4.4-6.4.6).
    Оператор MULTIPLY (УМНОЖИТЬ) позволяет перемножить числовые данные и присвоить значение произведения результату.
    6.21.Оператор PERFORM (ВЫПОЛНИТЬ)
    6.21.1.Назначение
    Оператор PERFORM (ВЫПОЛНИТЬ) используется для явной передачи управления одной или нескольким процедурам и неявного возврата управления после завершения этих процедур. Оператор PERFORM (ВЫПОЛНИТЬ) используется также для управления выполнением одного или более повелительных операторов, находящихся в области действия этого оператора PERFORM (ВЫПОЛНИТЬ).
    6.21.2.Общий формат
    Формат 1

    Формат 2

    Формат 3

    Формат 4

    6.21.3.Синтаксические правила
    (1) Если опущено имя-процедуры-1, должны быть определены повелительный-оператор-1 и фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ), если определено имя-процедуры-1, не должны употребляться повелительный-оператор-1 и фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ).
    (2) При использовании формата 4, если опущено имя-процедуры-1, не должна употребляться фраза AFTER (ЗАТЕМ). (3) Если не указаны ни фраза TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ), ни фраза TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ), предполагается по умолчанию TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ).

    (4) Каждый идентификатор представляет числовое элементарное данное, описанное в разделе данных. В формате 2 идентификатор-1 представляет целое числовое элементарное данное.
    (5) Каждый литерал является числовым литералом.

    (6) Если указана фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ), оператор PERFORM (ВЫПОЛНИТЬ) является оператором с ограничителем области действия.
    (7) Если во фразе VARYING (МЕНЯЯ) или AFTER (ЗАТЕМ) указано имя-индекса, то: а) идентификатор, относящийся к фразам FROM (ОТ) и BY (НА), должен представлять положительное целое; б) литерал, относящийся к фразе FROM (ОТ), должен представлять положительное целое; в) литерал, относящийся к фразе BY (НА), должен представлять целое, отличное от нуля. (8) Если во фразе FROM (ОТ) задано имя-индекса, то: а) идентификатор, относящийся к фразам VARYING (МЕНЯЯ) и AFTER (ЗАТЕМ), должен представлять целое; б) идентификатор, относящийся к фразе BY (НА), должен представлять целое; в) литерал, относящийся к фразе BY (НА), должен представлять целое. (9) Литерал во фразе BY (НА) не должен равняться нулю.

    (10) Условие-1, условие-2, ... могут быть любыми условными выражениями (см. п.6.3 настоящей части).
    (11) Если указаны и имя-процедуры-1, и имя-процедуры-2 и какое-либо из них является именем-процедуры в декларативной части программы, то оба имени-процедуры должны быть именами-процедур из одной и той же секции этой части.
    (12) Допускаются до шести фраз AFTER (ЗАТЕМ) в формате 4 оператора PERFORM (ВЫПОЛНИТЬ).

    6.21.4.Общие правила
    а) если имя-процедуры-1 является именем-параграфа и имя-процедуры-2 в операторе не указано, возврат производится после выполнения последнего оператора имени-процедуры-1;
    б) если имя-процедуры-1 есть имя-секции и имя-процедуры-2 не указано, возврат производится после выполнения последнего оператора последнего параграфа имени-процедуры-1;
    в) если указано имя-процедуры-2 и оно является именем параграфа, возврат производится после выполнения последнего оператора этого параграфа;
    г) если указано имя-процедуры-2 и оно является именем-секции, возврат производится после выполнения последнего оператора последнего параграфа этой секции;
    д) если указан оператор PERFORM (ВЫПОЛНИТЬ) с встроенной областью действия, его выполнение завершается после выполнения последнего содержащегося в нем оператора.
    (8) Имя-процедуры-1 и имя-процедуры-2 не обязательно связывать какими-либо отношениями, за исключением того, что последовательность операторов должна выполняться, начиная от процедуры, названной именем-процедуры-1, и кончая процедурой, указанной именем-процедуры-2. В частности, между именем-процедуры-1 и концом имени-процедуры-2 могут встречаться операторы GO TO (ПЕРЕЙТИ) и PERFORM (ВЫПОЛНИТЬ).
    Если имеется два или больше путей, ведущих к точке возврата, то имя-процедуры-2 может быть именем-параграфа, состоящего из оператора EXIT (ВЫЙТИ), к которому должны вести все эти пути.
    (9) Если к указанному множеству операторов управление передается не по оператору PERFORM (ВЫПОЛНИТЬ), то от последнего оператора к следующему выполнимому оператору оно передается так, как если бы не было оператора PERFORM (ВЫПОЛНИТЬ), в котором упоминается это множество.
    (10) Операторы PERFORM (ВЫПОЛНИТЬ) действуют следующим образом:
    а) формат 1 является основным форматом оператора PERFORM (ВЫПОЛНИТЬ). Указанное множество операторов выполняется один раз, и затем управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ);
    б) формат 2 является вариантом с повторениями (вариант TIMES (РАЗ)). При его использовании указанное множество операторов выполняется столько раз, сколько указывается начальным значением данного, представленного идентификатором-1 или целым-1. Значение идентификатора-1 или целое-1 должно быть положительным. Если значение идентификатора-1 отрицательно или нуль, управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).
    После выполнения указанного множества операторов соответствующее число раз управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). Обращение к идентификатору-1 не может изменить на протяжении выполнения оператора PERFORM (ВЫПОЛНИТЬ) число выполнений указанного множества операторов, заданное начальным значением данного, представленного идентификатором-1;
    в) формат 3 указывает выполнение указанного множества операторов до тех пор, пока условие, указанное фразой UNTIL (ДО), не станет истинным. Если условие истинно, управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). Если в момент начала выполнения оператора PERFORM (ВЫПОЛНИТЬ) условие истинно указанные процедуры не выполняются и управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).
    Если указана фраза TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ), оператор PERFORM (ВЫПОЛНИТЬ) выполняется так же, как и в случае, когда указана фраза TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) с тем отличием, что условие проверяется после выполнения указанного множества операторов. Индексирование и модификация ссылок, имеющие отношение к операндам, указанным в условии-1, вычисляются при каждой проверке условия; г) формат 4 используется для увеличения значения одного или более идентификаторов или имен-индексов в установленном порядке во время выполнения оператора PERFORM (ВЫПОЛНИТЬ). В нижеприведенных пояснениях все сказанное для значения идентификатора, указанного во фразах VARYING (МЕНЯЯ), AFTER (ЗАТЕМ), FROM (ОТ) (текущего значения), относится и к именам-индексов. Если указаны имя-индекса-1 или имя-индекса-2, значение соответствующего индекса в начале оператора PERFORM (ВЫПОЛНИТЬ) должно быть установлено на номер вхождения элемента в таблице. Если указаны имя-индекса-2 или имя-индекса-4, значение данного, представленного идентификатором-2 или идентификатором-5, в начале оператора PERFORM (ВЫПОЛНИТЬ) должно быть равно номеру вхождения элемента в таблице, соответствующей имени-индекса-2 или имени-индекса-4. Как описано ниже, последующее изменение имени-индекса-1 или имени-индекса-3 не должно приводить к тому, что соответствующий индекс примет значение, находящееся вне допустимого для него диапазона, за исключением ситуации после завершения оператора PERFORM (ВЫПОЛНИТЬ), когда индекс, соответствующий имени-индекса-1, может содержать значение, большее или меньшее границ допустимого диапазона на одно значение шага изменения. Если идентификатор-2 или идентификатор-5 индексированы, индексы вычисляются каждый раз, когда устанавливается или изменяется значение данного, представленного идентификатором. Если индексированы идентификатор-3, идентификатор-4, идентификатор-6 или идентификатор-7, индексы вычисляются каждый раз при установке или изменении содержимого данного, представленного идентификатором. Индексирование и модификация ссылок, соответствующие операндам, указанным в условии-1 или условии-2, выполняются при каждой проверке условия.
    Далее представлены схемы выполнения нескольких типов оператора PERFORM (ВЫПОЛНИТЬ) формата 4, которые не должны рассматриваться как предписания по их реализации. 1) Если фраза TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) указана или подразумевается. Когда изменяется данное, представленное одним идентификатором, то в начале выполнения оператора PERFORM (ВЫПОЛНИТЬ) данное, представленное идентификатором-2, устанавливается равным литералу-1 или текущему значению данного, представленного идентификатором-3; если условие, заданное фразой UNTIL (ДО), ложно, то один раз выполняется указанное множество операторов. Затем к значению данного, представленного идентификатором-2, прибавляется значение данного, представленного идентификатором-4 или литерала-2 (при этом оно увеличивается или уменьшается), и условие-1 опять проверяется. Цикл продолжается до тех пор, пока это условие не станет истинным; в этом случае управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). Если условие-1 истинно в начале выполнения оператора PERFORM (ВЫПОЛНИТЬ), то управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). На рис.1 представлена схема алгоритма оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) и одним условием. Рис.1. Схема алгоритма оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) и одним условием Рис.1
    Когда указано изменение данных, представленных двумя идентификаторами, содержимому данного, представленного идентификатором-2, присваивается значение литерала-1 или текущее значение данного, представленного идентификатором-3; содержимому данного, представленного идентификатором-5, присваивается значение литерала-3 или текущее значение данного, представленного идентификатором-6, после чего вычисляется условие-1, если оно истинно, то управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ), если оно ложно, вычисляется условие-2. Если условие-2 ложно, то один раз выполняется указанное множество операторов, после чего содержимое данного, представленного идентификатором-5, увеличивается на литерал-4 или содержимое данного, представленного идентификатором-7, и опять вычисляется условие-2. Этот цикл вычислений и увеличений продолжается до тех пор, пока условие не станет истинным. Когда условие-2 истинно, содержимое данного, представленного идентификатором-2, увеличивается на литерал-2 или содержимое данного, представленного идентификатором-4, а содержимому данного, представленного идентификатором-5, присваивается значение литерала-3 или текущее значение данного, представленного идентификатором-6, и опять вычисляется условие-1. Оператор PERFORM (ВЫПОЛНИТЬ) завершается, если условие-1 истинно, иначе цикл продолжается, пока условие-1 не станет истинным. На рис.2 представлен алгоритм оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ), фразой TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) и двумя условиями. Рис.2. Алгоритм оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ), фразой TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) и двумя условиями Рис.2
    По окончании выполнения оператора PERFORM (ВЫПОЛНИТЬ) данное, представленное идентификатором-5, содержит литерал-3 или текущее значение данного, представленного идентификатором-6. Данное, представленное идентификатором-2, содержит значение, которое отличается от последнего используемого значения на величину приращения (положительную или отрицательную), кроме случая, когда условие-1 было истинно в начале выполнения оператора PERFORM (ВЫПОЛНИТЬ); в указанном случае данное, представленное идентификатором-2, содержит литерал-1 или текущее значение данного, представленного идентификатором-3.
    2) Если фраза TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ) указана или подразумевается.
    При изменении данного, представленного одним идентификатором, в начале выполнения оператора PERFORM (ВЫПОЛНИТЬ) содержимому данного, представленного идентификатором-2, присваивается значение литерала-1 или текущее значение данного, представленного идентификатором-3 затем один раз выполняется указанное множество операторов и проверяется условие-1, из фразы UNTIL (ДО). Если условие ложно, значение данного, представленного идентификатором-1, изменяется на величину приращения (положительного или отрицательного), заданного литералом-2 или значением данного, представленного идентификатором-4; затем опять выполняется указанное множество операторов. Цикл повторяется, пока условие-1 не станет истинным, после чего управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).
    На рис.3 представлен алгоритм оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ) и одним условием.
    Рис.3. Алгоритм оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ) и одним условием Рис.3
    При изменении данных, представленных двумя идентификаторами, содержимому данного, представленного идентификатором-2, присваивается значение литерала-1 или текущее значение данного, представленного идентификатором-3, затем содержимому данного, представленного идентификатором-5, присваивается значение литерала-3 или текущее значение данного, представленного идентификатором-6; после этого выполняется указанное множество операторов. Затем вычисляется условие-2; если оно ложно, содержимое данного, представленного идентификатором-5, изменяется на величину литерала-4 или содержимого данного, представленного идентификатором-7; далее опять выполняется указанное множество операторов. Цикл продолжается до тех пор, пока условие-2 не окажется истинным в момент вычисления условия-2 и не потребуется вычислять условие-1. Если же оно ложно, содержимое данного, представленного идентификатором-2, изменяется на величину литерала-2 или содержимого данного, представленного идентификатором-1, а содержимому данного, представленного идентификатором-5, присваивается значение литерала-3 или текущее значение данного, представленного идентификатором-6; затем опять выполняется указанное множество операторов. Этот цикл повторяется до тех пор, пока вновь вычисленное условие-1 не станет истинным, тогда управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). После завершения выполнения оператора PERFORM (ВЫПОЛНИТЬ) каждое данное, измененное фразами AFTER (ЗАТЕМ) и VARYING (МЕНЯЯ), содержит то значение, которое оно получило в результате последнего выполнения указанного множества операторов. На рис.4 представлен алгоритм оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ) и двумя условиями. Рис.4. Алгоритм оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ) и двумя условиями Рис.4
    Во время выполнения соответствующего оператору PERFORM (ВЫПОЛНИТЬ) указанного множества операторов следует учитывать изменение переменных, указанных во фразе VARYING (МЕНЯЯ) (данного, представленного идентификатором-2, и имени-индекса-1), во фразе BY (НА) (данного, представленного идентификатором-4), во фразе AFTER (ЗАТЕМ) (данного, представленного идентификатором-5, и имени-индекса-3), во фразе FROM (ОТ) (данного, представленного идентификатором-3, и имени-индекса-2); эти изменения будут влиять на выполнение оператора PERFORM (ВЫПОЛНИТЬ). При изменении данных, представленных двумя идентификаторами, каждый раз, когда изменяется содержимое данного, представленного идентификатором-2, данное, представленное идентификатором-5, проходит полный цикл (с учетом фраз FROM (ОТ), BY (НА), UNTIL (ДО)). При изменении трех или более данных, представленных идентификаторами, обработка происходит так же, как и в случае двух идентификаторов, за исключением того факта, что данное, изменяемое каждой фразой AFTER (ЗАТЕМ), проходит полный цикл всякий раз, когда добавляется приращение (положительное или отрицательное) к данному, измененному предыдущей фразой AFTER (ЗАТЕМ).

    (11) Область действия оператора PERFORM (ВЫПОЛНИТЬ) логически состоит из всех тел операторов, которые выполняются в результате выполнения оператора PERFORM (ВЫПОЛНИТЬ) вплоть до выполнения неявной передачи управления на конец оператора PERFORM (ВЫПОЛНИТЬ).
    Область действия включает все операторы, на которые передается управление операторами GO TO (ПЕРЕЙТИ К), EXIT (ВЫЙТИ), CALL (ВЫЗВАТЬ), PERFORM (ВЫПОЛНИТЬ), входящими в область действия оператора PERFORM (ВЫПОЛНИТЬ), а также все операторы в декларативных процедурах, которые выполняются как результат выполнения операторов, принадлежащих области действия оператора PERFORM (ВЫПОЛНИТЬ). Операторы, принадлежащие области действия оператора PERFORM (ВЫПОЛНИТЬ), не обязательно должны следовать друг за другом в тексте исходной программы.
    (12) Операторы, выполняемые в результате передачи управления по оператору EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), не принадлежат области действия оператора PERFORM (ВЫПОЛНИТЬ) в том случае, когда:
    а) оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) определен в той же программе, что и оператор PERFORM (ВЫПОЛНИТЬ);
    б) оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) принадлежит области действия оператора PERFORM (ВЫПОЛНИТЬ).
    (13) Имя-процедуры-1 и имя-процедуры-2 не должны быть именами секций или параграфов в любой другой программе данной единицы исполнения независимо от того, содержит ли другая программа программу, включающую оператор PERFORM (ВЫПОЛНИТЬ), или сама содержится в ней. Операторы из других программ в единице исполнения могут быть доступны только в результате выполнения оператора PERFORM (ВЫПОЛНИТЬ), область действия которого включает операторы CALL (ВЫЗВАТЬ) и EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (ч.10, п.1.3.8).
    (14) Если область действия оператора PERFORM (ВЫПОЛНИТЬ) включает другой оператор PERFORM (ВЫПОЛНИТЬ), то последовательность процедур, связанная с внутренним оператором PERFORM (ВЫПОЛНИТЬ), должна полностью включаться в логическую последовательность, определяемую первым оператором PERFORM (ВЫПОЛНИТЬ), или полностью находиться вне этой последовательности. Таким образом, активный оператор PERFORM (ВЫПОЛНИТЬ), выполнение которого начинается внутри области действия другого активного в данный момент оператора PERFORM (ВЫПОЛНИТЬ), не должен передавать управление на точку выхода последнего; более того, несколько таких активных операторов PERFORM (ВЫПОЛНИТЬ) не могут иметь общую точку выхода. Ниже приведены примеры возможных комбинаций областей действия нескольких операторов PERFORM (ВЫПОЛНИТЬ).

    (15) Оператор PERFORM (ВЫПОЛНИТЬ), который появляется в секции, не являющейся независимым сегментом, может иметь внутри своей области действия кроме декларативных секций, вызываемых из его области действия, только следующие процедуры:
    а) секции и (или) параграфы, содержащиеся полностью в одном или в нескольких сегментах, не являющихся независимыми;
    б) секции и (или) параграфы, полностью содержащиеся в одном независимом сегменте.
    (16) Оператор PERFORM (ВЫПОЛНИТЬ), который появляется в независимом сегменте, может иметь внутри своей области действия кроме декларативных секций, вызываемых из области действия, только следующие процедуры:
    а) секции и (или) параграфы, полностью содержащиеся в одном или нескольких сегментах, не являющихся независимыми;
    б) секции и (или) параграфы, полностью содержащиеся в том же независимом сегменте, что и оператор PERFORM (ВЫПОЛНИТЬ).
    (1) Значения данных, на которые ссылаются идентификатор-4 и идентификатор-7, не должны быть равными нулю. (2) Если в фразах VARYING (МЕНЯЯ) и AFTER (ЗАТЕМ) указано имя-индекса и в соответствующей фразе FROM (ОТ) задан идентификатор, то значение данного, на которое ссылается идентификатор, должно быть положительным.

    (3) Если указано имя-процедуры-1, оператор PERFORM (ВЫПОЛНИТЬ) называется оператором с вынесенной областью действия; если имя-процедуры-1 не указано, оператор PERFORM (ВЫПОЛНИТЬ) называется оператором с встроенной областью действия.
    (4) Операторы, находящиеся в области действия имени-процедуры-1 (до имени-процедуры-2, если оно указано), для оператора PERFORM (ВЫПОЛНИТЬ) с вынесенной областью действия или содержащиеся внутри самого оператора PERFORM (ВЫПОЛНИТЬ) в случае оператора PERFORM (ВЫПОЛНИТЬ) с встроенной областью действия, будут называться указанным множеством операторов.
    (5) Фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ) ограничивает область действия оператора PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия (см. ч.4, п.6.4.3).
    (6) Оператор PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия функционирует аналогично оператору PERFORM (ВЫПОЛНИТЬ) с вынесенной областью действия согласно следующим общим правилам, за исключением того факта, что операторы, содержащиеся в операторе PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия, выполняются вместо операторов, принадлежащих области действия имени-процедуры-1 (до имени-процедуры-2, если оно указано). Если это специально не оговаривается, все общие правила равно применимы к оператору PERFORM (ВЫПОЛНИТЬ) со встроенной и вынесенной областью действия.
    (7) При выполнении оператора PERFORM (ВЫПОЛНИТЬ) управление передается первому оператору указанного множества операторов, кроме случаев, оговоренных общими правилами 10б, 10в и 10г.
    Эта передача управления выполняется один раз для каждого выполнения оператора PERFORM (ВЫПОЛНИТЬ). Для тех случаев, когда передача управления указанному множеству операторов имеет место, неявная передача управления на конец оператора PERFORM (ВЫПОЛНИТЬ) осуществляется следующим образом:
    6.22.Оператор SEARCH (ИСКАТЬ)
    6.22. Оператор SEARCH (ИСКАТЬ) 6.22.1. Назначение Оператор SEARCH (ИСКАТЬ) используется для поиска в таблице некоторого элемента таблицы, который удовлетворяет заданному условию, и установления соответствующего значения индекса, указывающего этот элемент таблицы. 6.22.2. Общий формат Формат 1 Формат 2 6.22.3. Синтаксические правила (1) В форматах 1 и 2 идентификатор-1 не должен быть индексирован или представлять модифицированную ссылку, но его описание должно содержать фразу OCCURS (ПОВТОРЯЕТСЯ) с вариантом INDEXED (ИНДЕКСИРУЕТСЯ). Описание идентификатора-1 в формате 2 должно содержать также вариант ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) во фразе OCCURS (ПОВТОРЯЕТСЯ). (2) Идентификатор-2 должен ссылаться на данное, описанное с фразой USAGE IS INDEX (ДЛЯ ИНДЕКСА) или как числовое элементарное данное, не имеющее позиций справа от подразумеваемой десятичной точки. Идентификатор-2 не может индексироваться первым (или единственным) именем-индекса, определенным вариантом INDEXED BY (ИНДЕКСИРУЕТСЯ) во фразе OCCURS (ПОВТОРЯЕТСЯ), соответствующей идентификатору-1. (3) В формате 1 условие-1 может быть любым допустимым в Коболе условием (см. п.6.3 настоящей части).
    (4) В формате 2 все упоминаемые имена-условий должны быть определены как имеющие только одно значение. Имя-данного, связанное с именем-условия, должно быть указано во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) идентификатора-1. Каждое имя-данного-1, имя-данного-2 может уточняться. Каждое имя-данного-1, имя-данного-2 должно быть индексировано первым именем-индекса, связанным с идентификатором-1, вместе с другими требующимися индексами и должно быть указано во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) идентификатора-1. Идентификатор-3, идентификатор-4 или идентификаторы, задаваемые в арифметическом-выражении-1, арифметическом-выражении-2 не должны быть указаны во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) идентификатора-1 или индексироваться первым именем-индекса, связанным с идентификатором-1. Если в формате 2 ссылаются на некоторое имя-данного, указанное в варианте ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) для данного, представленного идентификатором-1, или на связанное с ним имя-условия, то все предшествующие имена-данных, указанные во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) для данного, представленного идентификатором-1, или соответствующие им имена-условий тоже должны быть указаны. (5) Если указана фраза END-SEARCH (КОНЕЦ-ИСКАТЬ), то нельзя указывать фразу NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ). 6.22.4. Общие правила (1) Оператор SEARCH (ИСКАТЬ) может завершаться: а) фразой END-SEARCH (КОНЕЦ-ИСКАТЬ) на соответствующем уровне вложенности; б) разделителем точка;
    в) фразами ELSE (ИНАЧЕ) и END-IF (КОНЕЦ-ЕСЛИ), соответствующими предшествующему оператору IF (ЕСЛИ) (см. ч.4, п.6.4.3).
    (2) Если используется формат 1 оператора SEARCH (ИСКАТЬ), то имеет место последовательный тип поиска (перебор), начиная с текущей установки индекса.
    а) Если в начале выполнения оператора SEARCH (ИСКАТЬ) имя-индекса, связанное с идентификатором-1, содержит значение, которое соответствует номеру вхождения, большему чем наибольший допустимый номер вхождения для идентификатора-1, то оператор SEARCH (ИСКАТЬ) сразу завершается. Наибольший допустимый номер вхождения определяется во фразе OCCURS (ПОВТОРЯЕТСЯ) (см. п.5.8 настоящей части). Тогда, если в операторе указана фраза AT END (В КОНЦЕ), выполняется повелительный-оператор-1, иначе управление передается на конец оператора SEARCH (ИСКАТЬ).
    б) Если в начале выполнения оператора SEARCH (ИСКАТЬ) имя-индекса, связанное с идентификатором-1, содержит значение, которое соответствует номеру вхождения, не превосходящему наибольший допустимый номер вхождения для идентификатора-1, то оператор SEARCH (ИСКАТЬ) вычисляет условия в том порядке, в каком они написаны, используя установленные индексы, чтобы определить вхождения проверяемых данных. Если ни одно из условий не удовлетворено, имя-индекса для идентификатора-1 увеличивается, чтобы обеспечить ссылку на следующее вхождение. Этот процесс повторяется с использованием вновь установленного имени-индекса до тех пор, пока очередное значение имени-индекса для идентификатора-1 не превзойдет наибольшего допустимого. В этом последнем случае поиск заканчивается как указывалось выше. Если одно из условий удовлетворено при его вычислении, поиск заканчивается и управление передается на повелительный оператор, связанный с этим условием, если он указан, или на следующее выполнимое предложение, если указана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ); имя-индекса остается установленным на тот номер вхождения, при котором удовлетворилось условие.
    (3) В формате 2 оператора SEARCH (ИСКАТЬ) результат операции SEARCH ALL (ИСКАТЬ ОСОБО) определен только в следующих ситуациях: а) данные в таблице упорядочены таким же образом, как это описано в варианте KEY IS (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА), связанном с идентификатором-1; б) значения ключа (ключей), упомянутого во фразе WHEN (КОГДА), достаточны, чтобы однозначно идентифицировать элемент таблицы. (4) Если используется формат 2 оператора SEARCH (ИСКАТЬ), то может иметь место непоследовательный тип поиска; начальная установка имени-индекса для идентификатора-1 игнорируется, и установка имени-индекса меняется в ходе операции поиска способом, определяемым реализацией, с теми ограничениями, что никогда значение имени-индекса не превзойдет значение, которое соответствует последнему элементу в таблице, и не будет меньше значения, которое соответствует первому элементу таблицы. Длина таблицы определяется во фразе OCCURS (ПОВТОРЯЕТСЯ) (см. п.5.8 настоящей части). Если для каждой установки индекса в разрешенном интервале какое-либо условие, задаваемое во фразе WHEN (КОГДА), не удовлетворено, то управление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ), если она указана, или на конец оператора SEARCH (ИСКАТЬ), если эта фраза не задана. В любом случае конечная установка индекса не определена. Если все условия могут быть удовлетворены, то индекс устанавливается на соответствующее вхождение, которое позволяет удовлетворить условия, и управление передается повелительному-оператору-2, если он указан, или следующему выполнимому предложению, если указана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ).
    (5) После выполнения повелительного-оператора-1 или повелительного-оператора-2, которые не кончаются оператором GO TO (ПЕРЕЙТИ), управление передается на конец оператора SEARCH (ИСКАТЬ). (6) В формате 2 имя-индекса, которое используется в операции поиска, есть первое (или единственное) имя-индекса, указанное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Все другие имена-индексов для идентификатора-1 остаются неизменными. (7) Если в формате 1 фраза VARYING (МЕНЯЯ) не используется, имя-индекса, которое используется в операции поиска, есть первое (или единственное) имя-индекса, указанное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Все другие имена-индексов для идентификатора-1 остаются неизменными. (8) Если в формате 1 задана фраза VARYING (МЕНЯЯ) имя-индекса-1 и это имя-индекса-1 указано в варианте INDEXED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1, то оно используется для поиска. Если имя-индекса-1 не указано в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) идентификатора-1 или задана фраза VARYING (МЕНЯЯ) идентификатор-2, то для поиска используется первое (или единственное) имя-индекса, заданное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Кроме того, имеют место следующие операции:
    а) если используется фраза VARYING (МЕНЯЯ) имя-индекса-1 и это имя-индекса-1 появляется в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной со статьей другой таблицы, то номер вхождения, представляемый именем-индекса-1, увеличивается на такую же величину и в то же время, что и номер вхождения, представляемый именем-индекса, связанным с идентификатором-1;
    б) если задана фраза VARYING (МЕНЯЯ) идентификатор-2 и идентификатор-2 есть индексное данное, то данное, представленное идентификатором-2, увеличивается на такую же величину и в то же время, что и индекс, связанный с идентификатором-1. Если идентификатор-2 не является индексным данным, то значение, представленное идентификатором-2, увеличивается на единицу в то же время, что и индекс, связанный, с идентификатором-1.
    (9) Область действия оператора SEARCH (ИСКАТЬ) ограничивается фразой END-SEARCH (КОНЕЦ-ИСКАТЬ) (см. ч.4, п.6.4.3).
    (10) На рис.1 приведена схема выполнения формата 1 оператора SEARCH (ИСКАТЬ), содержащего две фразы WHEN (КОГДА). Эта схема не должна рассматриваться как предписание по реализации оператора. На приведенном рисунке звездочками помечены следующие операции: * - операции, включаемые только тогда, когда соответствующий вариант указан в формате оператора; ** - каждая из этих передач ведет к точке выхода оператора SEARCH (ИСКАТЬ), если только повелительный-оператор не заканчивается оператором GO TO (ПЕРЕЙТИ).

    6.23.Оператор SET (УСТАНОВИТЬ)
    6.23.1.Назначение
    (1) Оператор SET (УСТАНОВИТЬ) учреждает точки обращений для операций обработки таблиц, устанавливая имена-индексов, соответствующие элементам таблицы.
    (2) Оператор SET (УСТАНОВИТЬ) используется для изменения состояния внешних переключателей.
    (3) Оператор SET (УСТАНОВИТЬ) используется также для изменения значений условных переменных.

    Рис.1

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

    Формат 2

    Формат 3

    Формат 4

    6.23.3.Синтаксические правила
    (1) Все, сказанное для имени-индекса-1, идентификатора-1 и имени-индекса-3, применяется в равной мере ко всем повторениям элементов формата.
    (2) Идентификатор-1 и идентификатор-2 должны представлять индексные данные или элементарные данные, описанные как целые.
    (3) Идентификатор-3 должен представлять элементарное числовое целое.
    (4) Целое-1 и целое-2 могут быть со знаком. Целое-1 должно быть положительным.
    (5) Мнемоническое-имя-1 должно быть связано с внешним переключателем, состояние которого может быть изменено. Конкретная реализация уточняет, на какие внешние переключатели может ссылаться оператор SET (УСТАНОВИТЬ).
    (6) Имя-условия-1 должно соответствовать условной переменной.

    6.23.4.Общие правила
    а) имя-индекса-1 устанавливается на значение, указывающее на элемент таблицы, соответствующий номеру вхождения, определяемому именем-индекса-2, идентификатором-2 или целым-1. Если идентификатор-2 есть индексное данное или если имя-индекса-2 относится к той же таблице, что и имя-индекса-1, то преобразование не происходит;
    б) если идентификатор-1 есть индексное данное, то он может быть установлен равным либо значению имени-индекса-2, либо идентификатору-2, где идентификатор-2 также является индексным данным; в обоих случаях преобразование не происходит;
    в) если идентификатор-1 не является индексным данным, то он может быть установлен только на номер вхождения, соответствующий значению имени-индекса-2. В этом случае ни идентификатор-2, ни целое-1 не могут быть использованы;
    г) процесс повторяется для каждого вхождения имени-индекса-1 и идентификатора-1, если они заданы. При этом каждый раз используется значение имени-индекса-2 или данного, представленного идентификатором-2, которое они имели в начале выполнения оператора. Всякое индексирование, связанное с идентификатором-1, выполняется непосредственно перед изменением соответствующего данного.
    (4) В формате 2 значение имени-индекса-3 увеличивается или уменьшается на значение, которое соответствует числу вхождений, представляемому целым-2 или значением данного, представленного идентификатором-3, после этого процесс повторяется для каждого вхождения имени-индекса-3 и т.д. Каждый риз используется значение данного, представленного идентификатором-3, такое же, как в начале выполнения оператора.
    (5) Ниже представлены допустимые комбинации операндов в операторе SET (УСТАНОВИТЬ) в формате 1. Указанные ссылки относятся к общим правилам, применяемым при пересылке для данного сочетания операндов.
    Пересылаемое данное Принимающее данное
    Целое-данное Имя-индекса Индексное данное
    Целое-литерал Не разрешено 3в Разрешено 3а Не разрешено 3б
    Целое-данное Не разрешено 3в Разрешено 3а Не разрешено 3б
    Имя-индекса Разрешено 3в Разрешено 3а Разрешено 3б
    Индексное Не разрешено 3в Разрешено 3а* Разрешено 3б*

    ________________
    * Никакие преобразования не имеют места.


    Формат 3
    (6) Состояние каждого внешнего переключателя, соответствующего мнемоническому-имени-1, изменяется таким образом, что результирующее значение "истина" вычисления имени-условия, связанного с этим переключателем, будет отражать состояние "включено", если указана фраза ON (ВКЛЮЧЕНО), или состояние "выключено"; если указана фраза OFF (ВЫКЛЮЧЕНО) (см. п.6.3.1.4 настоящей части).
    Формат 4 (7) Литерал во фразе VALUE (ЗНАЧЕНИЕ), соответствующей имени-условия-1, присваивается условной переменной согласно правилам использования фразы VALUE (ЗНАЧЕНИЕ) (см. п.5.15 настоящей части). Если указано несколько литералов во фразе VALUE (ЗНАЧЕНИЕ), условной переменной присваивается значение первого литерала, заданного в этой фразе. (8) Если указано несколько имен условий при использовании формата 4, результаты такие же, как и в случае записи отдельного оператора SET (УСТАНОВИТЬ) для каждого имени-условия-1 в том же порядке, в каком они указаны в операторе SET (УСТАНОВИТЬ).

    Форматы 1 и 2
    (1) Имена-индексов рассматриваются относительно конкретной таблицы и определяются заданием варианта INDEXED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ) для этой таблицы.
    (2) Если задано имя-индекса-1, то его значение после выполнения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, соответствующую имени-индекса-1. Значение индекса, соответствующего имени-индекса, после выполнения оператора PERFORM (ВЫПОЛНИТЬ) или оператора SEARCH (ИСКАТЬ) может быть установлено на номер вхождения, выходящий за пределы области допустимых значений для индексов соответствующей таблицы (см. п.6.21 настоящей части). Если указано имя-индекса-2, то его значение перед выполнением оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем-индекса-1.
    Если задано имя-индекса-3, то его значение до и после выполнения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем-индекса-3.
    (3) В формате 1 выполняются следующие действия:
    6.24.Оператор STOP (ОСТАНОВИТЬ)
    6.24.1.Назначение
    Оператор STOP (ОСТАНОВИТЬ) прекращает полностью или временно выполнение единицы исполнения.
    Указание литерала в операторе STOP (ОСТАНОВИТЬ) является устаревшим элементом в настоящем стандарте и будет удалено в следующей редакции стандарта.
    6.24.2.Общий формат

    6.24.3.Синтаксические правила
    (1) Литерал-1 не может быть стандартной константой, начинающейся словом ALL (ВСЕ).
    (2) Если оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) появляется в последовательности повелительных операторов предложения, то он должен быть последним оператором предложения.
    (3) Если литерал числовой, то он должен быть целым без знака.
    6.24.4.Общие правила
    (1) Если указана фраза RUN (РАБОТУ), выполнение единицы исполнения прекращается и управление передается операционной системе.
    (2) При выполнении оператора STOP RUN (ОСТАНОВИТЬ РАБОТУ) выполняется неявный оператор CLOSE (ЗАКРЫТЬ) без необязательных вариантов для всех открытых файлов данной единицы исполнения. Никакие процедуры USE (ИСПОЛЬЗОВАТЬ), соответствующие этим файлам, не выполняются.
    (3) Если единица исполнения получала сообщения, то по оператору STOP RUN (ОСТАНОВИТЬ РАБОТУ) система управления сообщениями уничтожает в очереди сообщения, лишь частично полученные этой единицей исполнения.
    Часть сообщения, передаваемая из единицы исполнения оператором SEND (ПОСЛАТЬ), но не законченная EMI (ИКС) или EGI (ИКГ), исключается из системы.
    (4) Если указан вариант STOP (ОСТАНОВИТЬ) литерал-1, выполнение единицы исполнения приостанавливается, а литерал-1 сообщается оператору ЭВМ. Продолжение функционирования единицы исполнения начинается со следующего выполнимого оператора в том случае, когда подключена зависящая от реализации процедура управления возобновлением единицы исполнения.
    6.25.Оператор STRING (СОБРАТЬ)
    6.25. Оператор STRING (СОБРАТЬ) 6.25.1. Назначение Оператор STRING (СОБРАТЬ) соединяет часть или полное содержимое двух или нескольких данных в одно данное. 6.25.2. Общий формат 6.25.3. Синтаксические правила (1) Литерал-1 и литерал-2 не могут быть стандартными константами, начинающимися со слова ALL (ВСЕ). (2) Все литералы должны быть нечисловыми литералами и все идентификаторы, за исключением идентификатора-4, должны быть определены явно или неявно с использованием DISPLAY (ДЛЯ ВЫДАЧИ). (3) Идентификатор-3 не может быть модификацией ссылки. (4) Идентификатор-3 не может быть редактируемым данным; он не может быть описан с фразой JUSTIFIED (СДВИНУТО). (5) Идентификатор-4 должен быть описан как элементарное числовое целое данное, имеющее достаточный размер для того, чтобы содержать значение, равное увеличенному на единицу размеру данного, представленного идентификатором-3. Символ Р (М) не может использоваться в строке-литер шаблона данного, представленного идентификатором-4. (6) Если идентификатор-1 или идентификатор-2 представляют элементарные числовые данные, то они должны быть описаны как целые, причем соответствующие строки-литер шаблона не должны содержать литеры Р (М). 6.25.4. Общие правила (1) Идентификатор-1 и литерал-1 представляют собой пересылаемые данные, а идентификатор-3 - принимающее данное.
    (2) Литерал-2 и значение данного, представленного идентификатором-2, указывают одну или несколько литер, ограничивающих перемещение. Если используется фраза SIZE (РАЗМЕРОМ), данные, определённые идентификатором-1 или литералом-1, помещаются полностью. Если в качестве ограничителя используется стандартная константа, она представляет нечисловой литерал длиной в одну литеру. (3) Если вместо литерала-1 и литерала-2 используется стандартная константа, то она представляет данное длиной в одну литеру с использованием DISPLAY (ДЛЯ ВЫДАЧИ). (4) Перемещение данного при выполнении оператора STRING (СОБРАТЬ) определяется следующими правилами: а) литеры из литерала-1 или из значения данного, представляемого идентификатором-1, передаются в данное, представляемое идентификатором-3, согласно правилам перемещения буквенно-цифрового в буквенно-цифровое данное, однако дополнение пробелами не производится; б) если задана фраза DELIMITED (ОГРАНИЧИВАЯСЬ) без фразы SIZE (РАЗМЕРОМ), значение данного, представляемого идентификатором-1, или значение литерала-1 передается в принимающее данное в последовательности, заданной оператором STRING (СОБРАТЬ), начиная с самой левой литеры и продолжая слева направо, пока не будет достигнут конец данного или не встретится литера (литеры), заданная литералом-2 или значением данного, представленного идентификатором-2. Эта литера (литеры) не пересылается; в) если задана фраза DELIMITED BY SIZE (ОГРАНИЧИВАЯСЬ РАЗМЕРОМ), значение, представленное литералом-1, или значение данного, представляемого идентификатором-1, передаются в последовательности, заданной оператором STRING (СОБРАТЬ), в данное, представляемое идектификатором-3, пока все данные не будут переданы или не будет достигнут конец данного, определяемого идентификатором-3.
    Эти действия повторяются до исчерпания всех вхождений литерала-1 или данных, представленных идентификатором-1.
    (5) Если задана фраза POINTER (УКАЗАТЕЛЬ), значение данного, представленного идентификатором-4, перед выполнением оператора STRING (СОБРАТЬ) должно быть установлено в начальное значение (не меньше 1).
    (6) Если фраза POINTER (УКАЗАТЕЛЬ) не задана, оператор выполняется так, как если бы было задано начальное значение данного, представленного идентификатором-4, равное 1.
    (7) Когда литеры пересылаются в принимающее данное, на которое ссылается идентификатор-3, пересылка литер в принимающее данное начинается от указанной значением данного, представленного идентификатором-4, позиции литеры этого данного (при условии, что значение данного, представленного идентификатором-4, не превышает длины данного, представленного идентификатором-3) и затем данное, представленное идентификатором-4, увеличивается на единицу перед пересылкой каждой литеры или перед завершением выполнения оператора STRING (СОБРАТЬ). Значение данного, представленного идентификатором-4, во время выполнения оператора STRING (СОБРАТЬ) изменяется только вышеописанным методом.
    (8) В результате выполнения оператора STRING (СОБРАТЬ) изменяется только та часть данного, представленного идентификатором-3, к которой было обращение во время выполнения оператора STRING (СОБРАТЬ). Оставшаяся часть данного, представленного идентификатором-3, после выполнения оператора STRING (СОБРАТЬ) не изменяется.
    (9) Перед каждой пересылкой литеры в данное, представленное идентификатором-3, если значение данного, представленного идентификатором-4, окажется меньшим 1 либо превзойдет число позиций литер в данном, представляемом идентификатором-3, дальнейшее перемещение в данное, представляемое идентификатором-3, прекращается и фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), если она указана, игнорируется, а управление передается на конец оператора STRING (СОБРАТЬ). Если в формате оператора указана фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), то выполняется повелительный-оператор-1, указанный в этой фразе. Если управление передается повелительному-оператору-1, выполнение продолжается согласно правилам для каждого оператора, указанного в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий явную передачу управления, то управление передается согласно правилам для этих операторов; в противном случае по завершении выполнения повелительного-оператора-1 управление передается на конец оператора STRING (СОБРАТЬ).
    (10) Если во время выполнения оператора STRING (СОБРАТЬ) с фразой NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ) условия, описанные в общем правиле (9), не встречаются, после пересылки данных согласно другим общим правилам фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), если она указана, игнорируется и управление передается на конец оператора STRING (СОБРАТЬ), или, если указана фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному-оператору-2. Если управление передается повелительному-оператору-2, выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется ветвление процедуры или условный оператор, ведущий к явной передаче управления, управление передается в соответствии с правилами для этого оператора; в противном случае после завершения выполнения повелительного-оператора-2 управление передается на конец оператора STRING (СОБРАТЬ). (11) Фраза END-STRING (КОНЕЦ-СОБРАТЬ) ограничивает область действия оператора STRING (СОБРАТЬ) (см. ч.4, п.6.4.3). (12) Если идентификатор-1 и идентификатор-2 занимают ту же область памяти, что и идентификатор-3 и идентификатор-4, или идентификатор-3 и идентификатор-4 занимают одну и ту же область памяти, результат выполнения оператора STRING (СОБРАТЬ) не определен, даже если они определены одной и той же статьей описания данных (см. п.6.4.5 настоящей части).

    6.26.Оператор SUBTRACT (ОТНЯТЬ)
    6.26.1.Назначение
    Оператор SUBTRACT (ОТНЯТЬ) используется для того, чтобы вычесть одно числовое данное или сумму двух или более числовых данных из одного или более данных и установить значения одного или более данных равными результату.
    6.26.2.Общий формат
    Формат 1

    Формат 2

    Формат 3

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

    (2) Каждый литерал должен быть числовым литералом.
    (3) Композиция операндов не должна содержать более восемнадцати цифр (см. п.6.4.4 настоящей части). При этом в формате 1 композиция операндов определяется использованием всех операндов в заданном операторе; в формате 2 композиция операндов определяется использованием всех операндов в заданном операторе, исключая идентификаторы, которые следуют за словом GIVING (ПОЛУЧАЯ) .
    (4) CORR (СООТВ) есть сокращение слова CORRESPONDING (СООТВЕТСТВЕННО).
    6.26.4.Общие правила
    (1) В формате 1 значения операндов, предшествующие слову FROM (ОТ), складываются вместе, эта сумма сохраняется в промежуточном данном. Значение этого промежуточного данного вычитается из значения данного, представленного идентификатором-2, причем результат запоминается как новое значение данного, представленного идентификатором-2; затем этот процесс повторяется для всех последующих вхождений идентификатора-2 в порядке слева направо.
    (2) В формате 2 все литералы и значения данных, представленные идентификаторами, предшествующими слову FROM (ОТ), складываются вместе и эта сумма вычитается из литерала-2 или значения данного, представленного идентификатором-2, после чего полученная разность запоминается как новое значение каждого данного, представленного идентификатором-3.
    (3) Если используется формат 3, данные из группы, представленной идентификатором-1, вычитаются от соответствующих данных из группы, представленной идентификатором-2, и запоминаются в последних.

    (4) Отведение достаточного поля для выполнения вычислений без потери значащих цифр обеспечивается компилятором.
    (5) Дополнительные правила и пояснения, относящиеся к этому оператору, приводятся в соответствующих параграфах (см. ч.4, п.6.4.3; ч.6, пп.6.4.1-6.4.6).
    6.27.Оператор UNSTRING (РАЗОБРАТЬ)
    6.27. Оператор UNSTRING (РАЗОБРАТЬ) 6.27.1. Назначение Оператор UNSTRING (РАЗОБРАТЬ) позволяет расчленить данное, находящееся в пересылаемом поле, и поместить отдельные его части в несколько принимающих полей. 6.27.2. Общий формат 6.27.3. Синтаксические правила (1) Литерал-1 и литерал-2 должны быть нечисловыми литералами. Литералы могут быть стандартными константами, кроме начинающихся со слова ALL (ВСЕ). (2) Идентификатор-1, идентификатор-2, идентификатор-3 и идентификатор-5 должны быть определены явно или неявно как буквенно-цифровые данные. (3) Идентификатор-4 может быть задан как буквенное, буквенно-цифровое или числовое данное (причем в строке литер шаблона не должен использоваться символ Р (М)), описанное явно или неявно с использованием DISPLAY (ДЛЯ ВЫДАЧИ). (4) Идентификатор-6 и идентификатор-8 должны быть описаны как элементарные числовые целые, при этом символ Р (М) не может использоваться в строке литер шаблона. (5) Идентификатор-7 должен быть описан как элементарное числовое целое, его размер должен быть достаточен, чтобы содержать значение, равное размеру данного, представленного идентификатором-1, увеличенное на единицу. Символ Р (М) не может использоваться в строке литер шаблона идентификатора-7. (6) Фразы DELIMITER (ОГРАНИЧИТЕЛЬ) и COUNT (СЧЕТ) могут быть заданы только тогда, когда задана фраза DELIMITED (ОГРАНИЧИВАЯСЬ). (7) Идентификатор-1 не должен быть модифицированной ссылкой.
    6.27.4. Общие правила (1) Все сказанное об идентификаторе-2 и литерале-1 относится в равной мере к идентификатору-3 и литералу-2 соответственно. (2) Идентификатор-1 представляет собой пересылаемое поле; (3) Идентификатор-4 представляет собой поле принимающего данного, идентификатор-5 представляет принимающее поле для ограничителя. (4) Литерал-1 или данное, представленное идентификатором-2, задает границу пересылаемого данного, называемую ограничителем. (5) Данное, представленное идентификатором-6, представляет количество литер в пересылаемом данном, выделенных с помощью ограничителя для перемещения в принимающее данное, представленное идентификатором-4. В это количество не входят литеры ограничителя. (6) Значение данного, представленного идентификатором-7, указывает относительную позицию литеры в поле, определенном идентификатором-1. (7) К моменту завершения оператора UNSTRING (РАЗОБРАТЬ) значение данного, представленного идентификатором-8, указывает число принимающих данных, участвовавших в операции. (8) Если стандартная константа используется как ограничитель, она представляет собой нечисловой литерал размером в одну литеру. Если задана фраза ALL (ВСЕМИ), одно или несколько последовательных вхождений литерала-1 или значения данного, представленного идентификатором-2, обрабатываются так же, как одно вхождение, которое помещается в принимающее поле согласно общему правилу 13г.
    (9) Когда при просмотре данного, представленного идентификатором-1, обнаруживаются два последовательных вхождения ограничителя, текущее принимающее поле заполняется пробелами, если оно описано как буквенное или буквенно-цифровое, или нулями, если оно описано как числовое. (10) Литерал-1 или значение данного, представленного идентификатором-2, может содержать любые литеры из множества литер машины. (11) Каждый литерал-1 или данное, представленное идентификатором-2, представляет один ограничитель. Когда ограничитель содержит две или более литеры, эти литеры должны находиться в указанном ограничителем порядке в последовательных позициях пересылаемого данного, чтобы быть распознанными в качестве ограничителя. (12) Если во фразе DELIMITED BY (ОГРАНИЧИВАЯСЬ) задано два или более ограничителя, между ними существует условие OR (ИЛИ). Каждый ограничитель поочередно сравнивается с рассматриваемыми позициями пересылаемого поля в указанной последовательности. При обнаружении совпадения рассматриваемые литеры считаются единым ограничителем. Ни одна литера в пересылаемом поле не может рассматриваться принадлежащей нескольким ограничителям. (13) К началу работы оператора UNSTRING (РАЗОБРАТЬ) данное, определяемое идентификатором-4, является текущим принимающим полем, в которое пересылаются литеры данного, представленного идентификатором-1. Позиции последнего просматриваются согласно следующим правилам:
    а) если задана фраза POINTER (УКАЗАТЕЛЬ), строка литер, представленная идентификатором-1, просматривается, начиная с относительной позиции литеры, указанной значением данного, представленного идентификатором-7. Если фраза POINTER (УКАЗАТЕЛЬ) не задана, проверка строки литер начинается с самой левой ее позиции;
    б) если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), просмотр прекращается при обнаружении вхождения ограничителя, заданного литералом-1 или значением данного, представленного идентификатором-2 (см. общее правило 11). Если фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, число просматриваемых литер равно размеру текущего принимающего данного (однако, если знак принимающего данного занимает отдельную позицию литеры, число просматриваемых литер полагается на единицу меньшим размера текущего принимающего поля данного).
    Если вхождение ограничителя не обнаружено, просмотр оканчивается на последней позиции литеры данного, представленного идентификатором-1; в) просмотренные литеры (за исключением литер, совпадающих с ограничителем, если они имеются) рассматриваются как элементарные буквенно-цифровые данные и пересылаются в текущее принимающее поле согласно правилам оператора MOVE (ПОМЕСТИТЬ) (см. п.6.19 настоящей части); г) если задана фраза DELIMITER (ОГРАНИЧИТЕЛЬ), обнаруженные при просмотре литеры ограничителя рассматриваются как элементарное буквенно-цифровое данное и помещаются согласно правилам оператора MOVE (ПОМЕСТИТЬ) в данное, представленное идентификатором-5.
    Если вхождение ограничителя в данное, представленное идентификатором-1, не обнаружено, то данное, представленное идентификатором-5, заполняется пробелами; д) если задана фраза COUNT IN (СЧЕТ), то количество просмотренных литер (исключая литеры ограничителя, если они имеются) помещается согласно правилам для перемещения элементарного данного в данное, представленное идентификатором-6; е) если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), то после заполнения очередного принимающего данного просмотр продолжается с первой литеры справа от ограничителе. Если фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, просмотр продолжается от первой литеры, находящейся справа от последней пересланной литеры; ж) после завершения пересылки в принимающее данное, представленное идентификатором-4, текущим принимающим полем становится данное, представленное следующим вхождением идентификатора-4, и все описанные выше действия повторяются до тех пор, пока не будут исчерпаны все литеры в данном, определяемом идентификатором-1, или не будут заполнены все принимающие поля. (14) Начальная установка значения данного, связанного с фразой POINTER (УКАЗАТЕЛЬ) или TALLYING (СЧИТАЯ), осуществляется пользователем. (15) Значение данного, представленного идентификатором-7, увеличивается на единицу при просмотре каждой литеры в данном, представленном идентификатором-1. После завершения выполнения оператора UNSTRING (РАЗОБРАТЬ) с фразой POINTER (УКАЗАТЕЛЬ) значение данного, представленного идентификатором-7, становится равным начальному значению плюс число просмотренных литер данного, представленного идентификатором-1.
    (16) После завершения выполнения оператора UNSTRING (РАЗОБРАТЬ) с фразой TALLYING (СЧИТАЯ) значение данного, представленного идентификатором-8, становится равным его начальному значению плюс число принимающих полей, участвовавших в выполнении оператора.
    (17) Условие переполнения возникает при следующих ситуациях: а) если к моменту начала работы оператора UNSTRING (РАЗОБРАТЬ) значение данного, представленного идентификатором-7, меньше 1 или больше размера данного, представленного идентификатором-1; б) если в некоторый момент выполнения оператора UNSTRING (РАЗОБРАТЬ) данное, представленное идентификатором-1, содержит непросмотренные позиции, а все принимающие поля уже использованы.
    (18) При обнаружении условия переполнения выполнение оператора UNSTRING (РАЗОБРАТЬ) прекращается; если указана фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), то она игнорируется, а управление передается на конец оператора UNSTRING (РАЗОБРАТЬ); если же была указана фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), то управление передается повелительному-оператору-1. В этом случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий явную передачу управления, управление передается согласно правилам для соответствующих операторов; в противном случае после завершения выполнения повелительного-оператора-1 управление передается на конец оператора UNSTRING (РАЗОБРАТЬ).
    (19) Фраза END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ) ограничивает область действия оператора UNSTRING (РАЗОБРАТЬ) (см. ч.4, п.6.4.3).
    (20) Если во время выполнения оператора UNSTRING (РАЗОБРАТЬ) описанные в пункте (17) условия не возникли, после завершения пересылки данных согласно другим общим правилам фраза OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), если она задана, игнорируется, а управление передается на конец оператора UNSTRING (РАЗОБРАТЬ) или, если указана фраза NOT OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному-оператору-2. Если управление передано повелительному-оператору-2, выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется оператор ветвления процедур или условный оператор, подразумевающий явную передачу управления, управление передается согласно правилам для соответствующих операторов; в противном случае после завершения выполнения повелительного-оператора-2 управление передается на конец оператора UNSTRING (РАЗОБРАТЬ). (21) Если идентификатор-1, идентификатор-2 и идентификатор-3 занимают ту же область памяти, что и идентификатор-5, идентификатор-6, идентификатор-7 или идентификатор-8, или если идентификатор-4, идентификатор-5 и идентификатор-6 занимают ту же область памяти, что и идентификатор-7 или идентификатор-8, или если идентификатор-7 и идентификатор-8 занимают одну и ту же область памяти, результат выполнения оператора UNSTRING (РАЗОБРАТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п.6.4.5 настоящей части).

    7.ОТЛАДКА В ЯДРЕ
    7.1.Общее описание
    Средства отладки в ядре обеспечивают пользователя отладочными строками и переключателем времени компиляции для отладочных строк.
    7.2.Переключатель времени компиляции
    Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) является частью параграфа SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) (см. п.4.3 настоящей части). Она служит переключателем времени компиляции для отладочных строк, содержащихся в отдельно компилируемой программе.
    Если в отдельно компилируемой программе указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), все отладочные строки компилируются, как определено в данном представлении ядра. Если же фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) не указана, все отладочные строки компилируются так, как если бы они представляли строки комментариев.
    Наличие или отсутствие фразы WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) логически определяется после обработки всех операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ).
    7.3.Отладочные строки
    Отладочной строкой называется строка с литерой D (T) в области индикатора строки. Любая отладочная строка, состоящая только из пробелов от границы А до границы R, считается пустой.
    Содержимое отладочной строки должно быть таким, при котором программа является синтаксически правильной независимо от того, содержит ли она отладочные строки или они рассматриваются как комментарии.
    После обработки всех операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ) отладочная строка рассматривается как комментарий, если в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) не указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ).
    Допускаются несколько последовательно расположенных отладочных строк.
    В отдельно компилируемой программе отладочные строки могут располагаться только после параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА).
  13. Часть 7.Модуль последовательного ввода-вывода

  14. 1.ВВЕДЕНИЕ В МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА-ВЫВОДА
    1.1.Назначение
    Модуль последовательного ввода-вывода обеспечивает возможность доступа к записям файла в установленной последовательности. Последовательность устанавливается в результате занесения записей в файл.
    1.2.Характеристика уровней
    Уровень 1 последовательного ввода-вывода обеспечивает неполные возможности для статей управления файлом, статей описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 1 последовательного ввода-вывода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), USE (ИСПОЛЬЗОВАТЬ), OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ). Полные возможности обеспечиваются для оператора REWRITE (ОБНОВИТЬ).
    Уровень 2 последовательного ввода-вывода обеспечивает полные возможности для статей управления файлом, статей описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 2 последовательного ввода-вывода обеспечивает полные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), WRITE (ПИСАТЬ) и USE (ИСПОЛЬЗОВАТЬ).

    1.3.Понятия языка
    1.3.1.Организация
    Последовательный файл организован так, что каждая запись кроме последней, имеет единственную запись-преемника и каждая запись, кроме первой, имеет единственную запись-предшественника. Это отношение следования устанавливается оператором WRITE (ПИСАТЬ) при создании файла. Однажды установленное отношение следования не меняется.
    Последовательно организованный файл массовой памяти имеет ту же логическую структуру, что и файл в последовательной запоминающей среде; однако последовательный файл массовой памяти может обновляться на месте. При использовании этого метода новые записи не могут быть добавлены в файл, а каждая заменяющая запись должна иметь тот же размер, что и исходная запись.
    1.3.2.Метод доступа
    При последовательном доступе порядок, в котором осуществляется доступ к записям, соответствует порядку, в котором записи первоначально записывались.
    1.3.3.Указатель текущего тома
    Указатель текущего тома - это логическое понятие, используемое в этом документе для облегчения точного задания текущего тома последовательного файла.
    1.3.4.Указатель позиции файла
    Указатель позиции в файле - это логическое понятие, используемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданных операций ввода-вывода. На установку указателя позиции файла влияют только операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ) и READ (ЧИТАТЬ). Понятие указателя позиции файла не имеет смысла для файла, открытого как выходной .
    1.3.5.Состояние ввода-вывода
    Состояние ввода-вывода - это логическое понятие, характеризующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполнения операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ) перед выполнением любого повелительного оператора, связанного с этим оператором ввода-вывода, и перед выполнением любой применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Значение состояния ввода-вывода доступно Кобол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом.
    Состояние ввода-вывода определяет также, будет ли выполняться процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Если возникает любое условие, отличное от тех, которые определены ниже как "успешное завершение", может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий "успешное завершение", никакая процедура такого типа не будет выполняться (п.4.6 настоящей части).
    Некоторые классы значений состояния ввода-вывода задают критические условия ошибки. Условия, которые определены в реализации как критические, должны начинаться с цифр 3, 4 и 9. Если значение состояния ввода-вывода для операции ввода-вывода задает такое условие ошибки, реализацией определяются действия, которые предпринимаются после выполнения любой применимой по оператору USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) процедуры или, если ни одна такая процедура не применима, после завершения стандартной системной обработки ошибок ввода-вывода. Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода.
    (1) Успешное завершение. Оператор ввода-вывода выполнился успешно.
    (2) В конце. Оператор последовательного чтения был выполнен неуспешно из-за того, что возникло условие конца файла.
    (3) Постоянная ошибка. Оператор ввода-вывода выполнен неуспешно в результате ошибки, которая исключает дальнейшую обработку файла. Выполняются все заданные процедуры обработки ошибочных ситуаций. Условие постоянной ошибки остается действующим на все последующие операции ввода-вывода файла до тех пор, пока не будут вызваны определенные реализацией средства для устранения условия постоянной ошибки.
    (4) Логическая ошибка. Оператор ввода-вывода выполнен неуспешно из-за недопустимой последовательности операций ввода-вывода, выполняемых над файлом, или в результате нарушения ограничений, заданных пользователем.
    (5) Ошибка, определяемая реализацией. Оператор ввода-вывода выполнен неуспешно в результате возникновения условия, определенного реализацией.
    Ниже приводится список значений, помещаемых в состояние ввода-вывода для перечисленных выше условий, возникающих в результате выполнения операций ввода-вывода для последовательного файла. Если применимо более одного значения, значение, которое помещается в состояние ввода-вывода, определяется реализацией.
    (1) Успешное завершение
    а) Состояние ввода-вывода = 00. Оператор выполнился успешно и нет никакой другой доступной информации об операции ввода-вывода.
    б) Состояние ввода-вывода = 04. Оператор READ (ЧИТАТЬ) выполнился успешно, но длина обрабатываемой записи не соответствует фиксированным свойствам этого файла.
    в) Состояние ввода-вывода = 05. Оператор OPEN (ОТКРЫТЬ) успешно выполнился, но указанный в нем необязательный файл во время выполнения оператора OPEN (ОТКРЫТЬ) отсутствует. Если режим открытия I-O (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ), файл будет создаваться.


    (2) Условие в конце с неуспешным завершением
    а) Состояние ввода-вывода = 10. Встретился последовательный оператор READ (ЧИТАТЬ), а в файле не существует следующей логической записи из-за того, что:
    1) встретился конец файла;
    2) оператор READ (ЧИТАТЬ) применяется первый раз для отсутствующего необязательного входного файла.

    (3) Условие постоянной ошибки с неуспешным завершением
    а) Состояние ввода-вывода = 30. Возникла постоянная ошибка и нет другой доступной информации об операции ввода-вывода.
    б) Состояние ввода-вывода = 34. Возникла постоянная ошибка из-за нарушения границ; была совершена попытка записать запись за внешне определенные границы файла. Способ, которым задаются эти границы, определяется реализацией.
    в) Состояние ввода-вывода = 35. Постоянная ошибка возникла из-за того, что оператор OPEN (ОТКРЫТЬ) с фразой INPUT (ВХОДНОЙ), I-O (ВХОДНОЙ-ВЫХОДНОЙ) выдан для отсутствующего файла.
    г) Состояние ввода-вывода = 37. Постоянная ошибка возникла из-за того, что оператор OPEN (ОТКРЫТЬ) выдан для файла, который не поддерживает режим, заданный в операторе OPEN (ОТКРЫТЬ). Возможны следующие нарушения:
    1) задана фраза OUTPUT (ВЫХОДНОЙ), а файл не допускает операции записи;
    2) задана фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ), а файл не допускает операции ввода и вывода, которые разрешены для последовательного файла, открываемого в режиме I-O (ВХОДНОЙ-ВЫХОДНОЙ);
    3) задана фраза INPUT (ВХОДНОЙ), а файл не допускает операции чтения.
    д) Состояние ввода-вывода = 38. Постоянная ошибка возникла из-за того, что выдан оператор OPEN (ОТКРЫТЬ) для файла, ранее закрытого с замком.

    е) Состояние ввода-вывода = 39. Оператор OPEN (ОТКРЫТЬ) завершился неуспешно из-за обнаруженного для этого файла несоответствия фиксированных свойств файла и свойств, заданных в программе.
    а) Состояние ввода-вывода = 41. Оператор OPEN (ОТКРЫТЬ) выдан для открытого файла.
    б) Состояние ввода-вывода = 42. Оператор CLOSE (ЗАКРЫТЬ) выдан для неоткрытого файла.
    в) Состояние ввода-вывода = 43. В случае файла массовой памяти в режиме последовательного доступа последним оператором ввода-вывода, выполненным для соответствующего файла перед выполнением оператора REWRITE (ОБНОВИТЬ), не был успешно выполненный оператор READ (ЧИТАТЬ).
    г) Состояние ввода-вывода = 44. Нарушение границ возникает по следующим причинам:
    1) сделана попытка записать или обновить запись, длиннее максимально допустимой или короче минимально допустимой в соответствии с фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО) для данного имени файла;

    (4) Условие логической ошибки с неуспешным завершением
    2) сделана попытка обновить запись последовательного файла, а размер записи отличен от размера заменяемой записи.
    д) Состояние ввода-вывода = 46. Выдан оператор последовательного чтения для файла, открытого в режиме ввода или ввода-вывода, и не была установлена следующая запись по одной из следующих причин:
    1) предыдущий оператор READ (ЧИТАТЬ) закончился неуспешно, но не вызвал условие "в конце";
    2) предыдущий оператор READ (ЧИТАТЬ) вызвал условие "в конце".
    е) Состояние ввода-вывода = 47. Был выдан оператор READ (ЧИТАТЬ) для файла, не открытого в режиме ввода или ввода-вывода.
    ж) Состояние ввода-вывода = 48. Был выдан оператор WRITE (ПИСАТЬ) для файла, не открытого в режиме вывода или .
    з) Состояние ввода-вывода = 49. Был выдан оператор REWRITE (ОБНОВИТЬ) для файла, не открытого в режиме ввода-вывода.
    а) Состояние ввода-вывода = 9х. Существуют определяемые реализацией условия. Эти условия не должны дублировать никакие условия, определенные для значений от 00 до 49 состояния ввода-вывода. Значение х определяется реализацией.
    (5) Условие неуспешного завершения, определяемое реализацией
    1.3.6.Условие "в конце"
    Условие "в конце" может возникнуть в результате выполнения оператора READ (ЧИТАТЬ) (п.4.4 настоящей части).
    1.3.7.Условие противоречия свойств файла
    Условие противоречия свойств файла может возникнуть в результате выполнения операторов OPEN (ОТКРЫТЬ), REWRITE (ОБНОВИТЬ) и WRITE (ПИСАТЬ). При возникновении условия противоречия свойств файла выполнение оператора ввода-вывода, который обнаружил это условие, считается неуспешным и файл не подвергается воздействию (пп.4.3, 4.5, 4.7 настоящей части).
    При обнаружении условия противоречия свойств файла выполняются следующие действия в указанном ниже порядке:
    (1) в состояние ввода-вывода данного файла помещается значение, указывающее на условие противоречия свойств файла (см. п.1.3.5 настоящей части);
    (2) если для данного имени файла задан оператор USE AFTER EXCEPTION/ERROR (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), выполняется указанная в нем процедура.
    1.3.8. Специальный регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) Зарезервированное слово LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) является именем для счетчика строк, порождаемого, если в статье описания файла задана фраза LINAGE (ВЕРСТКА) (п.3.7 настоящей части). Этот счетчик неявно описан как целое без знака, размер которого равен размеру целого-1 или данного, заданного именем-данного-1 во фразе LINAGE (ВЕРСТКА). LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) может использоваться только в операторах раздела процедур, однако его значение может изменить только система управления вводом-выводом.

    2.РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА-ВЫВОДА
    2.1.Секция ввода-вывода
    Секция ввода-вывода располагается в разделе оборудования исходной программы. Секция ввода-вывода содержит информацию, необходимую для управления передачей и обработкой данных между внешней памятью и объектной программой. Секция ввода-вывода в разделе оборудования исходной Кобол-программы необязательна.
    Общий формат секции ввода-вывода показан ниже.

    2.2.Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ)
    2.2.1.Назначение
    Параграф FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) позволяет задать относящуюся к файлу информацию.
    2.2.2.Общий формат

    2.3.Статья управления файлом
    2.3.1.Назначение
    Статья управления файлом объявляет существенные физические свойства последовательного файла.
    2.3.2.Общий формат

    2.3.3.Синтаксические правила
    (1) В статье управления файлом фраза SELECT (ДЛЯ) должна указываться первой. Фразы, которые следуют за фразой SELECT (ДЛЯ), могут появляться в любом порядке.
    (2) Каждое имя-файла из раздела данных должно быть определено в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) только один раз. Каждое имя-файла, указанное во фразе SELECT (ДЛЯ), должно иметь статью описания файла в разделе данных той же самой программы.
    (3) Литерал-1 должен быть нечисловым литералом и не должен быть стандартной константой. Значение и правила для допустимого содержимого имени-реализации-1 и значения литерала-1 определяются реализацией.
    2.3.4.Общие правила
    б) корректную спецификацию для имени-реализации-1 или литерала-1 во фразе ASSIGN (НАЗНАЧИТЬ). Правила корректности имени-реализации-1 и литерала-1 определяются реализацией;
    в) корректную спецификацию для имени-реализации-2 во фразе RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ). Правила корректности имени-реализации-2 определяются реализацией; г) одно и то же значение целого-1 во фразе RESERVE (РЕЗЕРВИРОВАТЬ);

    д) одну и ту же организацию;
    е) один и тот же метод доступа;
    ж) одну и ту же спецификацию фразы PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ). (2) Фраза OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) применима только к файлам, открытым в режиме ввода, ввода-вывода или дополнения. Ее указание требуется для файлов, которые могут отсутствовать во время выполнения объектной программы.

    (3) Фраза SELECT (ДЛЯ) задает связь между файлом, на который ссылается имя-файла-1, и средой памяти, на которую ссылается имя-реализации-1 или литерал-1.

    (1) Если определитель файла, на который ссылается имя-файла-1, является внешним определителем файла (ч.10, п.4.5), все статьи управления файлом в единице исполнения, которые ссылаются на этот определитель файла, должны иметь:
    а) одну и ту же спецификацию фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО);

    2.4.Фраза ACCESS MODE (ДОСТУП)
    2.4.1.Назначение
    Фраза ACCESS MODE (ДОСТУП) задает порядок, в котором осуществляется доступ к записям в файле.
    2.4.2.Общий формат
    ACCESS MODE IS SEQUENTIAL
    ДОСТУП ПОСЛЕДОВАТЕЛЬНЫЙ
    2.4.3.Общие правила
    (1) Если фраза ACCESS MODE (ДОСТУП) не задана, предполагается последовательный доступ.
    (2) Доступ к записям в файле осуществляется в последовательности, диктуемой организацией файла. Для последовательных файлов эта последовательность задается отношением предшественник-преемник, устанавливаемым выполнением операторов WRITE (ПИСАТЬ) при создании файла.
    (3) Если соответствующий определитель файла является внешним определителем файла, каждая статья управления файлом в единице исполнения, соответствующая этому определителю файла, должна задавать один и тот же метод доступа.
    2.5.Фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА)
    2.5.1.Назначение
    Фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА) задает данное, которое содержит состояние операции ввода-вывода.
    2.5.2.Общий формат
    FILE STATUS IS имя-данного-1
    СОСТОЯНИЕ ФАЙЛА имя-данного-1
    2.5.3.Синтаксические правила
    (1) Имя-данного-1 может уточняться.
    (2) Имя-данного-1 должно быть определено в разделе данных как данное из двух литер буквенно-цифровой категории и не должно определяться в секции файлов, в секции отчетов или в секции коммуникаций.
    2.5.4.Общие правила
    (1) Если задана фраза FILE STATUS (СОСТОЯНИЕ ФАЙЛА), данное, на которое ссылается имя-данного-1, всегда обновляется, как только обновляется состояние ввода-вывода, чтобы содержать значение этого состояния ввода-вывода. Это значение характеризует состояние выполнения оператора (см. п.1.3.5 настоящей части).
    (2) Данное, на которое ссылается имя-данного-1 и которое обновляется при выполнении оператора ввода-вывода, определяется в статье управления файлом, связанной с именем файла, указанным в этом операторе.
    2.6.Фраза ORGANIZATION IS SEQUENTIAL (ОРГАНИЗАЦИЯ ПОСЛЕДОВАТЕЛЬНАЯ)
    2.6.1.Назначение
    Фраза ORGANIZATION IS SEQUENTIAL (ОРГАНИЗАЦИЯ ПОСЛЕДОВАТЕЛЬНАЯ) указывает, что логической структурой файла является последовательная организация.
    2.6.2.Общий формат
    [ORGANIZATION IS] SEQUENTIAL
    [ОРГАНИЗАЦИЯ] ПОСЛЕДОВАТЕЛЬНАЯ
    2.6.3.Общие правила
    (1) Фраза ORGANIZATION IS SEQUENTIAL (ОРГАНИЗАЦИЯ ПОСЛЕДОВАТЕЛЬНАЯ) указывает, что логической структурой файла является последовательная организация. Организация файла устанавливается во время его создания и впоследствии не может быть изменена.
    (2) Последовательная организация является постоянной логической структурой файла, в которой запись идентифицируется отношением предшественник-преемник, которое устанавливается при помещении записей в файл.
    (3) Если фраза ORGANIZATION (ОРГАНИЗАЦИЯ) не задана, предполагается последовательная организация.
    2.7.Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ)
    2.7. Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) 2.7.1. Назначение Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) определяет литеру, которая будет использоваться для заполнения блока в последовательных файлах. 2.7.2. Общий формат 2.7.3. Синтаксические правила (1) Литерал-1 должен быть односимвольным нечисловым литералом. (2) Имя-данного-1 может уточняться. (3) Имя-данного-1 должно определяться в разделе данных как односимвольное данное буквенно-числовой категории и не должно определяться в секции коммуникаций, секции файлов или секции отчетов. 2.7.4. Общие правила
    (1) Фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) задает литеру, которая будет использоваться для заполнения блока в последовательных файлах. Во время выполнения операций ввода любая часть блока, находящаяся за последней логической записью и состоящая полностью из литер заполнителя, будет пропускаться. Во время выполнения операций ввода логическая запись, состоящая полностью из литер заполнителя, будет игнорироваться. При операциях вывода любая часть блока, находящаяся после последней логической записи, будет полностью заполняться литерами заполнителя. (2) Если фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) не применима для типа устройства, которое назначено файлу, создание или распознавание литер заполнителя не будет иметь места. (3) Во время выполнения оператора OPEN (ОТКРЫТЬ) для файла, который будет создаваться, литерал-1 или значение данного, на которое ссылается имя-данного-1, используется как значение литеры заполнителя. Литера заполнитель является фиксированным свойством файла. (4) Если для файла задана фраза CODE-SET (АЛФАВИТ), преобразование литеры заполнителя, заданной литералом-1 или содержимым имени-данного-1, устанавливается для файла при его открытии. (5) Если фраза PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) не задана, значение, используемое для литеры заполнителя, определяется реализацией. (6) Если соответствующий определитель файла является внешним определителем файла, все фразы PADDING CHARACTER (ЛИТЕРА ЗАПОЛНИТЕЛЬ) в единице исполнения, связанные с этим определителем файла, должны иметь одни и те же спецификации. Если задано имя-данного-1, оно должно ссылаться на внешнее данное.
    2.8. Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) 2.8.1. Назначение Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) указывает способ определения длины записей переменной длины во внешней среде. 2.8.2. Общий формат 2.8.3. Синтаксические правила (1) Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) может задаваться только для записей переменной длины. (2) Если задана фраза STANDARD-1 (СТАНДАРТ-А), внешней средой должен быть файл на магнитной ленте. 2.8.4. Общие правила
    (1) Фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) используется для указания способа определения длины записей переменной длины во внешней среде. Любой используемый способ не будет отражаться на области записи или размере записи, используемом в программе. (2) Если задана фраза STANDARD-1 (СТАНДАРТ-А), способ для определения длины записей переменной длины определяется в соответствии с Американским Национальным Стандартом Х3.27-1978 "Метки магнитных лент и структура файлов для обмена информацией" и стандартом ИСО 1001 "Метки магнитных лент и структура файлов для обмена информацией". (3) Если задано имя-реализации-1, для определения длины записей переменной длины используется метод, определяемый реализацией. (4) Если фраза RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) не задана, способ, используемый для определения длины записей переменной длины, определяется реализацией. (5) Во время успешного выполнения оператора OPEN (ОТКРЫТЬ) ограничителем записи является ограничитель, заданный во фразе RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) в статье управления файлом, связанной с именем-файла, указанным в операторе OPEN (ОТКРЫТЬ). (6) Если соответствующий определитель файла является внешним определителем файла, все фразы RECORD DELIMITER (ОГРАНИЧИТЕЛЬ ЗАПИСИ) в единице исполнения, относящиеся к данному определителю файла, должны иметь одинаковые спецификации.
    2.9. Фраза RESERVE (РЕЗЕРВИРОВАТЬ) 2.9.1. Назначение Фраза RESERVE (РЕЗЕРВИРОВАТЬ) позволяет пользователю указать количество распределяемых областей ввода-вывода. 2.9.2. Общий формат 2.9.3. Общие правила (1) Фраза RESERVE (РЕЗЕРВИРОВАТЬ) позволяет пользователю задавать количество распределяемых областей ввода-вывода. Если задана фраза RESERVE (РЕЗЕРВИРОВАТЬ), количество распределяемых областей ввода-вывода равно значению целого-1. Если фраза RESERVE (РЕЗЕРВИРОВАТЬ) не задана, количество распределяемых областей ввода-вывода определяется реализацией.

    2.10.Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ)
    2.10.1.Назначение
    Параграф I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) указывает контрольные точки для перепрогона, общие области памяти, которые могут использоваться различными файлами, .
    Фраза RERUN (ПЕРЕПРОГОН) параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВОДОМ) рассматриваются в настоящем стандарте как устаревшие элементы, которые будут удалены в следующей редакции стандарта.
    2.10.2.Общий формат

    2.10.3.Синтаксические правила
    (1) Порядок задания фраз не существенен.
    2.10.4.Общие правила
    (1) Фразы , SAME (ОБЩАЯ) и RERUN (ПЕРЕПРОГОН) описываются ниже в алфавитном порядке.
    2.11.Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ)
    2.11. Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) 2.11.1. Назначение Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) задает расположение файлов на катушке, содержащей несколько файлов. Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) является устаревшим элементом в настоящем стандарте и будет удалена в следующей редакции стандарта. 2.11.2. Общий формат 2.11.3. Общие правила (1) Фраза MULTIPLE FILE TAPE (НА ОДНОЙ КАТУШКЕ) требуется, когда более чем один файл расположен на одной физической катушке ленты. Независимо от общего числа файлов на одной катушке, должны описываться только те файлы, которые используются в объектной программе. Если все имена файлов перечисляются в последовательном порядке, фразу POSITION (ПОЗИЦИЯ) можно не задавать. Если некоторый файл из последовательности не указан, должна задаваться позиция относительно начала ленты. Одновременно может быть открыто не более одного файла на одной и той же катушке ленты.

    2.12.Фраза RERUN (ПЕРЕГОН)
    2.12.1.Назначение
    Фраза RERUN (ПЕРЕПРОГОН) указывает контрольные точки для перепрогона. Фраза RERUN (ПЕРЕПРОГОН) является устаревшим элементом в настоящем стандарте и будет удалена в следующей редакции стандарта.
    2.12.2.Общий формат

    2.12.3.Синтаксические правила
    (1) Имя-файла-1 должно ссылаться на файл с последовательной организацией.
    (2) Фраза END OF REEL/UNIT (КОНЕЦ КАТУШКИ/ТОМА) может использоваться, только если имя-файла-2 ссылается на файл с последовательной организацией.
    (3) Если задана фраза целое-1 RECORDS (целое-1 ЗАПИСЕЙ) или фраза целое-2 CLOCK-UNITS (ЕДИНИЦ-ВРЕМЕНИ), во фразе RERUN (ПЕРЕПРОГОН) должно задаваться имя-реализации-1.
    (4) Если для файла, на который ссылается имя-файла-2, указано более одной фразы RERUN (ПЕРЕПРОГОН), должны выполняться следующие ограничения:
    а) если задано несколько фраз целое-1 RECORDS (целое-1 ЗАПИСЕЙ), никакие две из них не могут задавать одно и то же имя-файла-2;
    б) если задано несколько фраз END OF REEL (КОНЕЦ КАТУШКИ) или END OF UNIT (КОНЕЦ ТОМА), никакие две из них не могут задавать одно и тоже имя-файла-2.
    (5) Может быть задана только одна фраза RERUN (ПЕРЕПРОГОН), содержащая фразу CLOCK-UNITS (ЕДИНИЦ-ВРЕМЕНИ).
    2.12.4.Общие правила
    а) если задается имя-файла-1, информация перепрогона записывается на каждой катушке или каждом томе выходного файла и реализацией определяется, где на ленте или в файле должна быть записана информация перепрогона;
    б) если задано имя-реализации-1, информация перепрогона записывается как отдельный файл на устройстве, определяемом реализацией.
    (2) Существует семь вариантов фразы RERUN (ПЕРЕПРОГОН), различающихся условиями, при которых могут быть установлены точки перепрогона. Реализация должна обеспечивать хотя бы один из указанных вариантов фразы RERUN (ПЕРЕПРОГОН).
    а) Если вариант END OF REEL (КОНЕЦ КАТУШКИ) или END OF UNIT (КОНЕЦ ТОМА) используется без варианта ON (НА), информация для перепрогона записывается в файл имя-файла-2, который должен быть выходным.
    б) Если используется вариант END OF REEL (КОНЕЦ КАТУШКИ) или END OF UNIT (КОНЕЦ ТОМА) и за словом ОN (НА указано имя-файла-1, информация для перепрогона записывается в файл имя-файла-1, который должен быть выходным файлом. Для файла имя-файла-2 выполняются обычные функции закрытия катушки или тома. Имя-файла-2 может быть именем входного или выходного файла.
    в) Если используется вариант END OF REEL (КОНЕЦ КАТУШКИ) или END OF UNIT (КОНЕЦ ТОМА) и за словом ОN (НА) указано имя-реализации, информация для перепрогона записывается на устройство, определенное реализацией. Имя-файла-2 может быть именем входного или выходного файла.
    г) Если используется вариант целое-1 RECORDS (ЗАПИСЕЙ), информация для перепрогона записывается на устройство, указанное именем-реализации, которое должно быть задано за словом ON (НА), после обработки каждых целое-1 записей имени-файла-2. Файл, указанный именем-файла-2, может быть входным или выходным и иметь любую организацию и доступ.
    д) Если используется вариант целое-2 CLOCK-UNITS (ЕДИНИЦ-ВРЕМЕНИ), информация для перепрогона записывается на устройство, указанное именем-реализации, которое должно быть задано после слова ON (НА), всякий раз, когда истекает промежуток времени, вычисленный внутренними часами.
    е) Если используется вариант имя-условия и после слова ОN (НА) задано имя-реализации, информация для перепрогона записывается на устройство, указанное именем-реализации, всякий раз, когда состояние переключателя соответствует состоянию, определенному именем-условия. Переключатель должен быть определен в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) секции конфигурации раздела оборудования. Момент проверки состояния переключателя определяется реализацией.
    ж) Если используется вариант имя-условия и после слова ON (НА) указано имя-файла-1, информация для перепрогона записывается в файл имя-файла-1, который должен быть выходным файлом, всякий раз, когда состояние переключателя соответствует состоянию, определенному именем-условия. В этом случае, как и в предыдущем, переключатель должен быть определен в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) секции конфигурации раздела оборудования. Момент проверки состояния переключателя определяется реализацией.
    (1) Фраза RERUN (ПЕРЕПРОГОН) определяет, когда и где записывается информация перепрогона. Эта информация записывается следующими способами:
    2.13.Фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ)
    2.13.1.Назначение
    Фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) определяет область памяти, которая должна разделяться различными файлами.
    2.13.2.Общий формат

    2.13.3.Синтаксические правила
    (1) Имя-файла-1 и имя-файла-2 должны быть определены в параграфе FILE-CONTROL (УПРАВЛЕНИЕ-ФАЙЛАМИ) этой же программы.
    (2) Имя-файла-1 и имя-файла-2 не могут ссылаться на определитель внешнего файла.
    (3) Если программа содержит более одной фразы SAME AREA (ОБЩАЯ ОБЛАСТЬ), должны выполняться следующие ограничения:
    а) одно имя файла не должно появляться более чем в одной фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ);
    б) имя файла не должно появляться более чем в одной фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ); в) если одно или более имен-файлов из фразы SAME AREA (ОБЩАЯ ОБЛАСТЬ) появляется во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), все имена файлов из этой фразы SAME AREA (ОБЩАЯ ОБЛАСТЬ) должны появиться во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Однако во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) могут задаваться также дополнительные имена-файлов, не встречающиеся во фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ). Правило, согласно которому в любой заданный момент времени может быть открыт только один из файлов, упомянутых во фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ), имеет предпочтение над правилом, что все файлы, заданные во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), могут быть открыты в любой момент времени.

    (4) Файлы, заданные во фразе SAME AREA (ОБЩАЯ ОБЛАСТЬ) не обязаны иметь одну и ту же организацию или метод доступа.
    2.13.4.Общие правила
    (1) Фраза SAME AREA (ОБЩАЯ ОБЛАСТЬ) указывает, что два или более файлов, на которые ссылаются имя-файла-1, имя-файла-2 и которые не являются сортируемыми или сливаемыми файлами, во время обработки должны использовать одну и ту же область памяти. К разделяемой области относятся все области памяти, связанные с файлами, заданными именем-файла-1, именем-файла-2, поэтому не допускается, чтобы в один и тот же момент времени был открыт более чем один из этих файлов (см. синтаксическое правило 3в).
    (2) Фраза SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ) указывает, что два или более файлов, на которые ссылаются имя-файла-1, имя-файла-2, должны использовать одну и ту же область памяти для обработки текущей логической записи. Все эти файлы могут быть открыты одновременно. Логическая запись в общей области записи рассматривается как логическая запись каждого открытого как выходной файла, имя которого встречается в этой фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), а также последнего прочитанного входного файла, имя которого задано в данной фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Это эквивалентно неявному переопределению этой области, т.е. записи выравниваются по позиции самой левой литеры.

    3.РАЗДЕЛ ДАННЫХ В МОДУЛЕ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА-ВЫВОДА
    3.1.Секция файлов
    Секция файлов расположена в разделе данных исходной программы. Каждый файл определяется статьей описания файла и одной или более статей описания записи. Статьи описания записи задаются непосредственно за статьей описания файла.
    Общий формат секции файлов в модуле последовательного ввода-вывода приводится ниже.

    3.1.1.Статья описания файла
    В программе статья описания файла FD (ОФ) представляет высший уровень организации в секции файлов. За заголовком секции файлов следует статья описания файла, состоящая из индикатора уровня FD (ОФ), имени файла и последовательности независимых фраз. Фразы статьи описания файла указывают размер логической и физической записи, наличие или отсутствие записей меток, значения элементов меток, определяемых реализацией, имена записей данных, которые составляют файл, и число строк на логической печатной странице. Статья должна заканчиваться точкой.
    3.1.2.Структура описания записи
    Описание записи состоит из последовательности статей описания данных, которые описывают характеристики отдельной записи. Каждая статья описания данного состоит из номера уровня, за которым следует имя данного или фраза FILLER (ЗАПОЛНИТЕЛЬ), если они указываются, и последовательность независимых фраз. Описание записи имеет иерархическую структуру и поэтому фразы, которые используются в статье, могут значительно изменяться в зависимости от наличия подчиненных статей. Структура описания записи и элементов, допустимых в статье описания записи, описывается в ч.4, п.4.3.2 и ч.6, п.5.3. Допустимость отдельных фраз в статье описания данных зависит от уровня модуля ядра, поддерживаемого реализацией.
    3.1.3.Начальные значения
    Начальное значение данного в секции файлов не определено.
    3.2.Статья описания файла
    3.2.1.Назначение
    Статья описания файла обеспечивает информацию о физической структуре, идентификации и именах записей, относящихся к данному файлу.
    3.2.2.Общий формат

    3.2.3.Синтаксические правила
    (1) Индикатор уровня FD (ОФ) идентифицирует начало статьи описания файла и должен предшествовать имени-файла-1.
    (2) Фразы, которые следуют за именем-файла-1, могут задаваться в любом порядке.
    (3) Одна или несколько статей описания записи должны следовать за статьей описания файла.
    3.2.4.Общие правила
    (1) Статья описания файла связывает имя-файла-1 с определителем файла.
    (2) Фразы BLOCK CONTAINS (В БЛОКЕ), CODE-SET (АЛФАВИТ), DATA RECORDS (ЗАПИСИ ДАННЫХ), LABEL RECORD (МЕТКИ), RECORD (В ЗАПИСИ) и VALUE OF (ЗНАЧЕНИЕ) описываются в алфавитном порядке.
    3.3.Фраза BLOCK CONTAINS (В БЛОКЕ)
    3.3.1.Назначение
    Фраза BLOCK CONTAINS (В БЛОКЕ) определяет размер физической записи.
    3.3.2.Общий формат

    3.3.3.Общие правила
    а) физическая запись содержит только одну полную логическую запись;
    б) устройство, назначенное файлу, допускает один и только один размер физической записи;
    в) количество записей, содержащихся в блоке, определяется операционной средой.
    (2) Размер физической записи должен быть определен в литерах, если имеет место одна из следующих ситуаций:
    а) в файле массовой памяти логическая запись больше физической записи;
    б) физическая запись содержит дополнения (области, не содержащиеся в логической записи);
    в) логические записи группируются таким образом, что будет предполагаться неточный размер физической записи.
    (3) Когда используется слово CHARACTERS (ЛИТЕР), размер физической записи указывается числом позиций литер, требуемых для запоминания физической записи.

    (5) Если соответствующий определитель файла является внешним определителем файла, все фразы BLOCK CONTAINS (В БЛОКЕ) в одной единице исполнения, относящиеся к этому определителю файла, должны иметь одни и те же значения целого-1 и целого-2.
    (1) Эта фраза обязательна за исключением следующих случаев:
    3.4.Фраза CODE-SET (АЛФАВИТ)
    3.4.1.Назначение
    Фраза CODE-SET (АЛФАВИТ) указывает соглашение для кодов литер, используемых для представления данных на носителе данных.
    3.4.2.Общий формат
    CODE-SET IS имя-алфавита-1
    АЛФАВИТ имя-алфавита-1
    3.4.3.Синтаксические правила
    (1) Если для файла указана фраза CODE-SET (АЛФАВИТ), все данные в этом файле должны быть описаны как USAGE IS DISPLAY (ДЛЯ ВЫДАЧИ), а описания числовых данных со знаком должны содержать фразу SIGH SEPARATE (ЗНАК ОТДЕЛЬНО).
    (2) Имя-алфавита не должно определяться в разделе оборудования литеральной фразой.
    3.4.4.Общие правила
    а) после успешного выполнения оператора OPEN (ОТКРЫТЬ) в качестве набора литер, используемого для представления данных на внешнем носителе, используется набор, заданный именем-алфавита-1 в статье описания файла для имени-файла, заданного в операторе OPEN (ОТКРЫТЬ) (см. ч.6, п.4.5);
    б) она задает алгоритм преобразования набора литер, используемого для представления данных на внешнем носителе, во внутреннее представление и обратно при выполнении операций ввода или вывода.
    (2) Если фраза CODE-SET (АЛФАВИТ) не задана, предполагается использование на внешнем носителе внутреннего набора литер.
    (3) Если соответствующий определитель файла является внешним определителем файла, все фразы CODE-SET (АЛФАВИТ) в единице исполнения, относящиеся к этому определителю файла, должны задавать один и тот же набор литер.
    (1) Если задана фраза CODE-SET (АЛФАВИТ):
    3.5.Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ)
    3.5.1.Назначение
    Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) используется только в целях документации для указания имен записей данных, связанных с файлом. Фраза DATA RECORDS (ЗАПИСИ ДАННЫХ) является устаревшим элементом в настоящем стандарте и будет удалена в следующей редакции стандарта.
    3.5.2.Общий формат

    3.5.3.Синтаксическое правило
    (1) Имя-данного-1 есть имя записи данных, которое должно появиться в статье описания записи на уровне 01.
    3.5.4.Общие правила
    (1) Наличие более одного имени-данного означает, что файл содержит более одного типа записей данных. Эти записи могут быть разных размеров, разных форматов и т.д. Порядок, в котором перечислены имена-записей, не существенен.
    (2) Логически все записи данных файла помещаются в одну и ту же область. Это в одинаковой мере относится к файлам, содержащим более одного типа записей данных.
    3.6.Фраза LABEL RECORDS (МЕТКИ)
    3.6.1.Назначение
    Фраза LABEL RECORDS (МЕТКИ) указывает, присутствуют ли метки.
    Фраза LABEL RECORDS (МЕТКИ) является устаревшим элементом в настоящем стандарте и будет удалена в следующей редакции стандарта.
    3.6.2.Общий формат

    3.6.3.Общие правила
    (1) Вариант OMITTED (ОПУЩЕНЫ) указывает, что нет явных меток для файла или устройства, назначенного файлу.
    (2) Вариант STANDARD (СТАНДАРТНЫ) указывает, что существуют метки файла или устройства, назначенного файлу, и эти метки соответствуют спецификациям меток, определенным реализацией.
    (3) Если фраза LABEL RECORDS (МЕТКИ) для файла не задана, метки для этого файла должны соответствовать спецификациям меток, определенным реализацией.
    (4) Если определитель файла, соответствующий этой статье описания файла, является внешним определителем файла (ч.10, п.4.5), все фразы LABEL RECORDS (МЕТКИ) в одной единице исполнения, связанные с этим определителем файла, должны иметь одинаковую спецификацию.
    3.7.Фраза LINAGE (ВЕРСТКА)
    3.7. Фраза LINAGE (ВЕРСТКА) 3.7.1. Назначение Фраза LINAGE (ВЕРСТКА) указывает на размер логической страницы в строках. Она также позволяет указать размер верхнего и нижнего поля на странице и номер строки тела страницы, на которой начинается область концовки. 3.7.2. Общий формат 3.7.3. Синтаксические правила (1) Имя-данного-1, имя-данного-2, имя-данного-3, имя-данного-4 должны относиться к элементарным целым числовым данным. (2) Имя-данного-1, имя-данного-2, имя-данного-3, имя-данного-4 могут уточняться. (3) Значение целого-2 должно быть не больше целого-1. (4) Значения целого-3 и целого-4 могут быть нулем. 3.7.4. Общие правила
    (1) Фраза LINAGE (ВЕРСТКА) указывает на размер логической страницы в строках. Размер логической страницы есть сумма величин, заданных в каждом варианте фразы, исключая вариант FOOTING (КОНЦОВКА). Если вариант LINES AT BOTTOM (ВЕРХНЕЕ ПОЛЕ) или LINES AT TOP (НИЖНЕЕ ПОЛЕ) не задан, размеры соответствующих полей равны нулю. Если не задан вариант FOOTING (КОНЦОВКА), условие конца страницы не возникает, независимо от того, существует условие переполнения страницы или нет.
    Размер логической страницы может устанавливаться независимо от размера физической страницы.
    (2) Целое-1 или значение данного, представленного именем-данного-1, указывает число строк, которые могут быть записаны и (или) пропущены на логической странице. Это значение должно быть больше нуля. Та часть логической страницы, на которой эти строки могут быть записаны и (или) пропущены, называется телом страницы.
    (3) Целое-2 или значение данного, представленного именем-данного-2, указывает номер строки тела страницы, на которой начинается область концовки. Это значение должно быть больше нуля, но не должно превышать целое-1 или значение данного, представленного именем-данного-1.
    Область концовки включает в себя область логической страницы между строкой, определяемой целым-2 или значением данного, представленного именем-данного-2, и строкой, определяемой целым-1 или значением данного, представленного именем-данного-1, включительно.
    (4) Целое-3 или значение данного, представленного именем-данного-3, указывает число строк, содержащихся в верхнем поле логической страницы. Это значение может быть равно нулю.
    (5) Целое-4 или значение данного, представленного именем-данного-4, указывает число строк, содержащихся в нижнем поле логической страницы. Это значение может быть равно нулю. (6) Целое-1, целое-3 и целое-4, если они указаны, используются во время открытия файла при выполнении оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) и указывают число строк, содержащееся в каждой из названных областей логической страницы. Целое-2, если оно указано, должно использоваться во время определения области концовки. Эти значения используются для всех логических страниц, которые записываются в файл, во время выполнения данной программы (7) Значения данных, представленных именем-данного-1, именем-данного-3 и именем-данного-4, если они указаны, используются следующим образом:
    а) во время выполнения оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) для определения количества строк в каждой из указанных областей для первой логической страницы; б) во время выполнения оператора WRITE (ПИСАТЬ) с фразой ADVANCING PAGE (ПРОДВИЖЕНИЯ СТРАНИЦЫ) или при возникновении условия переполнения страницы для определения количества строк в каждой из указанных областей для следующей страницы (п.4.7 настоящей части). (8) Значение данного, представленного именем-данного-2, во время выполнения оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) используется для определения области концовки первой логической страницы, а во время выполнения оператора WRITE (ПИСАТЬ) с фразой ADVANCING PAGE (ПРОДВИЖЕНИЯ СТРАНИЦЫ) или при возникновении условия переполнения страницы - для определения области концовки следующей логической страницы. (9) LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) генерируется, если задана фраза LINAGE (ВЕРСТКА). Его значение в каждый момент времени указывает номер строки тела текущей логической страницы, на которую позиционировано устройство. LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) подчиняется следующим правилам:
    а) для каждого файла, описанного в секции файлов с фразой LINAGE (ВЕРСТКА), генерируется отдельный LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ); б) LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) может использоваться в операторах раздела процедур, однако только система управления вводом-выводом может изменять его значение. Если в программе LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) используется для нескольких файлов, он должен при необходимости уточняться именем файла; в) при выполнении оператора WRITE (ПИСАТЬ) связанный с файлом LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) автоматически увеличивается по следующим правилам: 1) если указан оператор WRITE (ПИСАТЬ) с фразой ADVANCING PAGE (ПРОДВИЖЕНИЯ СТРАНИЦЫ), LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) автоматически устанавливается на 1. После установки счетчика верстки на 1 его значение неявно увеличивается до тех пор, пока не превысит значение, заданное целым-1 или данным, на которое ссылается имя-данного-1; 2) если во фразе ADVANCING (ПРОДВИЖЕНИЯ) указаны идентификатора-2 или целое-1, LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) увеличивается на целое-1 или значение данного, представленного идентификатором-2; 3) если фраза ADVANCING (ПРОДВИЖЕНИЯ) в операторе WRITE (ПИСАТЬ) не указана, LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) увеличивается на 1 (п.4.7 настоящей части);
    4) когда устройство позиционируется на первую строку каждой следующей логической страницы, LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) автоматически устанавливается на 1 (п.4.7 настоящей части);
    г) при выполнении оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) для соответствующего файла LINAGE-COUTER (СЧЕТЧИК-ВЕРСТКИ) автоматически устанавливается на 1.
    (10) Никаких дополнительных пропусков между соседними логическими страницами не делается.
    (11) Если определитель файла, соответствующий этой статье описания файла, является внешним определителем файла, все статьи описания файла в пределах одной единицы исполнения, относящиеся к этому определителю файла, должны иметь:
    а) фразу LINAGE (ВЕРСТКА), если хотя бы одна статья описания файла имеет фразу LINAGE (ВЕРСТКА);
    б) одни и те же значения соответственно для целого-1, целого-2, целого-3 и целого-4, если они заданы;
    в) одни и те же внешние данные, на которые ссылаются имя-данного-1, имя-данного-2, имя-данного-3 и имя-данного-4.

    3.8.Фраза RECORD (В ЗАПИСИ)
    3.8.1.Назначение
    Фраза RECORD (В ЗАПИСИ) задает количество позиций литер в записях фиксированной длины или диапазон числа позиций литер в записях переменной длины. Если число позиций литер меняется, фраза задает его минимальное и максимальное значения.
    3.8.2.Общий формат
    Формат 1

    Формат 2

    Формат 3
    RECORD CONTAINS целое-4 ТО целое-5 CHARACTERS
    В ЗАПИСИ ОТ целое-4 ДО целое-5 ЛИТЕР
    3.8.2.Синтаксические правила
    Формат 1
    (1) Ни одна статья описания записи для файла не может определять число позиций литер, большее, чем целое-1.
    Формат 2 (2) Статьи описания записей для файла не должны описывать записи, которые содержат меньшее количество позиций литер, чем задано целым-2, или записи, которые содержат количество позиций литер больше, чем задано целым-3. (3) Целое-3 должно быть больше целого-2. (4) Имя-данного-1 должно описывать элементарное целое без знака в секции рабочей памяти или секции связи.

    3.8.4.Общие правила
    Все форматы
    (1) Если фраза RECORD (В ЗАПИСИ) не задана, размер каждой записи данных полностью определяется статьей описания записи.
    (2) Если соответствующий определитель файла является внешним определителем файла, все статьи описания файла в пределах одной и той же единицы исполнения, которые соответствуют этому определителю файла, должны задавать одни и те же значения для целого-1 или целого-2 и целого-3. Если фраза RECORD (В ЗАПИСИ) не задана, все статьи описания записей, относящиеся к этому определителю файла, должны иметь одинаковую длину.
    Формат 1
    (3) Формат 1 используется для описания записей фиксированной длины. Целое-1 задает число позиций литер, содержащихся в каждой записи файла.
    Формат 2 (4) Формат 2 используется для описания записей переменной длины. Целое-2 задает минимальное количество позиций литер, которое может содержаться в любой записи файла. Целое-3 задает максимальное количество позиций литер в любой записи файла. (5) Количество позиций литер, соответствующее статье описания записи, определяется как сумма количества позиций литер во всех элементарных данных, за исключением переопределений и переименований, плюс все неявные заполнители, обусловленные выравниванием. Если задается таблица: а) минимальное число элементов таблицы, описанной в записи, используется в вышеупомянутом суммировании для определения минимального количества позиций литер, соответствующего описанию записи; б) максимальное число элементов таблицы, описанной в записи, используется в вышеупомянутом суммировании для определения максимального количества литер, соответствующего описанию записи. (6) Если целое-2 не задано, минимальное количество позиций литер, содержащееся в любой записи файла, равно наименьшему числу позиций литер, заданному для записей этого файла.
    (7) Если целое-3 не задано, максимальное количество позиций литер, содержащееся в любой записи файла, равно наибольшему числу позиций литер, заданному для записей этого файла. (8) Если задано имя-данного-1, количество позиций литер записи должно быть помещено в данное, на которое ссылается имя-данного-1, до выполнения любого оператора REWRITE (ОБНОВИТЬ), RELEASE (ПЕРЕДАТЬ) или WRITE (ПИСАТЬ) для этого файла. (9) Если задано имя-данного-1, выполнение операторов REWRITE (ОБНОВИТЬ), RELEASE (ПЕРЕДАТЬ), WRITE (ПИСАТЬ), START (ПОДВЕСТИ) или DELETE (УДАЛИТЬ), либо неуспешное выполнение операторов RETURN (ВЕРНУТЬ) или READ (ЧИТАТЬ) не меняет содержимого данного, на которое ссылается имя-данного-1.
    (10) Во время выполнения операторов REWRITE (ОБНОВИТЬ), RELEASE (ПЕРЕДАТЬ) или WRITE (ПИСАТЬ) количество позиций литер в записи определяется следующим образом: а) если задано имя-данного-1, - содержимым данного, на которое ссылается имя-данного-1; б) если имя-данного-1 не задано и запись не содержит данных с переменным числом вхождений, - числом позиций литер в записи;
    в) если имя-данного-1 не задано и запись содержит данные с переменным числом вхождений, - суммой размеров фиксированной части и части таблицы, описанной с числом вхождений, во время выполнения оператора вывода.
    (11) Если имя-данного-1 задано, после успешного выполнения оператора RETURN (ВЕРНУТЬ) или READ (ЧИТАТЬ) для файла содержимое данного, на которое ссылается имя-данного-1, будет указывать число позиций литер только что прочитанной записи.
    (12) Если в операторе RETURN (ВЕРНУТЬ) или READ (ЧИТАТЬ) задана фраза INTO (В), количество позиций литер в текущей записи, участвующей как посылаемое данное в неявном операторе MOVE (ПОМЕСТИТЬ), определяется следующим образом: а) если задано имя-данного-1, - содержимым данного, на которое ссылается имя-данного-1; б) если имя-данного-1 не задано, - значением, которое могло быть помещено в данное, на которое ссылается имя-данного-1, если бы оно было задано.

    Формат 3
    (13) Если используется формат 3 фразы RECORD (В ЗАПИСИ), целое-4 и целое-5 ссылаются на минимальное количество литер в записи данных наименьшего размера и на максимальное количество литер в записи данных наибольшего размера соответственно. Однако, в этом случае размер каждой записи данных полностью определяется в статье описания записи.
    (14) Размер каждой записи данных определяется в терминах числа позиций литер, необходимых для заполнения логической записи, независимо от типов литер, используемых для представления элементов в логической записи. Размер записи определяется как сумма количества литер всех элементарных данных фиксированной длины плюс сумма максимального количества литер всех подчиненных записи элементов переменной длины. Эта сумма может отличаться от фактического размера записи (см. ч.4, п.4.3.4; ч.6, пп.5.13, 5.14).
    3.9.Фраза VALUE (ЗНАЧЕНИЕ)
    3.9.1.Назначение
    Фраза VALUE (ЗНАЧЕНИЕ) конкретизирует описание данного в записях меток, связанных с файлом.
    Фраза VALUE (ЗНАЧЕНИЕ) является устаревшим элементом в настоящем стандарте и будет удалена в следующей редакции стандарта.
    3.9.2.Общий формат

    3.9.3.Синтаксические правила.
    (1) Имя-данного-1 может быть уточнено, если необходимо, но не может индексироваться или быть описано с фразой USAGE IS INDEX (ДЛЯ ИНДЕКСА). (2) Имя-данного-1 должно быть определено в секции рабочей памяти.

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

    (2) Если соответствующий определитель файла является внешним определителем файла, все фразы VALUE OF (ЗНАЧЕНИЕ) в одной и той же единице исполнения, соответствующие этому определителю файла, должны быть совместимы. Правила совместимости определяются реализацией.
    4.РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА-ВЫВОДА
    4.1.Общее описание
    Когда в исходной Кобол-программе присутствует оператор USE (ИСПОЛЬЗОВАТЬ) модуля последовательного ввода-вывода, раздел процедур содержит декларативные процедуры. Ниже приводится общий формат раздела процедур в случае, когда присутствует оператор USE (ИСПОЛЬЗОВАТЬ).

    4.2.Оператор CLOSE (ЗАКРЫТЬ)
    4.2.1.Назначение
    Оператор CLOSE (ЗАКРЫТЬ) завершает обработку катушки, тома и файла
    4.2.2.Общий формат

    4.2.3.Синтаксические правила
    (1) Файлы, перечисленные в операторе CLOSE (ЗАКРЫТЬ), могут иметь различную организацию и доступ.
    4.2.4.Общие правила
    а) без катушек (томов). Файл, носитель которого такой, что для него понятие перемотки катушек (томов) не имеет смысла;
    б) последовательный однокатушечный (однотомный). Последовательный файл, который полностью располагается на одной катушке (томе);
    в) последовательный файл, который располагается на нескольких катушках (томах).
    1) если текущая катушка или том является последней или единственной для файла или если катушка располагается на носителе иной природы, смена катушки или тома не производится; указатель текущего тома остается неизменным;
    2) если для файла существует другая катушка (том), производится смена катушки (тома), указатель текущей катушки (тома) указывает на следующую катушку (том), существующую в файле, выполняется стандартная процедура обработки начальных меток катушки (тома). Если на текущем томе не существует записей данных, производится смена катушки (тома).
    Выходные файлы (носители в виде катушки или тома). Выполняются следующие операции:
    1) стандартная процедура обработки конечных меток катушки или тома;
    2) смена катушки (тома). Указатель текущего тома указывает на новую катушку (том);
    3) стандартная процедура обработки начальных меток катушки или тома;
    4) следующий оператор WRITE (ПИСАТЬ) записывает следующую логическую запись на следующую катушку или том данного файла.
    Выходные файлы (носители не в виде катушки или тома).
    Выполнение этого оператора считается успешным. Файл остается открытым; не осуществляются никакие действия, кроме указанных в общем правиле (4).
    Ж - перемотка.
    Текущая катушка или аналогичное устройство устанавливается на физическое начало.
    З - необязательные фразы игнорируются. Оператор CLOSE (ЗАКРЫТЬ) выполняется так, как будто нет необязательных фраз.

    (4) Выполнение оператора CLOSE (ЗАКРЫТЬ) приводит к обновлению значения состояния ввода-вывода, связанного с именем-файла-1 (см. п.1.3.5 настоящей части).
    (5) Если отсутствует необязательный входной файл, для файла не выполняется обработка катушки (тома) или конца файла, а указатель позиции файла и указатель текущего тома не изменяются.

    (6) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) без фразы REEL (КАТУШКУ) или UNIT (ТОМ) область записи, связанная с именем-файла-1, становится недоступной. В случае неуспешного выполнения оператора CLOSE (ЗАКРЫТЬ) доступность области записи не определена.
    (7) После успешного завершения оператора CLOSE (ЗАКРЫТЬ) без фразы REEL (КАТУШКУ) или UNIT (ТОМ) файл не входит более в число открытых файлов; он более не связан с определителем файла.
    (8) Если в операторе CLOSE (ЗАКРЫТЬ) указано более одного имени-файла-1, результат выполнения этого оператора CLOSE (ЗАКРЫТЬ) является таким же, как если бы отдельный оператор CLOSE (ЗАКРЫТЬ) был написан для каждого имени-файла-1 в том же порядке, в каком эти имена файлов указаны в операторе CLOSE (ЗАКРЫТЬ).
    (3) Результаты выполнения каждого типа оператора CLOSE (ЗАКРЫТЬ) для каждой категории файла приведены ниже.
    Формат оператора GLOSE (ЗАКРЫТЬ) Выполняемые действия для различных категорий файла
    Без катушек (томов) Последовательный однокатушечный (однотомный) Последовательный многокатушечный (многотомный)
    CLOSE (ЗАКРЫТЬ) В В, Ж А, В, Ж
    CLOSE WITH LOCK (ЗАКРЫТЬ С ЗАМКОМ) В, Д В, Ж, Д А, В, Д, Ж
    CLOSE WITH NO REWIND (ЗАКРЫТЬ БЕЗ ПЕРЕМОТКИ) В, З В, Б А, Б, В
    CLOSE REEL/UNIT (ЗАКРЫТЬ КАТУШКУ/ТОМ) Е Е, Ж Е, Ж
    CLOSE REEL/UNIT FOR REMOVAL (ЗАКРЫТЬ КАТУШКУ/ТОМ С УДАЛЕНИЕМ) Е Г, Е, Ж Г, Е, Ж

    Примечание. Значения символов А-З приведены ниже. Там, где эти значения зависят от того, является ли файл входным, выходным или входным-выходным, приводятся дополнительные пояснения, в противном случае эти определения относятся к входным, выходным или входным-выходным файлам.
    А - влияние на обработанные ранее катушки (тома).
    Входные и входные-выходные файлы. Все катушки (тома) в файле, предшествующие текущей катушке (тому), закрываются, если только для них не выполнялся оператор CLOSE REEL (ЗАКРЫТЬ КАТУШКУ) или CLOSE UNIT (ЗАКРЫТЬ ТОМ). Если текущая катушка (том) в файле не последняя, все следующие катушки (тома) не обрабатываются.
    Выходные файлы. Все катушки (тома) файла, предшествующие текущей катушке (тому), закрываются, если для них не выполнялся оператор CLOSE REEL (ЗАКРЫТЬ КАТУШКУ) или CLOSE UNIT (ЗАКРЫТЬ ТОМ).
    Б - текущая катушка не перематывается.
    Текущая катушка (том) остается в текущей позиции.
    В - закрыть файл.
    Входные и входные-выходные файлы. Если файл установлен в конце и записи меток для этого файла специфицированы, метки обрабатываются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Действия оператора CLOSE (ЗАКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или когда записи меток не специфицированы, но присутствуют. Выполняются операции закрытия, определенные реализацией. Если файл установлен в конце и записи меток для него не специфицированы, метки не обрабатываются, но другие операции закрытия, определенные реализацией, выполняются, Если файл установлен не в конце, выполняются операции закрытия, определенные реализацией, но конечные метки не обрабатываются.
    Выходные файлы. Если записи меток для файла специфицированы, метки создаются в соответствии со стандартной процедурой обработки меток, определенной реализацией. Действия оператора CLOSE (ЗАКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или когда они не специфицированы, но присутствуют. Выполняются операции закрытия, определенные реализацией. Если записи меток для файла не указаны, метки не обрабатываются, но другие операции закрытия, определенные реализацией, выполняются.
    Г - удаление катушки (тома). Если это применимо, производится перемотка текущей катушки или тома и логическое удаление их из единицы исполнения. Однако катушка или том может снова стать доступной в порядке расположения катушек или томов в файле, если впоследствии за оператором CLOSE (ЗАКРЫТЬ) без фразы REEL (КАТУШКУ) или UNIT (ТОМ) для этого файла будет выполнен оператор OPEN (ОТКРЫТЬ). Д - закрыть с замком. Файл закрывается; он не может быть открыт во время выполнения данной единицы исполнения.

    Е - закрыть катушку или закрыть том.
    Входные и входные-выходные файлы.
    Выполняются следующие операции:

    (1) Оператор CLOSE (ЗАКРЫТЬ) может быть выполнен только для файла, который был открыт.
    (2) Для того, чтобы показать действие различных типов оператора CLOSE (ЗАКРЫТЬ) для различных носителей данных, все файлы разделяются на следующие категории:
    4.3.Оператор OPEN (ОТКРЫТЬ)
    4.2.1.Назначение

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

    4.3.3.Синтаксические правила
    (1) Фраза REVERSED (PEBEPCHO) может указываться только для последовательных файлов. (2) Фраза EXTEND (ДОПОЛНЯЕМЫЙ) не может использоваться для файлов, находящихся на одной катушке с другими файлами. (3) Фраза EXTEND (ДОПОЛНЯЕМЫЙ) может использоваться только для файлов, для которых не была указана фраза LINAGE (ВЕРСТКА).

    (4) Файлы, перечисленные в операторе OPEN (ОТКРЫТЬ), могут иметь различную организацию или доступ.
    4.3.4.Общие правила
    а) когда указана фраза INPUT (ВХОДНОЙ), оператор OPEN (ОТКРЫТЬ) осуществляет проверку меток в соответствии с процедурами, определенными реализацией для проверки входных меток;
    б) когда указана фраза OUTPUT (ВЫХОДНОЙ), выполнение оператора OPEN (ОТКРЫТЬ) вызывает запись меток в соответствии с процедурами, определенными реализацией для записи выходных меток.
    Действия оператора OPEN (ОТКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или не специфицированы, но присутствуют.
    (8) Если во время выполнения оператора OPEN (ОТКРЫТЬ) возникает условие противоречия свойств файла, выполнение оператора OPEN (ОТКРЫТЬ) считается неуспешным (см. п.1.3.7 настоящей части).
    (9) Фразы NO REWIND (БЕЗ ПЕРЕМОТКИ) и REVERSED (РЕВЕРСНО) должны использоваться: а) только для последовательных однокатушечных (однотомных) файлов (см. п.4.2 настоящей части); б) только для последовательных файлов, целиком содержащихся на одной катушке ленты, в среде многофайловых лент (см. п.2.11 настоящей части). (10) Фразы REVERSED (РЕВЕРСНО) и NO REWIND (БЕЗ ПЕРЕМОТКИ) игнорируются, если они не применимы к внешнему носителю, на котором располагается файл.

    (11) Если внешний носитель для файла допускает перемотку, то выполняются следующие действия:
    а)
    при выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается в начало;
    б) если задана фраза NO REWIND (БЕЗ ПЕРЕМОТКИ), при выполнении оператора OPEN (ОТКРЫТЬ) переустановка файла не выполняется; файл уже должен быть установлен в начало перед выполнением оператора OPEN (ОТКРЫТЬ); в) если задана фраза REVERSED (РЕВЕРСНО), при выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается в конец. (12) Если задана фраза REVERSED (РЕВЕРСНО), последующий оператор READ (ЧИТАТЬ) делает записи файла доступными в обратном порядке, начиная с последней записи. (13) Если файл, открытый с фразой INPUT (ВХОДНОЙ), является необязательным файлом, не имеющимся в наличии, оператор OPEN (ОТКРЫТЬ) устанавливает указатель позиции файла для указания того, что необязательный входной файл отсутствует.

    (14) Если файл открыт с фразами INPUT (ВХОДНОЙ) или I-O (ВХОДНОЙ-ВЫХОДНОЙ), указатель позиции файла устанавливается на единицу.
    (15) Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ), при выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается непосредственно за последней логической записью файла. Последней логической записью последовательного файла является последняя записанная в файл запись. (16) Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ) и фраза LABEL RECORD (МЕТКИ) указывает, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие действия: а) начальные метки файла обрабатываются только для однокатушечных или однотомных файлов; б) начальные метки катушки (тома) обрабатываются на последней катушке (томе), как если бы файл открывался как INPUT (ВХОДНОЙ); в) имеющиеся конечные метки файла обрабатываются, как если бы файл открывался как INPUT (ВХОДНОЙ). Затем эти метки удаляются; г) затем обработка продолжается, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ).

    (17) Оператор OPEN (ОТКРЫТЬ) с фразой I-O (ВХОДНОЙ-ВЫХОДНОЙ) должен относиться к файлу, поддерживающему операции ввода и вывода, допустимые для последовательного файла, открытого как I-O (ВХОДНОЙ-ВЫХОДНОЙ). Выполнение оператора OPEN (ОТКРЫТЬ) с фразой I-O (ВХОДНОЙ-ВЫХОДНОЙ) подготавливает файл, на который он ссылается, как для операций ввода, так и для операций вывода.
    (18) Если указана фраза I-O (ВХОДНОЙ-ВЫХОДНОЙ) и во фразе LABEL RECORD (МЕТКИ) указано, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие шаги:
    а) проверку меток в соответствии с процедурами, определенными реализацией для проверки входных-выходных меток;
    б) запись новых меток в соответствии с процедурами, определенными реализацией для записи входных-выходных меток.
    (19) Файл, содержащийся в среде многофайловой ленты, логически эквивалентен последовательному файлу, содержащемуся в однофайловой ленточной среде. (20) Если совокупность файлов размещена на одной катушке ленты и на один из этих файлов ссылаются в операторе OPEN (ОТКРЫТЬ), то применяются следующие правила: а) одновременно в открытом состоянии может находиться не более одного файла; б) нет ограничений на порядок, в котором файлы могут быть открыты для ввода; в) если один из файлов, на который ссылается имя файла, является субъектом оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ), во время выполнения оператора OPEN (ОТКРЫТЬ) на соответствующей катушке должны уже существовать все файлы, номер позиций которых меньше, чем номер позиции данного файла. Кроме того, в это время на катушке не могут существовать файлы, номер позиции которых больше, чем номер позиции данного файла; г) каждый файл должен быть последовательным.

    (21) Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN
    (ОТКРЫТЬ) с фразами I-O (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ) приводит к созданию файла. Это создание происходит так, как если бы в указанном порядке выполнялись следующие операторы: OPEN OUTPUT имя-файла. CLOSE имя-файла. ОТКРЫТЬ ВЫХОДНОЙ имя-файла. ЗАКРЫТЬ имя-файла. За этими операторами следует выполнение оператора OPEN (ОТКРЫТЬ), указанного в исходной программе.

    Успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) приводит к созданию файла. После успешного создания такой файл не содержит записей данных.
    (22) После успешного выполнения оператора OPEN (ОТКРЫТЬ) указатель текущего тома устанавливается на:
    а) первую или единственную катушку (том) для доступного входного или входного-выходного файла;
    б) катушку (том), содержащую последнюю логическую запись дополняемого файла;

    в) новую катушку (том) для недоступного выходного, входного-выходного файла.
    (23) Во время выполнения оператора OPEN (ОТКРЫТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла.
    (24) Если в операторе OPEN (ОТКРЫТЬ) указано более чем одно имя-файла, результат выполнения этого оператора OPEN (ОТКРЫТЬ) такой, как если бы отдельный оператор OPEN (ОТКРЫТЬ) был написан для каждого имени-файла в том порядке, как они указаны в операторе OPEN (ОТКРЫТЬ).
    (25) Минимальный и максимальный размеры записей файла устанавливаются во время создания файла и не должны изменяться впоследствии.
    (1) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает файл доступным для обработки.
    Успешное выполнение оператора OPEN (ОТКРЫТЬ) связывает файл с именем-файла посредством определителя файла.
    Файл доступен, если он физически имеется в наличии и распознан системой управления вводом-выводом. Приведенная ниже табл.1. демонстрирует результаты открытия доступных и недоступных файлов.
    Таблица 1
    Фраза оператора Файл доступен Файл недоступен
    INPUT (ВХОДНОЙ) Нормальное открытие Открытие неуспешное
    INPUT (ВХОДНОЙ) (Необязательный файл) Нормальное открытие Нормальное открытие; при первом чтении возникает условие конца
    I-O (ВХОДНОЙ-ВЫХОДHOЙ) Нормальное открытие Открытие неуспешное
    I-O (ВХОДНОЙ-ВЫХОДНОЙ (Необязательный файл) Нормальное открытие Открытие приводит к созданию файла
    OUTPUT (ВЫХОДНОЙ) Нормальное открытие; файл не содержит записей Открытие приводит к созданию файла
    EXTEND (ДОПОЛНЯЕМЫЙ) Нормальное открытие Открытие неуспешное
    EXTEND (ДОПОЛНЯЕМЫЙ) (Необязательный файл) Нормальное открытие Открытие приводит к созданию файла

    (2) Успешное выполнение оператора OPEN (ОТКРЫТЬ) делает область записи доступной программе. Если определитель файла, связанный с именем файла, является внешним, то существует единственная область записи, связанная с определителем файла для единицы исполнения.
    (3) Если файл не открыт, не может быть выполнен ни один оператор, явно или неявно относящийся к файлу, за исключением оператора MERGE (СЛИТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ), оператора OPEN (ОТКРЫТЬ) или оператора SORT (СОРТИРОВАТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ).
    (4) Оператор OPEN (ОТКРЫТЬ) должен быть успешно выполнен перед выполнением любого другого допустимого оператора ввода-вывода.
    В табл.2 приведены допустимые операторы ввода-вывода.
    Таблица 2
    Оператор Допустимость сочетаний операторов ввода-вывода для вариантов оператора OPEN (ОТКРЫТЬ)
    INPUT (ВХОДНОЙ) OUTPUT (ВЫХОДНОЙ) I-O (ВХОДНОЙ-ВЫХОДНОЙ) EXTEND (ДОПОЛНЯЕМЫЙ)
    READ (ЧИТАТЬ) х - х -
    WRITE (ПИСАТЬ) - х - х
    REWRITE (ОБНОВИТЬ) - - х -

    Примечание. Знак "х" означает допустимые сочетания оператора ввода-вывода и варианта OPEN (ОТКРЫТЬ), "-" - недопустимые.
    (5) Файл может быть открыт как INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ) и I-O (ВХОДНОЙ-ВЫХОДНОЙ) в одной и той же программе. Каждому последующему оператору OPEN (ОТКРЫТЬ) для одного и того же файла должно предшествовать выполнение оператора CLOSE (ЗАКРЫТЬ) без фраз REEL (КАТУШКУ), UNIT (ТОМ) для данного файла.
    (6) Выполнение оператора OPEN (ОТКРЫТЬ) не извлекает и не записывает первую запись данных.
    (7) Если указаны записи меток для файла, начальные метки обрабатываются следующим образом:
    4.4.Оператор READ (ЧИТАТЬ)
    4.4.1.Назначение
    Оператор READ (ЧИТАТЬ) делает доступной следующую логическую запись файла.
    4.4.2.Общий формат

    4.4.3.Синтаксические правила
    (1) Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны быть одной и той же областью памяти.
    (2) Фраза AT END (В КОНЦЕ) должна быть указана, если для имени-файла-1 не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
    4.4.4.Общие правила
    а) Если указатель позиции файла указывает, что нет правильной следующей записи, то выполнение оператора READ (ЧИТАТЬ) неуспешно.
    б) Если указатель позиции файла указывает, что отсутствует необязательный входной файл, выполнение происходит так, как указано в общем правиле (10).

    в) Если указатель позиции файла был установлен предыдущим оператором OPEN (ОТКРЫТЬ), выбирается первая существующая запись файла, номер записи которой больше или равен указателю позиции файла.
    г) Если указатель позиции файла установлен предыдущим оператором READ (ЧИТАТЬ), выбирается первая существующая запись файла, номер записи которой больше указателя позиции файла.
    Если обнаружена запись, удовлетворяющая приведенным выше правилам, она становится доступной в области записи, соответствующей имени-файла-1.
    Если запись, удовлетворяющая приведенным выше правилам, не найдена, то указатель позиции файла устанавливается для указания того, что не существует следующей логической записи, и выполнение продолжается согласно общему правилу (10).
    Если запись становится доступной, то указатель позиции файла устанавливается на номер записи, ставшей доступной.
    (5) Независимо от используемого способа совмещения времени выборки с временем обработки, концепция оператора READ (ЧИТАТЬ) остается неизменной в том, что запись становится доступной объектной программе до выполнения любого оператора, следующего за этим оператором READ (ЧИТАТЬ), если повелительный-оператор-2 не указан, или до выполнения повелительного-оператора-2, если он указан.
    (6) Когда логические записи описаны более чем одной статьей описания записи, эти записи автоматически используют одну и ту же область памяти; это эквивалентно неявному переопределению области. По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены.
    (7) Фраза INTO (В) может быть указана в операторе READ (ЧИТАТЬ), если:
    а) только одно описание записи подчиняется статье описания файла;
    б) все имена-записей, связанные с именем-файла-1, и данное, на которое ссылается идентификатор-1, описывают групповое данное или элементарное буквенно-цифровое данное.
    (8) Результат выполнения оператора READ (ЧИТАТЬ) с фразой INTO (В) эквивалентен применению следующих правил в указанном порядке:
    а) выполняется тот же оператор READ (ЧИТАТЬ) без фразы INTO (В);

    (9) Если при выполнении оператора READ (ЧИТАТЬ) обнаруживается конец катушки или тома или катушка (том) не содержит логических записей, а логический конец файла не достигнут, выполняются следующие операции:
    а) стандартная процедура конечных меток катушки (тома);
    б) смена катушек (томов). Значение указателя тома указывает на следующую существующую для файла катушку (том);
    в) стандартная процедура начальных меток катушки (тома).
    (10) Если указатель позиции файла указывает, что не существует следующей логической записи выполняются следующие действия в указанном порядке:
    а) значение, полученное в результате установки указателя позиции файла, присваивается состоянию ввода-вывода, связанному с именем-файла-1, для обозначения условия конца (см. п.1.3.5 настоящей части);
    б) если фраза AT END (В КОНЦЕ) указана в операторе, вызвавшем это условие, управление передается повелителыюму-оператору-1 во фразе AT END (В КОНЦЕ). Никакие процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанные с именем-файла-1, не выполняются;
    в) если фраза AT END (В КОНЦЕ) не указана, с именем-файла-1 должна быть связана процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), которая в этом случае и выполняется. Возврат из этой процедуры осуществляется к следующему после оператора READ (ЧИТАТЬ) выполнимому оператору.
    Если возникает условие конца, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
    (11) Если во время выполнения оператора READ (ЧИТАТЬ) условие конца не возникает, фраза AT END (В КОНЦЕ) игнорируется, если она указана, и выполняются следующие действия:
    а) устанавливается значение указателя позиции файла и изменяется значение состояния ввода-вывода, связанного с именем-файла-1;
    б) если существует условие особой ситуации, но не условие конца, управление передается процедуре USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ) согласно правилам оператора USE (ИСПОЛЬЗОВАТЬ), применимого к имени-файла-1 (п.4.6 настоящей части);
    в) если условие особой ситуации не существует, запись становится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление передается в точку выхода оператора READ (ЧИТАТЬ) или повелительному-оператору-2, если он указан. В последнем случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется оператор ветвления или условный оператор, вызывающие явную передачу управления, оно передается в соответствии с правилами для этих операторов, в противном случае после завершения выполнения повелительного-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).
    (12) После неуспешного завершения выполнения оператора READ (ЧИТАТЬ) содержимое соответствующей области записи не определено; указателю позиции файла присвоено значение, указывающее, что правильная следующая запись не установлена.
    (13) Если число позиций литер прочитанной записи меньше чем минимальный размер, указанный в статьях описания записи для имени-файла-1, то часть области записи, находящаяся справа от последней прочитанной литеры, является неопределенной. Если число позиций литер в читаемой записи больше, чем максимальный размер, указанный в статьях описания записи для имени-файла-1, то запись усекается справа до максимального размера. В любом из этих случаев оператор READ (ЧИТАТЬ) выполняется успешно и состояние ввода-вывода устанавливается для указания, что произошло нарушение длины записи (см. п.1.3 настоящей части).

    (14) Фраза END-READ (КОНЕЦ-ЧИТАТЬ) ограничивает область действия оператора READ (ЧИТАТЬ) (см. ч.4, п.4.6.3).
    (1) Во время выполнения оператора READ (ЧИТАТЬ) файл, на который ссылается имя-файла-1, должен быть открыт как входной или входной-выходной (см. п.4.3 настоящей части).
    (2) Фраза NEXT (СЛЕДУЮЩУЮ) не обязательна и не влияет на выполнение оператора OPEN (ОТКРЫТЬ).

    (3) Выполнение оператора READ (ЧИТАТЬ) вызывает обновление значения состояния ввода-вывода, связанного с именем-файла-1.
    (4) В начале выполнения оператора READ (ЧИТАТЬ) установка указателя позиции файла используется для определения доступной записи согласно следующим правилам. Сравнения для записей в последовательных файлах относятся к номерам записей.
    4.5.Оператор REWRITE (ОБНОВИТЬ)
    4.5.1.Назначение
    Оператор REWRITE (ОБНОВИТЬ) логически заменяет запись в файле на устройстве массовой памяти.
    4.5.2.Общий формат
    REWRITE имя-записи-1 [FROM идентификатор-1]
    ОБНОВИТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]
    4.5.3.Синтаксические правила
    (1) Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
    (2) Имя-записи-1 - это имя логической записи в секции файлов раздела данных. Оно может быть уточнено.
    4.5.4.Общие правила
    а) Оператор
    MOVE идентификатор-1 ТО имя-записи-1
    (ПОМЕСТИТЬ идентификатор-1 В имя-записи-1) соответственно правилам, описанным для оператора MOVE (ПОМЕСТИТЬ);
    б) тот же оператор REWRITE (ОБНОВИТЬ) без фразы FROM (ИЗ ПОЛЯ).
    (5) После завершения выполнения оператора REWRITE (ОБНОВИТЬ) информация в области, указанной идентификатором-1, остается доступной, даже если информация в области, указанной именем-записи-1, не является доступной
    (6) Выполнение оператора REWRITE (ОБНОВИТЬ) не влияет на указатель позиции файла.
    (7) Выполнение оператора REWRITE (ОБНОВИТЬ) вызывает обновление состояния ввода-вывода для файла, связанного с именем-записи-1 (см. п.1.3.5 настоящей части).
    (8) При выполнении оператора REWRITE (ОБНОВИТЬ) логическая запись передается операционной системе.
    (9) Если число позиций литер, описанное в записи, указанной именем-записи-1, не равно числу позиций литер в заменяемой записи, то выполнение оператора REWRITE (ОБНОВИТЬ) будет неуспешным, операции обновления не произойдет, содержимое области записи не изменится и состояние ввода-вывода файла, связанного с именем-записи-1, примет значение, указывающее причину условия (особого состояния) (см. п.1.3.5 настоящей части).
    (1) Во время выполнения этого оператора файл, связанный с именем-записи-1, должен быть файлом массовой памяти и должен быть открыт как входной-выходной (см. п.4.3 настоящей части).
    (2) Последним оператором ввода-вывода для соответствующего файла перед выполнением оператора REWRITE (ОБНОВИТЬ) должен быть успешно выполненный оператор READ (ЧИТАТЬ). Система управления массовой памятью (СУМП) логически заменяет запись, которая была извлечена оператором READ (ЧИТАТЬ).

    (4) Выполнение оператора REWRITE (ОБНОВИТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентно выполнению следующих операторов в указанном порядке:
    4.6.Оператор USE (ИСПОЛЬЗОВАТЬ)
    4.6.1.Назначение
    Оператор USE (ИСПОЛЬЗОВАТЬ) определяет процедуры обработки ошибок ввода-вывода дополнительно к стандартным процедурам, предоставляемым системой управления вводом-выводом.
    4.6.2.Общий формат

    4.6.3.Синтаксические правила
    (1) Оператор USE (ИСПОЛЬЗОВАТЬ) должен непосредственно следовать за заголовком секции декларативной части раздела процедур и должен быть единственным в предложении. Остальная часть декларативной секции должна состоять из одного или более процедурных параграфов, определяющих процедуры, которые должны использоваться.
    (2) Сам оператор USE (ИСПОЛЬЗОВАТЬ) никогда не выполняется; он только определяет условия, вызывающие выполнение указанных после него процедур.
    (3) Появление имени-файла-1 в операторе USE (ИСПОЛЬЗОВАТЬ) не должно требовать одновременного выполнения более чем одной декларативной секции.
    (4) Слова ERROR и EXCEPTION обозначают особую ситуацию и являются синонимами.
    (5) Файлы, к которым явно или неявно обращаются в операторе USE (ИСПОЛЬЗОВАТЬ), могут иметь различную организацию или доступ.
    (6) Каждая из фраз INPUT (ВХОДНЫХ), OUTPUT (ВЫХОДНЫХ), I-O (ВХОДНЫХ-ВЫХОДНЫХ) и может указываться лишь раз в декларативной части раздела процедур.
    4.6.4.Общие правила
    а) если указано имя-файла-1, то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ);
    б) если указано INPUT (ВХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода, или же в процессе открытия для ввода, за исключением файлов, указываемых именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
    в) если указано OUTPUT (ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для вывода, или же в процессе открытия для вывода, за исключением файлов, указываемых именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие.
    г) если указано I-O (ВХОДНЫХ-ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода-вывода или в процессе открытия для ввода-вывода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
    д) если указано EXTEND (ДОПОЛНЯЕМЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для дополнения или процессе открытия для дополнения, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие.

    (6) После выполнения процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), управление передается вызывающей программе в системе управления вводом-выводом. Если значение состояния ввода-вывода не указывает на критическую ошибку ввода-вывода, то система управления вводом-выводом возвращает управление оператору, следующему за оператором ввода-вывода, выполнение которого вызвало ошибку. Если значение состояния ввода-вывода указывает на критическую ошибку, то действие определяется реализацией.
    (7) В процедуре, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), не должны выполняться никакие операторы, которые могут потребовать выполнения процедуры, связанной с другим оператором USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.
    (1) Декларативные процедуры могут быть включены в любую исходную Кобол-программу, независимо от того, содержит ли эта программа другую программу или сама содержится в другой программе. Декларатива вызывается тогда, когда во время выполнения программы выполняются условия, описанные в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Только одна декларатива внутри отдельно скомпилированной программы, содержащей оператор, который вызвал уточняющее условие, вызывается тогда, когда выполняется какое-либо из условий, описанных в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе, во время выполнения программы. Если не существует уточняющей декларативы в отдельно скомпилированной программе, то декларатива не выполняется.
    (2) Внутри декларативной процедуры не должно быть обращений к каким-либо процедурам вне декларативной части раздела процедур.
    (3) К именам процедур, связанных с оператором USE (ИСПОЛЬЗОВАТЬ), могут быть обращения в другой декларативной секции или в недекларативной процедуре только оператором PERFORM (ВЫПОЛНИТЬ).
    (4) Когда имя-файла-1 описано явно, то к имени-файла-1 не применяется никаких других операторов USE (ИСПОЛЬЗОВАТЬ).
    (5) Процедуры, связанные с оператором USE (ИСПОЛЬЗОВАТЬ), выполняются системой управления вводом-выводом после завершения стандартной программы ошибки ввода-вывода при неудачном выполнении операции ввода-вывода, если только не сработает фраза AT END (В КОНЦЕ). При выполнении процедур соблюдаются следующие правила:
    4.7.Оператор WRITE (ПИСАТЬ)
    4.7.1.Назначение
    Оператор WRITE (ПИСАТЬ) включает логическую запись в выходной файл. Он используется также для вертикального позиционирования строк на логической странице.

    4.7.3.Синтаксические правила
    (1) Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
    (2) Имя-записи-1 является именем логической записи в секции файлов раздела данных и может быть уточнено.
    (3) Фраза ADVINCING (ПРОДВИЖЕНИЯ) мнемоническое-имя-1 не может быть указана для файла, который связан со статьей описания файла, содержащей фразу LINAGE (ВЕРСТКА).

    (4) Идентификатор-2 должен относиться к элементарному целому данному.
    (5) Целое-1 может быть положительным числом или нулем, но не должно быть отрицательным.
    (6) Когда специфицируется мнемоническое-имя-1, то имя связывается с особым свойством, описанным реализацией. Мнемоническое-имя-1 определяется в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования. (7) Фразы ADVANCING (ПРОДВИЖЕНИЯ СТРАНИЦЫ) и END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) не должны быть специфицированы в одном операторе WRITE (ПИСАТЬ). (3) Если указана фраза END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) или NOT END-OF-PAGE (HE В КОНЦЕ СТРАНИЦЫ), то фраза LINAGE (ВЕРСТКА) должна быть указана в статье описания соответствующего файла. (9) Слова END-OF-PAGE и ЕОР являются эквивалентами.

    4.7.4.Общие правила
    (1) Файл, указанный именем-файла, связанным с именем-записи-1, должен быть открыт для вывода ко времени выполнения этого оператора (см. п.4.3.1 настоящей части).