COBOL (Čeština)

SyntaxEdit

COBOL má anglickou syntaxi, která se používá k popisu téměř všeho v programu. Podmínku lze například vyjádřit jako x JE VĚTŠÍ NEŽ y nebo výstižněji jako x VÍCE y nebo x > y . Složitější podmínky lze „zkrátit“ odstraněním opakovaných podmínek a proměnných. Například a > b AND a > c OR a = d lze zkrátit na a > b AND c OR = d . Na podporu této anglické syntaxe má COBOL více než 300 klíčových slov. Některá klíčová slova jsou jednoduchá alternativní nebo pluralizovaná hláskování stejného slova, která poskytuje více výroků a klauzí podobných angličtině; např. klíčová slova IN a OF lze použít zaměnitelně, stejně jako JE a JSOU a HODNOTA a HODNOTY .

Každý program COBOL se skládá ze čtyř základních lexikálních položek: slova, literály, řetězce řetězců obrázků (viz § OBRAZ klauzule) a oddělovače. Slova zahrnují vyhrazená slova a identifikátory definované uživatelem. Mají až 31 znaků a mohou zahrnovat písmena, číslice, spojovníky a podtržítka. Literály zahrnují číslice (např. 12 ) a řetězce (např. "Dobrý den!" ). Oddělovače zahrnují znak mezery a čárky a středníky, za nimiž následuje mezera.

Program COBOL je rozdělen do čtyř divizí: divize identifikace, divize prostředí, datová divize a procedurální divize. Identifikační rozdělení určuje název a typ zdrojového prvku a je tam, kde jsou specifikovány třídy a rozhraní. Rozdělení prostředí určuje všechny funkce programu, které závisí na systému, na kterém běží, jako jsou soubory a znakové sady. Datové dělení se používá k deklaraci proměnných a parametrů. Rozdělení procedur obsahuje prohlášení programu. Každé rozdělení je rozděleno na oddíly, které se skládají z odstavců.

MetalanguageEdit

Syntaxe COBOL je obvykle popsána pomocí jedinečný metajazyk využívající závorky, závorky, tyče a podtržení. Metajazyk byl vyvinut pro původní specifikace COBOL. Ačkoli forma Backus – Naur v té době existovala, výbor o ní neslyšel.

Prvky metajazyka COBOL
Prvek Vzhled Funkce
Všechna velká písmena PŘÍKLAD Rezervované slovo
Podtržení PŘÍKLAD Rezervované slovo je povinné
závorky {} Může být vybrána pouze jedna možnost
Závorky Může být vybrána nula nebo jedna možnost
Elipsa Předchozí prvek se může opakovat
Bary {| |} Může být vybrána jedna nebo více možností. Libovolná možnost může být vybrána pouze jednou.
Může být vybrána nula nebo více možností. Libovolná možnost může být pouze vybráno jednou.

Jako příklad doporučuji následující popis výroku ADD:

Tento popis umožňuje následující varianty:

ADD 1 TO xADD 1, a, b TO x ROUNDED, y, z ROUNDEDADD a, b TO c ON SIZE ERROR DISPLAY "Error"END-ADDADD a TO b NOT SIZE ERROR DISPLAY "No error" ON SIZE ERROR DISPLAY "Error"

Formát kóduEdit

COBOL lze psát ve dvou formátech: pevný (výchozí) nebo volný. V pevném formátu musí být kód zarovnán tak, aby se vešel do určitých oblastí (pozdržení používání děrných štítků).Do COBOL 2002 to byly:

Název Sloupec (s) Použití
Oblast pořadového čísla 1–6 Původně použito pro kartu / čísla řádků (usnadňující mechanické třídění děrných štítků k zajištění zamýšlené sekvence programového kódu po manuální úpravě / zpracování), kompilátor tuto oblast ignoruje
oblast indikátoru 7 Zde jsou povoleny následující znaky:

  • * – řádek komentáře
  • / – Řádek komentáře, který bude vytištěn na nové stránce výpisu zdroje
  • - – Řádek pokračování, kde jsou slova nebo literály z předchozí řádek pokračuje
  • D – řádek povolen v režimu ladění, který je jinak ignorován
