COBOL (Magyar)

SyntaxEdit

A COBOL angol nyelvű szintaxissal rendelkezik, amely a program szinte minden leírására szolgál. Például egy feltételt kifejezhetünk úgy, hogy x NAGYOBB NEM Y vagy tömörebben x GREATER y vagy x > y . A bonyolultabb állapotokat az ismételt feltételek és változók eltávolításával “rövidíteni” lehet. Például: a > b ÉS a > c VAGY a = d kód> rövidíthető a > b ÉS c OR = d értékre. Ennek az angolszerű szintaxisnak a támogatására a COBOL több mint 300 kulcsszóval rendelkezik. Néhány kulcsszó egyszerű alternatív vagy pluralizált írásmód ugyanannak a szónak, amely több angol jellegű állítást és tagmondatot tartalmaz; például a IN és a OF kulcsszavak felcserélhetők, mint a IS és VAN , és ÉRTÉK és ÉRTÉKEK .

Mindegyik COBOL program négy alapvető lexikai elemből áll: szavakból, literálokból, képes karakterláncokból (lásd § KÉP záradék) és elválasztók. A szavak tartalmazzák a fenntartott szavakat és a felhasználó által meghatározott azonosítókat. Legfeljebb 31 karakter hosszúak lehetnek, betűket, számokat, kötőjeleket és aláhúzásokat tartalmazhatnak. A literálok között szerepelnek számok (pl. 12 ) és karakterláncok (pl. "Hello!" ). Az elválasztók közé tartozik a szóköz, a vesszők és a pontosvesszők, amelyeket egy szóköz követ.

A COBOL program négy részre oszlik: az azonosítási, a környezeti, az adat- és az eljárás-részlegekre. Az azonosító részleg meghatározza a forráselem nevét és típusát, és itt adják meg az osztályokat és az interfészeket. A környezeti részleg megad minden olyan programfunkciót, amely a futtató rendszertől függ, például fájlokat és karakterkészleteket. Az adatfelosztást a változók és paraméterek deklarálására használják. Az eljárás osztás tartalmazza a program utasításait. Minden osztás szakaszokra oszlik, amelyek bekezdésekből állnak.

MetalanguageEdit

A COBOL szintaxisát általában egy egyedi metanyelv merevítőkkel, konzolokkal, rudakkal és aláhúzással. A metanyelvet az eredeti COBOL specifikációknak megfelelően fejlesztették ki. Bár a Backus – Naur forma akkoriban létezett, a bizottság még nem hallott róla.

A COBOL metanyelvének elemei
Elem Megjelenés Funkció
Minden nagybetű PÉLDA Fenntartott szó
Aláhúzás PÉLDA A fenntartott szó kötelező
zárójelek {} Csak egy opció választható ki
Zárójelek Nulla vagy egy lehetőség választható ki
Ellipszis Az előző elem megismételhető
Sávok {| |} Egy vagy több opció választható. Bármelyik opció csak egyszer választható ki.
Nulla vagy több opció választható. Bármelyik opció csak egyszer kiválasztva.

Például a consi vezesse le a ADD utasítás alábbi leírását:

Ez a leírás a következő változatokat teszi lehetővé:

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"

Kód formatEdit

A COBOL kétféle formátumban írható: fix (alapértelmezett) vagy ingyenes. Rögzített formátumban a kódot igazítani kell, hogy illeszkedjen bizonyos területekre (visszatartás lyukasztó kártyák használatától).A COBOL 2002-ig ezek a következők voltak:

Név oszlop (s) Használat
Sorrendszám terület 1–6 Eredetileg a kártya / sorszámok (megkönnyítik a mechanikus lyukasztott kártyák rendezését a programkód-sorrend biztosításához a kézi szerkesztés / kezelés után), ezt a területet a fordító figyelmen kívül hagyja
Jelzőterület 7 Itt a következő karakterek engedélyezettek:

  • * – Megjegyzés sor
  • / – Megjegyzés sor, amelyet a forráslista új oldalára nyomtatnak
  • - – folytatási sor, ahol a az előző sor folytatódik
  • D – Hibakeresési módban engedélyezve van a sor, amelyet egyébként figyelmen kívül hagynak
