構造化プログラミング命令

構造化プログラミング命令を次の表に示します。

表 62. 構造化プログラミング命令
命令 従来型の構文 自由形式構文
かつ ANDxx (かつ) AND 演算子
構造化グループの開始 DO (命令グループの開始) FOR (For)
条件までの繰り返し DOU (条件が真になるまでの繰り返し)または DOUxx (条件までの繰り返し) DOU (条件が真になるまでの繰り返し)
条件の間繰り返し DOW (条件が真の間繰り返し)または DOWxx (条件が真の間繰り返し) DOW (条件が真の間繰り返し)
他の場合 ELSE (他の場合)
ELSE IF ELSEIF (ELSE IF)
グループの終わり ENDyy (構造化グループの終わり)
for FOR (For)
IF/THEN IF (満たされた条件の処理)または IFxx (満たされた条件の処理) IF (満たされた条件の処理)
繰り返し ITER (繰り返し)
DO グループからの抜け出し LEAVE (Do/For グループからの抜け出し)
または ORxx (または) OR 演算子
その他の場合の選択 OTHER (その他の場合の選択)
選択 SELECT (選択グループの始め)
真の場合に選択 WHEN (真の場合に選択)または WHENxx (真の場合に選択) WHEN (真の場合に選択)

DO 命令では、演算項目 1 の値から始めて、毎回対応する ENDDO 命令の値だ け増分して、演算項目 2 に指定された限界に達するまで 0 回または 1 回以上 演算グループを処理することができます。

DOU および DOUxx (条件が真になるまでの繰り返し) 命令では、 演算グループを 1 回または複数回処理することができます。 Do-Until 命令の終わりは ENDDO 命令で示されます。

DOW および DOWxx (条件が真の間繰り返し) 命令では、 演算グループを 0 回または 1 回以上処理することができます。 Do-While 命令の終わりは ENDDO 命令で示されます。

FOR 命令によって、演算のグループの反復処理が可能になります。 開始値は、索引名に割り当てられます。 増分値および限界値も同様に指定できます。 開始値、増分値、限界値は、自由形式の式にすることができます。ENDFOR 命令 は、FOR グループの終わりを示します。

LEAVE 命令は、制御のフローを早期に中断して、反復構造化グループの ENDDO 命令または ENDFOR 命令の後のステートメントに制御を渡します。ITER 命令では、次のループの繰り返しが即時に行われます。

IF および IFxx 命令では、指定された条件が満たされた場合に、 演算グループを処理することができます。 ELSE 命令では、条件が満たされない場合に処理する演算グループを指定するこ とができます。 ELSEIF 命令は、ELSE 命令と IF 命令を組み合わせたものです。IF または IFxx グループの終わりは ENDIF で示されます。

SELECT、WHEN、WHENxx、および OTHER グループの命令は、 命令の複数の代替順序のうちの 1 つを条件付きで処理するために使用されます。 選択グループの始めは SELECT 命令で示されます。 WHEN および WHENxx 命令は、命令の処理順序を選択するために使用されます。 OTHER 命令は、WHENxx 条件がどれも満たされない時に処理する命令の順序を 示すために使用されます。 選択グループの終わりは ENDSL 命令で示されます。

ANDxx および ORxx 命令は DOUxx、DOWxx、WHENxx、および IFxx 命令と 一緒に使用され、IFxx 命令はさらに複雑な条件を指定するために使用 されます。ANDxx 命令の方が ORxx 命令よりも優先順位が高くなります。 ただし、IF、 DOU、DOW、および WHEN 命令では、それらの xx が付いている命 令よりもさらに簡潔に、複雑な式をコーディングできることに注意してください。

図 161. AND/OR の優先順位の例
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * In the following example, indicator 25 will be set on only if the
 * first two conditions are true or the third condition is true.
 *
 * As an expression, this would be written:
 * EVAL *IN25 = ((FIELDA > FIELDB) AND (FIELDA >= FIELDC)) OR (FIELDA < FIELDD)
 *
 *
C     FIELDA        IFGT      FIELDB
C     FIELDA        ANDGE     FIELDC
C     FIELDA        ORLT      FIELDD
C                   SETON                                        25
C                   ELSE
C                   SETOFF                                       25
C                   ENDIF

DO、DOUxx、DOWxx、FOR、IFxx、MONITOR、または SELECT 命令 (ANDxx または ORxx 命令を伴う場合もある)、および ENDyy 命令は、構造化グループを区切ります。ENDDO 命令は、それぞれの DO、DOUxx、および DOWxx グループを終了するか、 または指定された終了条件が満たされるまでその構造化グループを繰り返し処理 します。 ENDFOR 命令は、各 FOR グループを終了します。SELECT は ENDSL で終了しなければなりません。 IFxx 命令 および ELSE を伴う IFxx 命令は、ENDIF 命令で終了しなければなり ません。

ANDxx、DOUxx、DOWxx、IFxx、ORxx、および WHENxx 命令コードで比較を行 なう場合の規則は、比較命令に示されている規則と同じです。

ANDxx、DOUxx、DOWxx、IFxx、ORxx、および WHENxx 命令で、xx は次の値に することができます。

xx
意味
GT
演算項目 1 は演算項目 2 より大きい。
LT
演算項目 1 は演算項目 2 より小さい。
EQ
演算項目 1 は演算項目 2 と等しい。
NE
演算項目 1 は演算項目 2 と等しくない。
GE
演算項目 1 は演算項目 2 より大きいか等しい。
LE
演算項目 1 は演算項目 2 より小さいか等しい。

ENDyy 命令で、yy は次の値にすることができます。

yy
意味
CS
CASxx 命令の終わり。
DO
DO、DOUxx、および DOWxx 命令の終わり。
FOR
FOR 命令の終わり。
IF
IFxx 命令の終わり。
SL
SELECT 命令の終わり。
ブランク
任意の構造化命令の終わり。

注:
ENDyy 命令の yy は任意指定です。

構造化グループ (この場合には DO グループ) に別の完全な構造化グループ が入っていると、ネストされた構造化グループが形成されます。 構造化グループは最大 100 レベルの深さまでネストすることができます。 次の例は、3 レベルの深さまでネストされた構造化グループです。

図 162. ネストされた構造化グループ
REQTEXT

構造化グループを指定する場合には次のことに留意してください。