01 Д Ш XX.

01 Е Ш Х(30).

РАЗДЕЛ ПРОЦЕДУР.

РАЗОБРАТЬ А ОГРАНИЧИВАЯСЬ СІ (ПТР) В ВВ, Е УКАЗАТЕЛЬ ПТР.

Согласно правилам ГОСТ 22558 ограничитель Cl (PTR) (С1 (ПТР)) будет опять рассматриваться перед перемещением второй строки в Е, в то время как по новым правилам в настоящем стандарте Кобола Cl (PTR) (С1 (ПТР)) рас­сматривается только один раз перед просмотром пересылаемых полей. Таким образом, ограничители никогда не меняются во время всего процесса разбора.

Хотя по ГОСТ 22558 любое индексирование, связанное с ограничителем, вы­числяется непосредственно перед пересылкой данного в соответствующее данное, это приводит к ошибке, поскольку ограничитель должен быть определен до про­смотра пересылаемого поля, и поэтому не может вычисляться непосредственно перед пересылкой. Таким образом, это изменение в установленных правилах поз­воляет вычисление ограничителей в соответствующее время так, как это делают некоторые имеющиеся реализации при обработке оператора UNSTRING (РА­ЗОБРАТЬ).

Для того чтобы эти изменения повлияли на программу, идентификатор в ва­рианте INTO (В) оператора UNSTRING (РАЗОБРАТЬ) должен перекрывать индекс ограничителя. Такое программирование некорректно и это изменение от­разится только на немногих программах, если таковые имеются.

  1. Оператор WRITE (ПИСАТЬ) (2 ПОД).

В одном и том же операторе WRITE (ПИСАТЬ) не могут быть одновремен­но определены фразы ADVANCING PAGE (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ СТРАНИЦЫ) и END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ).

Обоснование

В ГОСТ 22558 допускается указание обеих фраз в одном и том же операто­ре WRITE (ПИСАТЬ). Тем не менее нет правил, определяющих порядок их об­работки. Следовательно, обработка определяется реализацией.

Обе фразы ADVANCING PAGE (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ СТРАНИ­ЦЫ) и END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) позволяют управлять верти­кальным позиционированием печатаемой страницы. Продвижение страницы сред­ствами фразы ADVANCING PAGE (ДО/ПОСЛЕ ПРОДВИЖЕНИЯ СТРАНИ­ЦЫ) осуществляется в соответствии с техникой, определяемой реализацией. В то же время продвижение страницы средствами фразы END-OF-PAGE (В КОН­ЦЕ СТРАНИЦЫ) является техникой, определяемой пользователем. Поэтому было решено разделить эти разные техники.

Хотя допускалось одновременное использование этих вариантов соответст­венно ГОСТ 22558, этим пользовались мало реализаций. Поэтому на имеющиеся программы это изменение повлияет в минимальной степени.

  1. Указатель позиции файла (1 ПОД, 1 ОТД, 1 ИПД). Понятие указате­ля текущей записи в ГОСТ 22558 изменено на указатель позиции файла.

Обоснование

В настоящем стандарте Кобола правила, основанные на указателе позиции файла, усилены и облегчены для понимания. Кроме того, для сочетания обновле­ния и операторов READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) указатель текущей записи в ГОСТ 22558 сложен и не всегда приводил к интуитивно ожидаемому результату. Правила указателя текущей записи также недостаточно определены в отдельных случаях, когда указываемая запись становится недоступной.

Это изменение в понятиях может повлиять на программы только в двух слу­чаях, описанных в пунктах (37 и 38). Они могут встретиться только в очень не­обычной последовательности операций над файлами при динамическом доступе.

  1. Указатель позиции файла (2 ОТН, 2 ИПД). Для относительного или индексного файла при динамическом доступе выполнение оператора OPEN 1-0 (ОТКРЫТЬ ВХОДНОЙ-ВЫХОДНОЙ), за которым следуют один или более операторов WRITE (ПИСАТЬ) с последующим оператором READ NEXT (ЧИ­ТАТЬ СЛЕДУЮЩУЮ), приведет к тому, что оператору READ (ЧИТАТЬ) бу­дет доступна первая запись в файле во время выполнения оператора READ (ЧИТАТЬ).

Обоснование

