Funktion
Format
|
|
|
Syntaxregeln
Der erste und der zweite Operand einer Vergleichsbedingung dürfen nicht beide Literale sein. Es dürfen auch nicht beide Operanden gleichzeitig NULL sein.
Der Vergleichsoperator muss einer der in Tabelle 20 aufgeführten Operatoren sein. Es muss ihm je ein Leerzeichen vorausgehen und folgen.
Operator
Bedeutung
IS [NOT] GREATER THAN
IS [NOT] >[Nicht] größer als
IS [NOT] LESS THAN
IS [NOT] <[Nicht] kleiner als
IS [NOT] EQUAL TO
IS [NOT] =[Nicht] gleich
IS GREATER THAN OR EQUAL TO
IS > =Größer oder gleich
IS LESS THAN OR EQUAL TO
IS <=Kleiner oder gleich
Tabelle 20: Vergleichsoperatoren
Die Sonderzeichen >, <, = sind hier nicht unterstrichen, damit sie nicht mit anderen Sonderzeichen verwechselt werden.
Der Vergleichsoperator bezeichnet die Art des Vergleichs, der in einer Vergleichsbedingung ausgeführt werden soll.
Sind in einer Vergleichsbedingung Daten der Klassen objekt oder zeiger beteiligt, dürfen nur Vergleichsoperatoren mit der Bedeutung „gleich“ oder „nicht gleich“ verwendet werden.
Sind in einer Vergleichsbedingung Daten der Klassen objekt oder zeiger beteiligt, müssen der linke und rechte Operand von der gleichen Kategorie sein.
Der Vergleich von stark typisierten Datengruppen ist nicht erlaubt. Nur die Datenelemente aus stark typisierten Datengruppen können miteinander verglichen werden.
Die zulässigen Vergleiche und die Art des Vergleichs sind in Tabelle 21 angegeben:.
Rechter Linker | Grup- | Al- | Al- | Na- | Nu- | Ex- | Index- | Index- | Ob- | Zei- |
Gruppe | an | an | an | - | an | - | - | - | - | - |
Alphabetisch | an | an | an | ant | - | - | - | - | - | - |
Alphanumerisch | an | an | an | ant | anu,i,d | - | - | - | - | - |
National | - | ant | ant | nt | nnu,i | - | - | - | - | - |
Numerisch | an | - | anu,i,d | nnu,i | nu | nu | ix2,i | - | - | - |
Expression | - | - | - | - | nu | nu | ix2,i | - | - | - |
Indexname | - | - | - | - | ix2,i | ix2,i | ix1 | ix3 | - | - |
Indexdatenfeld | - | - | - | - | - | - | ix3 | ix3 | - | - |
Objekt | - | - | - | - | - | - | - | - | ob | - |
Zeiger (Pointer) | - | - | - | - | - | - | - | - | - | pt |
Tabelle 21: Zulässige Vergleiche verschiedener Operanden1)
1) | Tabelleneinträge: | |
i | = nur für ganze Zahlen (integer) | |
d | = bei alphanumerischen Literalen nur für numerische Datenfelder mit USAGE DISPLAY erlaubt | |
- | = Vergleich ist nicht erlaubt | |
nu | = Vergleich von numerischen Operanden | |
an | = Vergleich von alphanumerischen Operanden | |
nt | = Vergleich von nationalen Operanden | |
ix | = Vergleich von Indexnamen oder Indexdatenfeldern | |
ob | = Vergleich von Objektreferenzen | |
pt | = Vergleich von Zeigern (Pointer) | |
ant | = Vergleich von alphanumerischen und nationalen Operanden | |
anu | = Vergleich von alphanumerischen und ganzzahligen numerischen Operanden | |
nnu | = Vergleich von nationalen und ganzzahligen numerischen Operanden |
Vergleich von numerischen Operanden (nu)
Wenn zwei numerische Operanden verglichen werden, wird dazu ihr algebraischer Wert unabhängig von dem verwendeten Datenformat (USAGE-Klausel) verwendet. Die Länge, d.h. die Anzahl der Ziffern, die sie enthalten, ist nicht entscheidend.
Numerische Operanden ohne Vorzeichen werden bei Vergleichen als positiv betrachtet.Null wird als eindeutiger Wert betrachtet, unabhängig vom Vorzeichen.
Beispiel 8-5
-50 ist kleiner als +5
+75 ist größer als +5
-100 ist kleiner als -10
-0 ist gleich +0
Vergleich von alphanumerischen mit ganzzahligen numerischen Operanden (anu)
Der numerische Operand muss ein ganzzahliges Literal oder ein ganzzahliges Datenfeld mit USAGE DISPLAY sein. Der hier beschriebene Compiler lässt jedoch auch andere Datenformate zu.
Ist der alphanumerische Operand ein Datenelement oder ein alphanumerisches Literal, wird der numerische Operand so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einem alphanumerischen Datenelement übertragen wurde. Die Länge des alphanumerischen Datenfeldes entspricht der Ziffernanzahl in der Beschreibung des numerischen Datenfeldes, wobei Skalenstellenzeichen P nicht mitgezählt werden.
Ist der alphanumerische Operand eine Datengruppe, wird der numerische Operand so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einer Datengruppe mit derselben Größe wie das numerische Datenfeld übertragen wurde.
In beiden Fällen wird anschließend das gedachte Datenfeld mit dem alphanumerischen Operanden verglichen. Dies geschieht entsprechend den Regeln für den Vergleich von alphanumerischer Operanden (an).
Vergleich von nationalen mit ganzzahligen numerischen Operanden (nnu)
Der numerische Operand muss ein ganzzahliges Literal oder ein ganzzahliges Datenfeld sein. Er wird so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einem nationalen Datenelement übertragen wurde. Die Länge des nationalen Datenfeldes entspricht der Ziffernanzahl in der Beschreibung des numerischen Datenfeldes, wobei Ska lenstellenzeichen P nicht mitgezählt werden.
Anschließend wird das gedachte nationalen Datenfeld mit dem nationalen Operanden verglichen. Dies geschieht entsprechend den Regeln für den Vergleich von nationalen Operanden (nt).
Vergleich von alphanumerischen Operanden (an)
Wenn zwei alphanumerische Operanden verglichen werden, wird der Vergleich entsprechend der Sortierfolge der PROGRAM COLLATING SEQUENCE durchgeführt (siehe „OBJECT-COMPUTER-Paragraf").
Es gilt zwei Fälle zu beachten:
Vergleich von Operanden gleicher Länge
Das Programm vergleicht die Zeichen entsprechender Zeichenstellen miteinander. Es wird an der höchstwertigen Stelle begonnen (das heißt linksbündig) und der Vergleich so lange fortgesetzt, bis entweder zwei ungleiche Zeichen auftreten oder bis das Ende der Operanden erreicht ist.
Sind alle Zeichen paarweise gleich, werden die Operanden als gleich betrachtet. Zwei Operanden mit der Länge Null sind ebenfalls gleich.
Tritt ein Paar von ungleichen Zeichen auf, so wird festgestellt, welches Zeichen eine höhere Ordnungszahl innerhalb der Sortierfolge hat. Der Operand, der das höhere Zeichen enthält, wird als der größere Operand betrachtet.Beispiel 8-6
linker Operand
rechter Operand
keine COLLATING SEQUENCE oderCOLLATING SEQUENCE NATIVE
COLLATING SEQUENCE ALPHATAB (siehe Beispiel 6-5 im Abschnitt "ALPHABET-Klausel" )
+-*
ABC
’kleiner’
Das 1. Zeichen linker Operand „+“ ist kleiner als das 1. Zeichen rechter Operand „A“.’größer’
Das 1.Zeichen linker Operand „+“ ist größer als das 1. Zeichen rechter Operand „A“, weil „A“ in der Sortierfolge ALPHATAB die Ordnungszahl 1 hat.RADE
RABE
’größer’
Das 3. Zeichen linker Operand „D“ ist größer als das 3. Zeichen rechter Operand „B“.’gleich’
Das 3.Zeichen linker Operand „D“ ist gleich dem 3. Zeichen rechter Operand „B“, weil „D“ und „B“ in der Sortierfolge ALPHATAB beide die Ordnungszahl 1 haben.XYZ
XYZ
’gleich’
Alle Zeichen sind paarweise gleich.’gleich’
Alle Zeichen sind paarweise gleich.Vergleich von Operanden ungleicher Länge
Der Vergleich verläuft so, als ob der kürzere Operand rechts mit so vielen alphanumerischen Leerzeichen aufgefüllt wäre, so dass die Operanden die gleiche Länge haben.
Es sind dann die beschriebenen Regeln aus a) „Vergleich von Operanden gleicher Länge" anzuwenden.
Beispiel 8-7
linker Operand
rechter Operand
keine COLLATING SEQUENCE oderCOLLATING SEQUENCE NATIVE
COLLATING SEQUENCE ALPHATAB (siehe Beispiel 6-5 im Abschnitt "ALPHABET-Klausel" )
SMITH
SMITHY
’kleiner’
Der linke Operand wird mit Leerzeichen zu „SMITH'BLANK'“ aufgefüllt. Das 6. Zeichen linker Operand „'BLANK'“ ist kleiner als das 6. Zeichen rechter Operand „Y“.’kleiner’
Der linke Operand wird mit Leerzeichen zu „SMITH'BLANK'“ aufgefüllt. Das 6. Zeichen linker Operand „'BLANK'“ ist kleiner als das 6. Zeichen rechter Operand „Y“.AB
ABBA
’kleiner’
Der linke Operand wird mit Leerzeichen zu „AB'BLANK''BLANK'“ aufgefüllt. Das 3. Zeichen linker Operand „'BLANK'“ ist kleiner als das 3. Zeichen rechter Operand „B“.’größer’
Der linke Operand wird mit Leerzeichen zu „AB'BLANK''BLANK'“ aufgefüllt. Das 3. Zeichen linker Operand „'BLANK'“ ist größer als das 3. Zeichen rechter Operand „B“, weil „B“ in der Sortierfolge ALPHATAB die Ordnungszahl 1 hat.
Vergleich von nationalen Operanden (nt)
Es gilt zwei Fälle zu beachten:
Vergleich von Operanden gleicher Länge
Das Programm vergleicht die Zeichen entsprechender Zeichenstellen miteinander. Es wird an der höchstwertigen Stelle begonnen (das heißt linksbündig) und der Vergleich so lange fortgesetzt, bis entweder zwei ungleiche Zeichen auftreten oder bis das Ende der Operanden erreicht ist.
Sind alle Zeichen paarweise gleich, werden die Operanden als gleich betrachtet. Zwei Operanden mit der Länge Null sind ebenfalls gleich.
Tritt ein Paar von ungleichen Zeichen auf, so wird festgestellt, welches Zeichen eine höhere Ordnungszahl innerhalb der nationalen Sortierfolge hat. Der Operand, der das höhere Zeichen enthält, wird als der größere Operand betrachtet.Vergleich von Operanden ungleicher Länge
Der Vergleich verläuft so, als ob der kürzere Operand rechts mit so vielen nationalen Leerzeichen aufgefüllt wäre, so dass die Operanden die gleiche Länge haben.
Es sind dann die beschriebenen Regeln aus a) „Vergleich von Operanden gleicher Länge" anzuwenden.
Vergleich von alphanumerischen mit nationalen Operanden (ant)
Der alphanumerische Operand wird so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einem nationalen Datenelement übertragen und konvertiert wurde. Das nationale Datenfeld hat genau so viele Zeichenstellen wie das alphanumerischen Datenfeld.
Anschließend wird das gedachte Datenfeld mit dem nationalen Operanden verglichen. Dies geschieht entsprechend den Regeln für den Vergleich von nationalen Operanden (nt).
Beispiel 8-8
linker, | rechter,nationalerOperand | Ergebnis des Vergleichs |
123 | XYZ | ’kleiner’ |
AB | ABBA | ’kleiner’ |
Vergleich von Indexnamen oder Indexdatenfelder (ix)
Sind beide Operanden Indexnamen, dann werden die den beiden Indizes entsprechenden Tabellenelementnummern miteinander verglichen (ix1).
Ist ein Operand numerisch (nur ganzzahlig), so wird diese Zahl als Tabellenelementnummer angesehen und mit der Tabellenelementnummer verglichen, die dem Indexnamen entspricht (ix2).
Ist ein Operand ein Indexdatenfeld, so werden die aktuellen Werte der Felder (ohne Umrechnung zu Tabellenelementnummern!) verglichen (ix3).
Vergleich von Objektreferenzen (ob)
Die Bedingung „gleich“ ist nur dann wahr, wenn bezeichner-1 und bezeichner-2 das gleiche Objekt referenzieren.
Vergleich von Zeigern (pt)
Die Bedingung „gleich“ ist nur dann wahr, wenn bezeichner-1 und bezeichner-2 die gleiche Speicherzelle referenzieren.