[повелительный-оператор-1 END-PERFORM]

ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2] ]



Ф

(THROUGH

I THRU

ормат 2

PERFORM [имя-процедуры-1 [

и

идентификатор-1 целое-1

мя-процедуры-2] ]

TIMES [повелительный-оператор-1

END-PERFORM] ■.

ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2]]

{


идентификатор-1 1 [ РАЗ целое-1 і I РАЗА

[повелительный-оператор-1 КОНЕЦ-ВЫПОЛНИТЬ]

Ф

UNTIL условие-1

(THROUGH [THRU

ормат 3

PERFORM [имя-процедуры-1

имя-процедуры-2] ]

Г WITH TFQT і BEF°RE 1 ]
[WITH test|after [ I

[повелительный-оператор-l END-PERFORM]

ВЫПОЛНИТЬ [имя-процедуры-1 [ПО имя-процедуры-2]]

ДО условие-1


{НДЧА ПР 1

КОНЦЕ I



[повелительный-оператор-1 КОНЕЦ-ВЫПОЛНИТЬ]

Ф

I THROUGH

I THRU

ормат 4

PERFORM [имя-процедуры-

1



VARYING ! “^нтификатор-2

1 имя-индекса-1

B

идентификатор-3 имя-индекса-2 литерал-1

FROM

Y I идентификатор! I UNT|Lе4

имя-индекса-4 идентификатор-6 литерал-3


FROM


идентификатор-5 имя-индекса-3


AFTER


[ литерал-2 J идентификатор-7 о

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. Если опущено имя-процедуры-1, должны быть определены повелительный-оператор-1 и фраза END-PERFORM (КОНЕЦ- ВЫПОЛНИТЬ), если определено имя-процедуры-1, не должны употребляться повелительный-оператор-1 и фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ).

При использовании формата 4, если опущено имя-проце- дуры-1, не должна употребляться фраза AFTER (ЗАТЕМ)

  1. .Если не указаны ни фраза TEST BEFORE (С ПРОВЕР­КОЙ В НАЧАЛЕ), ни фраза TEST AFTER (С ПРОВЕРКОЙ В КОНЦЕ), предполагается по умолчанию TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ).

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

  3. Каждый литерал является числовым литералом.

  4. Если указана фраза END-PERFORM (КОНЕЦ-ВЫПОЛ- НИТЬ), оператор PERFORM (ВЫПОЛНИТЬ) является операто­ром с ограничителем области действия.

  5. Если во фразе VARYING (МЕНЯЯ) или AFTER (ЗА­ТЕМ) указано имя-индекса, то:

  1. идентификатор, относящийся к фразам FROM (ОТ) и BY (НА), должен представлять положительное целое;

  2. литерал, относящийся к фразе FROM (ОТ), должен пред­ставлять положительное целое;

  3. литерал, относящийся к фразе BY (НА), должен представ­лять целое, отличное от нуля.

  1. Если во фразе FROM (ОТ) задано имя-индекса, то:

  1. идентификатор, относящийся к фразам VARYING (МЕ­НЯЯ) и AFTER (ЗАТЕМ), должен представлять целое;

  2. идентификатор, относящийся к фразе BY (НА), должен представлять целое;

  3. литерал, относящийся к фразе BY (НА), должен предс­тавлять целое.

  1. Литерал во фразе BY (НА) не должен равняться нулю.

  2. Условие-1, условие-2, ... могут быть любыми условными выражениями (см. п. 6.3 настоящей части).

  3. Если указаны и имя-процедуры-1, и имя-процедуры-2 и какое-либо из них является именем-процедуры в декларативной части программы, то оба имени-процедуры должны быть имена- ми-процедур из одной и той же секции этой части.

I (12) Допускаются до шести фраз AFTER (ЗАТЕМ) в фор- I мате 4 оператора PERFORM (ВЫПОЛНИТЬ).

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

  1. Значения данных, на которые ссылаются идентифика­тор-4 и идентификатор-7, не должны быть равными нулю.

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

  3. Операторы, находящиеся в области действия имени-проце- дуры-1 (до имени-процедуры-2, если оно указано) для оператора PERFORM (ВЫПОЛНИТЬ) с вынесенной областью действия или содержащиеся внутри самого оператора PERFORM (ВЫПОЛ­НИТЬ) в случае оператора PERFORM (ВЫПОЛНИТЬ) с встро­енной областью действия, будут называться указанным множест­вом операторов.

  4. Фраза END-PERFORM (КОНЕЦ-ВЫПОЛНИТЬ) ограни­чивает область действия оператора PERFORM (ВЫПОЛНИТЬ) со встроенной областью действия (см. ч. 4, п. 6.4.3).

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

  6. При выполнении оператора PERFORM (ВЫПОЛНИТЬ) управление передается первому оператору указанного множества операторов, кроме случаев, оговоренных общими правилами 106, 10в и 10г.

Эта передача управления выполняется один раз для каждого выполнения оператора PERFORM (ВЫПОЛНИТЬ). Для тех слу­чаев, когда передача управления указанному множеству операто­ров имеет место, неявная передача управления на конец оператора PERFORM (ВЫПОЛНИТЬ) осуществляется следующим образом:

  1. если имя-процедуры-1 является именем-лараграфа и имя- процедуры-2 в операторе не указано, возврат производится после выполнения последнего оператора имени-процедуры-1;

  2. если имя-процедуры-1 есть имя-секции и имя-процедуры-2 не указано, возврат производится после выполнения последнего оператора последнего параграфа имени-процедуры-1;

  3. если указано имя-процедуры-2 и оно является именем- пара­графа, возврат производится после выполнения последнего опера­тора этого параграфа;если указано имя-процедуры-2 и оно является именем-сек- ции, возврат производится после выполнения последнего операто­ра последнего параграфа этой секции;

  4. если указан оператор PERFORM (ВЫПОЛНИТЬ) с встро­енной областью действия, его выполнение завершается после вы­полнения последнего содержащегося в нем оператора.

  1. Имя-процедуры-1 и имя-процедуры-2 не обязательно связы­вать какими-либо отношениями, за исключением того, что после­довательность операторов должна выполняться, начиная от про­цедуры, названной именрм-процедуры-1, и кончая процедурой, ука­занной именем-процедуры-2. В частности, между именем-процеду- ры-1 и концом имени-процедуры-2 могут встречаться операторы GO ТО (ПЕРЕЙТИ) и PERFORM (ВЫПОЛНИТЬ).

Если имеется два или больше путей, ведущих к точке возвра­та, то имя-процедуры-2 может быть именем-параграфа, состояще­го из оператора EXIT (ВЫЙТИ), к которому должны вести все эти пути.

  1. Если к указанному множеству операторов управление пе­редается не по оператору PERFORM (ВЫПОЛНИТЬ), то от пос­леднего оператора к следующему выполнимому оператору оно пе­редается так, как если бы не было оператора PERFORM (ВЫ­ПОЛНИТЬ), в котором упоминается это множество.

  2. Операторы PERFORM (ВЫПОЛНИТЬ) действуют сле­дующим образом:

  1. формат 1 является основным форматом оператора PERFORM (ВЫПОЛНИТЬ). Указанное множество операторов выполняется один раз, и затем управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ);

  2. формат 2 является вариантом с повторениями (вариант TIMES (РАЗ)). При его использовании указанное множество опе­раторов выполняется столько раз, сколько указывается начальным значением данного, представленного идентификатором-1 или це­лым-1. Значение идентификатора-1 или целое-1 должно быть поло­жительным. Если значение идентификатора-1 отрицательно или нуль, управление передается на конец оператора PERFORM (ВЫ­ПОЛНИТЬ).

После выполнения указанного множества операторов соответ­ствующее число раз управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ). Обращение к идентификатору-1 не может изменить на протяжении выполнения оператора PERFORM (ВЫПОЛНИТЬ) число выполнений указанного множества опера­торов, заданное начальным значением данного, представленного идентификатором-1;

  1. формат 3 указывает выполнение указанного множества опе­раторов до тех пор, пока условие, указанное фразой UNTIL (ДО), не станет истинным. Если условие истинно, управление переда­ется на конец оператора PERFORM (ВЫПОЛНИТЬ). Если в мо­мент начала выполнения оператора PERFORM (ВЫПОЛНИТЬ) условие истинно и фраза TEST BEFORE (С ПРОВЕРКОЙ В | НАЧАЛЕ) указана или подразумевается, указанные процеду­ры не выполняются и управление передается на конец оператора PERFORM (ВЫПОЛНИТЬ).

Если указана фраза TEST AFTER (С ПРОВЕРКОЙ В КОН­ЦЕ), оператор PERFORM (ВЫПОЛНИТЬ) выполняется так же, как и в случае, когда указана фраза TEST BEFORE (С ПРОВЕРКОЙ В НАЧАЛЕ) с тем отличием, что условие прове­ряется после выполнения указанного множества операторов.

Индексирование и модификация ссылок, имеющие отноше­ние к операндам, указанным в условии-1, вычисляются при каждой проверке условия;

  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, которые не должны рассматриваться как предписания по их реализации.

  1. Если фраза 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 не станет истинным.