[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 671.   Caratteristiche del linguaggio COBOL

Il linguaggio COBOL si basa convenzionalmente sulla lingua inglese ed è composto sommariamente da parole, istruzioni, gruppi di istruzioni, paragrafi e sezioni.

671.1   Organizzazione del programma in forma sorgente

Ogni programma COBOL deve contenere quattro divisioni, anche se queste dovessero essere vuote, rispettando l'ordine seguente:

  1. IDENTIFICATION DIVISION

  2. ENVIRONMENT DIVISION

  3. DATA DIVISION

  4. PROCEDURE DIVISION

La divisione IDENTIFICATION DIVISION serve a identificare il programma. Vi si possono includere informazioni generali, come il nome del programma stesso, la data di edizione, la data di compilazione, il nome dell'elaboratore per il quale è stato scritto e altre annotazioni.

La divisione ENVIRONMENT DIVISION specifica le apparecchiature usata e i file che servono al programma.

La divisione DATA DIVISION contiene la descrizione dei file e dei record relativi, creati o utilizzati dal programma, assieme a tutte le altre variabili e costanti che servono al programma.

La divisione PROCEDURE DIVISION specifica il procedimento elaborativo da applicare ai dati.

Le «azioni» descritte nel programma COBOL sono espresse in termini di istruzioni, che possono essere riunite in gruppi di istruzioni e poi in paragrafi.

671.2   Insieme dei caratteri

I compilatori tradizionali del linguaggio COBOL adottano, a seconda dei casi, il codice ASCII o il codice EBCDIC per la rappresentazione interna dei caratteri; inoltre, in un programma sorgente si può usare soltanto un insieme ristretto di simboli, con l'eccezione del contenuto delle costanti alfanumeriche, che invece è abbastanza libero.

Tabella 671.1. I simboli disponibili nel linguaggio, in generale.

Simboli Descrizione Simboli Descrizione
0..9 cifre numeriche A..Z lettere maiuscole dell'alfabeto inglese (latino)
spazio
+ segno più - segno meno o trattino
* asterisco / barra obliqua
$ dollaro o segno di valuta , virgola
; punto e virgola . punto fermo
( parentesi aperta ) parentesi chiusa
< minore > maggiore

Si osservi che il segno di valuta, rappresentato normalmente dal dollaro, può essere ridefinito e rappresentato da un altro simbolo.

Tabella 671.2. Caratteri usati per l'interpunzione.

Simboli Descrizione Simboli Descrizione
spazio bianco
, virgola ; punto e virgola
. punto fermo " virgolette
( parentesi aperta ) parentesi chiusa

Tabella 671.3. Caratteri usati per formulare le parole.

Simboli Descrizione Simboli Descrizione
A..Z lettere alfabetiche maiuscole, senza accenti 0..9 cifre numeriche
- trattino

Tabella 671.4. Caratteri usati come operatori aritmetici.

Simboli Descrizione Simboli Descrizione
+ addizione - sottrazione
* moltiplicazione / divisione
( aperta parentesi ) chiusa parentesi

Tabella 671.5. Caratteri usati nelle relazioni.

Simboli Descrizione Simboli Descrizione
= uguale a
< minore di > maggiore di

Si osservi che, al contrario di tanti altri linguaggi, nati però in momenti successivi, il COBOL non prevede l'uso del trattino basso (_).

671.3   Struttura del linguaggio

Il testo di un programma sorgente COBOL è costruito con stringhe di caratteri e separatori, secondo le regole descritte nelle sezioni successive.

671.3.1   Separatori

Un separatore è una stringa composta da uno o più caratteri di interpunzione, rispettando le regole seguenti. Si osservi che queste regole non si applicano al contenuto delle costanti non numeriche (le stringhe letterali) e naturalmente non si applicano ai commenti.

I caratteri di interpunzione che appaiono all'interno di un modello di definizione di una variabile (PICTURE) o di una costante numerica, non sono considerati caratteri di interpunzione, piuttosto sono simboli usati per caratterizzare il modello relativo o la costante (le regole per la dichiarazione di un modello di definizione di una variabile sono descritte nel capitolo 679).

I modelli di definizione delle variabili sono delimitati solo dallo spazio, dalla virgola, dal punto e virgola o dal punto fermo.

671.3.2   Stringhe: «character-string»

Nei modelli sintattici, una stringa di caratteri (character-string) può essere: un carattere o una sequenza di caratteri contigui, che forma una parola per il linguaggio COBOL; il modello di definizione di una variabili (PICTURE); un commento. Una stringa di caratteri di questi contesti è delimitata da separatori.

671.3.3   Parole

Una «parola» per il linguaggio COBOL è una stringa composta al massimo da 30 caratteri, che può essere:

Le parole riservate o di sistema non possono essere utilizzate per fini diversi, pertanto non possono essere ridefinite dall'utente.

671.3.4   Parole definite dall'utente

Una parola definita dall'utente è una parola COBOL che deve essere fornita per soddisfare la sintassi di un'istruzione. Tale parola può essere composta utilizzando soltanto le lettere alfabetiche maiuscole, le cifre numeriche e il trattino (-), tenendo conto che il trattino non può trovarsi all'inizio o alla fine di tali parole. Si osservi che in alcuni casi le parole sono costituite esclusivamente da cifre numeriche, mentre in tutti gli altri, le parole devono iniziare con una lettera alfabetica.

Tabella 671.6. Classificazione parziale delle parole definite dall'utente.

Definizione tradizionale Descrizione
condition-name Il «nome di condizione» è un nome al quale viene assegnato un valore o un insieme di valori o un intervallo di valori, scelti fra tutti quelli che una variabile può assumere. La variabile stessa viene chiamata «variabile di condizione». I nomi di condizione vengono definiti nella divisione DATA DIVISION. Un nome di condizione può essere usato solo nelle espressioni condizionali, dove viene trattato come un'abbreviazione di una condizione di relazione. Il valore restituito dal nome di condizione è Vero se il valore della variabile di condizione associata è uguale a uno di quei valori che sono stati assegnati al nome di condizione.
data-name Si tratta del nome di una variabile descritta nella divisione DATA DIVISION. Una variabile di questo tipo rappresenta normalmente un componente che non può essere suddiviso ulteriormente.
file-name Si tratta del nome di un file descritto all'interno della divisione DATA DIVISION e può appartenere sia alla sezione FD (File description), sia alla sezione SD (Sort description).
index-name Si tratta del nome di un indice associato a una certa tabella, usato per selezionare una voce dalla tabella stessa. Un nome di questo tipo si dichiara nella divisione DATA DIVISION.
level-number Si tratta di un numero che indica la posizione nella struttura gerarchica di un record logico, oppure di un numero speciale che rappresenta convenzionalmente delle proprietà speciali di una variabile. Il numero di livello è espresso esclusivamente con una o due cifre numeriche; inoltre, i numeri che vanno da 01 a 49 indicano la posizione in un record, mentre i numeri 66, 77 e 88 identificano proprietà speciali. Normalmente il numero di livello si scrive sempre utilizzando due cifre, aggiungendo eventualmente uno zero iniziale. Il numero di livello si usa nella divisione DATA DIVISION.
library-name Si tratta di un nome che serve a individuare una libreria di sorgenti COBOL, da usare per importare codice contenuto in altri file.
mnemonic-name Si tratta di un nome che fa riferimento a qualcosa, che dipende dall'ambiente in cui si vuole compilare o eseguire il programma. Questo tipo di parole si usa nella divisione ENVIRONMENT DIVISION, precisamente nel paragrafo SPECIAL-NAMES, con lo scopo di poter sostituire facilmente tali associazioni, senza intervenire in altre parti del programma.
paragraph-name Si tratta del nome che dichiara l'inizio di un paragrafo nella divisione PROCEDURE DIVISION.
program-name Si tratta del nome del programma sorgente, come specificato nella divisione IDENTIFICATION DIVISION.
record-name Si tratta del nome di un record di un file. Associando idealmente il file a una tabella di dati, il record equivale alla riga di tale tabella. La dichiarazione dei record avviene nella divisione DATA DIVISION.
section-name Si tratta del nome che delimita l'inizio di una sezione nella divisione PROCEDURE DIVISION.
text-name Si tratta del nome di identificazione di un componente all'interno della libreria di sorgenti.

Tutte le parole definite dall'utente, a esclusione dei numeri di livello, possono appartenere soltanto a uno dei vari raggruppamenti previsti e devono essere uniche; tuttavia, in alcuni casi è prevista la possibilità di «qualificare» dei nomi, che non sono univoci, in modo da attribuirli al loro contesto preciso (sezione 678.3).

671.3.5   Parole riservate

Le parole riservate sono quelle parole del linguaggio che fanno parte di un elenco prestabilito e che hanno un significato speciale. Queste parole sono classificate in gruppi in base al loro utilizzo.

Tabella 671.7. Classificazione sintetica delle parole riservate.

Classificazione Descrizione
parole chiave Una parola chiave è una parola riservata la cui presenza è richiesta all'interno di un'istruzione (al contrario di altre che possono essere usate soltanto per migliorare l'estetica o la leggibilità delle istruzioni). Le parole chiave devono essere inserite per specificare quel tipo di istruzione.
parole opzionali Una parola opzionale è una parola riservata facoltativa, che si può usare nelle istruzioni per facilitarne la lettura. La parola opzionale non è obbligatoria, ma se usata va applicata secondo la sintassi prevista.
registri speciali Una registro speciale identifica un'area di memoria con funzioni speciali. I registri speciali dipendono generalmente dalle caratteristiche del compilatore e non sono standard.
costanti figurative Una costante figurativa è un nome che identifica un certo valore costante, come alternativa alla rappresentazione letterale.
parole di caratteri speciali Alcuni caratteri speciali, nell'ambito del contesto appropriato, possono essere rappresentati attraverso parole particolari. Si tratta precisamente degli operatori di relazione.

671.3.6   Costanti figurative

Per fare riferimento a valori costanti specifici si possono usare alcune parole riservate, note come costanti figurative. Di queste parole chiave esistono sia versioni al singolare, sia al plurale, ma rappresentano sempre la stessa cosa, ovvero un valore singolo o un valore ripetuto, in base al contesto.

Tabella 671.8. Costanti figurative.

Nome Descrizione
ZERO
ZEROS
ZEROES
Rappresenta il valore numerico zero o la stringa 0 ripetuta più volte.
SPACE
SPACES
Rappresenta uno o più spazi bianchi.
HIGH-VALUE
HIGH-VALUES
Rappresenta uno o più caratteri con un «valore massimo», in base a qualche criterio, legato alla sequenza di collazione (collating sequence) o alla codifica. Generalmente si tratta del valore FF16.
LOW-VALUE
LOW-VALUES
Rappresenta uno o più caratteri con un «valore minimo», in base a qualche criterio, legato alla sequenza di collazione (collating sequence) o alla codifica. Generalmente si tratta del valore 0016.
QUOTE
QUOTES
Rappresenta una o più virgolette. Questa costante figurativa non può sostituire le virgolette che delimitano le costanti alfanumeriche.
ALL valore
Rappresenta la ripetizione indefinita del valore indicato. Tale valore può essere specificato anche attraverso una costante letterale o una costante figurativa.

671.3.7   Parole di caratteri speciali

Gli operatori di relazione si possono rappresentare con i simboli previsti (<, >, e =) oppure attraverso parole speciali, ovvero «parole di caratteri speciali», note come special character word. La tabella successiva riepiloga l'uso degli operatori di relazione, in tutte le loro forme.

Tabella 671.9. Modelli sintattici per l'uso degli operatori di relazione.

Operatore Descrizione
IS [NOT] GREATER THEN
    ¯¯¯  ¯¯¯¯¯¯¯
maggiore di, non maggiore di
IS [NOT] >
    ¯¯¯  ¯
maggiore di, non maggiore di
IS [NOT] LESS THEN
    ¯¯¯  ¯¯¯¯
minore di, non minore di
IS [NOT] <
    ¯¯¯  ¯
minore di, non minore di
IS [NOT] EQUAL TO
    ¯¯¯  ¯¯¯¯¯
uguale a, diverso da
IS [NOT] =
    ¯¯¯  ¯
uguale a, diverso da
IS GREATER THAN OR EQUAL TO
   ¯¯¯¯¯¯¯      ¯¯ ¯¯¯¯¯
maggiore o uguale a
IS >=
   ¯¯
maggiore o uguale a
IS LESS THAN OR EQUAL TO
   ¯¯¯¯      ¯¯ ¯¯¯¯¯
minore o uguale a
IS <=
   ¯¯
minore o uguale a

671.3.8   Rappresentazione delle costanti

Le costanti possono essere stringhe di caratteri, il cui valore è implicito in base ai caratteri di cui sono composte, oppure sono costanti figurative, che rappresentano un valore in base al significato verbale che hanno. Una costante può essere di tipo numerico o alfanumerico e non sono previsti altri tipi.

Una costante numerica letterale è una stringa composta da cifre numeriche ed eventualmente anche dai segni +, - e dal punto per la separazione tra la parte intera e la parte decimale (a meno che il punto sia da sostituire con la virgola, avendone scambiato le funzionalità con un'istruzione apposita). Una costante numerica deve contenere almeno una cifra e ha una dimensione massima di cifre che dipende dal compilatore.

Una costante numerica non può contenere più di un segno. Se viene usato il segno, questo deve collocarsi nella posizione più a sinistra; se non appare alcun segno, il valore si intende positivo.

Una costante numerica non può contenere più di un punto decimale e può apparire in qualunque posizione. Se non viene usato il punto decimale, la costante rappresenta un numero intero.

Se nel paragrafo SPECIAL-NAMES della divisione ENVIRONMENT DIVISION è specificata la dichiarazione DECIMAL-POINT IS COMMA, la rappresentazione dei valori numerici avviene scambiando il significato del punto e della virgola (in pratica secondo le convenzioni europee).

Una costante alfanumerica è una stringa di caratteri delimitata da virgolette. La stringa può contenere qualsiasi carattere previsto dalla codifica utilizzata dal compilatore; in generale è ammesso almeno l'uso delle lettere minuscole dell'alfabeto latino.

Per rappresentare le virgolette (") all'interno di una stringa si usa il concatenamento con la costante figurativa QUOTE, come nell'esempio seguente:

000000 DISPLAY "Il file ", QUOTE, "mio.txt", QUOTE,
000000         " e` impegnato!".

Una costante alfanumerica deve contenere almeno un carattere all'interno delle virgolette. La lunghezza massima di un valore alfanumerico dipende dal compilatore, ma in generale dovrebbe essere garantita la rappresentazione di almeno 200 caratteri.

671.4   Notazione sintattica

I manuali COBOL adottano generalmente una forma particolare di notazione per descriverne la sintassi, a cui si adegua anche questo.

Nella sintassi le «parole chiave», secondo la definizione del COBOL, sono rappresentate sottolineate, a indicare la loro obbligatorietà, mentre le parole facoltative non sono sottolineate. Nell'esempio seguente, le parole IF, NOT, NUMERIC e ALPHABETIC sono parole chiave, mentre la parole IS è facoltativa:

                        /            \
                        | NUMERIC    |
IF identifier IS [NOT]  < ¯¯¯¯¯¯¯    >
¯¯                ¯¯¯   | ALPHABETIC |
                        \ ¯¯¯¯¯¯¯¯¯¯ /

Tutte le parole scritte con lettere minuscole rappresentano delle metavariabili sintattiche che devono essere espresse dal p