Oblast A 8–11 Obsahuje: DIVISION, SECTION a hlavičky procedur; Čísla úrovní 01 a 77 a deskriptory souborů / sestav
Oblast B 12–72 V oblasti není povolen žádný jiný kód A
Oblast názvu programu 73– Historicky až do sloupce 80 pro děrné štítky se používá k identifikaci programu nebo pořadí, kam karta patří

V COBOL 2002 byly oblasti A a B sloučeny a vytvořeny oblast programového textu, která nyní končí u sloupce definovaného implementátorem.

COBOL 2002 také představil kód ve volném formátu. Volně formátovaný kód lze umístit do libovolného sloupce souboru, stejně jako v novějších programovacích jazycích. Komentáře se zadávají pomocí *>, které lze umístit kamkoli a lze je také použít ve zdrojovém kódu pevného formátu. Pokračující řádky nejsou k dispozici a indikátor >>PAGE nahrazuje indikátor /.

Identification divisionEdit

Identifikační rozdělení identifikuje následující entitu kódu a obsahuje definici třídy nebo rozhraní.

Objektově orientované programování Upravit

Třídy a rozhraní jsou v COBOLu od roku 2002. Třídy mít tovární objekty, které obsahují metody třídy a proměnné, a objekty instance, které obsahují metody instance a proměnné. Dědičnost a rozhraní poskytují polymorfismus. Podpora obecného programování je poskytována prostřednictvím parametrizovaných tříd, které lze vytvořit pomocí jakékoli třídy nebo rozhraní. Objekty jsou uloženy jako odkazy, které mohou být omezeny na určitý typ. Metodu lze volat dvěma způsoby: příkaz INVOKE , který funguje podobně jako CALL , nebo prostřednictvím vyvolání vložené metody, což je analogické s používáním funkcí.

*> These are equivalent.INVOKE my-class "foo" RETURNING varMOVE my-class::"foo" TO var *> Inline method invocation

COBOL neposkytuje způsob, jak skrýt metody. Data třídy však lze skrýt tak, že je prohlásíte bez klauzule PROPERTY , která uživateli neposkytuje žádný způsob přístupu. V COBOLu 2014 bylo přidáno přetížení metody.

Environment divisionEdit

Dělení prostředí obsahuje konfigurační sekci a sekci input-output. Konfigurační část se používá k určení proměnných funkcí, jako jsou měnové znaky, národní prostředí a znakové sady. Sekce input-output obsahuje informace související se soubory.

FilesEdit

COBOL podporuje tři formáty souborů nebo organizace: sekvenční, indexované a relativní. V sekvenčních souborech jsou záznamy souvislé a je třeba je procházet postupně, podobně jako v propojeném seznamu. Indexované soubory mají jeden nebo více indexů, které umožňují náhodný přístup k záznamům a které lze podle nich třídit. Každý záznam musí mít jedinečný klíč, ale jiné alternativní klíče záznamu nemusí být jedinečné. Implementace indexovaných souborů se u různých dodavatelů liší, ačkoli běžné implementace, jako jsou C-ISAM a VSAM, jsou založeny na ISAM společnosti IBM. Relativní soubory, stejně jako indexované soubory, mají jedinečný klíč záznamu, ale nemají alternativní klíče. A klíčem relativního záznamu je jeho pořadová poloha; například 10. záznam má klíč 10. To znamená, že vytvoření záznamu pomocí klíče 5 může vyžadovat vytvoření (prázdných) předcházejících záznamů. Relativní soubory také umožňují sekvenční i náhodný přístup.

Běžným nestandardním rozšířením je řádková sekvenční organizace používaná ke zpracování textových souborů. Záznamy v souboru jsou ukončeny novým řádkem a mohou mít různou délku.

Data divisionEdit

