SyntaxEdit
COBOL har en engelsk-lignende syntaks, som bruges til at beskrive næsten alt i et program. For eksempel kan en betingelse udtrykkes som x ER STØRRE EN y
eller mere kortfattet som x STØRRE y
eller x > y
. Mere komplekse forhold kan “forkortes” ved at fjerne gentagne betingelser og variabler. For eksempel a > b OG en > c ELLER a = d kan forkortes til
a > b OG c ELLER = d
. For at understøtte denne engelsk-lignende syntaks har COBOL over 300 nøgleord. Nogle af nøgleordene er enkle alternative eller pluraliserede stavemåder med det samme ord, som giver flere engelsklignende udsagn og sætninger; f.eks. IN
og OF
nøgleordene kan bruges om hverandre, ligesom ER
og ER
og VALUE
og VÆRDIER
.
Hvert COBOL-program består af fire grundlæggende leksikale emner: ord, bogstaver, billedkarakterstrenge (se § BILLEDE klausul) og separatorer. Ord inkluderer reserverede ord og brugerdefinerede identifikatorer. De kan indeholde op til 31 tegn og kan omfatte bogstaver, cifre, bindestreger og understregninger. Bogstaver inkluderer tal (f.eks. 12
) og strenge (f.eks. "Hej!"
). Separatorer inkluderer mellemrumstegn og kommaer og semikolon efterfulgt af et mellemrum.
Et COBOL-program er opdelt i fire divisioner: identifikationsafdelingen, miljøafdelingen, datadelingen og procedureafdelingen. Identifikationsafdelingen specificerer kildeelementets navn og type og er, hvor klasser og grænseflader er specificeret. Miljøafdelingen specificerer alle programfunktioner, der afhænger af det system, der kører det, såsom filer og tegnsæt. Datadelingen bruges til at deklarere variabler og parametre. Procedurdivisionen indeholder programets udsagn. Hver division er opdelt i sektioner, der består af afsnit.
MetalanguageEdit
COBOLs syntaks er normalt beskrevet med en unik metalsprog ved hjælp af seler, beslag, stænger og understregning. Metalsproget blev udviklet til de originale COBOL-specifikationer. Selvom Backus – Naur-form eksisterede på det tidspunkt, havde udvalget ikke hørt om det.
Element | Udseende | Funktion |
---|---|---|
Alle hovedstæder | EKSEMPEL | Reserveret ord |
Understreget | EKSEMPEL | Det reserverede ord er obligatorisk |
seler | {} | Der kan kun vælges en mulighed |
Beslag | Nul eller en indstilling kan vælges | |
Ellipsis | … | Det foregående element kan gentages |
Barer | {| |} | En eller flere indstillinger kan vælges. Enhver indstilling kan kun vælges en gang. |
Nul eller flere indstillinger kan vælges. Enhver indstilling kan kun være valgt en gang. |
Som et eksempel er consi der følgende beskrivelse af en ADD
udsagn:
Denne beskrivelse tillader følgende varianter:
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"
Kodeformat Rediger
COBOL kan skrives i to formater: fast (standard) eller gratis. I fast format skal koden justeres for at passe i bestemte områder (hold-over fra brug af stansede kort).Indtil COBOL 2002 var disse:
Navn | Kolonne (s) | Anvendelse |
---|---|---|
Sekvensnummerområde | 1–6 | Oprindeligt brugt til kort / linjenumre (letter mekanisk stanset kortsortering for at sikre den tilsigtede programkodesekvens efter manuel redigering / håndtering), dette område ignoreres af kompilatoren |
Indikatorområde | 7 | Følgende tegn er tilladt her:
|
Område A | 8–11 | Dette indeholder: DIVISION , SECTION og procedureoverskrifter; 01 og 77 niveau numre og fil / rapport deskriptorer |
Område B | 12–72 | Enhver anden kode er ikke tilladt i område Et |
Programnavneområde | 73– | Historisk op til kolonne 80 for stansede kort bruges det til at identificere programmet eller rækkefølge kortet tilhører |
I COBOL 2002 var område A og B fusioneret for at danne programtekstområdet, som nu ender i en implementeringsdefineret kolonne.
COBOL 2002 introducerede også kode i frit format. Koden i frit format kan placeres i enhver kolonne i filen som på nyere programmeringssprog. Kommentarer specificeres ved hjælp af *>
, som kan placeres hvor som helst og også kan bruges i fast kildekode. Fortsættelseslinjer er ikke til stede, og >>PAGE
-direktivet erstatter /
-indikatoren.
Identifikations divisionEdit
Identifikationsafdelingen identificerer følgende kodeenhed og indeholder definitionen af en klasse eller grænseflade.
Objektorienteret programmering Rediger
Klasser og grænseflader har været i COBOL siden 2002. Klasser har fabriksobjekter, der indeholder klassemetoder og variabler, og instansobjekter, der indeholder instansmetoder og variabler. Arv og grænseflader giver polymorfisme. Understøttelse af generisk programmering leveres gennem parametriserede klasser, som kan instantieres til at bruge enhver klasse eller grænseflade. Objekter gemmes som referencer, der kan være begrænset til en bestemt type. Der er to måder at kalde en metode på: INVOKE
udsagn, der fungerer på samme måde som CALL
, eller via inline-metodeopkald, som er analog med brug af funktioner.
*> These are equivalent.INVOKE my-class "foo" RETURNING varMOVE my-class::"foo" TO var *> Inline method invocation
COBOL giver ikke en måde at skjule metoder på. Klassedata kan dog skjules ved at erklære dem uden en PROPERTY
-klausul, hvilket efterlader brugeren uden adgang til dem. Metodeoverbelastning blev tilføjet i COBOL 2014.
Environment divisionEdit
Miljøafdelingen indeholder konfigurationsafsnittet og input-output sektionen. Konfigurationsafsnittet bruges til at specificere variable funktioner såsom valutategn, lokaliteter og tegnsæt. Input-output sektionen indeholder filrelaterede oplysninger.
FilesEdit
COBOL understøtter tre filformater eller organisationer: sekventiel, indekseret og relativ. I sekventielle filer er poster sammenhængende og skal gennemgås sekventielt på samme måde som en linket liste. Indekserede filer har et eller flere indekser, der giver adgang til poster tilfældigt, og som kan sorteres på dem. Hver post skal have en unik nøgle, men andre alternative taster behøver ikke at være unikke. Implementeringer af indekserede filer varierer mellem leverandører, selvom almindelige implementeringer, såsom C ‑ ISAM og VSAM, er baseret på IBMs ISAM. Relative filer, som indekserede filer, har en unik record-nøgle, men de har ikke alternative nøgler. A relativ rekords nøgle er dens ordinære position; for eksempel har den 10. post en nøgle på 10. Dette betyder, at oprettelse af en post med en nøgle på 5 kan kræve oprettelse af (tomme) forudgående poster. Relative filer giver også mulighed for både sekventiel og tilfældig adgang.
En fælles ikke-standardudvidelse er den sekventielle linieorganisation, der bruges til at behandle tekstfiler. Optegnelser i en fil afsluttes med en ny linje og kan have varierende længde.
Data divisionEdit
Datainddelingen er opdelt i seks sektioner, der erklærer forskellige poster: filafsnittet, for arkivoptegnelser; sektionen arbejdslager til statiske variabler; afsnittet om lokal opbevaring til automatiske variabler; koblingsafsnittet for parametre og returværdien rapportsektionen og skærmafsnittet til tekstbaserede brugergrænseflader.
Samlede dataEdit
Dataelementer i COBOL erklæres hierarkisk ved hjælp af niveau-tal, der angiver, om et dataelement er en del af et andet. En vare med et højere niveau-nummer er underordnet en vare med et lavere nummer. Dataelementer på øverste niveau med et niveau-nummer 1 kaldes poster. Elementer, der har underordnede samlede data kaldes gruppeposter; dem der ikke kaldes elementære genstande. Niveau-tal, der bruges til at beskrive standarddataelementer, er mellem 1 og 49.
I ovenstående eksempel er elementært element num
og gruppeelement datoen
er underordnet posten noget-record
, mens elementære elementer året
, måneden
og -dag
er en del af gruppeelementet datoen
.
Underordnede genstande kan være entydige med IN
(eller OF
) nøgleord. Overvej for eksempel eksempelkoden ovenfor sammen med følgende eksempel:
01 sale-date. 05 the-year PIC 9(4). 05 the-month PIC 99. 05 the-day PIC 99.
Navnene året
, måneden
og dagen er i sig selv tvetydige, da mere end et dataelement er defineret med disse navne. For at specificere et bestemt dataelement, for eksempel et af elementerne indeholdt i
salgsdato
-gruppen, bruger programmøren året IN salgsdato
(eller det tilsvarende året FOR salgsdato
). (Denne syntaks svarer til "priknotationen", der understøttes af de fleste moderne sprog.)
Andre dataniveauer Rediger
Et niveau-antal på 66 bruges til at erklære en omgruppering af tidligere definerede emner, uanset hvordan disse emner er struktureret. Dette dataniveau, der også henvises til i den tilknyttede RENAMES
-klausul, bruges sjældent og blev omkring 1988 normalt fundet i gamle programmer. Dens evne til at ignorere de hierarkiske og logiske strukturdata betød, at brugen ikke blev anbefalet, og mange installationer forbød brugen.
Et 77-niveau-nummer angiver, at varen er enkeltstående, og i sådanne situationer svarer til niveau-nummeret 01. For eksempel erklærer den følgende kode to dataelementer på 77 niveauer, property-name
og salgsregion
, som er ikke-gruppedataelementer, der er uafhængige af (ikke underordnet) andre dataposter:
77 property-name PIC X(80). 77 sales-region PIC 9(5).
Et 88-niveau-nummer erklærer et betingelsesnavn (et såkaldt 88-niveau), som er sandt, når dets overordnede dataelement indeholder en af de værdier, der er angivet i dets VALUE
klausul. For eksempel definerer den følgende kode to 88-niveau-betingelsesnavnelementer, der er sande eller falske, afhængigt af den aktuelle tegndataværdi for datadelen løntype
. Når dataelementet indeholder en værdi på "H"
, er betingelsesnavnet løn-pr. Time
er sandt, mens når det indeholder en værdi på "S"
eller "Y" , er betingelsesnavnet
løn-årligt
sandt. Hvis dataelementet indeholder en anden værdi, er begge betingelsesnavne falske.
01 wage-type PIC X. 88 wage-is-hourly VALUE "H". 88 wage-is-yearly VALUE "S", "Y".
Datatyper Rediger
Standard COBOL giver følgende datatyper:
Datatype | Prøveerklæring | Noter |
---|---|---|
Alfabetisk | PIC A (30) |
Må kun indeholde bogstaver eller mellemrum |
Alfanumerisk | PIC X (30) |
Kan indeholde alle tegn |
Boolsk | PIC 1 BRUGSBIT |
Data gemt i form af 0s og 1s som et binært tal |
Indeks | BRUGSINDEKS |
Bruges til at henvise til tabelelementer |
National | PIC N (30) |
Svarende til alfanumerisk, men bruger et udvidet tegn sæt, f.eks. UTF-8 |
Numerisk | PIC 9 (5) V9 (5) |
Kan kun indeholde tal |
Objekt | BRUG OBJECT REFERENCE
|
Kan henvise til enten et objekt eller NULL |
Markør | BRUGSPINTER |
Type sikkerhed er variabel i COBOL.Numeriske data konverteres mellem forskellige repræsentationer og størrelser lydløst, og alfanumeriske data kan placeres i ethvert dataelement, der kan lagres som en streng, inklusive numeriske data og gruppedata. I modsætning hertil kan objektreferencer og markører kun tildeles fra emner af samme type, og deres værdier kan være begrænset til en bestemt type.
PICTURE clauseEdit
A PICTURE
(eller PIC
) klausul er en række tegn, der hver repræsenterer en del af dataelementet og hvad den kan indeholde. Nogle billedkarakterer angiver typen af elementet, og hvor mange tegn eller cifre det optager i hukommelsen. For eksempel angiver et 9
et decimaltal, og et S
angiver, at varen er underskrevet. Andre billedkarakterer (kaldet indsættelse og redigering af tegn) angiver, hvordan et element skal formateres. For eksempel definerer en række +
tegn karakterpositioner samt hvordan et ledende tegntegn skal placeres inden i de endelige karakterdata; det ikke-numeriske tegn til højre indeholder elementets tegn, mens andre tegnpositioner, der svarer til et +
til venstre for denne position, indeholder et mellemrum. tegn kan specificeres mere præcist ved at angive et tal i parentes efter et billedkarakter. F.eks. svarer 9 (7)
til 9999999
. Billedspecifikationer, der kun indeholder ciffer ( 9
) og tegn ( S
) tegn definerer rent numeriske dataelementer, mens billedspecifikationer indeholder alfabetisk ( A
) eller alfanumerisk ( X
) tegn definerer alfanumeriske dataelementer. Tilstedeværelsen af andre formateringstegn definerer redigerede numeriske eller redigerede alfanumeriske dataelementer.
BRUG clauseEdit
ANVENDELSE
klausul erklærer formatet data gemmes i. Afhængigt af datatypen kan de enten supplere eller bruges i stedet for en BILLEDE
-klausul. Selvom det kan bruges til at erklære markører og objektreferencer, er det hovedsagelig rettet mod at specificere numeriske typer. Disse numeriske formater er:
- Binær, hvor en minimumsstørrelse enten er specificeret af
PICTURE
-sætningen eller af enUSAGE
klausul såsomBINARY-LONG
. -
BRUG COMPUTATIONAL
, hvor data kan være gemt i det format, implementeringen giver; svarer ofte tilBRUG BINÆR
-
BRUG DISPLAY
, standardformatet , hvor data lagres som en streng - Flydepunkt, enten i et implementeringsafhængigt format eller i henhold til IEEE 754.
-
BRUG NATIONAL
, hvor data lagres som en streng ved hjælp af et udvidet tegnsæt -
BRUG PACKED-DECIMAL
, hvor data gemmes i det mindste mulige decimalformat (typisk pakket binært kodet decimal)
Report writerEdit
Rapportskribenten er en deklarativ facilitet til oprettelse af rapporter. Programmøren behøver kun at specificere rapportlayoutet og de data, der kræves for at producere det, hvilket frigør dem fra at skulle skrive kode for at håndtere ting som sideskift, dataformatering og overskrifter og fodfæste.
Rapporter er knyttet til rapporten filer, som er filer, der kun kan skrives til gennem rapportforfatterudtalelser.
FD report-out REPORT sales-report.
Hver rapport er defineret i rapportsektionen af datadivisionen. En rapport er opdelt i rapportgrupper, der definerer rapportens overskrifter, fodfæste og detaljer. Rapporter arbejder omkring hierarkiske kontrolbrud. Kontrolbrud opstår, når en nøglevariabel ændrer dens værdi; for eksempel når der oprettes en rapport, der beskriver kundernes “ordrer, en kontrolafbrydelse kan forekomme, når programmet når en anden kundes ordrer. Her er et eksempel på en rapportbeskrivelse for en rapport, der giver en sælgers salg, og som advarer om ugyldige poster:
Ovenstående rapportbeskrivelse beskriver følgende layout:
Fire udsagn styrer rapportforfatteren: INITIATE
, der forbereder rapportskriveren til udskrivning; GENERER
, der udskriver en rapportgruppe; SUPPRESS
, der undertrykker udskrivning af en rapportgruppe; og TERMINATE
, som afslutter rapportbehandlingen.For ovennævnte salgsrapporteksempel kan procedurdivisionen se sådan ud:
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 .
Brug af Report Writer-faciliteten varierede ofte betydeligt; nogle organisationer brugte det i vid udstrækning og andre slet ikke. Derudover varierede implementeringerne af Report Writer i kvalitet, idet de i den nederste ende undertiden brugte for store mængder hukommelse under kørsel.
Procedure divisionEdit
ProcedurerEdit
Afsnittene og afsnit i procedureafdelingen (samlet kaldet procedurer) kan bruges som etiketter og som enkle underrutiner. I modsætning til i andre divisioner behøver afsnit ikke være i sektioner. Udførelse går gennem procedurerne i et program, indtil det afsluttes. For at bruge procedurer som underrutiner skal PERFORM verb bruges.
En UDFØRELSE
udsagn ligner noget en procedureopkald på et moderne sprog i den forstand, at udførelse vender tilbage til koden efter PERFORM
udsagn i slutningen af den kaldte kode; det tilvejebringer dog ingen mekanisme til parameteroverføring eller til returnering af en resultatværdi. Hvis en underrutine påberåbes ved hjælp af en simpel sætning som UDFØR subrutine
, vender kontrol tilbage i slutningen af den kaldte procedure. PERFORM
er dog usædvanligt, fordi det kan bruges til at kalde et område, der spænder over en sekvens af flere tilstødende procedurer. Dette gøres med PERFORM sub-1 THRU sub-n
-konstruktion:
PROCEDURE so-and-so. PERFORM ALPHA PERFORM ALPHA THRU GAMMA STOP RUN.ALPHA. DISPLAY "A".BETA. DISPLAY "B".GAMMA. DISPLAY "C".
Output af dette program vil være: “AABC”.
PERFORM
adskiller sig også fra konventionelle procedurekald i at der i det mindste traditionelt ikke er nogen forestilling om en opkaldsstak. Som en konsekvens er indlejrede invokationer mulige (en sekvens af kode, der er PERFORM
“ed kan udføre en PERFORM selve udsagnet), men kræver ekstra forsigtighed, hvis dele af den samme kode udføres af begge påkald. Problemet opstår, når koden i den indre påkaldelse når udgangspunktet for den ydre påkaldelse. Mere formelt, hvis kontrol passerer gennem udgangspunkt for en
PERFORM
-opkald, der blev kaldt tidligere, men endnu ikke er afsluttet, COBOL 2002-standarden foreskriver officielt, at adfærden er udefineret.
Årsagen er, at COBOL snarere end en “returadresse” fungerer med det, der kan kaldes en fortsættelsesadresse. Når kontrolstrømmen når slutningen af en hvilken som helst procedure, bliver fortsættelsesadressen slået op, og styringen overføres til den adresse. programmet kører, initialiseres fortsættelsesadressen for hver procedure til proffens startadresse cedure, der kommer næste i programteksten, så hvis der ikke sker PERFORM
udsagn, flyder kontrol fra top til bund gennem programmet. Men når en PERFORM
-sætning udføres, ændrer den fortsættelsesadressen for den kaldte procedure (eller den sidste procedure i det kaldte område, hvis PERFORM THRU
blev brugt), så kontrollen vender tilbage til opkaldsstedet i slutningen. Den oprindelige værdi gemmes og gendannes bagefter, men der er kun én lagringsposition. Hvis to indlejrede påkaldelser fungerer på overlappende kode, kan de forstyrre hinandens styring af fortsættelsesadressen på flere måder.
Følgende eksempel (taget fra Veerman & Verhoeven 2006) illustrerer problemet:
Man kunne forvente, at output fra dette program ville være “1 2 3 4 3”: Efter at have vist “2”, den anden PERFORM
får “3” og “4” til at blive vist, og derefter fortsætter den første påkaldelse med “3”. I traditionelle COBOL-implementeringer er dette ikke tilfældet. Snarere den første PERFORM
sætning sætter fortsættelsesadressen i slutningen af LABEL3
, så den springer tilbage til kald websted inde i LABEL1
. Den anden PERFORM
sætning returnerer i slutningen af LABEL4
men ændrer ikke fortsættelsesadressen til LABEL3
, springer den således tilbage til den ydre PERFORM erklæring, og programmet stopper med at have udskrevet bare "1 2 3". På den anden side interfererer de to
PERFORM
udsagn ikke i hinanden i nogle COBOL-implementeringer som open source TinyCOBOL-kompilatoren, og output er faktisk "1 2 3 4 3 ".Derfor er adfærden i sådanne tilfælde ikke kun (måske) overraskende, den er heller ikke bærbar.
En særlig konsekvens af denne begrænsning er, at PERFORM
kan ikke bruges til at skrive rekursiv kode. Et andet simpelt eksempel for at illustrere dette (let forenklet fra 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".
Man kan forvente, at output er “1 2 3 END END END”, og faktisk er det, hvad nogle COBOL-kompilatorer vil producere. Men nogle compilere, som IBM COBOL, vil producere kode, der udskriver “1 2 3 END END END END …” og så videre og udskriver “END” igen og igen i en endeløs løkke. Da der er begrænset plads til lagring af fortsættelsesadresser til sikkerhedskopier, overskrives sikkerhedskopierne i løbet af rekursive invokationer, og alt hvad der kan gendannes, er springet tilbage til DISPLAY "END"
.
StatementsEdit
COBOL 2014 har 47 udsagn (også kaldet verb), som kan grupperes i følgende brede kategorier: kontrolflow, I / O, datamanipulation og rapportforfatteren. Rapporterne om rapportskrivere er dækket af sektionen for rapportforfatter.
Control flowEdit
COBOL “s betingede udsagn er IF
og EVALUERING
. EVALUERING
er en switch-lignende sætning med den ekstra evne til at evaluere flere værdier og betingelser. Dette kan bruges til at implementere beslutningstabeller. F.eks. kan følgende bruges til at styre en CNC-drejebænk:
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
Udtalelsen PERFORM
bruges til at definere sløjfer, der udføres, indtil en betingelse er sand (ikke mens den er sand, hvilket er mere almindeligt på andre sprog). bruges også til at kalde procedurer eller intervaller for procedurer (se afsnittet procedurer for flere detaljer). CALL
og INVOKE
kaldes henholdsvis underprogrammer og metoder Navnet på underprogrammet / metoden er indeholdt i en str ing, der kan være en bogstavelig eller et dataelement. Parametre kan overføres ved reference, efter indhold (hvor en kopi sendes med reference) eller efter værdi (men kun hvis en prototype er tilgængelig). ANNULLER
aflaster underprogrammer fra hukommelsen. GO TO
får programmet til at springe til en bestemt procedure.
GOBACK
statement er en return statement, og STOP
sætningen stopper programmet. EXIT
-erklæringen har seks forskellige formater: den kan bruges som en returerklæring, en pauseerklæring, en fortsættelseserklæring, en slutmarkør eller til at forlade en procedure.
Undtagelser hæves ved en RAISE
-erklæring og fanges med en handler eller erklærende defineret i ERKLÆRINGER
del af procedureafdelingen. Deklarativer er sektioner, der begynder med en USE
-erklæring, der angiver de fejl, der skal håndteres. Undtagelser kan være navne eller objekter. RESUME
bruges i en deklarativ til at springe til udsagnet efter den, der hævde undtagelsen eller til en procedure uden for ERKLÆRINGER
. I modsætning til andre sprog kan ikke fangede undtagelser muligvis ikke afslutte programmet, og programmet kan fortsætte upåvirket.
I / OEdit
Fil I / O håndteres af den selvbeskrivende ÅBEN
, LUK
, LÆS
, og OPSKRIFT
udsagn sammen med yderligere tre: OMSKRIV
, som opdaterer en post; START
, som vælger efterfølgende poster til adgang ved at finde en post med en bestemt nøgle; og UNLOCK
, som frigiver en lås på den sidst tilsluttede post.
Brugerinteraktion udføres ved hjælp af ACCEPT
og DISPLAY
.
DatamanipulationEdit
Følgende verbs manipulerer data:
-
INITIALIZE
, som sætter dataelementer til deres standardværdier. -
MOVE
, som tildeler dataelementer værdier; MOVE CORRESPONDING tildeler tilsvarende ligesom navngivne felter. -
SET
, som har 15 formater: det kan ændre indekser, tildele objektreferencer og ændre tabel kapaciteter, blandt andre funktioner. -
TILFØJ
,SUBTRAKT
,FLERE
,DIVIDE
ogCOMPUTE
, som håndterer aritmetik (medCOMPUTE
, der tildeler resultatet af en formel til en variabel). -
TILDEL
ogGRATIS
, som håndterer dynamisk hukommelse. -
VALIDATE
, som validerer og distribuerer data som specificeret i en artikels beskrivelse i datadivisionen. -
STRING
ogUNSTRING
, som hhv. Sammenkæder og opdeler strenge. -
INSPEKT
, som taler eller erstatter forekomster af specificerede understrenge i en streng. -
SØG
, som søger i en tabel efter den første post opfylder en betingelse.
Filer og tabeller sorteres ved hjælp af SORT
og MERGE
verb fletter og sorterer filer. RELEASE
verbet giver poster, der skal sorteres, og RETURN
henter sorterede poster i rækkefølge.
Omfangsafslutning Rediger
Nogle udsagn, såsom IF
og LÆS
, kan selv indeholde udsagn. Sådanne udsagn kan afsluttes på to måder: af en periode (implicit opsigelse), der afslutter alle indeholdte ikke-afsluttede udsagn, eller af en scope-terminator, der afslutter den nærmeste matchende åbne sætning.
Indlejrede udsagn afsluttet med en periode er en almindelig kilde til fejl. Undersøg for eksempel følgende kode:
IF x DISPLAY y. DISPLAY z.
Her er hensigten at vise y
og z
hvis betingelse x
er sand. z
vises dog uanset værdien af x
fordi IF
udsagnet afsluttes af en fejlagtig periode efter VISNING y
.
En anden fejl er et resultat af dinglende andet problem, når to IF
udsagn kan knyttes til en ELSE
.
IF x IF y DISPLAY aELSE DISPLAY b.
I ovenstående fragment associeres ELSE
til IF y
-sætningen i stedet for IF x
-erklæring, der forårsager en fejl. Forud for introduktionen af eksplicitte omfangsterminatorer ville forhindring af det kræve, at NÆSTE NÆSTE SENTNING
placeres efter den indre IF
.
Selvmodificerende kodeRediger
Den originale (1959) COBOL-specifikation understøttede den berygtede ALTER X FOR AT FORTSAT TIL Y erklæring, for hvilken mange kompilatorer genererede selvmodificerende kode.
X
og Y
er etiketter til proceduren, og den eneste GÅ TIL
erklæring i procedure X
udført efter en sådan ALTER
udsagn betyder GÅ TIL Y
i stedet. Mange kompilatorer understøtter stadig det, men det blev anset forældet i COBOL 1985-standarden og slettet i 2002.
ALTER
udsagnet blev dårligt anset fordi det underminerede “lokalitet af kontekst” og gjorde et programs “overordnede logik vanskelig at forstå. Som lærebogforfatter Daniel D. McCracken skrev i 1976, når” en, der aldrig har set programmet før, skal blive fortrolig med det så hurtigt som muligt , undertiden under kritisk tidspres, fordi programmet er mislykket … synet af en GO TO-sætning i et afsnit i sig selv, der signaliserer, som det gør eksistensen af et ukendt antal ALTER-udsagn på ukendte steder i hele programmet, rammer frygt for hjertet til den modigste programmør. “
Hej, worldEdit
Et” Hello, world “-program i COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. hello-world. PROCEDURE DIVISION. DISPLAY "Hello, world!" .
Da det – nu berømte – “Hello, World!” – programeksempel i C Programming Language første gang blev offentliggjort i 1978, blev en lignende mai nframe COBOL-programeksempel ville være blevet sendt gennem JCL, sandsynligvis ved hjælp af en stansekortlæser og 80 søjleslagskort. Nedenstående liste med en tom DATADIVISION blev testet ved hjælp af GNU / Linux og System / 370 Hercules-emulatoren, der kører MVS 3.8J. JCL, skrevet i juli 2015, er afledt af Hercules-selvstudier og prøver, der hostes af Jay Moseley. I overensstemmelse med COBOL-programmeringen fra den æra vises HELLO, WORLD med alle store bogstaver.
Efter indsendelse af JCL vises MVS-konsollen:
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
Linje 10 i konsollisten ovenfor er fremhævet for effekt, fremhævningen er ikke en del af den faktiske konsoloutput.
Den tilknyttede compilerfortegnelse genereret over fire sider med tekniske detaljer og jobkørselsoplysninger til den eneste outputlinje fra de 14 linjer i COBOL.