*-Д в%щ восстановление после переполнения =пуст:

(возбуд Д вещ переполнение; закончить),

Д восстановление после потери значимости = пуст:

(возбуд Д потеря значимости; закончить),

*-Д цел восстановление после ошибки аргумента = пуст: (возбуд Д цел ошибка аргумента; закончить),

Д вещ восстановление после ошибки аргумента =пуст: (возбуд Д вещ ошибка аргумента; закончить);

  1. проц восстановление после ошибки присваивания = (имямассива получатель, массив источник, цел п, і) пуст:

(присит образец получателя: массив:

с некоторый массив, паспорт которого идентичен паспорту значения, именуемого именем, выдавае­мым идентификатором 'получатель' с,

образец массива:массив:

с некоторый массив, паспорт которого идентичен паспорту значения, выдаваемого идентификатором источник' с,

вырезано из: (имямассива г г), лог:
если с имя, выдаваемое идентификатором 'г г',

не было сгенерировано {2.1.3.4.j, 1} из другого имени с

то с истина, если любое подыми имени, выдаваемого иден­тификатором 'получатель', является подыменем имени, выдаваемого идентификатором 'г г', или же может быть получено из такого подымени в резуль­тате выполнения одной или нескольких последова­тельных операций выборкипо 'СЛОВУ' {2.1.3.3.е}; ложь в противном случае с

иначе пропуск все.размерность:.цел: п;

возбуд ошибка присваивания (і);

закончить); . •

  1. проц ^восстановление после ошибки границы =

(массив значение, цел п, і, граница) пуст:

(присит образец массива: массив:

с некоторый массив, паспорт которого идентичен паспорту значения, выдаваемого идентификатором 'значение' с.

вырезано из: (имямассива гг) лог: пропуск, размерность: цел: п, это имя: лог: ложь;

цел Ь: = граница;

возбуд ошибка границы (i, b);

Ь);

  1. проц*-восстановление после ошибки границы имени = (имямассива имя, цел п, і, граница) пуст: (присит образец массива: массив:

с некоторый массив, паспорт которого идентичен паспор­ту значения, именуемого именем, выдаваемым иденти­фикатором имя' с,

вырезано из: (имямассива г г) лог:

если с имя, выдаваемое идентификатором 'гг', не было сгенерировано {2.1.3.4. j, 1} из другого имени с

то с истина, если любое подыми имени, выдаваемого идентификатором 'имя', является подыменем име­ни, выдаваемого идентификатором 'г г', или же мо­жет быть получено из такого подымени в результате выполнения одной или нескольких последователь­ных операций выборки по 'СЛОВУ' <2.1.3.3.е};

ложь в противном случае с

иначе пропуск все.

размерность: цел: п.
это имя: лог: истина;

цел Ь: = граница;

возбуд ошибка границы (i, b);

Ь);

  1. проц восстановление после ошибки записи массива = ([ ] массив образец, цел п) пуст:

(присит список образцов массива: ( ] массив: образец, размер­ность: цел: п;

возбуд ошибка записи массива;

закончить)

  1. ;проц ^восстановление после ошибки псевдоимени = пуст: (возбудошибка псевдоимени; закончить);

  2. проц восстановление после ошибки области действия = пуст: возбуд ошибка области действия; закончить);

п) процвосстановление после тупика =

(сема s) пуст: (возбуд тупик (s); закончить);

  1. ситуация лог-ч-рекурсия общей ситуации; {см. 10.5.1.1} проц ^-восстановление после общей ситуации = пуст: если рекурсия общей ситуации

то возбуд немедленное окончание

иначе присит рекурсия общей ситуации: лог: истина; закончить

все;

  1. проц ^-восстановление после исчерпания времени -• пуст: (возбуд исчерпание времени; закончить) ;

  2. проц «-восстановление после исчерпания памяти = пуст: (возбуд исчерпание памяти; закончить);

10.3. О п и с а н и я обмена

Прагматическое замечание соответствует ГОСТ 27974.

  1. Книгу, каналы и файлы

Прагматическое замечание соответствует ГОСТ 27974.

  1. Книги и связки определены в ГОСТ 27974.

  2. Каналы определены в ГОСТ 27974.

  3. Файлы.

Прагматические замечания аа, bb, dd, ее, ff, gg, hh соответствуют ГОСТ 27974.