A terület 8–11 Ez a következőket tartalmazza: DIVISION, SECTION és eljárásfejlécek; 01-es és 77-es szintszámok és fájl- / jelentésleírók
B terület 12–72 A Területen nem engedélyezett egyéb kódok A
Programnév területe 73– A lyukasztott kártyák történelmileg a 80. oszlopig a program azonosítására szolgál. vagy sorozat, amelyhez a kártya tartozik

A COBOL 2002-ben az A és B területeket egyesítve lett a program-szöveg terület, amely most egy implementátor által definiált oszlopnál ér véget.

A COBOL 2002 bevezette a szabad formátumú kódot is. A szabad formátumú kód a fájl bármely oszlopába elhelyezhető, akárcsak az újabb programozási nyelvek. A megjegyzéseket a *> segítségével adhatjuk meg, amely bárhol elhelyezhető, és rögzített formátumú forráskódban is felhasználható. A folytatási sorok nincsenek, és a >>PAGE irányelv helyettesíti a / mutatót.

Identification DivisionEdit

Az azonosító részleg azonosítja a következő kód entitást, és tartalmazza az osztály vagy interfész definícióját.

Objektum-orientált programozásEdit

Az osztályok és interfészek 2002 óta vannak a COBOL-ban. rendelkeznek gyári objektumokkal, amelyek osztálymódszereket és változókat tartalmaznak, és példányobjektumokkal, amelyek példánymódszereket és változókat tartalmaznak. Az öröklődés és az interfészek biztosítják a polimorfizmust. Az általános programozás támogatása paraméterezett osztályokon keresztül történik, amelyek bármely osztály vagy interfész használatához példányosíthatók. Az objektumokat referenciákként tároljuk, amelyek egy bizonyos típusra korlátozódhatnak. Két módszer hívható egy módszerre: a INVOKE utasítás, amely hasonlóan működik, mint a CALL , vagy inline metódus meghívással, amely analóg a függvények használatával.

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

A COBOL nem kínál módot a módszerek elrejtésére. Az osztály adatait el lehet rejteni, ha PROPERTY záradék nélkül deklaráljuk, ami nem teszi lehetővé a felhasználó számára a hozzáférést. A módszer túlterhelését a COBOL 2014-ben adták hozzá.

KörnyezetosztásEdit

A környezeti részleg tartalmazza a konfigurációs és az input-output szakaszokat. A konfigurációs szakasz a változó jellemzők, például a pénzjelek, a területi beállítások és a karakterkészletek meghatározására szolgál. Az input-output szakasz fájlokkal kapcsolatos információkat tartalmaz.

FilesEdit

A COBOL három fájlformátumot vagy szervezetet támogat: szekvenciális, indexelt és relatív. A szekvenciális fájlokban a rekordok összefüggőek, és egymás után kell őket bejárni, hasonlóan a csatolt listához. Az indexelt fájlok egy vagy több indexet tartalmaznak, amelyek lehetővé teszik a rekordok véletlenszerű elérését, és amelyek azokon rendezhetők. Minden rekordnak egyedi kulccsal kell rendelkeznie, de a többi, alternatív rekordkulcsnak nem kell egyedinek lennie. Az indexelt fájlok implementációja gyártónként eltérő, bár a gyakori megvalósítások, például a C-ISAM és a VSAM az IBM ISAM-ján alapulnak. A relatív fájloknak, például az indexelt fájloknak, egyedi rekordkulcsuk van, de nincsenek alternatív kulcsaik. a relatív rekord kulcsa a sorszáma; például a 10. rekord kulcsa 10. Ez azt jelenti, hogy egy rekord 5-ös kulccsal történő létrehozásához szükség lehet (üres) megelőző rekordok létrehozására. A relatív fájlok szekvenciális és véletlenszerű hozzáférést is lehetővé tesznek.

Gyakori, nem szabványos kiterjesztés a soros sorrend, amelyet szöveges fájlok feldolgozására használnak. A fájlban lévő rekordokat új sor zárja le, és eltérő hosszúságúak lehetnek.

Data DivisionEdit

Az adatfelosztás hat szakaszra van felosztva, amelyek különböző elemeket deklarálnak: a fájl szakasz, a iratnyilvántartások; a munka-tárolás szakasz a statikus változókhoz; a helyi tároló szakasz az automatikus változókhoz; a kapcsolási szakasz a paraméterekhez és a visszatérési értékhez; a jelentés és a képernyő rész a szöveges felhasználói felületekhez.

Aggregated dataEdit

