1.3. Literály Programátorské slovo "literál" označuje souhrnně "numerický-literál" a "alfanumerický-literál". 1.3.1. Numerické literály Programátorské slovo "numerický-literál" označuje konstantní numerickou hodnotu, která je jednoznačně určena tvarem zápisu literálu. Vytváří se z číslic, znamének plus a minus, znaku tečka (v této souvislosti jí říkáme "desetinná tečka") a písmene E (nebo e), přičemž tyto znaky jsou seřazeny za sebou bez mezer. Numerické literály lze obecně vytvářet podle následujících dvou formátů, kde "cifry" znamenají neprázdnou posloupnost číslic 0 až 9: a) [+ | -] [cifry] [.cifry] Musí být použita alespoň jedna číslice, přičemž celkový počet číslic nesmí přesáhnout 30. Jak je vidět, znaménko nemusí být použito vůbec, přičemž v případě použití musí být prvním znakem literálu. Desetinná tečka smí být použita nejvýše jedna, přičemž může stát na začátku literálu nebo bezprostředně po znaménku, nesmí však stát na konci literálu. Programátorské slovo "celé-číslo" označuje speciální případ numerického literálu vytvořeného pouze z číslic, před nimiž může stát ještě znaménko +, jehož hodnota je nejvýše 2147483647. b) [+ | -] [cifry] . [cifry] E [+ | -] číslice [číslice] Před písmenem E (lze použít i malé e) stojí vlastně numerický literál vytvořený podle formátu a), který musí povinně obsahovat desetinnou tečku, přičemž však tato desetinná tečka smí stát i na jeho konci. I zde celkový počet číslic stojících před písmenem E musí být alespoň 1 a nejvýše 30. Za písmenem E následuje tzv. exponent, jenž může (ale nemusí) mít znaménko, a musí obsahovat jednu nebo dvě číslice 0 až 9. Hodnota exponentu smí být -99 až +99, po odečtení počtu číslic za desetinnou tečkou se však nesmíme dostat pod -127. Poznámka: Hodnota numerického literálu obsahujícího písmeno E je rovna součinu hodnoty jeho mantisy (stojící před E) a čísla 10 umocněného na hodnotu exponentu (stojícího za E). Lze-li určitou numerickou hodnotu vyjádřit jak pomocí formátu s E, tak i pomocí formátu bez E, je to vždy (s výjimkou příkazů CALL, DISPLAY a EXHIBIT) zcela rovnocenné; důležitá je pouze hodnota numerického literálu a překladač ji zpracuje nezávisle na tom, v jakém formátu byl numerický literál ve zdrojovém programu zapsán. Numerický literál s písmenem E musí být použit tehdy, pokud by při zápisu bez E počet cifer před tečkou nebo za tečkou převýšil 30; jedná se většinou o použití v souvislosti s exponenciálními položkami. Příklady: celá čísla: 0 384 +0000 5 +600 1234567 +7 0935 +999999999 numerické literály vytvořené dle formátu a) (tj. bez E), které nepatří mezi celá čísla: 12.34 .0007 +.3 -0 0.532 +384.56 1.0 -5 .532 -1234.9 +3.0 0000000001 000.000 -.0024 -12345 1234567890 numerické literály vytvořené dle formátu b) (tj. s E): -12.34E5 (hodnota = -12.34 * 105 = -1234000) .2E-12 (hodnota = .2 * 10-12 = .0000000000002) -345.E+34 (hodnota = -345 * 10+34) +0.0087E-6 (hodnota = +0.0087 * 10-6 = +0.0000000087) 56.E14 (hodnota = 56 * 1014 = 5600000000000000) -.123451234512345123451234512345E-69 654321654321654321654321654321.E+46 chybné zápisy numerických literálů: 0000000000000000000000000000001 (více než 30 cifer) 325. (desetinná tečka je na konci literálu) 15+ (nepřípustná poloha znaménka) 12,345.67 (nepřípustný znak čárka) 12 345 (nepřípustný znak mezera) +.E5 (před E není ani jedna číslice) 72E-6 (před E není desetinná tečka) 1.2E005 (exponent má více než dvě číslice) 1.2E5.0 (exponent obsahuje desetinnou tečku) Poznámka: Je-li v paragrafu SPECIAL-NAMES uvedena klauzule "DECIMAL-POINT IS COMMA" (viz 3.1.1.), zapisuje se v numerických literálech místo desetinné tečky (desetinná) čárka. 1.3.2. Alfanumerické literály Programátorské slovo "alfanumerický-literál" označuje konstantní znakovou hodnotu, která je jednoznačně určena tvarem zápisu literálu. Alfanumerický literál vždy začíná úvodním apostrofem (') nebo uvozovkou ("), za nímž následuje 1 až 255 libovolných znaků (pro každý znak je přípustných všech 255 možných bitových kombinací s výjimkou znaku "nový řádek"), načež je celý alfanumerický literál ukončen koncovým apostrofem (začínal-li apostrofem) nebo uvozovkou (začínal-li uvozovkou). V témže zdrojovém programu lze zapisovat alfanumerické literály ohraničené apostrofy ('ABC') i ohraničené uvozovkami ("ABC") nezávisle na uvedení parametru CBL QUOTE. Literál však musí být vždy ukončen tímž znakem, jímž byl zahájen (nelze tedy psát 'ABC" ani "ABC'), a tímž znakem musí být zahájeno i každé pokračování alfanumerického literálu na pokračovacích řádcích (viz dále). Hodnotou literálu (tj. textem, který se přesunuje, srovnává, tiskne apod.) je pouze jeho "vnitřek" bez úvodního a bez koncového apostrofu (uvozovky). Délkou literálu nazýváme počet znaků mezi úvodním a koncovým apostrofem (uvozovkou), přičemž žádný z těchto apostrofů (uvozovek) se do délky literálu nezapočítává. Všechny znaky uvedené mezi oběma krajními apostrofy (uvozovkami) jsou "plnohodnotné" a počítají se do délky literálu (tedy i mezery, tečky, čárky, netisknutelné znaky apod.). Programátorské slovo 'znak' označuje alfanumerický literál, který obsahuje pouze jeden znak (tj. má délku 1). Příklady: 'JAKPAK JE DNES U NAS DOMA?' délka = 26 '123456' délka = 6 '%' délka = 1, tedy 'znak' "PRAHA" délka = 5 Pokračování alfanumerického literálu: Alfanumerický literál smí začínat na jednom (tzv. úvodním) řádku a pokračovat na jednom nebo na několika následujících (tzv. pokračovacích) řádcích (při štítkovém formátu je to u literálu, který má mít více než 63 znaků, dokonce nezbytné). Platí zde následující pravidla: a) Na úvodním řádku začíná literál úvodním apostrofem (uvozovkou), ležícím v poli A nebo B zdrojového řádku (viz 1.11., jsou to sloupce 8.-72. nebo 1. až poslední). V indikačním sloupci úvodního řádku (viz 1.11., je to sloupec 7. nebo 1.) je zcela normální obsazení (např. mezera), nikoliv tedy pomlčka - (samozřejmě s výjimkou případu, kdy na úvodním řádku pokračuje alfanumerický literál z předcházejícího řádku). b) Na každém pokračovacím řádku je třeba zapsat do indikačního sloupce pomlčku (-) a dále kdekoliv v poli B zdrojového řádku znovu úvodní apostrof resp. uvozovku (týž znak jako na úvodním řádku), před nímž (počínaje znakem následujícím za pomlčkou v indikačním sloupci) musí být na zdrojovém řádku samé mezery. c) Z úvodního a dále z prvního až z předposledního pokračovacího řádku se do alfanumerického literálu počítají znaky následující za úvodním apostrofem až do posledního sloupce pole B včetně (ve štítkovém formátu je to do 72.sloupce včetně, v terminálovém formátu je to až do konce zdrojového řádku). d) Na posledním pokračovacím řádku je třeba za posledním znakem textu zapsat koncový apostrof resp. uvozovku, přičemž se do alfanumerického literálu počítají všechny znaky mezi úvodním a koncovým apostrofem (uvozovkou) na tomto řádku. Koncový apostrof (uvozovka) smí ležet i bezprostředně za úvodním apostrofem (uvozovkou). e) Žádný z úvodních apostrofů (uvozovek) ani koncový apostrof (uvozovka) se nepočítají do hodnoty ani do délky alfanumerického literálu. f) Kdekoliv mezi pokračovacími řádky smí být poznámkové řádky (tj. s * nebo I nebo / v indikačním sloupci) nebo řádky se samými mezerami v indikačním sloupci i v polích A i B. g) Alfanumerický literál smí začínat ve zdrojovém textu zařazovaném pomocí pseudopříkazu COPY a pokračovat ve hlavním zdrojovém programu. Příklad (předpokládáme štítkový formát): -- 7. sloupec 72. sloupec------------ | MOVE 'AB | - ' CD' TO E. <--- Toto je pokračovací řádek Zdrojový text je: MOVE 'AB CD' TO E. ------7. sloupec 72. sloupec-------------- | DISPLAY 'LITERA| - <-----> 'L DLOUHY JA| - <--|--> 'KO | - <--|--> 'LOVOSICE'. | | pokračovací řádky Zdrojový text je: DISPLAY 'LITERAL DLOUHY JAKO LOVOSICE'. Zdvojené apostrofy (uvozovky) uvnitř alfanumerického literálu: Je přípustné, aby byl uvnitř alfanumerického literálu zapsán i týž znak, jímž je literál ohraničen, tzn. apostrof (') nebo uvozovka ("). Je však třeba místo každého apostrofu (uvozovky), jenž má být zahrnut v hodnotě literálu, zapsat dva apostrofy (dvě uvozovky) bezprostředně za sebou. Do hodnoty alfanumerického literálu i do jeho délky se pak započítává pouze jeden z nich, zatímco druhý slouží pouze jako informace pro překladač. Zdvojené apostrofy (uvozovky) lze zapsat i v alfanumerickém literálu s pokračováním; je však zakázáno rozdělit literál právě mezi nimi. Příklady: Alfanumerický literál 'AB''C''D' má délku 6 znaků a hodnotu AB'C'D. Alfanumerický literál '''''''' má délku 3 znaky a hodnotu '''. Alfanumerický literál '''' má délku 1 znak a hodnotu '; lze jej tedy použít tam, kde formát předepisuje programátorské slovo 'znak'. Zápis ALL '''' je (pokud je ve formátu ALL-klauzule přípustná) ekvivalentní s figurativní konstantou QUOTE. Alfanumerické literály "AB""C""D", """""""" a """" mají délky 6, 3 a 1 znak a hodnoty AB"C"D, """ a ". V alfanumerickém literálu ohraničeném apostrofy se vnitřní uvozovky nezdvojují; podobně v alfanumerickém literálu ohraničeném uvozovkami se vnitřní apostrofy nezdvojují. Výše zmíněné alfanumerické literály je tedy možno zapsat i bez zdvojování jako "AB'C'D", "'''", "'", 'AB"C"D', '"""' a '"'. Hexadecimální zápis alfanumerického literálu: Aby bylo možno snadno pracovat i s netisknutelnými (a tedy obtížně vkládanými) znaky, byla přidána možnost zapisovat alfanumerické literály hexadecimálními číslicemi. Místo apostrofů pak píšeme dvojité kříže (#), mezi nimiž musí být zapsán sudý počet hexadecimálních číslic 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Každá dvojice hexadecimálních číslic znamená jeden znak ve výsledné hodnotě alfanumerického literálu. Délka výsledného literálu je rovna polovině z počtu znaků uvedených mezi úvodním a koncovým dvojitým křížem. Literál smí být zapsán i na několika zdrojových řádcích; pro jeho pokračování platí stejná pravidla jako u literálů ohraničených apostrofy nebo uvozovkami. Hexadecimální zápis alfanumerického literálu lze použít všude tam, kde je povolen obyčejný alfanumerický literál; platí pro něj přesně stejná interpunkční pravidla. Jsou-li mezi oběma krajními dvojitými kříži pouze dvě hexadecimální číslice, je výsledná délka 1 znak a literál lze použít na místě programátorského slova 'znak'. Hexadecimální zápis alfanumerického literálu je výhodný např. pro vytvoření překódovacích tabulek, jako argument příkazu CALL, při alfanumerickém naplňování nebo testování numerických položek apod. Hexadecimálním zápisem se ovšem do zdrojového cobolského programu vnáší závislost na použitém kódu (ASCII) a případně i na způsobu zakódování numerických položek v paměti, což může znesnadnit pozdější přenášení zdrojového cobolského programu do jiné implementace jazyka COBOL. Příklady: a) #4D5820434F424F4C# je ekvivalentní s 'MX COBOL', délka je 8 znaků. b) 02 B PIC X(10000) VALUE ALL #FE#. c) 02 A OCCURS 1000 VALUE ALL #0053FBFF49424D#. 05 B PIC S999 COMP-3. 05 C PIC S9(4) COMP. 05 D PIC XXX. d) CALL 'PODPR' USING ALFA, #1013#, 28, #FFFFFC00#. e) EXAMINE C REPLACING ALL #01# BY #A8#.