24.2.2 第2次規格以前の仕様(-StdVersion,1,-StdVersion,2)
-StdVersion,1オプションは第1次規格以前,-StdVersion,2オプションは第2次規格以前の仕様で翻訳することを指定するが,ここでは第1次規格と第2次規格の仕様が同じで第3次規格と第4次規格との間で解釈が異なっている言語仕様について次に示す。
(1) VARYINGとAFTERの指定があるPERFORM文での評価順序
-StdVersionオプションを指定した場合,次の書き方のとき,標準仕様のPERFORM文の規則と異なる。
- 形式
-
(備考)
次の言語要素は,第2次以前の規格にはなかったが,このシステムでは-StdVersionオプション指定時にも書くことができる。
(a)うちPERFORM文(手続き名を省略し,無条件文END-PERFORMを書く)
(b)WITH TEST BEFORE/AFTER指定
(c)AFTER指定の3回以上の繰り返し記述
一般規則
次に,標準仕様のPERFORM文と異なる規則だけ説明する。
-
PERFORM文の実行中に,条件2(内側のループの終了条件)が成立すると,次の順に実行される。
(i)一意名4など(内側のループの制御変数)を,一意名5などの値で再初期化する。
(ii)一意名1など(外側のループの制御変数)を,一意名3などの値で増加させる。
-
PERFORM文の実行中に,条件3(内側のループの終了条件)が成立すると,次の順に実行される。
(i)一意名7など(内側のループの制御変数)を,一意名8などの値で再初期化する。
(ii)一意名4など(外側のループの制御変数)を,一意名6などの値で増加させる。
(注意)
-StdVersionオプション未指定時には,上記の(i)〜(ii)の順番が入れ替わる。
(例1)
01 J PIC 99 COMP. 01 K PIC 99 COMP. 01 WK-1. 02 WK-2 OCCURS 4. 03 WK-3 PIC X OCCURS 4. : MOVE SPACE TO WK-1. PERFORM PROC-1 VARYING J FROM 1 BY 1 UNTIL J > 4 AFTER K FROM J BY 1 UNTIL K > 4, : PROC-1. MOVE '*' TO WK-3(J,K)
上記の(例1)のPERFORM文の流れを次に示す。
図24‒1 PERFORM文の流れ -StdVersionオプションを指定して,PERFORM文を実行すると,「*」の転記は次のとおりに行われる。
同じ例を,-StdVersionオプションを指定しないで実行すると,「図24‒1 PERFORM文の流れ」中の(i)と(ii)の処理の順番が入れ替わる。このとき,PERFORM文の実行の結果,「*」の転記は次のとおりに行われる。
-StdVersionオプション未指定時の仕様は,次に示す例2のうちPERFORM文と同じである。
(例2)
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 4 PERFORM VARYING K FROM J BY 1 UNTIL K > 4 MOVE '*' TO WK-3(J,K) END-PERFORM END-PERFORM.
- 【標準仕様との関連】
-
「COBOL2002 言語 標準仕様編」 「10.8.31 PERFORM文」