{сс) Файл включает некоторые „процедуры обработки события”, вы­зываемые, когда во время обмена возникают определенные условия. По умолчанию предусматривается, что после открытия файла эти процедуры обработки события вырабатывают ложь, когда они вызываются, но прог­раммист может предусмотреть и другие процедуры обработки события. Поскольку соответствующие поля файла не доступны прямо для пользо­вателя, процедуры обработки события можно изменять с помощью „проце­дур реакции” (1, т, п, о, р, q, г). Процедуры обработки события всегда задают в качестве параметра имя своего файла. Если исполнение процедуры обра­ботки события прекращается, то вызвавшая ее процедура обмена не может действовать дальше: в противном случае, если она вырабатывает истину, предполагается, что данное условие было некоторым образом исправлено, и, если возможно, обмен продолжается, но, если процедура реакции вырабаты­вает ложь, то предпринимается еще одна попытка восстановления путем воз­буждения соответствующей ситуации. Это приводит к вызову еще одной процедуры, аналогичной по назначению процедуре реакции, но связанной '. текущим окружением, а не с данным файлом. Если же и эта процедура вы рабатывает ложь, система продолжает работу, предпринимая действия но умолчанию. Процедуры реакции таковы:• при конце лог файла. Соответствующая процедура обработки собы­тия вызывается, когда в ходе ввода или в результате вызова уста­новить достигается логический конец соответствующей книги (см. 10.3.1.6.dd).

Пример:

Программист хочет знать количество целых чисел на входной ленте. Файл лента ввода был открыт во внешнем блоке.

Если он напишет

начало цел п: =0;

при конце лог файла (лента ввода, (имя файл файл) лог: на f);

цк ввод (лента ввода, лок цел); п + : = 1 кц;

f: печ (п) конец,

то такое присваивание соответствующему полю из файла лента ввода нарушит ограничения на области действия, поскольку область действия процедуры (имя файл файл) лог: на f меньше области действия файла лента ввода. Поэтому ему следует написать

начало цел п: =0; файл вспомог: = лента ввода;

при конце лог файла (вспомог, (имя файл файл) лог: на f);

цк ввод (вспомог, лог цел); п + : = 1 кц;

f: печ (п) конец.

  • при конце физ файла. Соответствующая процедура обработки собы­тия называется, когда текущий номер страницы данного файла превы­шает число страниц в соответствующей книге, а обмен пытаются про­должить (см. 10.3.1.6.dd).

  • при конце страницы. Соответствующая процедура обработки события вызывается, когда текущий номер строчки данного файла превышает число строчек на текущей странице, а обмен пытаются продолжить (см. 10.3.1.6.dd).

  • при конце строчки. Соответствующая процедура обработки события вызывается, когда текущий номер литеры данного файла превышает число литер в текущей строчке, а обмен пытаются продолжить (см. 10.3.1.6.dd).

Пример:

Программист хочет, чтобы на начале каждой страницы его файла f авто­матически печатался заголовок:

при конце страницы (f, (имя файл файл) лог:

(вывод (файл, (нов страница, ”стр.” целое (i+ : = 1,0), нов строчка)); истина)

предполагается, что і было где-то описано jf)

  • при ошибке литеры. Соответствующая процедура обработки события вызывается, когда перекодирование некоторой литеры не было успеш­ным или когда в ходе ввода читается не „ожидаемая” (10-3.4.1.11) ли­тера. Эта процедура обработки события вызывается с именем литеры, предлагаемой в качестве замены. Процедура обработки события, зада­ваемая программистом, может присваивать литеру, отличную от пред­лагаемой. Если данная процедура обработки события вырабатывает истина, то используется эта предлагаемая литера с возможным ее из­менением.

Пример:

Программист хочет читать суммы денег, отперфорированные в форме ”$123.45”,’L$23.45”,"c.—$3.45” и т.д.:

при ошибке литеры (станд ввод, (имя файл f, имя лит пред) лог:

если пред =” 0”

то лит с; назад (f); ввод (f, с);

(с=”$” Іввод (f, пред); истина I ложь) иначе ложь все);

цел центы; ф чит ((ф 3z”. ” dd ф, центы)).

• при ошибке значения. Соответствующая процедура обработки события вызывается, когда:

  1. в ходе форматного обмена делается попытка обмена какого-нибудь значения под контролем некоторого „шаблона”, с которым оно не­совместимо, или когда число „рамок” недостаточно. Если эта про­цедура вырабатывает истина, то текущие значение и шаблон пропус­каются и обмен продолжается; если же процедура вырабатывает ложь, то вызывается не определено, перед которым при выводе вы­водится значение при помощи процедуры вывод;

  2. в ходе ввода оказывается-невозможным преобразовать строку в зна­чение некоторого данного вида (это может случиться, например, при попытке прочитать целое число, большее, чем макс цел (10.2.1.С)).

• при конце формата. Соответствуюшая процедура обработки события вызывается, когда в ходе форматного обмена формат исчерпывается, в то время как еще остается некоторое значение, подлежащее обмену. Если данная процедура вырабатывает истина, то в случае когда она не обеспечила нового формата для этого файла, вызывается не определе­но, а иначе повторяется текущий формат.

Описания a, b, с, d, е, f, g, h, і, j, k, 1, m, n, o, p, q, r, s соответствуют ГОСТ 27974;

t) ситуация (имя файл) лог конец лог файла, (имя файл) лог конец физ файла, (имя файл) лог конец страницы, (имя файл) лог конец строчки, (имя файл) лог конец формата, (имя файл) лог ошибка значения, ситуация (имя файл, имя лит) лог ошибка литеры;

ситуация (имя файл) лог logical file end,

(имя файл) лог physical file end,

(имя файл) лог page end,