Datové dělení je rozděleno do šesti sekcí, které deklarují různé položky: sekce file, pro spisové záznamy; sekce working-storage pro statické proměnné; sekce místního úložiště pro automatické proměnné; sekce propojení pro parametry a návratovou hodnotu; sekce sestavy a sekce obrazovky pro textová uživatelská rozhraní.

Aggregated dataEdit

Datové položky v COBOLu jsou deklarovány hierarchicky pomocí čísel úrovní, které označují, zda je datová položka součástí jiné. Položka s vyšším číslem úrovně je podřízena položce s nižším číslem. Datové položky nejvyšší úrovně s počtem úrovní 1 se nazývají záznamy. Položky, které mají podřízená agregovaná data, se nazývají skupinové položky; ty, které tomu tak není, se nazývají základní položky. Čísla úrovní použitá k popisu standardních datových položek jsou mezi 1 a 49.

Ve výše uvedeném příkladu je elementární položka num a skupinová položka the-date jsou podřízeny záznamu some-record , zatímco elementární položky rok , měsíc a -day jsou součástí skupinové položky the-date .

Podřízené položky lze oddělit pomocí IN (nebo OF ). Zvažte například výše uvedený ukázkový kód a následující příklad:

 01 sale-date. 05 the-year PIC 9(4). 05 the-month PIC 99. 05 the-day PIC 99.

Názvy rok , měsíc a den jsou samy o sobě nejednoznačné, protože s těmito názvy je definována více než jedna datová položka. K určení konkrétní datové položky, například jedné z položek obsažených ve skupině sale-date , by programátor použil the-year IN sale-date (or the equivalent the year OF sale-date ). (Tato syntaxe je podobná „tečkové notaci“ podporované většinou současných jazyků.)

Další datové úrovně Upravit

K deklaraci přeskupení se používá číslo úrovně 66. dříve definované položky, bez ohledu na to, jak jsou tyto položky strukturovány. Tato datová úroveň, na kterou odkazuje také související klauzule RENAMES , se používá zřídka a kolem roku 1988 se obvykle nacházela ve starých programech. Jeho schopnost ignorovat data hierarchické a logické struktury znamenala, že jeho použití nebylo doporučeno a mnoho instalací jeho používání zakázalo.

Číslo úrovně 77 označuje, že je položka samostatná, a v takových situacích je ekvivalentní číslo úrovně 01. Například následující kód deklaruje dvě datové položky na úrovni 77, název-vlastnosti a sales-region , což jsou neskupinové datové položky, které jsou nezávislé na jiných datových položkách (nejsou jim podřízeny):

 77 property-name PIC X(80). 77 sales-region PIC 9(5).

Číslo 88 úrovně deklaruje název podmínky (tzv. úroveň 88), který je pravdivý, když její nadřazená datová položka obsahuje jednu z hodnot uvedených v její VALUE . Například následující kód definuje dvě položky stavu názvu na 88 úrovni, které jsou pravdivé nebo nepravdivé v závislosti na aktuální hodnotě datových znaků datové položky mzda-typ . Pokud datová položka obsahuje hodnotu "H" , podmínka-název mzda za hodinu je true, zatímco když obsahuje hodnotu "S" nebo "Y" , podmínka-name mzda je roční je pravdivá. Pokud datová položka obsahuje jinou hodnotu, oba názvy podmínek jsou nepravdivé.

 01 wage-type PIC X. 88 wage-is-hourly VALUE "H". 88 wage-is-yearly VALUE "S", "Y".

Datové typy Upravit

Standardní COBOL poskytuje následující datové typy:

Datový typ Ukázka prohlášení Poznámky
Abecední PIC A (30) Může obsahovat pouze písmena nebo mezery
Alfanumerické PIC X (30) Může obsahovat jakékoli znaky
Boolean PIC 1 POUŽITÍ BIT Data uložená ve formě 0 s a 1 s jako binární číslo
Index INDEX VYUŽITÍ Používá se k odkazování na prvky tabulky
Národní PIC N (30) Podobně jako alfanumerický, ale s použitím rozšířeného znaku sada, např. UTF-8
Numeric PIC 9 (5) V9 (5) Může obsahovat pouze čísla
Objekt REFERENCE POUŽITÍ OBJEKTU Může odkazovat na objekt nebo NULL
Ukazatel POUŽITÍ POINTER

