Ein Literal ist eine Zeichenfolge, deren Wert durch die Zeichen bestimmt wird, aus denen sich das Literal zusammensetzt, oder durch ein reserviertes Wort festgelegt ist, das einer figurativen Konstanten entspricht. Jedes Literal gehört zu einer der Klassen und Kategorien: alphanumerisch, national oder numerisch.
Alphanumerische und nationale Literale bestehen aus einer Zeichenfolge, die in Literalbegrenzer eingeschlossen ist. Anführungszeichen im Literalbegrenzer können Doppelhochkommas ("...") oder Hochkommas (’...’) sein. Dabei ist zu beachten, dass im schließenden Literalbegrenzer das gleiche Anführungszeichen wie im öffnenden Literalbegrenzer verwendet wird. In einer Quelleinheit dürfen beide Arten Anführungszeichen zum Bilden von Literalen eingesetzt werden.
Hexadezimale Literale werden aus hexadezimalen Ziffern gebildet. Dies sind die Ziffern 0..9 sowie die Buchstaben A..F und a..f. Hierbei sind die korrespondierenden Klein- und Großbuchstaben (z.B. a, A) als äquivalent zu betrachten.
1. Alphanumerische Literale
Alphanumerische Literale sind von der Klasse und Kategorie alphanumerisch.
Format 1 (alphanumerisch)
{"zeichen-1..." | 'zeichen-1...'}
Syntaxregeln
Ein alphanumerisches Literal muss (ohne Literalbegrenzer) mindestens 1 Zeichen enthalten und darf maximal 180 Zeichen enthalten.
Wird ein alphanumerisches Literal im Zusammenhang mit nationalen Datenfeldern verwendet, darf es maximal 90 Zeichen enthalten.
Wenn zeichen-1 dem Anführungszeichen aus dem Literalbegrenzer entspricht, muss zeichen-1 doppelt angegeben werden, um im Literal (einfach) dargestellt zu werden. Das verdoppelte Anführungszeichen zählt in der Länge des Literals als ein Zeichen.
Allgemeine Regel
- Ein alphanumerisches Literal kann alle Zeichen aus dem EBCDIC-Zeichensatz enthalten. Der Wert des alphanumerischen Literals ist die Folge der einzelnen Zeichen selbst, ohne Literalbegrenzer.
Beispiel 2-2
’ZEICHEN’
"153.78"
"ADAM ""BDAM"" CDAM"
Format 2 (hexadezimal-alphanumerisch)
{X | x} {"hexadezimalziffer..." | 'hexadezimalziffer...'}
Syntaxregeln
Ein hexadezimal-alphanumerisches Literal muss (ohne Literalbegrenzer) mindestens 2 hexadezimale Ziffern enthalten und darf maximal 360 hexadezimale Ziffern enthalten.Wird ein hexadezimal-alphanumerisches Literal im Zusammenhang mit nationalen Datenfeldern verwendet, darf es maximal 180 hexadezimale Ziffern enthalten.
Die Anzahl der hexadezimalen Ziffern muss gerade sein.
Allgemeine Regel
Der Wert des hexadezimalen Literals ist das Bitmuster entsprechend der Folge der hexadezimalen Ziffern.
Beispiel 2-3
X"12ab"
2. Numerische Literale
Numerische Literale sind von der Klasse und Kategorie numerisch. Es gibt zwei Arten von numerischen Literalen: Festpunktliterale und Gleitpunktliterale.
- Numerische Festpunktliterale
Ein numerisches Festpunktliteral ist eine Folge von Zeichen, bestehend aus den Ziffern 0 bis 9, dem Pluszeichen, dem Minuszeichen und dem Dezimalpunkt.
Numerische Festpunktliterale müssen entsprechend den folgenden Regeln gebildet werden:
Das Literal darf 1 bis 31 Ziffern enthalten;
- das Literal darf nur ein Vorzeichen enthalten. Wird ein Vorzeichen verwendet, so muss es das am weitesten links stehende Zeichen des Literals (linksbündiges Ende) sein. Ein vorzeichenloses Literal wird als positiv betrachtet;
- Das Literal darf nur einen Dezimalpunkt enthalten. Der Dezimalpunkt kann an beliebiger Stelle im Literal auftreten, außer als das am weitesten rechts stehende Zeichen (rechtsbündiges Ende). Ein Dezimalpunkt bezeichnet die Stelle des Rechendezimalpunktes (der Rechendezimalpunkt in irgendwelchen numerischen Literalen oder Datenfeldern ist die Stelle, an der der Compiler im generierten Programm den Dezimalpunkt annimmt, ohne dafür eine Internspeicherstelle freizuhalten). Ein Literal ohne Dezimalpunkt ist ganzzahlig.
Der Begriff ganzzahlig wird zur Beschreibung eines numerischen Literals verwendet, das vorzeichenlos und größer als Null ist und keine Zeichenstellen rechts vom Rechendezimalpunkt enthält.
Beispiel 2-4
(Das Zeichen V beschreibt hier den Rechendezimalpunkt.)
Literal
Stelle des Rechendezimalpunktes
Internes Vorzeichen
Anzahl der zugewiesenen Ziffernstellen
+123
123V
+
3
3.765
3V765
+
4
-45.7
45V7
-
3
Numerische Gleitpunktliterale
Ein numerisches Gleitpunktliteral muss das folgende Format haben:Mantisse Exponent
Die Mantisse besteht aus einem wahlweise anzugebenden Vorzeichen, gefolgt von 1 bis 16 Ziffern mit einem anzugebenden Dezimalpunkt; der Dezimalpunkt kann innerhalb der Mantisse an jeder Stelle angegeben werden.
Der Exponent besteht aus dem Symbol E, gefolgt von einem wahlweise anzugebenden Vorzeichen, gefolgt von einer oder zwei Ziffern (der Exponent Null kann als 0 oder 00 geschrieben werden).
Das Literal darf keine Leerzeichen enthalten. Der Exponent muss unmittelbar rechts neben der Mantisse angegeben werden.
Die Vorzeichen sind die einzigen wahlweisen Zeichen im Format. Eine vorzeichenlose Mantisse oder ein vorzeichenloser Exponent wird als positiv betrachtet.
Der Wert des Literals ist das Produkt aus der Mantisse und der 10er-Potenz, die durch den Exponenten gegeben ist.
Der Absolutwert einer Zahl, dargestellt durch ein Gleitpunktliteral, darf 7.2✳1075 nicht überschreiten.
Beispiel 2-5
+1.5E-2 = 1.5 ✴ 10-2
3. Nationale Literale
Nationale Literale sind von der Klasse und Kategorie national.
Format 1 (national)
{N | n} {"zeichen-1..." | 'zeichen-1...'}
Syntaxregeln
Ein nationales Literal muss (ohne Literalbegrenzer) mindestens 1 Zeichen enthalten und darf maximal 90 Zeichen enthalten.
Wenn zeichen-1 dem Anführungszeichen aus dem Literalbegrenzer entspricht, muss zeichen-1 doppelt angegeben werden, um im Literal (einfach) dargestellt zu werden. Das verdoppelte Anführungszeichen zählt in der Länge des Literals als ein Zeichen.
zeichen-1 muss ein EBCDIC-Zeichen sein, das ein UTF-16 Gegenstück hat.
Allgemeine Regel
Der Wert des nationalen Literals ist die Folge nationaler Zeichen (ohne Literalbegrenzer), die sich aus der Konvertierung der einzelnen Zeichen nach UTF-16-Darstellung ergibt.
Beispiel 2-6
N’TSV’
n"1860"
Format 2 (hexadezimal-national)
{N | n} {X | x} {"hexadezimalziffer-1..." | 'hexadezimalziffer-1...'}
Syntaxregeln
Ein hexadezimal-nationales Literal muss (ohne Literalbegrenzer) mindestens 4 hexadezimale Ziffern enthalten und darf maximal 360 hexadezimale Ziffern enthalten.
Die Anzahl der hexadezimalen Ziffern muss ein Vielfaches von 4 sein.
Allgemeine Regel
Der Wert des hexadezimalen Literals ist das Bitmuster entsprechend der Folge der hexadezimalen Ziffern.
Beispiel 2-7
NX"005400530056"
nx’0031003800360030’
Damit werden die gleichen Literale dargestellt wie im vorhergehenden Beispiel 2-6.
4. Figurative Konstanten
Die Werte figurativer Konstanten werden vom Compiler erzeugt und durch die in Tabelle 6 aufgeführten reservierten Wörter bezeichnet.
Syntaxregeln:
Die Einzahl- und Mehrzahlform der figurativen Konstanten ist gleichwertig und kann wahlweise verwendet werden.
Außer in der figurativen Konstanten ALL literal hat das Wort ALL keine Funkion, es dient nur der besseren Lesbarkeit.
Eine figurative Konstante kann überall dort verwendet werden, wo literal in einem Format vorkommt, mit den folgenden Einschränkungen:
Wenn literal eingeschränkt ist auf numerische Literale, ist die einzig zulässige figurative Konstante ZERO (ZEROS, ZEROES) ohne die Angabe von ALL.
Wenn eine Syntaxregel die Angabe figurativer Konstanten verbietet.
literal muss ein alphanumerisches oder nationales Literal sein, aber nicht selber wieder eine figurative Konstante.
symbolisches-zeichen muss in der SYMBOLIC-CHARACTERS-Klausel des SPECIAL-NAMES-Paragrafen angegeben sein.
Allgemeine Regeln
Wird eine der figurativen Konstanten ZERO, SPACE, HIGH-VALUE, LOW-VALUE oder QUOTE in einem Kontext verwendet, der nationale Zeichen verlangt, dann stellt die figurative Konstante einen nationalen Wert dar. In allen anderen Fällen, wo die figurative Konstante einen Zeichenwert darstellt, steht die figurative Konstante für einen alphanumerischen Wert.
Stellt eine figurative Konstante eine Folge von einem oder mehreren Zeichen dar, bestimmt der Compiler die Länge der Zeichenfolge durch Anwendung der folgenden Regeln der Reihe nach:
Wird eine figurative Konstante in einer VALUE-Klausel angegeben oder mit einem anderen Datenfeld in Verbindung gebracht (z.B. in ein anderes Datenfeld übertragen), so wird sie zunächst nach rechts so oft wiederholt, bis die so entstehende Zeichenfolge mindestens ebensoviele Zeichenpositionen enthält wie das andere Datenfeld.
Hat diese Zeichenfolge nach Abschluss der Vervielfältigungsoperation mehr Zeichenpositionen als das andere Datenfeld, werden die überzähligen von rechts abgeschnitten.
Hat das Datenfeld eine Länge von Null, so wird bis auf 1 Zeichen abgeschnitten. Das Erweitern bzw. Abschneiden der Zeichenfolge der figurativen Konstanten geschieht vor und unabhängig von der etwaigen Anwendung einer JUSTIFIED-Klausel auf das andere Datenfeld.Wenn die figurative Konstante nicht ALL literal ist, dann hat die Zeichenfolge immer die Länge 1. Dies gilt insbesondere dann, wenn solche figurativen Konstanten in einer DISPLAY-, STOP-, STRING- oder UNSTRING-Anweisung auftreten.
Die Länge der Zeichenfolge ist gleich der Länge von literal.
Werden die figurativen Konstanten HIGH-VALUE(S) oder LOW-VALUE(S) in einer Übersetzungseinheit verwendet (außer in der ALPHABET-Klausel), hängt das aktuelle Zeichen, das mit jeder dieser Konstanten verknüpft ist, von der für das Programm angegebenen Sortierfolge des Zeichensatzes ab (siehe Abschnitt „OBJECT-COMPUTER-Paragraf", und „SPECIAL-NAMES-Paragraf").
Die figurative Konstante [ALL] symbolisches-zeichen stellt eines oder mehrere der Zei-chen dar, die als Wert von symbolisches-zeichen in der SYMBOLIC-CHARACTERS-Klausel des SPECIAL-NAMES-Paragrafen angegeben sind.
Die figurative Konstante ZERO stellt den numerischen Wert 0 dar oder ein oder mehrere Zeichen „0“, je nach Kontext, in dem sie verwendet wird.
Tabelle 6 zeigt die figurativen Konstanten und gibt Hinweise auf die Werte, die sie darstellen.
Figurative Konstante | entsprechender Wert | Beispiel 1) |
[ALL] ZERO oder
| eine oder mehrere Wiederholungen des Zeichens 0 (X‘F0‘ bzw. X‘0030‘) oder binär Null (X‘00‘), abhängig von der Definition des Datenfeldes. | Anweisung: Inhalt von FELD:
|
[ALL] SPACE oder
| eine oder mehrere Wiederholungen des Zeichens Leerzeichen (X‘40‘ bzw. X‘0020‘). | Anweisung: Inhalt von FELD: |
[ALL] HIGH-VALUE oder
| Ist COLLATING SEQUENCE nicht angegeben: eine oder mehrere Wiederholungen des Zeichens, das den höchsten Wert in der EBCDIC bzw. UTF-16 Sortierfolge hat (X‘FF‘ bzw. X‘FFFF‘). | Anweisung:
|
Ist COLLATING SEQUENCE angegeben: das Zeichen, das die höchste Position in der Sortierfolge des Programms hat. | Angabe SPECIAL-NAMES-Paragraf: ALPHABET ALPHATAB IS 193 THRU 1, 255 THRU 194. Die höchste Position hat das Zeichen, das an 194. Stelle des EBCDIC-Zeichensatz steht, das Zeichen A. A wird HIGH-VALUE zugeordnet. | |
[ALL] LOW-VALUE | Ist COLLATING SEQUENCE nicht angegeben: eine oder mehrere Wiederholungen des Zeichens, das den kleinsten Wert in der EBCDIC bzw. UTF-16 Sortierfolge hat (X‘00‘ bzw. X‘0000‘). | Anweisung:
|
Ist COLLATING SEQUENCE angegeben: das Zeichen, das die niedrigste Position in der Sortierfolge des Programms hat. | Angabe SPECIAL-NAMES-Paragraf: ALPHABET ALPHATAB IS „0“ „1“ „2“. Die niedrigste Position hat das Zeichen 0. 0 wird LOW-VALUE zugeordnet. | |
[ALL] QUOTE oder
| eine oder mehrere Wiederholungen des Doppelhochkommas. | Anweisung:
|
ALL literal | eine oder mehrere Wiederholungen der das Literal bildenden Zeichenfolge. Das Literal muss nichtnumerisch sein. | Anweisung:
|
[ALL] | eine oder mehrere Wiederholungen des Zeichens, das als Wert von symbolisches-zeichen in der SYMBOLIC-CHARACTER-Klausel des SPECIAL-NAMES-Paragrafen angegeben ist. | Definition:
|
Tabelle 6: COBOL figurative Konstanten und ihre Werte
1) In diesen Beispielen wird, wenn nichts anderes angegeben ist, angenommen, dass ALPHA und FELD jeweils als PIC X(4) definiert sind.
2) Kann durch Option auf X’7D’ geändert werden (siehe Handbuch „COBOL2000 Benutzerhandbuch“ [1]).