Die Priorität von Operatoren wird in zwei Stufen ausgewertet: zunächst entsprechend der Rangfolge der Operatortypen, dann innerhalb eines Operatortyps entsprechend der Rangfolge der Operatoren.
Rangfolge der „Operatortypen“:
Vorzeichen, Negation
arithmetische Operatoren
Verkettungsoperator
Vergleichsoperatoren
logische Operatoren
Rangfolge der arithmethischen Operatoren („Punkt- vor Strichrechnung“):
Multiplikation, Division, Modulo-Operation (*, /, MOD)
Addition, Subtraktion (+, -)
Rangfolge der logischen Operatoren:
Und-Verknüpfung (AND)
Oder-Verknüpfung (OR, XOR)
Vergleichsoperatoren:
Alle Vergleichsoperatoren sind gleichrangig.
Beispiel
Zusammengesetzte logische Ausdrücke werden häufig in IF-Blöcken verwendet, und zwar im Operanden CONDITION des IF-Kommandos. Wenn die Bedingung, die durch den Ausdruck festgelegt ist, wahr ist, wird das Kommando bearbeitet, das dem IF-Kommando folgt. Wenn die Bedingung falsch ist, wird das nächste ELSE-IF- oder ELSE-Kommando bearbeitet (Näheres zu IF-, ELSE-IF, und ELSE-Kommando: siehe Kapitel „S-Prozeduren erstellen“ (S-Prozeduren erstellen ) oder Kapitel „SDF-P-Kommandos“ ).
Ein IF-Kommando könnte zum Beispiel folgende Bedingung enthalten:
A + B / C > D + C MOD E AND A + D * E < D * C OR F // G > H
Zum Zeitpunkt der IF-Abfrage haben die Variablen A bis H folgende Werte:
/A = 4 /B = 29 /C = 9 /D = 3 /E = 5 /F = 'ABC' /G = 'DEF' /H = 'ABCDE'
Der Ausdruck wird in folgenden Schritten ausgewertet:
Arithmetische Operatoren: Multiplikation / Division
Operation
entspricht
Ergebnis
B / C
29 / 9
3
C MOD E
9 MOD 5
4
D * E
3 * 5
15
D * C
3 * 9
27
Ergebnis von Schritt 1:
A + 3 > D + 4 AND A + 15 < 27 OR F // G > H
Arithmetische Operatoren: Addition
Operation
entspricht
Ergebnis
A + 3
4 + 3
7
D + 4
3 + 4
7
A + 15
4 + 15
19
Ergebnis von Schritt 2:
7 > 7 AND 19 < 27 OR F // G > H
Verkettungsoperator
Operation
entspricht
Ergebnis
F // G
'ABC' // 'DEF'
'ABCDEF'
Ergebnis von Schritt 3:
7 > 7 AND 19 < 27 OR 'ABCDEF' > H
Vergleichsoperatoren
Operation
Ergebnis
7 > 7
FALSE
19 < 27
TRUE
'ABCDEF' > 'ABCDE'
TRUE
Ergebnis von Schritt 4:
FALSE AND TRUE OR TRUE
Logische Operatoren: AND
Operation
Ergebnis
FALSE AND TRUE
FALSE
Ergebnis von Schritt 5:
FALSE OR TRUE
Logische Operatoren: OR
Operation
Ergebnis
FALSE OR TRUE
TRUE
Ergebnis von Schritt 6:
TRUE
Die Bedingung ist demnach erfüllt.
Reihenfolge der Auswertung
Die Reihenfolge der Auswertung ist bei allen Operanden undefiniert. Es kann vorkommen, dass der rechte Operand des AND zuerst ausgewertet wird.
Beispiel
/DECLARE-VARIABLE I(TYPE = INTEGER) /IF IS-INITIALIZED ('I') AND (I < 10)
Da zu diesem Zeitpunkt I noch nicht initialisiert ist, kommt es bei der Auswertung vonI < 10 zum Fehler.