Bezpečnost typu je v COBOLu proměnlivá.Číselná data se bezobslužně převádějí mezi různými reprezentacemi a velikostmi a alfanumerická data lze umístit do jakékoli datové položky, kterou lze uložit jako řetězec, včetně číselných a skupinových dat. Naproti tomu odkazy na objekty a ukazatele lze přiřadit pouze z položek stejného typu a jejich hodnoty mohou být omezeny na určitý typ.

PICTURE clauseEdit

A PICTURE (nebo PIC ) je řetězec znaků, z nichž každý představuje část datové položky a co může obsahovat. Některé obrazové znaky určují typ položky a kolik znaků nebo číslic zabírá v paměti. Například 9 označuje desetinnou číslici a S označuje, že položka je podepsaný. Další obrazové znaky (tzv. Vkládací a editační znaky) určují, jak má být položka formátována. Například řada znaků + definuje pozice znaků a také to, jak má být znak znaku začátku umístěn do konečných dat znaků; nečíselný znak zcela vpravo bude obsahovat znak položky, zatímco ostatní pozice znaků odpovídající + nalevo od této pozice budou obsahovat mezeru. Opakováno znaky lze specifikovat výstižněji zadáním čísla v závorkách za obrázkovým znakem; například 9 (7) je ekvivalentní s 9999999 . Specifikace obrázků obsahující pouze číslici ( 9 ) a znak ( Znaky S ) definují čistě číselné datové položky, zatímco specifikace obrázků obsahují abecední ( A ) nebo alfanumerické ( X ) znaky definují alfanumerické datové položky. Přítomnost dalších formátovacích znaků definuje upravené číselné nebo upravené alfanumerické datové položky.

Klauzule USGEEdit

POUŽITÍ deklaruje formát data jsou uložena v. V závislosti na datovém typu je možné je doplnit nebo použít namísto klauzule PICTURE . I když ji lze použít k deklaraci ukazatelů a odkazů na objekty, je většinou zaměřena na specifikování číselných typů. Jedná se o číselné formáty:

  • Binární, kde je minimální velikost určena buď klauzulí PICTURE, nebo USAGE klauzule jako BINARY-LONG.
  • POUŽITÍ POČÍTAČE , kde mohou být data uloženy v jakémkoli formátu, který implementace poskytuje; často ekvivalentní BINÁR VYUŽITÍ
  • DISPLEJ POUŽITÍ , výchozí formát , kde jsou data uložena jako řetězec
  • s plovoucí desetinnou čárkou, buď ve formátu závislém na implementaci, nebo podle IEEE 754.
  • USAGE NATIONAL , kde jsou data uložena jako řetězec pomocí rozšířené znakové sady
  • USAGE PACKED-DECIMAL , kde jsou data je uložen v nejmenším možném desítkovém formátu (obvykle zabaleno v binárním kódu s desetinnou čárkou)

Report writerEdit

Zapisovač sestav je deklarativní nástroj pro vytváření sestav. Programátor musí pouze určit rozvržení sestavy a data potřebná k jejímu vytvoření, což je osvobodí od nutnosti psát kód pro zpracování věcí, jako jsou konce stránek, formátování dat a záhlaví a zápatí.

Sestavy jsou spojeny se sestavou soubory, což jsou soubory, do kterých lze zapisovat pouze prostřednictvím příkazů pro vytváření sestav.

 FD report-out REPORT sales-report.

