A COBOL programozási nyelv

Nyelvi elemek

Jelkészlet

Az alapelem a karakter, ebből épülnek fel a sztringek, szeparátorok és a szavak. A nyelv 51 karaktert ismer fel ezek a következok: számjegyek, az angol ABC 26 betűje, szóköz, +, -, *, /, = , dollárjel, ,, ; , ., ", (, ), <, >. Egy Cobol szó egy 30 karakternél nem hosszabb sztring és nem kezdődhet vagy végződhet kötőjellel. A szó lehet felhasználó által definiált szó (user-defined word) pl.: adat név, file név, paragrafus név. A COBOL grammatikájához 252 szabály, 226 sort és 420 kulcsszó tartozik. Érdekesség, hogy egy jelentés több kulcsszóval is kifejezhető. Például: ZERO = ZEROS = ZEROES vagy SPACE = SPACES

Fenntartott szavak

Fenntartott (előre definiált) szavaknak ötféle fajtája van:

  1. Kulcsszó: ennek további három alfaja van:
    • Igék. pl.: ADD, READ stb.
    • Járulékos kulcsszavak, amelyek az igéket kisérik pl.: a TO az ADD utasításhoz.
    • Alanyi jellegű szerepet játszó kulcsszavak. pl.: SECTION, ZERO.
  2. Opcionális szó: a program forráskódjának olvasását könnyítik meg. Speciális opcionális szavak a kötőszavak. Ennek is három alcsoportja van:
    • Minősítő kötőszavak egy adatnevet vagy egy szakasznevet kapcsolnak össze a minosítő nevükkel, ezek : OF, IN.
    • Felsorolási kötőszó egy vagy több operandus összekapcsolására szolgál. Egy ilyen szó van: a vessző.
    • Logikai kötőszavak összetett feltételekben fordulnak elő. Ezek a kövezkezok: OR, AND, NOT.
  3. Nevek: olyan szavak, melyeket a programnak, a program által feldolgozandó adatoknak, esetleg a feldolgozást végrehajtó számítógép valamilyen részének, egységének azonosítására használnak. Ezeknek négy típusa van:
    • Adatnevek: ezek olyan szavak amelyek legalább egy betűt tartalmaznak. Szerepük az elemi és az öszetett adatok azonosítása. pl.: filenév, rekordnév, táblázatnév.
    • Feltételnevek: Adott változó értékkészletéből kiválasztott konkrét értékekhez, vagy értékintervallumokhoz rendelt nevek.
    • Eljárásnevek: A program egyes részeinek adható nevek. pl.: résznév, szakasznév.
    • Speciális karakterek: A környezetleíró főrészben kell definiálni. Ez tulajdonképpen egy emlékeztetőnév, amit a programozó rendel hozzá egy hardware eszközhöz, vagy egy funkcióhoz.
  4. Konstansok: olyan szavak, amelyekhez általuk meghatározott formájú érték tartozik és a program futása közben nem változik meg. Két csoportba lehet őket sorolni:
    • Literálok: karaktersztringek, amik további két csoportra oszthatók:
      • Numerikus literál szokásos számkonstansok, vagyis számokból, tizedespontból és előjelből álló karakterekből építhetők fel.
      • Nem numerikus literál Olyan karaktersztringek, amelyek az EBDIC karakterek bármelyikébol felépíthetok kivéve az idézőjel.
    • Figuratív konstansok. pl.: ZERO, SPACE, HIGH-VALUE, LOW-VALUE
  5. Különleges regiszterek: (pl.: WHEN-COMPILED, TALLY, LINE COUNTER, PAGE COUNTER).
  6. Kommentár: NOTE karaktersorozat.

Literálok, szeparátorok

A sztringek lehetnek nemnumerikus vagy numerikus literálok. Az előbbit aposztrófok vagy idézőjelek között kell megadni.
Szeparátorok: szóköz , vessző szóköz, pont szóköz.

Pozícionális szerkezet

A Cobol nyelv pozícionális.

1 2 3 4 5 6 7 8 9 10 11 12 . . . . 72
Sorszám C A mező B mező

Az első hat pozíció sorszámra van fenntartva, használata nem kötelező.
A 7. oszlop a folytatást jelző oszlop (continuation indicator, indicator area). A folytatást jelző karakter a kötőjel. A meghosszabbított sort a 12. oszlopban kezdjük. Itt kell jelezni azt is, hogy a sor komment (* karakterrel).
A 8-11. oszlop az A mező itt lehetnek a főrészek, a fejezetek, paragrafusok nevei, ezen kívül a szintszám jelzők. A program utasításait a 12-72.oszlopba (B mező) írjuk.

