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:
- 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.
- 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.
- 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.
- 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
- Különleges regiszterek: (pl.: WHEN-COMPILED, TALLY, LINE COUNTER, PAGE COUNTER).
- 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:
- 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.
- 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 .
- DATA DIVISION Adatleíró főrész, a feldolgozandó
adatok formátumát tartalmazza.
- 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
- Literálok
- Konstansok
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:
- numerikus
- alfanumerikus (pl. string)
- alfabetikus
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:
- egy szintszámot
- egy adatnevet vagy azonosítót
- egy PICture-t
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.
- 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.
- 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.
- 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.