Každá sestava je definována v sekci sestavy datového dělení. Sestava je rozdělena do skupin sestav, které definují nadpisy, patky a podrobnosti sestavy. Sestavy fungují kolem přestávek v hierarchickém řízení. K přestávkám v ovládání dochází, když ji klíčová proměnná změní hodnotu; například při vytváření sestavy s podrobnými objednávkami zákazníků K přerušení kontroly může dojít, když program dosáhne objednávek jiného zákazníka. Zde je příklad popisu sestavy pro sestavu, která udává tržby prodejce a která varuje před neplatnými záznamy:

Výše uvedený popis sestavy popisuje následující rozložení:

Zapisovač zpráv řídí čtyři příkazy: INITIATE , který připravuje zapisovač sestav k tisku; GENERATE , která vytiskne skupinu sestav; SUPPRESS , který potlačuje tisk skupiny sestav; a TERMINATE , které ukončuje zpracování sestavy.U výše uvedeného příkladu sestavy prodeje může divize postupu vypadat takto:

 OPEN INPUT sales, OUTPUT report-out INITIATE sales-report PERFORM UNTIL 1 <> 1 READ sales AT END EXIT PERFORM END-READ VALIDATE sales-record IF valid-record GENERATE sales-on-day ELSE GENERATE invalid-sales END-IF END-PERFORM TERMINATE sales-report CLOSE sales, report-out .

Použití nástroje Report Writer se obvykle lišilo značně; některé organizace to hojně využívaly a jiné vůbec. Kromě toho se implementace Report Writeru pohybovala v kvalitě, přičemž ty na spodním konci někdy za běhu využívaly nadměrné množství paměti.

Procedure divisionEdit

ProceduresEdit

Sekce a odstavce v dělení procedur (souhrnně nazývané procedury) lze použít jako popisky a jako jednoduché podprogramy. Na rozdíl od jiných divizí nemusí odstavce být v sekcích. Provádění probíhá dolů procedurami programu, dokud není ukončen. Chcete-li použít procedury jako podprogramy, PERFORM používá se sloveso code>.

Příkaz PERFORM se poněkud podobá volání procedury v moderním jazyce v tom smyslu, že se výkon vrátí do kódu následovat příkaz PERFORM na konci volaného kódu; neposkytuje však žádný mechanismus pro předávání parametrů nebo pro vrácení výsledné hodnoty. Pokud je podprogram vyvolán pomocí jednoduchého příkazu, jako je podprogram PERFORM , vrátí se ovládací prvek na konci volané procedury. PERFORM je však neobvyklý v tom, že jej lze použít k volání rozsahu zahrnujícího posloupnost několika sousedních procedur. To se provádí pomocí konstrukce PERFORM sub-1 THRU sub-n :

PROCEDURE so-and-so. PERFORM ALPHA PERFORM ALPHA THRU GAMMA STOP RUN.ALPHA. DISPLAY "A".BETA. DISPLAY "B".GAMMA. DISPLAY "C".

Výstup tohoto programu bude: „AABC“.

PERFORM se také liší od konvenčních volání procedur v že alespoň tradičně neexistuje pojem zásobníku volání. V důsledku toho jsou možná vnořená vyvolání (sekvence kódu PERFORM „ed může provést PERFORM statement), ale vyžadují zvláštní péči, pokud jsou části stejného kódu spuštěny oběma vyvoláními. Problém nastane, když kód ve vnitřním vyvolání dosáhne výstupního bodu vnějšího vyvolání. Více formálně, pokud ovládací prvek prochází výstupní bod PERFORM vyvolání, které bylo voláno dříve, ale ještě nebylo dokončeno, standard COBOL 2002 oficiálně stanoví, že chování není definováno.

Důvodem je to, že COBOL, spíše než „zpáteční adresa“, pracuje s tím, co lze nazvat pokračovací adresou. Když tok řízení dosáhne konce jakéhokoli postupu, vyhledá se pokračovací adresa a na tuto adresu se přenese řízení. program běží, adresa pokračování pro každý postup je inicializována na počáteční adresu profesionála postup, který přichází dále v textu programu, takže pokud nedojde k žádným příkazům PERFORM , bude tok programu procházet shora dolů. Když se ale provede příkaz PERFORM , upraví adresu pokračování volané procedury (nebo poslední proceduru volaného rozsahu, pokud PERFORM THRU ), takže se ovládací prvek na konci vrátí na místo volání. Původní hodnota se uloží a poté se obnoví, ale existuje pouze jedna paměťová pozice. Pokud dvě vnořené vyvolání fungují na překrývajícím se kódu, mohou navzájem narušovat správu adresy pokračování několika způsoby.