В ГОСТ 22558 эта последовательность приводит к тому, что оператору READ (ЧИТАТЬ) доступна первая запись во время выполнения оператора OPEN (ОТ­КРЫТЬ). Если один из операторов WRITE (ПИСАТЬ) вставляет запись с клю­чом или относительным номером записи ниже, чем любые записи, имеющиеся в файле, оператору READ (ЧИТАТЬ) была бы доступна запись, отличная от пер­вой.

Считается более логичным, чтобы при выполнении первого оператора READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) после оператора OPEN (ОТКРЫТЬ) доступ­ной записью была бы первая запись в файле во время выполнения оператора READ (ЧИТАТЬ).

Семантика в настоящем стандарте ставит на один уровень ситуацию, возни­кающую после оператора OPEN (ОТКРЫТЬ), и ситуацию, возникающую после оператора READ (ЧИТАТЬ). В последнем случае, если оператор WRITE (ПИ­САТЬ) вставляет запись с ключом таким, что она следует непосредственно за последней прочитанной записью, следующий оператор READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) получит вставленную запись.

Особенно затруднительна семантика в ГОСТ 22558, когда в дополнение к вставкам начальная первая запись удаляется между оператором OPEN (ОТ­КРЫТЬ) и оператором READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ).

Указатель позиции файла (2 ИПД). Если дополнительный ключ явля­ется ключом ссылки и дополнительный ключ изменяется оператором REWRITE 778(ОБНОВИТЬ) в значение между текущим значением и следующим значением в ■файле, следующий оператор READ NEXT (ЧИТАТЬ СЛЕДУЮЩУЮ) получит ту же запись.

Обоснование

В ГОСТ 22558 следующий оператор READ (ЧИТАТЬ) получил бы запись со следующим значением для того дополнительного ключа до оператора REWRITE (ОБНОВИТЬ).

Логически согласовано, что последующий оператор READ (ЧИТАТЬ) полу­чает «ту же» запись, поскольку эта запись в тот момент является первой имею­щейся записью в файле, значение ключа которой больше значения ключа записи, ставшей доступной посредством последнего оператора READ (ЧИТАТЬ). В сущ­ности это не «та же» запись, которая была доступна последнему оператору READ (ЧИТАТЬ), поскольку значение дополнительного ключа и возможно другие зна­чения уже изменены.

Семантика стандарта Кобола для этой ситуации была предметом требова­ний для разъяснения и приведена в документах интерпретации X3J4.

(39) Зарезервированные слова (1 Я ДР). Добавлены следующие

зарезервированные слова:


ALPHABET

АЛФАВИТ

ALPHABETIC-LOWER

СТРОЧНЫЕ

ALPHABETIC-UPPER

ПРОПИСНЫЕ

ALPHANUMERIC

ВЦ

ALPHANUMERIC EDITED

БЦР

ANY

ЛЮБОЕ

BINARY

ДВОИЧНОЕ

CLASS

КЛАСС

COMMON

ОБЩАЯ

CONTENT


CONTINUE

ПРОДОЛЖИТЬ

CONVERTING

ПРЕВРАЩАЯ

DAY-OF-WEEK

ДЕНЬ-НЕДЕЛИ

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

КОНЕЦ-ПИСАТЬ

EVALUATE

ОЦЕНИТЬ

EXTERNAL

ВНЕШНЕЕ

FALSE

ЛОЖЬ

GLOBAL

ГЛОБАЛЬНОЕ, ГЛОБАЛЬНО

INITIALIZE

ИНИЦИИРОВАТЬ

NUMERIC-EDITED

ЧР

ORDER

O

ОЧИСТИТЬ ССЫЛКУ ЗАМЕНИТЬ СТАНДАРТ-М ПРОВЕРКОЙ ЗАТЕМ ИСТИНА

ДЕСЯТИЧНОЕ

THER

PACKED-DECIMAL

PADDING

PURGE REFERENCE REPLACE STANDARD-2

TEST THEN TRUE

Обоснование

В каждом случае предполагается, что польза, получаемая от дополнитель­ных возможностей, обеспечиваемых добавлением каждого зарезервированного слова, перевешивает неудобства, возникающие из переноса этого слова из сфе­ры слов, определенных пользователем. Предполагается, что применение нового оператора REPLACE (ЗАМЕНИТЬ) смягчит неудобства для имеющихся про­грамм, которые могут использовать любое из новых зарезервированных слов как слово пользователя.

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

ADD А ТО В С CONTINUE

СЛОЖИТЬ А С Б Е ПРОДОЛЖИТЬ

