Abbreviated combined relation conditions
When relation-conditions are written consecutively, any relation-condition after
the first can be abbreviated in one of two ways:
- Omission of the subject
- Omission of the subject and relational operator
| Format |
 >>-relation-condition------------------------------------------->
.---------------------------------------------------.
V |
>----+-AND-+--+-----+--+---------------------+--object-+-------><
'-OR--' '-NOT-' '-relational-operator-'
|
In any consecutive sequence of relation-conditions, both forms of
abbreviation can be specified. The abbreviated condition is evaluated as if:
- The last stated subject is the missing subject.
- The last stated relational operator is the missing relational operator.
The resulting combined condition must comply with the rules for element
sequence in combined conditions, as shown in Combined conditions: permissible element sequences (Table 30).
If NOT is immediately followed by GREATER THAN, >, LESS THAN, <, EQUAL
TO, or =, then the NOT participates as part of the relational operator. NOT in
any other position is considered a logical operator (and thus results in a
negated relation condition).
You can use parentheses in combined relation conditions to specify an intended
order of evaluation. Using parentheses can also help improve the readability of
conditional expressions.
The following rules govern the use of parentheses in abbreviated combined
relation conditions:
- Parentheses can be used to change the order of evaluation of the logical
operators AND and OR.
- The word NOT participates as part of the relational operator when it is
immediately followed by GREATER THAN, >, LESS THAN, <, EQUAL TO, or =.
- NOT in any other position is considered a logical operator and thus
results in a negated relation condition. If you use NOT as a logical
operator, only the relation condition immediately following the NOT is
negated; the negation is not propagated through the abbreviated combined
relation condition along with the subject and relational operator.
- The logical NOT operator can appear within a parenthetical expression that
immediately follows a relational operator.
- When a left parenthesis appears immediately after the relational operator,
the relational operator is distributed to all objects enclosed in the
parentheses. In the case of a “distributed” relational operator,
the subject and relational operator remain current after the right
parenthesis which ends the distribution. The following three restrictions
apply to cases where the relational operator is distributed throughout the
expression:
- A simple condition cannot appear within the scope of the distribution.
- Another relational operator cannot appear within the scope of the
distribution.
- The logical operator NOT cannot appear immediately after the left
parenthesis, which defines the scope of the distribution.
- Evaluation proceeds from the least to the most inclusive condition.
- There must be a one-to-one correspondence between left and right
parentheses, with each left parenthesis to the left of its corresponding
right parenthesis. If the parentheses are unbalanced, the compiler inserts a
parenthesis and issues an E-level message. However, if the compiler-inserted
parenthesis results in the truncation of the expression, you will receive an
S-level diagnostic message.
- The last stated subject is inserted in place of the missing subject.
- The last stated relational operator is inserted in place of the missing
relational operator.
- Insertion of the omitted subject or relational operator ends when:
- Another simple condition is encountered.
- A condition-name is encountered.
- A right parenthesis is encountered that matches a left parenthesis
that appears to the left of the subject.
- In any consecutive sequence of relation conditions, you can use both
abbreviated relation conditions that contain parentheses and those that do
not.
- Consecutive logical NOT operators cancel each other and result in an
S-level message. Note, however, that an abbreviated combined relation
condition can contain two consecutive NOT operators when the second NOT is
part of a relational operator. For example, you can abbreviate the first
condition as the second condition listed below.
A = B and not A not = C
A = B and not not = C
The following table summarizes the rules for forming an abbreviated combined
relation condition.
Table 32. Abbreviated combined conditions: permissible element sequences
| Combined condition element |
Left- most |
When not leftmost, can be
immediately preceded by: |
Right- most |
When not rightmost, can be
immediately followed by: |
| Subject |
Yes |
NOT
( |
No |
Relational operator |
| Object |
No |
Relational operator
AND
OR
NOT
( |
Yes |
AND
OR
) |
| Relational operator |
No |
Subject
AND
OR
NOT |
No |
Object
( |
AND
OR |
No |
Object
) |
No |
Object
Relational operator
NOT
( |
| NOT |
Yes |
AND
OR
( |
No |
Subject
Object
Relational operator
( |
| ( |
Yes |
Relational operator
AND
OR
NOT
( |
No |
Subject
Object
NOT
( |
| ) |
No |
Object
) |
Yes |
AND
OR
) |
The following examples illustrate abbreviated combined relation conditions, with
and without parentheses, and their unabbreviated equivalents.
Table 33. Abbreviated combined conditions: unabbreviated equivalents
| Abbreviated combined relation
condition |
Equivalent |
| 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)))) |
|