簡略複合比較条件
いくつかの比較条件を連続して記述する場合、2 番目以降の比較条件は、次のどちらかの省略形で記述できます。
- サブジェクトの省略
- サブジェクトと比較演算子の省略
| フォーマット |
 >>-関係条件----------------------------------------------------->
.------------------------------------------------.
V |
>----+-AND-+--+-----+--+------------+--オブジェクト-+----------><
'-OR--' '-NOT-' '-比較演算子-'
|
連続する一連の比較条件の中のどの部分でも、省略の 2 つの形式はどちらも使えます。省略形の条件は、次のようにして評価されます。
- 最後に記述されているサブジェクトが、省略されたサブジェクトとなります。
- 最後に記述されている比較演算子が、省略された比較演算子となります。
結果としての複合条件は、複合条件の中のエレメント・シーケンスに関する規則に従っていなければなりません。『複合条件: 許されるエレメントのシーケンス』(表 30) を参照してください。
GREATER THAN、>、LESS THAN、<、EQUAL TO、または = の直後に NOT がある場合、NOT は比較演算子の一部であるとみなされます。
他の位置にある NOT は、論理演算子であるとみなされます (したがって否定比較条件となります)。
意図した演算順序を指定するために、結合した比較条件の中に括弧を使用できます。
括弧の使用は、条件式を読みやすくするためにも役立ちます。
簡略複合比較条件における括弧の使用には、次の規則が適用されます。
- 括弧は、論理演算子の AND と OR の評価順序を変えるために使用することができます。
- 語 NOT の直後に GREATER THAN、>、LESS THAN、<、EQUAL TO、または = が置かれているときは、
NOT は比較演算子の一部であるとみなされます。
- 他の位置にある NOT は、論理演算子であるとみなされるため、否定比較条件となります。論理演算子として NOT を使用すると、NOT の直後の比較条件だけが否定されます。否定は、同じサブジェクトと比較演算子を持つ簡略複合条件全体に伝搬するわけではありません。
- 比較演算子の直後の括弧で囲まれた式の中に、論理演算子 NOT を含めることができます。
- 左括弧が比較演算子の直後にある場合は、その比較演算子が括弧内のすべてのオブジェクトに分配されます。比較演算子が「分配された」場合、その分配を終了させる右括弧以降も、
サブジェクトと比較演算子はそのまま残ります。比較演算子が式の中で分配される場合、次の 3 つの制約事項が適用されます。
- 分配の範囲内に単純条件は入れない。
- 分配の範囲内に別の比較演算子は入れない。
- 分配の範囲を定義する左括弧の直後に、論理演算子 NOT は入れない。
- 評価は、最も内側の条件から最も外側の条件へと進められます。
- 左括弧と右括弧には 1 対 1 の対応関係がなければなりません。
また左括弧は対応した右括弧の左側になければなりません。
括弧が片側しかない場合、コンパイラーがもう 1 つの括弧を挿入して、
E レベルのメッセージを出します。ただし、コンパイラーが挿入した括弧によって式の切り捨てが生じた場合には、
S レベルの診断メッセージが出されます。
- 最後に記述されたサブジェクトが、省略したサブジェクトの位置に挿入されます。
- 最後に記述された比較演算子が、省略した比較演算子の位置に挿入されます。
- 省略されていたサブジェクトまたは比較演算子の挿入処理は、次の場合に終了します。
- 他の単純条件が出てきたとき
- 条件名が出てきたとき
- サブジェクトの左側にある左括弧に対応する右括弧が出てきたとき
- 連続する一連の比較条件では、
括弧を含むものと含まないものの両方の省略形の比較条件を使用できます。
- 論理演算子 NOT が連続していると、互いに打ち消しあって、
S レベルのメッセージが出されます。ただし、2 番目の NOT が比較演算子の一部であるときは、
簡略複合比較条件に 2 つの NOT 演算子を連続して記入することができます。例えば、下記の最初の条件を 2 番目の条件のように省略することができます。
A = B and not A not = C
A = B and not not = C
次の表は、簡略複合比較条件を記述するときの規則を要約しています。
表 32. 簡略複合条件: 許されるエレメントのシーケンス
| 複合条件エレメント |
左端 |
左端にないときは、次のものが直前にある |
右端 |
右端にないときは、次のものが直後にある |
| サブジェクト |
はい |
NOT
( |
いいえ |
比較演算子 |
| オブジェクト |
いいえ |
比較演算子
AND
OR
NOT
( |
はい |
AND
OR
) |
| 比較演算子 |
いいえ |
サブジェクト
AND
OR
NOT |
いいえ |
オブジェクト
( |
AND
OR |
いいえ |
オブジェクト
) |
いいえ |
オブジェクト
比較演算子
NOT
( |
| NOT |
はい |
AND
OR
( |
いいえ |
サブジェクト
オブジェクト
比較演算子
( |
| ( |
はい |
比較演算子
AND
OR
NOT
( |
いいえ |
サブジェクト
オブジェクト
NOT
( |
| ) |
いいえ |
オブジェクト
) |
はい |
AND
OR
) |
次の表は、簡略複合比較条件の例 (括弧を使用した例と使用しない例を含む) と、
それと同じ内容を簡略しないで表現した例を示しています。
表 33. 簡略複合条件とそれに対応する簡略化していない表現
| 簡略複合比較条件 |
完全な形式での表現。 |
| A = B AND NOT < C OR D |
((A = B) AND (A NOT < C))
OR (A NOT < D) |
| A NOT > B OR C |
(A NOT > B) OR (A NOT
> C) |
| NOT A = B OR C |
(NOT (A = B)) OR (A = C) |
| NOT (A = B OR < C) |
NOT ((A = B) OR (A < C)) |
| NOT (A NOT = B AND C AND NOT D) |
NOT ((((A NOT = B) AND (A NOT =
C)) AND (NOT (A NOT = D)))) |
|