Následující příklad (převzato z Veerman & Verhoeven 2006) ilustruje problém:

Lze očekávat, že výstup tohoto programu bude „1 2 3 4 3“: Po zobrazení „2“ se zobrazí druhý PERFORM způsobí zobrazení „3“ a „4“ a poté první vyvolání pokračuje „3“. V tradičních implementacích COBOL tomu tak není. Spíše první PERFORM příkaz nastaví adresu pokračování na konci LABEL3 tak, že přeskočí zpět na volání webu uvnitř LABEL1 . Druhý příkaz PERFORM nastaví návratnost na konci LABEL4 , ale nezmění adresu pokračování LABEL3 v očekávání, že bude výchozím pokračováním. Když tedy vnitřní vyvolání dorazí na konec LABEL3 , přeskočí zpět na vnější PERFORM příkaz code> a program přestane tisknout pouze „1 2 3“. Na druhou stranu v některých implementacích COBOL, jako je kompilátor TinyCOBOL s otevřeným zdrojovým kódem, dva příkazy PERFORM se navzájem neinterferují a výstup je skutečně "1 2 3 4 3 ".Chování v takových případech je tedy nejen (možná) překvapivé, ale také nepřenosné.

Zvláštním důsledkem tohoto omezení je, že PERFORM nelze použít k zápisu rekurzivního kódu. Další jednoduchý příklad pro ilustraci (mírně zjednodušený z Veerman & Verhoeven 2006):

 MOVE 1 TO A PERFORM LABEL STOP RUN.LABEL. DISPLAY A IF A < 3 ADD 1 TO A PERFORM LABEL END-IF DISPLAY "END".

Lze očekávat, že výstup bude „1 2 3 END END END“, a ve skutečnosti to budou některé kompilátory COBOL produkovat. Ale někteří kompilátoři, jako je IBM COBOL, vytvoří kód, který vytiskne „1 2 3 END END END END END …“ atd., Tiskne „END“ dokola v nekonečné smyčce. Vzhledem k tomu, že je k dispozici omezený prostor pro ukládání adres pro pokračování zálohování, zálohy se v průběhu rekurzivních vyvolání přepíšou a vše, co lze obnovit, je skok zpět na DISPLAY "END" .

StatementsEdit

COBOL 2014 má 47 příkazů (nazývaných také slovesa), které lze seskupit do následujících širokých kategorií: tok řízení, I / O, manipulace s daty a spisovatel zprávy. Příkazy pro vytváření sestav jsou popsány v části pro vytváření sestav.

Řízení tokuEdit

Podmíněné příkazy COBOL jsou IF and EVALUATE . EVALUATE je příkaz podobný přepínači s přidanou schopností vyhodnotit více hodnoty a podmínky. To lze použít k implementaci rozhodovacích tabulek. K ovládání CNC soustruhu lze například použít následující:

EVALUATE TRUE ALSO desired-speed ALSO current-speed WHEN lid-closed ALSO min-speed THRU max-speed ALSO LESS THAN desired-speed PERFORM speed-up-machine WHEN lid-closed ALSO min-speed THRU max-speed ALSO GREATER THAN desired-speed PERFORM slow-down-machine WHEN lid-open ALSO ANY ALSO NOT ZERO PERFORM emergency-stop WHEN OTHER CONTINUEEND-EVALUATE