Programszerkezet

A program alavetően négy főrészből áll:

  1. IDENTIFICATION DIVISION Azonosításra szolgálő főrész, itt lehet megadni, hogy mi a program neve, ki írta, stb.

    Az azonosítási főrész általános szerkezete a következő:

    IDENTIFICATION DIVISION. PROGRAM-ID. programnév. [AUTHOR.[megjegyzés]...] [INSTALLATION.[megjegyzés]...] [DATE_WRITTEN.[megjegyzés]...] [DATE-COMPILED.[megjegyzés]...] [SECURITY.[megjegyzés]...] [REMARKS.[megjegyzés]...]
    Az első szakasz, melynek használata kötelező, a program nevét tartalmazza. A programnév képzési szabályai azonosak az eljárásnévével. A programnév feladata, hogy segítségével azonosítható legyen a program.

    A program azonosításakor - a konkrét operációs rendszertől függően - a programnévnek csak az első meghatározott számú karakterét használják fel.

    A legtöbb operációs rendszer betűt követel meg első karakterként, viszont a COBOL szintaxis szerinti eljárásnévnek nem kell alfabetikus karaktert tartalmaznia, ezért a programnév első karakterét, ha számjegy, a fordítónak valamilyen konverzióval betűvé kell alakítania. Azokban az operációs rendszerekben, ahol a kötőjel szintén nem megengedett a programnevekben, ezt is egy megengedett karakterré kell konvertálni.

    A többi szakasz opcionális, de ha fellépnek a programban, a sorrendjük kötött. Az AUTHOR szakaszban a program íróját lehet megadni, az INSTALLATION szakasz megnevezheti a géptermet, vagy a számítógépközpontot, ahol a programot feldolgozzák. A DATE-WRITTEN szakasz a program írásának időpontját tartalmazza, a DATE-COMPILED szakaszban az aktuális dátum jelenik meg a fordítás közben kapott forrásprogram-listában. Végül a SECURITY rész tartalmazhatja a program titkosságának valamilyen mértékét, míg a REMARKS szakaszba írhatunk olyan megjegyzéseket, amik a fentiektől eltérő jelentésűek.

  2. ENVIRONMENT DIVISION Környezetleíró főrész, itt adhatjuk meg milyen típusú gépen írtuk és fordítottuk a programot.

    ENVIRONMENT DIVISION
    CONFIGURATION SECTION
    SOURCE-COMPUTER szakasz
    OBJECT-COMPUTER szakasz
    [SPECIAL-NAMES szakasz]
    [INPUT-OUTPUT SECTION
    FILE-CONTROL szakasz
    [I-O-CONTROL szakasz]]

    Ez a vázlat nem a szintaxisát írja le, csak áttekintést ad arról, hogy a főrész milyen kötelező és opcionális részekből áll, és ezek milyen szakaszokra oszlanak.

    Az első rész a konfigurációs rész, amely a feldolgozáshoz használt számítógépek általános jellemzését tartalmazza. A második, szintén kötelező szakasz a tárgyprogram végrehajtására használt gépet írja le. A harmadik rész (SPECIAL-NAMES) már nem kötelező, szerepe az, hogy a használt gép hardware eszközeihez vagy szolgáltatásaihoz a felhasználó által megadott emlékeztetőneveket rendeljen. Ugyancsak itt lehet előírni a tizedespont helyett a tizedes vessző használatát, valamint előírhatunk egy karaktert, ami a $-t helyettesíti. A környezetleíró főrész utolsó, elvileg opcionális, de gyakorlatilag nélkülözhetetlen része az input-output rész, amely az egyes file-ok defínicióját adja meg, az alkalmazott adatátviteli módszer jellemzésével együtt.

    Példa az első két főrészre:

    000100 IDENTIFICATION DIVISION.
    000200 PROGRAM-ID.GYAKORLAT.
    000300 AUTHOR.AB.C.DEFGHIJ.
    000400 DATE-WRITTEN.1998.AUG.28.
    000500 DATE-COMPILED.MASNAP.
    000600 SECURITY.MINDENKI TUDHAT ROLA.
    000700 REMARKS.MAGNESSZALAGOS FILE-OKAT
    000800          HASZNALO KESZLETGAZDALKODASI
    000900          PROGRAM ELSO KET FORESZET
    001000          LATHATJUK.
    001100          A TULAJDONKEPPENI FELADAT
    001200          EGY ALAP-KESZLET-FILE (OMI)
    001300          NAPRAKESZ ALLAPOTRA HOZATALA
    001400 ENVIRONMENT DIVISION.
    001500 CONFIGURATION SECTION.
    001600 SOURCE-COMPUTER.MARK-1.
    001700 OBJECT-COMPUTER.MARK-1.
    001800     MEMORY SIZE 20000 WORDS.
    001850 SPECIAL-NAMES.NEW-PAGE IS UJ-LAP.
    002100 INPUT-OUTPUT SECTION.
    002200 FILE-CONTROL.
    002300     SELECT OMI ASSIGN TO MT.
    002400     SELECT NMI ASSIGN TO MT.
    002600     SELECT DTC ASSIGN TO CR.
    002610     SELECT RL ASSIGN TO LP.
    002640 I-O-CONTROL.
    002650     RETURN EVERY END OF REEL
    002660     OF NMI.

    A Környezetleíró rész I-O szekciója magyarul:
       FILE-CONTROL:
         sorra elnevezi a fájlokat,sornyomtatót,etc.
       I-O-CONTROL:
         a mágnesszalagos tároló minden tekercsének végén legyen HERE_EXPLANATION .

  3. DATA DIVISION Adatleíró főrész, a feldolgozandó adatok formátumát tartalmazza.

  4. PROCEDURE DIVISION Eljárási főrész, itt vannak a program utasításai.

