Перейти до вмісту
ГОСТ 22558-89
/ 116

Особенно затруднительна семантика в ГОСТ 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 устанавливал, что определенные критерии должны вы­полняться, но не устанавливал, что произойдет, если они не выполнены; таким образом, выполнение программы становилось неопределенным.

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

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

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

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

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

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

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

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

Обоснование

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

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

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

Обоснование

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

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

Состояние ввода-вывода = 07. Оператор ввода-вывода выполнен успеш­но. Тем не менее файл, на который ссылается оператор CLOSE (ЗАКРЫТЬ) с вариантом WITH NO REWIND (БЕЗ ПЕРЕМОТКИ), REEL/UNIT (КАТУШ-

'КУ/ТОМ) или FOR REMOVAL (С УДАЛЕНИЕМ), или оператор OPEN (ОТ­КРЫТЬ) с вариантом NO REWING (БЕЗ ПЕРЕМОТКИ), находится на носите­ле данных, к которому неприменимо понятие катушка (том).

Обоснование

' Соответственно ГОСТ 22558 оператор OPEN (ОТКРЫТЬ) с вариантом NO REWIND (БЕЗ ПЕРЕМОТКИ) может быть использован только для последова­тельных файлов на одной катушке (томе), и оператор CLOSE (ЗАКРЫТЬ) с ва­риантом NO REWIND (БЕЗ ПЕРЕМОТКИ), REEL/UNIT (КАТУШКУ/TOM) или FOR REMOVAL (С УДАЛЕНИЕМ) неприемлем для файлов, находящихся на носителе, к которому неприменимы понятия катушки и тома. Поэтому для фай­лов массовой памяти эти образцы операторов OPEN (ОТКРЫТЬ) и CLOSE (ЗА­КРЫТЬ) могут рассматриваться в сущности как успешные, если пересмотрены аномалии фраз NO REWIND (БЕЗ ПЕРЕМОТКИ), REEL/UNIT (КАТУШКУ/ /ТОМ) или FOR REMOVAL (С УДАЛЕНИЕМ). Новое значение 07 состояния ввода-вывода делает возможным успешное завершение, сохраняя в то же время информацию для пользователя, и предоставляя возможность предпринять опре­деленные действия.

Состояние ввода-вывода = 14. Попытка выполнения последовательного оператора READ (ЧИТАТЬ) для относительного файла и число значащих цифр в относительном номере записи больше данного относительный ключ, описанного для этого файла.

Обоснование

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

Состояние ввода-вывода = 24. Производится попытка писать за предела­ми внешне определенных границ относительного или индексного файла, или сде­лана попытка последовательного оператора WRITE (ПИСАТЬ) и число знача­щих цифр в относительном номере записи больше размера данного относитель­ный ключ, описанного для этого файла.

Обоснование

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

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

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

Состояние ввода-вывода = 35. Попытка выполнения оператора OPEN (ОТКРЫТЬ) с вариантом INPUT (ВХОДНОЙ) для файла, не определенного как необязательный, которого нет в наличии.

Обоснование

ГОСТ 22558 требует обязательного указания фразы OPTIONAL (НЕОБЯ­ЗАТЕЛЬНОГО) для входных файлов, которые могут отсутствовать в определен­

ные моменты выполнения объектной программы. При этом не определено, что может случиться, когда файл, не объявленный необязательным, отсутствует. Но­вое значение 35 состояния ввода-вывода позволяет пользователю проверять это условие.

Состояние ввода-вывода = 37. Попытка выполнения оператора OPEN (ОТКРЫТЬ) для файла, который должен быть файлом массовой памяти, но не является таковым.

Обоснование

Это новое значение состояния ввода-вывода сообщает, что: (1) предпринята . попытка выполнения оператора OPEN 1-0 (ОТКРЫТЬ ВХОДНОИ-ВЫХОД­НОЙ) для файла не массовой памяти, или (2) предпринята попытка выполне­ния оператора OPEN (ОТКРЫТЬ) для файла пе-массовой памяти, объявленного в программе как относительный или индексный файл.

ГОСТ 22558 не определяет, что происходит при таких обстоятельствах. Но­вое значение 37 состояния ввода-вывода позволяет пользователю проверять это условие ошибки.

Некоторые реализации обеспечивают расширение использования операторов OPEN 1-0 (ОТКРЫТЬ ВХОДНОИ-ВЫХОДНОЙ) для доступа к терминалам. Такое расширение может быть устранено новым значением 37 состояния ввода- вывода.

Состояние ввода-вывода = 38. Попытка выполнения оператора OPEN (ОТКРЫТЬ) для файла, предварительно закрытого с замком.

Обоснование

ГОСТ 22558 указывает, что реализация должна обеспечить, чтобы файл, за­крытый с замком, не мог быть открыт опять во время текущего выполнения еди­ницы исполнения, но не определяет, что случится, если сделана попытка вновь открыть этот файл. Новое значение 38 состояния ввода-вывода позволяет поль­зователю проверять это условие.

Состояние ввода-вывода = 39. Оператор OPEN (ОТКРЫТЬ) неуспешен из-за конфликтных свойств файла (несоответствие между фиксированными свой­ствами файла и свойствами файла, указанными в программе).

Побачили розбіжність з офіційним текстом?

Повідомити про неточність

Напишіть, що саме розходиться з офіційною публікацією. Код документа вкажіть у повідомленні — так ми швидше знайдемо потрібне місце.

Перейти до форми зворотного зв'язку

Дивіться також

Весь розділ →