Příkaz PERFORM se používá k definování smyček, které se provádějí, dokud není splněna podmínka (nikoli pravda, což je v jiných jazycích běžnější). se také používá k volání procedur nebo rozsahů procedur (další podrobnosti najdete v sekci procedur). CALL a INVOKE volání podprogramů a metod. Název podprogramu / metody je obsažen v str což může být literál nebo datová položka. Parametry lze předat odkazem, podle obsahu (kde je kopie předána odkazem) nebo podle hodnoty (ale pouze pokud je k dispozici prototyp). ZRUŠIT uvolní podprogramy z paměti. PŘEJÍT NA způsobí, že program přejde na zadaný postup.

GOBACK je návratový příkaz a příkaz STOP zastaví program. Příkaz EXIT má šest různých formátů: lze jej použít jako příkaz return, příkaz break, příkaz continue, značku konce nebo k opuštění procedury.

Výjimky jsou vyvolány příkazem RAISE a jsou zachyceny popisovačem nebo deklarativním způsobem definovaným v DEKLARATIVY část dělení procedury. Deklarativy jsou sekce začínající příkazem USE , který určuje chyby, které mají být zpracovány. Výjimkou mohou být jména nebo objekty. RESUME se používá v deklarativním režimu k přeskočení na příkaz za příkazem, který vyvolal výjimku, nebo na proceduru mimo DEKLARATIVY . Na rozdíl od jiných jazyků nemusí nezachycené výjimky program ukončit a program může pokračovat beze změny.

I / OEdit

Soubor I / O zpracovává samo popisující OTEVŘENO , ZAVŘENO , PŘEČTĚNO , a PÍSAT příkazy spolu s dalšími třemi: REWRITE , který aktualizuje záznam; START , který vybere následující záznamy, k nimž má přístup, vyhledáním záznamu s určitým klíčem; a ODEMKNOUT , čímž se uvolní zámek pro poslední přístupný záznam.

Interakce uživatele se provádí pomocí ACCEPT a DISPLAY .

Data manipulationEdit

S daty manipulují následující slovesa:

  • INITIALIZE , která nastaví datové položky na výchozí hodnoty.
  • PŘESUNUTÍ , který přiřazuje hodnoty datovým položkám; MOVE CORRESPONDING přiřadí odpovídající pole se stejným názvem.
  • SET , který má 15 formátů: může upravovat indexy, přiřazovat odkazy na objekty a měnit tabulku kapacity, mimo jiné funkce.
  • PŘIDAT , SUBTRACT , MULTIPLY , DIVIDE a COMPUTE , které zpracovávají aritmetika (s COMPUTE přiřazením výsledku vzorce k proměnné).
  • ALLOCATE a ZDARMA , které zpracovávají dynamickou paměť.
  • VALIDATE , který ověřuje a distribuuje data, jak je uvedeno v popisu položky v datovém dělení.
  • STRING a UNSTRING , které spojují a rozdělují řetězce.
  • INSPECT , který odpovídá nebo nahradí instance zadaných podřetězců v řetězci.
  • SEARCH , která vyhledá v tabulce první položku splnění podmínky.

Soubory a tabulky jsou tříděny pomocí SORT a SLOUČIT sloveso sloučí a seřadí soubory. Sloveso RELEASE poskytuje záznamy k řazení a RETURN načte seřazené záznamy v uvedeném pořadí.

Scope terminationEdit

Některá prohlášení, například IF a PŘEČÍST , mohou samy obsahovat prohlášení. Taková prohlášení mohou být ukončena dvěma způsoby: tečkou (implicitní ukončení), která ukončí všechny neukončené obsažené příkazy, nebo terminátorem oboru, který ukončí nejbližší odpovídající otevřený příkaz.

Vnořené příkazy ukončené období jsou běžným zdrojem chyb. Prozkoumejte například následující kód:

IF x DISPLAY y. DISPLAY z.

Zde je záměrem zobrazit y a z je-li podmínka x splněna. z se však zobrazí bez ohledu na hodnotu x, protože příkaz IF je ukončen o chybné období po DISPLAY y .

Další chyba je výsledkem problému houpajícího se jiného, když dva IF prohlášení lze přidružit k ELSE.