(имя файл) лог line end,

(имя файл) лог format end,

(имя файл) лог value error, ситуация (имя файл, имя лит) лог char error; присит logical file end:

(имя файл f) лог: возбуд конец лог файла (f),

physical file end:

(имя файл f) лог: возбуд конец физ файла (f),

page end:

(имя файл f) лог: возбуд конец страницы (f), line end:

(имя файл f) лог: возбуд конец строчки (f),

format end:

(имя файл f) лог: возбуд конец формата (f), value error:

(имя файл f) лог: возбуд ошибка значения (f), char error:

(имя файл f, имя лит с) лог: возбуд ошибка литеры (f, с); и) проц вконец лог файла исправлен = (имя файл f) лог:

если (испр лог файл из f) (f) то истина иначе возбуд конец лог файла (f)

все;

проц «• конец физ файла исправлен = (имя файл f) лог:

если (испр физ файл из f) (f) то истина иначе возбуд конец физ файла (f)

все;

проц^конец страницы исправлен = (имя файл f) лог:

если (испр страница из f) (f) то истина иначе возбуд конец страницы (f)

все;

процъконец строчки исправлен = (имя файл f) лог:

если (испр строчка из 0 (f) то истина

иначе возбуд конец сторочки (f)

все;

проц вконец формата исправлен = (имя файл f) лог:

если (испр формат из f) (f) то истина

иначе возбуд конец формата (f)

все;

проц ^ошибка значения исправлена = (имя файл f) лог:

если (испр ошибка значения из f) (f) то истина иначе возбуд ишибка значения (f)

все;

проц ^ошибка литеры исправлена = (имя файл f, имя лит с) лог: если (испр ошибка литеры из f) (f, с), то истина иначе возбуд ошибка литеры (f, с)

все;

  1. . Открытие и закрытие файлов соответствуют ГОСТ 27974.

  2. . фапросы позиции соответствуют ГОСТ 27974.

  3. . Процедуры расположения.

Прагматические замечания и описания a, b, с, d, h, j, к, соответствуют ГОСТ 27974.

  1. проц ^строчка хороша = (имя файл Слог чтение) лог:

начало лог не оконч;

пока не оконч: = страница хороша (f, чтение);

строчка окончена (f) д не оконч

цк ( -> конец строчки исправлен (f) I настроить (f, чтение); нов строчка (f)) кц;

не оконч

коне":

  1. проц*страница хороша = (имя файл f, лог чтение) лог:

начало лог не оконч;

пока не оконч: =файл хорош (f, чтение);

страница окончена (f) Д не оконч

цк (—• конец страницы исправлен (f) I настроить (f, чтение);

нов страница (f)) кц;

не оконч

конец;

  1. процч-файл хорош = (имя файл Слог чтение) лог:

начало лог не оконч: = истина;

пока настроить (f, чтение);

не оконч Д

(чтение лог I файл оконч I физ файл окончен) (f)

цк не оконч: = (чтение I конец лог файла исправлен I конец физ файла исправлен) (f) кц;

не оконч

конец;

  1. проц установить = (имя файл f, цел р, 1 с) пуст:

если -п открыт из f V

-- возм установка (f) то не определено

иначе лог чтение = (для чтения из f I истина

I: для записи из f I ложь I не определено;

пропуск);

имя позиция тпоз = тпоз из f, ппоз = заполн из книга из f; позиция раб тпоз =тпоз;

если (тпоз: = (р, 1, с)) вне ппоз

то тпоз: =ппоз;

( -> конец лог файла исправлен (f) I не определено);

настроить (f, чтение)

инее позиция границы =границы книги (f);

р < 1 V р > р из границы + 1 V

1 < 1 V 1 > 1 из границы + 1 V

с < 1V с > с из границы + 1 то тпоз: =раб тпоз; не определено все

все;

проц (имя файл, цел, цел, цел) пуст set =установить;

  1. Значения для обмена соответствуют ГОСТ 27974.

  2. Бесформатный обмен

<При бесформатном обмене элементы „списка данных” обмениваются один за другим через заданный файл. Каждый элемент этого списка данных является либо процедурой расположения, вид которой специфицируется проц (имя файл) пуст (10.3.1.6), либо значением вида, специфицируемого посредством выводимое (при выводе) или вводимое (при вводе). Когда процедура расположения встречается в списке данных, она вызывается с заданным файлом в качестве параметра. Другие значения в списке данных сначала выстраиваются (10.3.2.3), а затем результирующие значения одно за другим обмениваются через заданный файл.

Обычно обмен происходит на текущей позиции, но если (при выводе) недостаточно места в текущей строчке или (при вводе) на текущей пози­ции нет читаемого значения, то сначала вызывается процедура конец строч­ки исправлен (или, где это целесообразно, конец страницы исправлен, ко­нец физ файла исправлен и., и конец лої файла исправлен), а. затем, если она вырабатывает ложь, в данной книге ищется следующая „хорошая” позиция литеры, а именно первая позиция литеры в следующей непустой строчке.}