Предполагая, что нет зарезервированных слов, невозможно определить, яв­ляется ли CONTINUE (ПРОДОЛЖИТЬ) принимающим полем для ADD (СЛО­ЖИТЬ) или оператором CONTINUE (ПРОДОЛЖИТЬ). Также невозможно оп­ределить, является ли ТО (С) принимающим полем, и оператор синтаксически неверен.

Если бы в синтаксисе Кобола были ограничители операторов, которые не­обходимы, приведенный выше пример можно было бы переписать так:

ADD А ТО В С; CONTINUE

СЛОЖИТЬ А С Б Е; ПРОДОЛЖИТЬ

где ясно, что CONTINUE (ПРОДОЛЖИТЬ) не является частью оператора ADD (СЛОЖИТЬ). Тем не менее в синтаксисе Кобола нет ограничителей оператора; требование ограничителей добавило бы значительно большую несовместимость.

Другим возможным решением было бы, чтобы компилятор проверял до син­таксического разбора оператора каждое зарезервированное слово, не использо­вано ли оно как определенное пользователем. Однако это привело бы к большим потерям в терминах сложности компилятора и скорости компилирования.

Добавление нескольких зарезервированных слов для новых возможностей является значительно менее серьезной несовместимостью, чем несовместимость, вызываемая устранением всех зарезервированных слов из Кобола.

Итак, зарезервированные слова продолжают использоваться в новейших языках. Например, Паскаль и Ада, оба развивающиеся и возникшие после Кобо­ла, также используют зарезервированные слова.

(40) Состояние ввода-вывода (1 ПОД, 1 ОТД, 1 ИПД). Добавлены новые значения состояния ввода-вывода.

Обоснование

В стандарте Кобола определены только несколько кодовых условий состоя­ния ввода-вывода. В результате пользователь не мог установить среди многих различных ошибочных условий те, которые он хотел бы обрабатывать разными способами и/или каждая реализация определяла свое множество кодов состоя­ния, которое покрывало разные ситуации разными способами. Кроме того, ГОСТ 22558 оставлял результаты многих ситуаций ввода-вывода неопределенными; это значит, что ГОСТ 22558 устанавливал, что определенные критерии должны вы­полняться, но не устанавливал, что произойдет, если они не выполнены; таким образом, выполнение программы становилось неопределенным.

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

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

  1. если они относятся к состоянию успешного завершения для любого из условий, определяемых в настоящее время. (В случаях новых значений состоя­ния ввода-вывода 04, 05 и 07 это влияет только на программы, которые про­сматривают обе позиции литеры состояния ввода-вывода для проверки на ус­пешное выполнение;

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

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

Нужно отметить, что предыдущий стандарт Кобола не обеспечивал всех ко­дов состояния.

Отдельные часто употребляемые значения состояния ввода-вывода описаны в следующих пунктах.

  1. Состояние ввода-вывода-04. Оператор READ (ЧИТАТЬ) выполнен ус­пешно, но длина обрабатываемой записи не соответствует фиксированным свой­ствам этого файла.

Обоснование

ГОСТ 22558 не определял последствия, если оператору READ (ЧИТАТЬ) до­ступна запись, содержащая соответственно больше или меньше литер, чем мак­симум или минимум для этого файла. Поэтому результат чтения такой записи не определен. Новое значение 04 состояния ввода-вывода сообщает пользователю о такой ситуации.

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

  1. Состояние ввода-вывода = 05. Оператор OPEN (ОТКРЫТЬ) выполнен успешно, но необязательного файла, на который ссылаются, нет в наличии во время выполнения оператора OPEN (ОТКРЫТЬ).

Обоснование

Соответственно ГОСТ 22558 об отсутствии необязательного файла програм­ме не сообщается до первого выполнения оператора READ (ЧИТАТЬ) для это­го файла. Новое значение состояния ввода-вывода 05 дает определенную и до­ступную информацию при ссылке на файл в операторе OPEN (ОТКРЫТЬ), поз­воляя программе предпринимать более конкретные действия соответственно это­му условию.

Это может повлиять только на программы, которые используют второй уро­вень фразы OPTIONAL (НЕОБЯЗАТЕЛЬНОГО) в модуле последовательного ввода-вывода и которые просматривают обе позиции литеры данного состояния ввода-вывода для проверки на успешное завершение оператора OPEN INPUT (©ТКРЫТЬ ВХОДНОЙ).