Deklarációk

Az adatdeklarációkat a DATA DIVISION főrészben kell elhelyezni. Ennek két része van: a FILE SECTION tartalmazza a használni kívánt adatbázisok rekordszerkezetét, a WORKING STORAGE SECTION pedig a programban használt változókat, míg a REPORT SECTION-be kerülnek a táblázatgenerátor által létrehozandó táblák szerkezetére és tartalmára vonatkozó adatok.

A COBOL-ban az adatok 3 kategóriába sorolhatók:

Változók:

Minden változó leírásának szerepelnie kell a DATA DIVISION részben. Egy azonosító(adatnév) az a név, amely azonosítja a változónak lefoglalt memória területet. A változó az egy elnevezett memória terület, ahová a program adatot tud írni, vagy onnan kinyerni. Az adatnéven felül, egy változó deklaráció azt is definiálja, hogy milyen típusú adat tárolható a változóban(ez a változó adattípusa). Vannak nyelvek, melyek erősen típusosak (például az Ada, vagy a Modula-2). Ezekben nagyon sok különböző adattípus található. Ezekkel szemben a COBOL-ban csak 3 féle adattípus van: Erre ortogonálisan definiáltak a készítők ún. szerkesztett illetve szerkesztetlen adatmezőket. Mivel a COBOL nem típusos nyelv, más stratégiát (declaration by example) választottak az adatok leírására.
Minden változó leírásának tartalmaznia kell: Bár a PICTURE szóval lehet definiálni egy változót, mégis elterjedtebb a PIC szó használata. A numerikus érték maximum 18 karakterből állhat.
(PICTURE részletes használata itt található)
FILE SECTION
FD filename / file neve
[BLOCK CONTAINS num RECORDS] / egy blokk ennyi rekordbol all
[RECORD CONTAINS num CHARACTERS]
LABEL RECORD(S) IS | ARE STANDARD | OMITTED |adatnév-1 [...-2]
[VALUE OF adatnév-1 IS {konstans-1|adatnév-2} [adatnév-3 IS {konstans-2|adatnév-4}]...] / címkékhez tartozó(WORKING STORAGE SECTION-ben definiált) értékek.
[REPORT(S) IS|ARE adatnév-1 [adatnév-2]...] / Generálandó táblák nevei
[DATA RECORD(S) IS | ARE record record ...
[RECORDING MODE IS F | V|U|S] / Rekordhossz,blokk-rekord kapcsolat leírása

Ezek után kell megadni a rekordok szerkezetét.

WORKING STORAGE SECTION

Az általános rekord leírásnak ebben a részben 3 fő formája van.

  1. forma
    Szintszám adatnév // a szintszám 0-49-ig terjedhet a rekordleírásban és kötelezően 77 a rekordhoz nem tartozó elemi adatok leírásában. (lsd később)
    • FILLER //Ennek a használata akkor célszerű, ha rögzített szerkezetű input vagy output rekordok egyes mezőit a feldolgozásból ki akarjuk hagyni. Pl. ha a sornyomtató 10-15 pozícióira szóközöket akarunk nyomtatni.
    • [REDEFINES bejegyzés] // a bejegyzéshez rendelt adat területének újrafelosztását eredményezi.
    • [BLANK WHEN ZERO bejegyzés] // Ha az adatnév aktuális értéke nulla, akkor a hosszának megfelelően töltse ki nullákkal.
    • [JUSTIFIED bejegyzés] // lehet RIGHT a bejegyzés ekkor az átviteli műveleteknél (pl.: MOVE) megváltoztatja az átvitt értéknek a fogadó mezőben való elhelyezkedését. Normális esetben nemnumerikus fogadó mező esetén az átvitt érték a mező bal végéhez igazodik. A többi szóközökkel lesz teli. (JUST is ezt teszi)
    • [OCCURS bejegyzés] // Azonos szerkezetű adatokból álló adattömb létrhozására lehet használni.
    • [PICTURE bejegyzés] // Ugyanaz mintha PIC-et írnánk. Az IS szót ki kell rakni utána (angol nyelvtanilag helyes legyen). Az IS után maximum 30 karakterbol álló karaktersorozat állhat. Az elemi adatok tulajdonságainak leírására szolgál (típus hossz, szerkesztési információ stb.) Használata az indexnevektől eltekintve kötelező.
    • [SYNCRONIZED bejegyzés] //SYNC a rövidített alakja. (LEFT vagy RIGHT) Elemi adatokra vonatkozóan, meghatározza, hogy az adat a számítógép memóriájában olyan területen kerüljön tárolásra, amelynek határai egybe esnek a memória természetes egységeinek határával. Gyorsíthatja a programot, ugyanis bizonyos adatokat egymás után tárol a gép; így egymásutáni elérésük gyorsabb lesz.
    • [USAGE bejegyzés] //Leírja az adatok tárolási módját. Ezek módjai a következok lehetnek:
      • INDEX: lsd. később
      • DISPLAY: a megfelelő géphez tartozó szabványos belső ábrázolási módon kerül ábrázolásra. Ez gépenként változhat, de karakterenkénti reprezentációt jelent.
      • COMPUTATIONAL (COMP) kizárólag numerikus adatok tárolására szolgál. Itt is gépenkénti reprezentációt jelent, de ez bináris.
    • [VALUE bejegyzés] //Nem használható, ha az adat hossza változó. Ha az adat numerikus, akkor a VALUE-ban szereplő összes konstansnak numerikusnak kell lennie. Ha nem numerikus, akkor a VALUE-ban csak nemnumerikus literálok szerepelhetnek, és a karakterek száma nem lehet nagyobb az adatmező hosszánál.
  2. forma
    88 feltételnév VALUE bejegyzés //Ez mind a FILE SECTION-ban mind a WORKING-STORAGE-ban használható. A feltételnevek mindig az adott adatot vizsgálják, hogy egyenlő-e a VALUE-ban adott valamely bejegyzés értékével, vagy belesik az ott adott értékintervalummok közül legalább az egyikbe.
  3. forma
    66 adatnév RENAMES bejegyzés //Ez a bejegyzés az elemi adatterületek egy újabb, esetleg átfedő csoportosítását teszi lehetővé.
Az első formával a rekordok és a rekordot alkotó összetett vagy elemi adatok írhatók le. A 2. Ill. 3. forma csak speciális szintszámokhoz kapcsolt, megkülönböztetett adatok leírására használatos.

Egy pár rövid példa:

01 PROBA-RECORD.
02 SZOVEG PIC X(10). / 10 karakterböl áll
02 NUMB PIC 9(5)V9(2) / 5 decimális a tizedes vesszö elött és 2
/ a tizedesvesszö után, csak pozitív szám lehet
02 SIGNED PIC S9(3) / negatív is lehet

A fenti példákban a sorkezdő 01-es szám definíciós szintet jelent, mely segítségével rekordszerkezetet is tudunk deklarálni. Az OCCURS használatával pedig tömböket:

01 MATRIX .
03 SOR OCCURS 10 TIMES.
05 MEZO OCCURS 20 TIMES.
07 N PIC 9(5).
07 SZOV PIC X(30).

Ezzel definiáltunk egy 10x20 -as mátrixot, melynek minden mezejében van egy N és egy SZOV érték.

Hivatkozás: N OF MEZO (3,5).

A számunkra érdektelen adatok részére a Cobolban a FILLER adatnév van fenntartva. Erre hivatkozni nem tudunk.

02 KOR.
   88 GYERMEK VALUE 0 THRU 18.
   88 AKTIVDOLGOZO VALUE 19 THRU 65.
   88 NYUGDIJAS VALUE 66 THRU 200.

Fent látható a feltételnév teljes formája. Használata a PROCEDURE DIVISION-ben:

KIIRATAS.
   IF NYUGDIJAS DISPLAY NEV
     DISPLAY "NYUGDIJAS"
     GOTO VEGE.