A COBOL adatelemeit hierarchikusan deklaráljuk szintszámok használatával, amelyek jelzik, hogy egy adat egy másik része-e. Egy magasabb szintű számmal rendelkező tétel alárendelve van egy alacsonyabb elemnek. Az 1-es szintű számú legfelsőbb szintű adatelemeket rekordoknak nevezzük. Azokat az elemeket, amelyek alárendelt összesített adatokkal rendelkeznek, csoportelemeknek nevezünk; azokat, amelyek nem, elemi elemeknek hívják. A standard adatelemek leírásához használt szintszámok 1 és 49 között vannak.

A fenti példában a num és a a dátum a some-record rekordnak van alárendelve, míg az elemi elemek az év , a hónap és a A -nap a the-date csoportelem része.

Az alárendelt elemeket a IN (vagy OF ) kulcsszó. Vegyük például a fenti példakódot a következő példával együtt:

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

A az év , a hónap és a nap a kód> önmagukban félreérthetõek, mivel egynél több adatelem van megadva ezekkel a nevekkel. Egy adott adatelem megadásához, például a sale-date csoportban található elemek egyikének megadásához a programozó a the-year IN sale-date (vagy ennek megfelelő the-year OF sale-date ). (Ez a szintaxis hasonlít a legtöbb mai nyelv által támogatott "dot jelölésre".)

Egyéb adatszintekEdit

A 66-os szintszámot használjuk a korábban meghatározott tételek, függetlenül az elemek felépítésétől. Ezt az adatszintet, amelyet a társított RENAMES záradék is emleget, ritkán használják, és 1988 körül általában régi programokban találhatók meg. A hierarchikus és logikai szerkezeti adatok figyelmen kívül hagyásának lehetősége azt jelentette, hogy nem ajánlott a használata, és sok telepítés megtiltotta annak használatát.

A 77-es szintszám azt jelzi, hogy az elem önálló, és ilyen helyzetekben egyenértékű a 01-es szintszám. Például a következő kód két 77 szintű adatelemet deklarál, a tulajdonságnév és sales-region , amelyek nem csoportos adatelemek, amelyek függetlenek (nem alárendeltek) más adatelemektől:

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

Egy 88-as szintű szám deklarálja a feltétel nevét (egy úgynevezett 88-szintű), amely akkor igaz, ha a szülő adatelem tartalmazza a ÉRTÉK záradék. Például a következő kód két 88 szintű feltételnév elemet határoz meg, amelyek igazak vagy hamisak, a bértípus adatelem aktuális karakteradat-értékétől függően. . Amikor az adatelem "H" értéket tartalmaz, a feltétel-név bér óránkénti igaz, míg ha "S" vagy "Y" , a feltétel-név bér évenkénti igaz. Ha az adatelem valamilyen más értéket tartalmaz, akkor mindkét feltételnév hamis.

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

AdattípusokEdit

A standard COBOL a következő adattípusokat biztosítja:

Adattípus Nyilatkozatminta Megjegyzések
ABC PIC A (30) Csak betűket vagy szóközöket tartalmazhat
Alfanumerikus PIC X (30) Bármilyen karaktert tartalmazhat
Boolean 1 PIC HASZNÁLATI KIT 0s és 1s formában tárolt adatok bináris számként
Tárgymutató HASZNÁLATI MUTATÓ A táblázat elemeinek hivatkozására szolgál
Nemzeti PIC N (30) Hasonló az alfanumerikushoz, de kiterjesztett karaktert használ meg, pl. UTF-8
Numerikus PIC 9 (5) V9 (5) Csak számokat tartalmazhat
Objektum HASZNÁLATI TÁRGY REFERENCIA kód> hivatkozhat objektumra vagy NULL
Mutató HASZNÁLATI MUTATÓ

A típusbiztonság változó a COBOL-ban.A numerikus adatokat különféle ábrázolások és méretek között konvertálják csendesen, és az alfanumerikus adatok elhelyezhetők bármilyen karaktersorozatként tárolható adatelemben, beleértve a numerikus és a csoportos adatokat is. Ezzel szemben az objektumhivatkozások és -mutatók csak azonos típusú elemekből rendelhetők, és értékeik egy bizonyos típusra korlátozódhatnak.

PICTURE clauseEdit

A PICTURE (vagy PIC ) záradék egy karaktersorozat, amelyek mindegyike az adatelem egy részét képviseli, és mit tartalmazhat. Néhány képkarakter megadja az elem típusát és azt, hogy hány karaktert vagy számjegyet foglal el a memória. Például egy 9 tizedesjegyet jelöl, egy S pedig azt, hogy az elem aláírva. Más képkarakterek (úgynevezett beszúrási és szerkesztési karakterek) meghatározzák az elem formázásának módját. Például a + karakterek sorozata meghatározza a karakterpozíciókat, valamint azt, hogy egy vezető jelet hogyan kell elhelyezni a végső karakteradatokban; a jobb szélső, nem numerikus karakter tartalmazza az elem “s” jelét, míg a többi karakterpozíció, amely megfelel a pozíciótól balra található + szónak, szóközt tartalmaz. a karakterek tömörebbek lehetnek, ha egy kép karakter után zárójelben ad meg egy számot; például a 9 (7) egyenértékű a 9999999 . Csak képszámot ( 9 ) és aláírást ( tartalmazó képspecifikációk) Az S ) karakterek pusztán numerikus adatelemeket határoznak meg, míg a képspecifikus ( A ) vagy alfanumerikus ( X ) karakterek alfanumerikus adatelemeket határoznak meg. Más formázási karakterek jelenléte szerkesztett numerikus vagy szerkesztett alfanumerikus adatelemeket határoz meg.

USAGE clauseEdit

A USAGE záradék deklarálja a formátumot az adatok tárolva vannak. Az adattípustól függően vagy kiegészíthető, vagy felhasználható a PICTURE záradék helyett. Noha mutató és objektum hivatkozások deklarálására használható, többnyire numerikus típusok megadására irányul. Ezek a numerikus formátumok a következők:

  • bináris, ahol a minimális méretet vagy a PICTURE záradék határozza meg, vagy pedig egy USAGE záradék, például BINARY-LONG.
  • SZÁMÍTÁSI HASZNÁLAT , ahol az adatok a megvalósítás által biztosított formátumban tárolva; gyakran egyenértékű az alapértelmezett formátummal: BINÁR HASZNÁLAT
  • HASZNÁLAT KIJELZŐ , ahol az adatokat karakterláncként tárolják
  • Lebegőpont, megvalósításfüggő formátumban vagy az IEEE 754 szerint.
  • USAGE NATIONAL , ahol az adatokat karakterláncként tárolják egy kiterjesztett karakterkészlet használatával
  • USAGE PACKED-DECIMAL , ahol az adatok a lehető legkisebb tizedes formátumban van tárolva (tipikusan bináris kódolású tizedes formátumban van csomagolva). A programozónak csak a jelentés elrendezését és az elkészítéséhez szükséges adatokat kell megadnia, megszabadítva őket attól, hogy kódot kell írniuk olyan dolgok kezeléséhez, mint az oldal törései, az adatok formázása, valamint a fejlécek és láblécek.

    A jelentések a jelentéshez vannak társítva. fájlok, amelyek olyan fájlok, amelyekhez csak jelentésírói utasításokkal lehet írni.

     FD report-out REPORT sales-report.

    Minden jelentés a jelentés szakaszban van megadva az adatfelosztás. A jelentés fel van osztva jelentéscsoportokra, amelyek meghatározzák a jelentés fejlécét, lábfejét és részleteit. A jelentések hierarchikus vezérlési törések körül mozognak. A vezérlési törések akkor fordulnak elő, amikor egy kulcsváltozó megváltoztatja az értékét; például amikor az ügyfelek megrendeléseit részletező jelentést készítenek, ellenőrzési törés történhet, amikor a program egy másik ügyfél megrendeléseihez érkezik. Íme egy példa jelentésleírás egy olyan jelentéshez, amely megadja az eladó értékesítését és figyelmeztet az érvénytelen nyilvántartásokra:

    A fenti jelentés leírása a következő elrendezést írja le:

    Négy utasítás vezérli a jelentés íróját: INITIATE , amely felkészíti a jelentés íróját nyomtatásra; GENERÁTUM , amely egy jelentéscsoportot nyomtat; SUPPRESS , amely elnyomja egy jelentéscsoport nyomtatását; és a TERMINÁT , amely leállítja a jelentés feldolgozását.A fenti értékesítési jelentés példáján az eljárásfelosztás így nézhet ki:

     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 .

    A Report Writer szolgáltatás használata általában változó jelentősen; egyes szervezetek széles körben, mások pedig egyáltalán nem használták. Ezenkívül a Report Writer implementációinak minősége változó volt, az alsó végén lévők időnként túl sok memóriát használtak futás közben.

    Procedūra DivisionEdit

    ProceduresEdit

    Az eljárások felosztásának szakaszai és paragrafusai (összefoglalóan eljárásoknak hívják) címkékként és egyszerű alprogramként használhatók. Más szakaszoktól eltérően a bekezdéseknek nem kell szakaszokban szerepelniük. A végrehajtás egy program eljárásain keresztül halad, amíg le nem szűnik. Az eljárások alprogramként történő használatához a PERFORM ige.

    A PERFORM utasítás némileg hasonlít egy modern nyelvű eljáráshíváshoz abban az értelemben, hogy a végrehajtás visszatér a kódhoz a meghívott kód végén található PERFORM utasítás követése; azonban nem nyújt semmilyen mechanizmust a paraméterek átadásához vagy az eredményérték visszaadásához. Ha egy szubrutint egy olyan egyszerű utasítással hívunk meg, mint a PERFORM szubrutin , akkor a vezérlés visszatér a meghívott eljárás végén. A PERFORM azonban szokatlan, mivel felhasználható több szomszédos eljárás sorozatát átfogó tartomány meghívására. Ez a PERFORM sub-1 THRU sub-n konstrukcióval történik:

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

    A program kimenete a következő lesz: “AABC”.

    PERFORM szintén eltér a hagyományos eljáráshívásoktól hogy legalább hagyományosan nincs fogalma a hívásveremnek. Ennek következtében beágyazott invokációk lehetségesek (a PERFORM “kódsorozat végrehajthatja a PERFORM utasítás), de különös figyelmet igényel, ha ugyanazon kód egyes részeit mindkét meghívás végrehajtja. A probléma akkor merül fel, amikor a belső invokációban lévő kód eléri a külső invokáció kimeneti pontját. Formálisabban, ha a vezérlés áthalad a A korábban elhívott, de még nem befejezett PERFORM meghívás kilépési pontja, a COBOL 2002 szabvány hivatalosan előírja, hogy a viselkedés nincs meghatározva.

    Ennek az az oka, hogy a COBOL, nem pedig „visszatérési cím”, úgynevezett folytatási címmel működik. Amikor a vezérlő folyamat bármely eljárás végéhez ér, a folytatási címet megkeresi, és a vezérlés átkerül erre a címre. a program fut, minden eljárás folytatási címe inicializálódik a pro kezdő címére cedure, amely a program szövegében következik, így ha nem történik PERFORM utasítás, a vezérlés felülről lefelé halad a programon keresztül. De amikor egy PERFORM utasítás végrehajtódik, akkor módosítja a meghívott eljárás (vagy a meghívott tartomány utolsó eljárásának) folytatási címét, ha PERFORM THRU -ot használtuk), így a vezérlés a végén visszatér a hívás helyére. Az eredeti érték mentésre kerül, és utána visszaállítja, de csak egy tárolási pozíció van. Ha két beágyazott meghívás működik egymással átfedő kódon, akkor ezek többféleképpen is megzavarhatják egymás folytatási címének kezelését.

    A következő példa (a Veermantól átvett & Verhoeven 2006) szemlélteti a problémát:

    Lehetséges, hogy a program kimenete “1 2 3 4 3” lesz: A “2” megjelenítése után a második PERFORM hatására a “3” és a “4” jelenik meg, majd az első meghívás a “3” -val folytatódik. A hagyományos COBOL megvalósításokban ez nem így van. Inkább az első PERFORM utasítás a folytatási címet a LABEL3 végén állítja be, hogy az visszaugorjon a hívjon webhelyet a LABEL1 belül. A második PERFORM utasítás a visszatérést a LABEL4 , de nem módosítja a LABEL3 , elvárva, hogy ez legyen az alapértelmezett folytatás. Így amikor a belső meghívás megérkezik a LABEL3 végére, akkor visszaugrik a külső PERFORM kód> utasítás, és a program leállítja az "1 2 3" nyomtatást. Másrészt egyes COBOL megvalósításokban, például a nyílt forráskódú TinyCOBOL fordítóban, a két PERFORM utasítás nem zavarja egymást, és a kimenet valóban "1". 2 3 4 3 ".Ezért az ilyen esetekben tanúsított viselkedés nemcsak (talán) meglepő, de nem is hordozható.

    Ennek a korlátozásnak egy külön következménye, hogy PERFORM nem használható rekurzív kód írására. Egy másik egyszerű példa ennek illusztrálására (kissé leegyszerűsítve Veerman & Verhoeven 2006-ból):

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

    Arra számíthat, hogy a kimenet “1 2 3 END END END”, és valójában néhány COBOL fordító ezt gyártja. De néhány fordító, például az IBM COBOL, olyan kódot állít elő, amely kinyomtatja az “1 2 3 END END END END …” -t, és így tovább, és az “END” -t végtelen ciklusban nyomtatja újra és újra. Mivel korlátozott hely van a mentési folytatási címek tárolására, a biztonsági másolatok felülíródnak a rekurzív meghívások során, és csak annyit lehet visszaállítani, hogy visszalépünk a "END" .

    StatementsEdit

    A COBOL 2014-ben 47 utasítás van (más néven igék), amelyek a következő tág kategóriákba csoportosíthatók: vezérlési folyamat, I / O, adatkezelés és a riportíró. A jelentésíró-állításokkal a jelentésíró szakasz foglalkozik.

    Control flowEdit

    A COBOL feltételes utasításai IF és ÉRTÉKELÉS . Az ÉRTÉKELÉS egy kapcsolószerű utasítás, amely hozzáadott képességgel képes többszörös értékelésére értékek és feltételek. Ez felhasználható döntési táblázatok végrehajtására. Például a következők használhatók a CNC eszterga vezérléséhez:

    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

    A PERFORM utasítás olyan ciklusok definiálására szolgál, amelyeket addig hajtanak végre, amíg egy feltétel igaz (nem igaz, ami más nyelvekben gyakoribb). eljárások vagy eljárási tartományok hívására is használatos (további részletekért lásd az eljárások részt). CALL és INVOKE hívjon alprogramokat, illetve módszereket, az alprogram / metódus nevét egy str tartalmazza amely szó szerinti vagy adatelem lehet. A paraméterek átadhatók hivatkozás, tartalom (ha a másolatot referenciával adják át) vagy érték alapján (de csak akkor, ha prototípus áll rendelkezésre). CANCEL alprogramok kirakása emlékezetből. A GO TO hatására a program egy megadott eljárásra ugrik.

    A GOBACK utasítás egy return utasítás, és a STOP utasítás leállítja a programot. Az EXIT utasításnak hat különböző formátuma van: használható visszatérési utasításként, break utasításként, folytatás utasításként, befejező jelölőként vagy eljárásból való kilépésként.

    A kivételeket egy RAISE utasítás emeli, és a DECLARATIVES része az eljárásosztásnak. A deklaratív részek USE utasítással kezdődnek, amelyek meghatározzák a kezelendő hibákat. Kivételt képezhetnek név vagy objektum. A RESUME egy deklaratívban arra szolgál, hogy a kivételt felvető utáni utasításra vagy a NYILATKOZATOK . Más nyelvektől eltérően a be nem fogott kivételek nem szüntetik meg a programot, és a program változatlanul folytatódhat.

    I / OEdit

    A fájl I / O-t az önleíró NYITVA , ZÁR , OLVASD , és WRITE utasítás és további három: REWRITE , amely egy rekordot frissít; START , amely kiválasztja a hozzáférhető későbbi rekordokat azáltal, hogy egy bizonyos kulccsal rekordot keres; és a UNLOCK , amely zárat old fel az utoljára elérett rekordon.

    A felhasználói interakció a ACCEPT és DISPLAY .

    Data manipulationEdit

    A következő igék manipulálják az adatokat:

    • INITIALIZE , amely az adatelemeket alapértelmezett értékükre állítja.
    • MOVE , amely értékeket rendel az adatelemekhez; A MOVE CORRESPONDING megfelelő hasonló nevű mezőket rendel hozzá.
    • SET , amelynek 15 formátuma van: módosíthatja az indexeket, objektumhivatkozásokat rendelhet és módosíthatja a táblázatot. kapacitások, többek között.
    • ADD , SUBTRACT , MULTIPLY , DIVIDE és COMPUTE , amelyek kezelik aritmetika ( SZÁMÍTÁS képlet eredményének hozzárendeléséhez egy változóhoz).
    • ALLOCATE és FREE , amelyek a dinamikus memóriát kezelik.
    • VALIDATE , amely ellenőrzi és terjeszti az adatokat az elem leírásában meghatározottak szerint az adatosztásban.
    • STRING és UNSTRING , amelyek összefűzik és felosztják a húrokat.
    • INSPECT , amely megegyezik vagy egy megadott karaktersorozatot helyettesít egy karaktersorozaton belül.
    • SEARCH , amely az első bejegyzést egy táblában keresi feltétel teljesítése.

    A fájlok és a táblázatok rendezése a SORT és a MERGE ige egyesíti és rendezi a fájlokat. A RELEASE ige rendezni kívánja a rekordokat, a RETURN sorban pedig rendezett rekordokat kap.

    Hatókör befejezéseEdit

    Néhány utasítás, például IF és READ maguk tartalmazhatnak utasításokat. Az ilyen állításokat kétféleképpen lehet megszüntetni: egy periódussal (implicit felmondás), amely megszünteti az összes benne lévő nem befejezett állítást, vagy egy olyan hatókörű terminátorral, amely a legközelebbi egyező nyitott utasítást szünteti meg.

    Beágyazott utasítások időszak gyakori hibaforrás. Vizsgálja meg például a következő kódot:

    IF x DISPLAY y. DISPLAY z.

    Itt a y és z ha a x feltétel igaz. A z azonban a x értékétől függetlenül megjelenik, mert a IF utasítás megszűnik hibás periódus a DISPLAY y után.

    Egy másik hiba a lógó más probléma következménye, amikor két IF utasítások társíthatók egy ELSE.

    IF x IF y DISPLAY aELSE DISPLAY b.

    A fenti töredékben a ELSE az IF y utasítással társul a IF x utasítás, ami hibát okoz. Az explicit hatókörű terminátorok bevezetése előtt annak megakadályozásához a EGYÉB KÖVETKEZŐ MONDAT megkövetelése a belső IF .

    Önmódosító kódEdit

    Az eredeti (1959-es) COBOL specifikáció támogatta a hírhedt X ALTER-t, hogy Y-re lépjen utasítás, amelyhez sok fordító generált önmódosító kódot. A X és a Y eljáráscímkék, és az egyetlen ÚJRA utasítás a X eljárásban, amelyet egy ilyen ALTER utasítás után hajtanak végre, jelentése Menj inkább Y ra. Sok fordító még mindig támogatja, de a COBOL 1985 szabványban elavultnak tekintették, és 2002-ben törölték.

    A ALTER utasítást rosszul értékelték mert aláássa a “kontextus lokalitását”, és megnehezítette a program általános logikájának megértését. Ahogy Daniel D. McCracken, a tankönyv szerzője írta 1976-ban, amikor “annak, aki még soha nem látta a programot, a lehető leggyorsabban meg kell ismernie. , néha kritikus időnyomás alatt, mert a program kudarcot vallott … a GO TO utasítás észrevétele egy bekezdésben önmagában, ami ugyanúgy jelzi, hogy ismeretlen számú ALTER utasítás létezik ismeretlen helyeken a program során, félelmet ébreszt a legbátrabb programozó szíve. “

    Hello, worldEdit

    A” Hello, world “program a COBOL-ban:

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

    Amikor a – most híres – „Hello, World!” programpélda a C programozási nyelvben 1978-ban először megjelent, hasonló mai Az nframe COBOL programmintát a JCL-n keresztül nyújtották volna be, nagy valószínűséggel lyukkártya-olvasóval és 80 oszlopos lyukkártyával. Az alábbi felsorolást üres DATA DIVISION segítségével GNU / Linux és az MVS 3.8J futtató System / 370 Hercules emulátor segítségével teszteltük. A 2015 júliusában írt JCL a Hercules oktatóanyagokból és Jay Moseley házigazdája mintáiból származik. A korszak COBOL programozásának megfelelően a HELLO, WORLD nagybetűvel jelenik meg.

    A JCL elküldése után az MVS konzol megjelenik:

     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

    A konzol fenti 10. sora a hatás miatt van kiemelve, a kiemelés nem része a konzol tényleges kimenetének.

    A társított fordító lista négy oldalnyi technikai részletet és munkafuttatási információt generált az egyetlen sor kimenethez a 14 sorból. COBOL.

Leave a Reply

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük