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.
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:
|
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 egyUSAGE
záradék, példáulBINARY-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 aTERMINÁ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 aPERFORM szubrutin
, akkor a vezérlés visszatér a meghívott eljárás végén. APERFORM
azonban szokatlan, mivel felhasználható több szomszédos eljárás sorozatát átfogó tartomány meghívására. Ez aPERFORM 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 (aPERFORM
“kódsorozat végrehajthatja aPERFORM
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 befejezettPERFORM
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 egyPERFORM
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, haPERFORM 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 aLABEL3
végén állítja be, hogy az visszaugorjon a hívjon webhelyet aLABEL1
belül. A másodikPERFORM
utasítás a visszatérést aLABEL4
, de nem módosítja aLABEL3 , 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
ésINVOKE
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. AGO TO
hatására a program egy megadott eljárásra ugrik.A kivételeket egy
RAISE
utasítás emeli, és aDECLARATIVES
része az eljárásosztásnak. A deklaratív részekUSE
utasítással kezdődnek, amelyek meghatározzák a kezelendő hibákat. Kivételt képezhetnek név vagy objektum. ARESUME
egy deklaratívban arra szolgál, hogy a kivételt felvető utáni utasításra vagy aNYILATKOZATOK
. 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
, ésWRITE
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 aUNLOCK
, amely zárat old fel az utoljára elérett rekordon.A felhasználói interakció a
ACCEPT
ésDISPLAY
.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
ésCOMPUTE
, amelyek kezelik aritmetika (SZÁMÍTÁS
képlet eredményének hozzárendeléséhez egy változóhoz). -
ALLOCATE
ésFREE
, 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
ésUNSTRING
, 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 aMERGE
ige egyesíti és rendezi a fájlokat. ARELEASE
ige rendezni kívánja a rekordokat, aRETURN
sorban pedig rendezett rekordokat kap.Hatókör befejezéseEdit
Néhány utasítás, például
IF
ésREAD
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
ész
ha ax
feltétel igaz. Az
azonban ax
értékétől függetlenül megjelenik, mert aIF
utasítás megszűnik hibás periódus aDISPLAY 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 egyELSE
.IF x IF y DISPLAY aELSE DISPLAY b.
A fenti töredékben a
ELSE
azIF 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 aEGYÉ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. AX
és aY
eljáráscímkék, és az egyetlenÚJRA
utasítás aX
eljárásban, amelyet egy ilyenALTER
utasítás után hajtanak végre, jelentéseMenj 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.
-