[повелительный-оператор-1 END-PERFORM]
ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2] ]
Ф
(THROUGH
I THRU
ормат 2PERFORM [имя-процедуры-1 [
и
идентификатор-1 целое-1
мя-процедуры-2] ]TIMES [повелительный-оператор-1
END-PERFORM] ■.
ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2]]
{
[повелительный-оператор-1 КОНЕЦ-ВЫПОЛНИТЬ]
Ф
UNTIL условие-1
(THROUGH [THRU
ормат 3PERFORM [имя-процедуры-1
имя-процедуры-2] ]
Г WITH TFQT і BEF°RE 1 ]
[WITH test|after [ I
[повелительный-оператор-l END-PERFORM]
ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2]]
ДО условие-1
{НДЧА ПР 1
КОНЦЕ I
[повелительный-оператор-1 КОНЕЦ-ВЫПОЛНИТЬ]
Ф
I THROUGH
I THRU
ормат 4PERFORM [имя-процедуры-
1
VARYING ! “^нтификатор-2
1 имя-индекса-1
B
идентификатор-3 имя-индекса-2 литерал-1
FROM
Y I идентификатор! I UNT|Lе4имя-индекса-4 идентификатор-6 литерал-3
FROM
идентификатор-5 имя-индекса-3
AFTER
BY I , r J UNTIL условие-2
— ( литерал-4 J
[ повел ительный-оператор-1 END-PERFORM]
ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2] ]
идентификатор-6 имя-индекса-4 литерал-3
идентификатор-5 имя-индекса-3
ЗАТЕМ
идентификатор-3 имя-индекса-2 литерал-1
НАЧАЛЕ)
КОНЦЕ I
С ПРОВЕРКОЙ В
МЕНЯЯ ( Ше"™фИК2Т' ) ОТ
[ имя-индекса-1 |
„. идентификатор-4 „„ .
НА) „ ДО условие-1
[ литерал-2
11А идентификатор-7 ] о
НА { а } ДО условие-2 ...
[ литерал-4 J I
[повелительный-оператор-1 КОНЕЦ-ВЫПОЛНИТЬ]
С и н т а к с и ч е с к и е правила
Если опущено имя-процедуры-1, должны быть определены повелительный-оператор-1 и фраза END-PERFORM (КОНЕЦ- ВЫПОЛНИТЬ), если определено имя-процедуры-1, не должны употребляться повелительный-оператор-1 и фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ).
При использовании формата 4, если опущено имя-проце- дуры-1, не должна употребляться фраза AFTER (ЗАТЕМ)
.Если не указаны ни фраза TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ), ни фраза TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ), предполагается по умолчанию TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ).
Каждый идентификатор представляет числовое элементарное данное, описанное в разделе данных. В формате 2 идентификатор-1 представляет целое числовое элементарное данное.
Каждый литерал является числовым литералом.
Если указана фраза END-PERFORM (КОНЕЦ-ВЫПОЛ- НИТЬ), оператор PERFORM (ВЫПОЛНИТЬ) является оператором с ограничителем области действия.
Если во фразе VARYING (МЕНЯЯ) или AFTER (ЗАТЕМ) указано имя-индекса, то:
идентификатор, относящийся к фразам FROM (ОТ) и BY (НА), должен представлять положительное целое;
литерал, относящийся к фразе FROM (ОТ), должен представлять положительное целое;
литерал, относящийся к фразе BY (НА), должен представлять целое, отличное от нуля.
Если во фразе FROM (ОТ) задано имя-индекса, то:
идентификатор, относящийся к фразам VARYING (МЕНЯЯ) и AFTER (ЗАТЕМ), должен представлять целое;
идентификатор, относящийся к фразе BY (НА), должен представлять целое;
литерал, относящийся к фразе BY (НА), должен представлять целое.
Литерал во фразе BY (НА) не должен равняться нулю.
Условие-1, условие-2, ... могут быть любыми условными выражениями (см. п. 6.3 настоящей части).
Если указаны и имя-процедуры-1, и имя-процедуры-2 и какое-либо из них является именем-процедуры в декларативной части программы, то оба имени-процедуры должны быть имена- ми-процедур из одной и той же секции этой части.
I (12) Допускаются до шести фраз AFTER (ЗАТЕМ) в фор- I мате 4 оператора PERFORM (ВЫПОЛНИТЬ).
Общие правила
Значения данных, на которые ссылаются идентификатор-4 и идентификатор-7, не должны быть равными нулю.
Если в фразах VARYING (МЕНЯЯ) и AFTER (ЗАТЕМ) указано имя-индекса и в соответствующей фразе FROM (ОТ) задан идентификатор, то значение данного, на которое ссылается идентификатор, должно быть положительным.Если указано имя-процедурыЛ, оператор PERFORM (ВЫПОЛНИТЬ) называется оператором.с взнесенной областью действия; если имя-процедуры-1 не указано, оператор PERFORM (ВЫПОЛНИТЬ) называется оператором с встроенной областью действия.
Операторы, находящиеся в области действия имени-проце- дуры-1 (до имени-процедуры-2, если оно указано) для оператора PERFORM (ВЫПОЛНИТЬ) с вынесенной областью действия или содержащиеся внутри самого оператора PERFORM (ВЫПОЛНИТЬ) в случае оператора PERFORM (ВЫПОЛНИТЬ) с встроенной областью действия, будут называться указанным множеством операторов.
Фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ) ограничивает область действия оператора PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия (см. ч. 4, п. 6.4.3).
Оператор PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия функционирует аналогично оператору PERFORM (ВЫПОЛНИТЬ) с вынесенной областью действия согласно следующим общим правилам, за исключением того факта, что операторы, содержащиеся в операторе PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия, выполняются вместо операторов, принадлежащих области действия имени-процедуры-1 (до имени- процедуры-2, если оно указано). Если это специально не оговаривается, все общие правила равно применимы к оператору PERFORM (ВЫПОЛНИТЬ) со встроенной и вынесенной областью действия.
При выполнении оператора PERFORM (ВЫПОЛНИТЬ) управление передается первому оператору указанного множества операторов, кроме случаев, оговоренных общими правилами 106, 10в и 10г.
Эта передача управления выполняется один раз для каждого выполнения оператора PERFORM (ВЫПОЛНИТЬ). Для тех случаев, когда передача управления указанному множеству операторов имеет место, неявная передача управления на конец оператора PERFORM (ВЫПОЛНИТЬ) осуществляется следующим образом:
если имя-процедуры-1 является именем-лараграфа и имя- процедуры-2 в операторе не указано, возврат производится после выполнения последнего оператора имени-процедуры-1;
если имя-процедуры-1 есть имя-секции и имя-процедуры-2 не указано, возврат производится после выполнения последнего оператора последнего параграфа имени-процедуры-1;
если указано имя-процедуры-2 и оно является именем- параграфа, возврат производится после выполнения последнего оператора этого параграфа;если указано имя-процедуры-2 и оно является именем-сек- ции, возврат производится после выполнения последнего оператора последнего параграфа этой секции;
если указан оператор PERFORM (ВЫПОЛНИТЬ) с встроенной областью действия, его выполнение завершается после выполнения последнего содержащегося в нем оператора.
Имя-процедуры-1 и имя-процедуры-2 не обязательно связывать какими-либо отношениями, за исключением того, что последовательность операторов должна выполняться, начиная от процедуры, названной именрм-процедуры-1, и кончая процедурой, указанной именем-процедуры-2. В частности, между именем-процеду- ры-1 и концом имени-процедуры-2 могут встречаться операторы GO ТО (ПЕРЕЙТИ) и PERFORM (ВЫПОЛНИТЬ).
Если имеется два или больше путей, ведущих к точке возврата, то имя-процедуры-2 может быть именем-параграфа, состоящего из оператора EXIT (ВЫЙТИ), к которому должны вести все эти пути.
Если к указанному множеству операторов управление передается не по оператору PERFORM (ВЫПОЛНИТЬ), то от последнего оператора к следующему выполнимому оператору оно передается так, как если бы не было оператора PERFORM (ВЫПОЛНИТЬ), в котором упоминается это множество.
Операторы PERFORM (ВЫПОЛНИТЬ) действуют следующим образом:
формат 1 является основным форматом оператора PERFORM (ВЫПОЛНИТЬ). Указанное множество операторов выполняется один раз, и затем управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ);
формат 2 является вариантом с повторениями (вариант TIMES (РАЗ)). При его использовании указанное множество операторов выполняется столько раз, сколько указывается начальным значением данного, представленного идентификатором-1 или целым-1. Значение идентификатора-1 или целое-1 должно быть положительным. Если значение идентификатора-1 отрицательно или нуль, управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).
После выполнения указанного множества операторов соответствующее число раз управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). Обращение к идентификатору-1 не может изменить на протяжении выполнения оператора PERFORM (ВЫПОЛНИТЬ) число выполнений указанного множества операторов, заданное начальным значением данного, представленного идентификатором-1;
формат 3 указывает выполнение указанного множества операторов до тех пор, пока условие, указанное фразой UNTIL (ДО), не станет истинным. Если условие истинно, управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). Если в момент начала выполнения оператора PERFORM (ВЫПОЛНИТЬ) условие истинно и фраза TEST BEFORE (С ПРОВЕРКОЙ В | НАЧАЛЕ) указана или подразумевается, указанные процедуры не выполняются и управление передается на конец оператора 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 или идентификатор-?, индексы вычисляются каждый раз при установке или изменении содержимого данного, представленного иденти-фикатором. Индексирование и модификация ссылок, соответствующие операндам, указанным в условии-1 или условии-2, выполняются при каждой проверке условия.
Далее представлены схемы выполнения нескольких типов оператора PERFORM (ВЫПОЛНИТЬ) формата 4, которые не должны рассматриваться как предписания по их реализации.
Если фраза TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) указана или подразумевается.
Когда изменяется данное, представленное одним идентификатором, то в начале выполнения оператора PERFORM (ВЫПОЛНИТЬ) данное, представленное идентификатором-2, устанавливается равным литералу-1 или текущему значению данного, представленного идентификатором-3; если условие, заданное фразой UNTIL (ДО), ложно, то один раз выполняется указанное множество операторов.
Затем к значению данного, представленного идентификатором-2, прибавляется значение данного, представленного идентификатором-4 или литерала-2 (при этом оно увеличивается или уменьшается)., и условие-1 опять проверяется. Цикл продолжается до тех пор, пока это условие не станет истинным; в этом случае управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).
Если условие-1 истинно в начале выполнения оператора PERFORM (ВЫПОЛНИТЬ), то управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).
На рис. 1 представлена схема алгоритма оператора PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ) и фразой TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) и одним условием.
Когда указано .изменение данных, представленных двумя идентификаторами, содержимому данного, представленного идентификатором-2, присваивается значение литерала-1 или текущее значение данного, представленного идентификатором-3; содержимому данного, представленного идентификатором-5, присваивается значение литерала-3 или текущее значение данного, представленного идентификатором-6, после чего вычисляется условие-1; если оно истинно, то управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ), если оно ложно, вычисляется условие-2. Если условие-2 ложно, то один раз выполняется указанное множество операторов, после чего содержимое данного, представленного идентификатором-5, увеличивается на литерал-4 или содержимое данного, представленного идентификатором-?, и опять вычисляется условие-2. Этот цикл вычислений и увеличений продолжается до тех пор, пока условие не станет истинным. Когда условие-2 истинно, содержимое данного, представленного идентификатором-2, увеличивается на литерал-2 или содержимое данного, представленного идентификатором-4, а содержимому данного, представленного идентификатором-5, присваивается значение литерала-3 или текущее значение данного, представленного идентификатором-6, и опять вычисляется условие-1. Оператор PERFORM. (ВЫПОЛНИТЬ) завершается, если условие-1 истинно, иначе цикл продолжается, пока условие-1 не станет истинным.