IF x IF y DISPLAY aELSE DISPLAY b.

Ve výše uvedeném fragmentu je ELSE přidružen k příkazu IF y namísto IF x prohlášení způsobující chybu. Před zavedením explicitních ukončovacích prvků rozsahu by jeho zabránění vyžadovalo, aby ELSE NEXT SENTENCE bylo umístěno za vnitřní IF .

Samočinná úprava codeEdit

Původní specifikace COBOL (1959) podporovala nechvalně známou ALTER X PRO POSTUP NA Y prohlášení, pro které mnoho překladačů vygenerovalo samočinný kód. X a Y jsou popisy procedur a jednotlivé PŘEJÍT NA příkaz v proceduře X provedený po takovém ALTER příkazu znamená Přejít NA Y . Mnoho překladačů to stále podporuje, ale bylo to považováno za zastaralé ve standardu COBOL 1985 a odstraněno v roce 2002.

Příkaz ALTER byl špatně považován protože to podkopalo „lokalitu kontextu“ a ztížilo pochopení celkové logiky programu. Jak napsal autor učebnice Daniel D. McCracken v roce 1976, kdy „někdo, kdo program nikdy předtím neviděl, se s ním musí co nejrychleji seznámit. , někdy pod kritickým časovým tlakem, protože program selhal … pohled na příkaz GO TO v odstavci sám o sobě, který signalizuje existenci neznámého počtu příkazů ALTER na neznámých místech v celém programu, vyvolává strach v srdce nejstatečnějšího programátora. „

Hello, worldEdit

Program„ Hello, world “v COBOLU:

 IDENTIFICATION DIVISION. PROGRAM-ID. hello-world. PROCEDURE DIVISION. DISPLAY "Hello, world!" .

Když – nyní slavný – příklad programu „Hello, World!“ v C Programming Language byl poprvé publikován v roce 1978, podobný mai Ukázka programu nframe COBOL by byla předložena prostřednictvím JCL, velmi pravděpodobně pomocí čtečky děrovacích karet a 80 děrovacích karet. Níže uvedený seznam s prázdnou DATA DIVIZI byl testován pomocí GNU / Linux a emulátoru System / 370 Hercules se spuštěným MVS 3.8J. JCL, napsaný v červenci 2015, je odvozen z výukových programů Hercules a ukázek hostovaných Jayem Moseleym. V souladu s programováním COBOL té doby se HELLO, WORLD zobrazuje velkými písmeny.

Po odeslání JCL se konzola MVS zobrazila:

 19.52.48 JOB 3 $HASP100 COBUCLG ON READER1 COBOL BASE TEST 19.52.48 JOB 3 IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG ISSUED 19.52.48 JOB 3 $HASP373 COBUCLG STARTED - INIT 1 - CLASS A - SYS BSP1 19.52.48 JOB 3 IEC130I SYSPUNCH DD STATEMENT MISSING 19.52.48 JOB 3 IEC130I SYSLIB DD STATEMENT MISSING 19.52.48 JOB 3 IEC130I SYSPUNCH DD STATEMENT MISSING 19.52.48 JOB 3 IEFACTRT - Stepname Procstep Program Retcode 19.52.48 JOB 3 COBUCLG BASETEST COB IKFCBL00 RC= 0000 19.52.48 JOB 3 COBUCLG BASETEST LKED IEWL RC= 0000 19.52.48 JOB 3 +HELLO, WORLD 19.52.48 JOB 3 COBUCLG BASETEST GO PGM=*.DD RC= 0000 19.52.48 JOB 3 $HASP395 COBUCLG ENDED

Řádek 10 výše uvedeného seznamu konzoly je zvýrazněno kvůli efektu, zvýraznění není součástí skutečného výstupu konzoly.

Seznam přidruženého kompilátoru vygenerovaný na čtyřech stránkách s technickými podrobnostmi a informacemi o běhu úlohy, pro jediný řádek výstupu ze 14 řádků COBOL.

Leave a Reply

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *