|
Elementi lessicali
Ogni programma scritto in un qualsiasi linguaggio di programmazione prima
di essere eseguito viene sottoposto ad un processo di compilazione o interpretazione.
Lo scopo di questo processo è quello di tradurre il codice sorgente
in codice macchina, generando un'eseguibile. Ogni linguaggio prevede un
certo numero di categorie lessicali e in DIV possiamo distinguere in particolare
le seguenti categorie:
Commenti;
Segni di punteggiatura e operatori;
Dati;
Oggetti predefiniti;
Sentenze;
Processi;
Funzioni;
Analizziamoli più in dettaglio.
Commenti.
Come in qualsiasi altro linguaggio, i commenti hanno valore soltanto
per il programmatore e vengono ignorati dal compilatore. E` possibile
inserirli nel proprio codice in modi diversi: a secondo della lunghezza
dei commenti, si può racchiuderli tra i simboli /* e */ o facendoli
precedere dal simbolo //. Nel primo caso e considerato commento tutto
quello che e compreso tra /* e*/, il commento quindi si può estendere
anche su più righe o trovarsi in mezzo al codice, nel secondo caso
va riferito solo alla riga che lo precede:
Segni di punteggiatura e operatori.
Alcuni simboli sono utilizzati da DIV per separare i vari elementi sintattici
o lessicali di un programma come operatori costruire e manipolare espressioni:questi
assieme alle parole chiavi definite dal linguaggio non vanno assolutamente
definire nomi processi dati. piùfrequenti in DIV:
|
[ ] ( ) + - * / % ! ^ &
|
|
= ^^ | ; ' : " < > ,
.
|
|
++ -- << >> <= >=
== != &&
|
|
|| += -= *= <<= /= %= &=
^= |= :: >>=
|
Operandi: oltre ai numeri sono tutti i datifunzioni
e oggetti.
Operatori aritmetici: ( ) + - * / %
Operatori logici: NOT AND OR XOR
Operatori di comparazione: == <> > >= < <=
Operatori puntatori: OFFSET POINTER
Operatori d'incremento e decremento: ++ --
Operatori binari: >> <<
Analizziamoli più in dettaglio con degli
esempi.
Il DIV è un linguaggio pesantemente basato sul paradigma imperativo,
questo vuol dire che un programma DIV è sostanzialmente una sequenza
di assegnamenti di valori a variabili. E` quindi naturale iniziare parlando
proprio dell'assegnamento. L'operatore di assegnamento è denotato
dal simbolo=uguale)
Il risultato dell'assegnamento e il valore prodotto dall'espressione
della parte destra e a come effetto l'assegnazione di tale valore al dato
definito nella parte sinistra (Dato) = (Espressione). Si osservi che una
variabile può apparire sia a destra che a sinistra di un assegnamento,
se tale occorrenza si trova a destra produce il valore contenuto nella
variabile, se invece si trova a sinistra essa denota la locazione di memoria
cui riferisce. Ancora, poiché un identificatore di variabile può
trovarsi contemporaneamente su ambo i lati di un assegnamento è
necessaria una semantica non ambigua: la semantica dell'assegnamento impone
che prima si valuti la parte destra e poi si esegua l'assegnamento del
valore prodotto all'operando di sinistra. Poiché un assegnamento
produce come risultato il valore prodotto dalla valutazione della parte
destra (e cioè a sua volta una espressione), e possibile legare
in cascata più assegnamenti:
Questi sono i simboli di assegnazione operative:
+= es. x=2; x+=2; come risultato x sarà uguale
a 4
Somma al dato il risultato dell'espressione.
-= es. x=4; x-=2; come risultato x sarà uguale a 2
Sottrae al dato il risultato dell'espressione.
*= es. x=2; x*=2; come risultato x sarà uguale a 4
Moltiplica al dato il risultato dell'espressione.
/= es. x=8; x/=2; come risultato x sarà uguale a 4
Divide il dato per il risultato dell'espressione.
%= es. x=7; x%=2; come risultato x sarà uguale a 1
Pone il resto dell'espressione nel dato.
&= es. x=5; x&=6; come risultato x sarà uguale a 4
Realizza un AND logico e assegna il risultato dell'espressione al dato.
|= es. x=5; x|=6; come risultato x sarà uguale a 7
Realizza un OR logico e assegna il risultato dell'espressione al dato.
^= es. x=5; x^=3; come risultato x sarà
uguale a 3
Realizza un XOR logico e assegna il risultato dell'espressione al dato.
>>= es. x=8; x>>=2; come risultato x sarà uguale
a 2;
Ruota il dato a destra in base al risultato dell'espressione.
<<= es. x=2; x<<=2; come risultato x sarà uguale
a 8
Ruota il dato a sinistra in base al risultato dell'espressione.
++ es. x=5; x++; come risultato x sarà uguale a 6
Incrementa di 1 il valore del dato.
-- es. x=5; x--; come risultato x sarà 4
decrementa di 1 il valore del dato.
Operatori Aritmetici.
Gli operatori aritmetici anno una loro priorità di esecuzione,
è importante sapere la semantica con cui vengono valutate le espressioni,
un'espressione può contenere operatori di differente livello di
priorità o dello stesso livello, nel caso non vi siano le parentesi
che ne indicano il modo nella quale si pretende sia valutata l'espressione,
verranno eseguite prima quelle di priorità 1 poi quelle di priorità
2 e così via, nel caso in un'espressione si incontrassero più
di un operatore binario dello stesso livello, questo si processerà
da sinistra verso destra:
Livelli di priorità degli operatori:
|
Priorità
|
Operatore
|
Descrizione
|
| 1 |
( ) |
Parentesi |
| 2 |
. |
Punto |
| 3 |
NOT ! |
"NO" binario/logico |
| |
OFFSET & |
Direzione o spostamento |
| |
POINTER * ^ |
Operatore di indirezione |
| |
- |
Segno meno |
| |
++ |
Incremento |
| |
-- |
Decremento |
| 4 |
* |
Moltiplicazione |
| |
/ |
Divisione |
| |
% MOD |
Modulo |
| 5 |
+ |
Somma |
| |
- |
Sottrazione |
| 6 |
<< |
Rotazione a sinistra |
| |
>> |
Rotazione a destra |
| 7 |
AND && & |
"E" binario/logico |
| |
OR | || |
"O" binario/logico |
| |
XOR ^ ^^ |
"O Esclusivo"
binario/logico |
| 8 |
== |
Uguale |
| |
<> != |
Diverso |
| |
> |
Maggiore |
| |
>= => |
Maggiore o uguale |
| |
< |
Minore |
| |
<= =< |
Minore o uguale |
| 9 |
= := |
Assegnazione |
| |
+= |
Somma e assegnazione |
| |
-= |
Sottrazione e assegnazione |
| |
*= |
Moltiplicazione e assegnazione |
| |
/= |
Divisione e assegnazione |
| |
%= |
Modulo e assegnazione |
| |
&= |
"E" binario/logico
e assegnazione |
| |
|= |
"O" binario/logico
e assegnazione |
| |
^= |
"O Esclusivo"
binario/logico e assegnazione |
| |
<<= |
Rotazione a sinistra e
assegnazione |
| |
>>= |
Rotazione a destra e assegnazione |
Facciamo qualche esempio.
Dati.
I dati costituiscono la base della programmazione. Per riservarci
e utilizzare una posizione di memoria dobbiamo definire un dato, i dati
sono simboli definiti dal programmatore, si può utilizzare qualsivoglia
nome per definire un dato, tuttavia non potranno essere dichiarati dati
che utilizzano lo stesso nome per due oggetti differenti (int dato, process
dato ...), non potranno essere utilizzati nomi di dati che coincidano
con nessuno degli oggetti predefiniti in DIV (PROCESS, BEGIN, IF ...)
non potranno iniziare con un numero (1dato, 89_dato ...) o contenere degli
spazzi (mio dato, suo dato ...), tuttavia saranno considerati validi i
dati che dopo il primo carattere contengano dei numeri (dato1, dato_2
...) e vi ricordo che non vi è alcuna differenza tra la dichiarazione
di un dato in lettere maiuscole o in minuscole (Dato, DATO, dato, dATO
...) per DIV sarà lo stesso nome, visto che è possibile
utilizzare dei caratteri speciali ma creerebbero ulteriore confusione
vi descrivo alcuni caratteri quelli più comuni e validi per definire
un nome di dato in DIV.
|
0 1 2 3 4 5 6 7 8 9 _
|
|
a b c d e f g h i j k i l m n
o p q r s t u v w x y z
A B C D E F G H I J K I L M O P Q R S T U V W X Y Z
|
Tutti i dati dichiarati, DIV per default gli assegnerà il valore
numerico 0 (zero), importante sapere che in DIV (ver.1.0 e 2.0) non si
possono utilizzare numeri reali in virgola mobile ma solo numeri interi,
il valore passera da 1 a 2 direttamente senza valori intermedi e comunque
tutti i numeri dovranno essere compresi tra i valori -2147483648 e +2147483647,
una volta creato un dato e volessimo modificare il valore all'interno
del programma, dovremmo indicare prima la posizione di memoria riservata
dal nome del dato e successivamente potremmo modificare il valore di quel
dato. Dati sono simboli definiti dal programmatore per riferirsi a diverse
categorie di contenitori:
Variabili:
Tabelle:
Strutture:
Tutti i dati possono essere di tipo Global Local Private e allo stesso
modo apparire nella sessioneCONST(costante simbolica), le sessioni sono
opzionali, sebbene, nel caso che appaiano devono farlo secondo quest'ordine
e comprese tra la sessione CONST e BEGIN del programma principale, l'unica
sessione che può apparire più volte oltre che nel programma
principale, in un qualsiasi dei blocchi PROCESS (prima del BEGIN del processo)
e la sessione PRIVATE. Questo perchè in questa sessione si dichiarano
i dati di ambito privato, cioè i dati che appartengono esclusivamente
di quel processo.
Global:Globali, che si riferiscono a
tutto il programma, questo significa il dato potrà essere utilizzato
da una qualsiasi posizione all'interno del codice.
Local:Locali, che il nome non si riferisce
ad un unico dato ma bensì a vari dati quanto saranno i processi
che ne faranno uso.
Private:Privati, saranno quei dati utilizzati
esclusivamente dal solo processo o del programma che lo avrà
dichiarato.
Ad esempio l'età di una persona (età) potrebbe essere il
nome di dato il quale contiene il numero di anni di quella persona, questo
dato sarebbe di tipo Local in quanto tutte le persone anno una loro età
con un numero di anni differenti, mentre l'anno corrente (anno) potrebbe
essere un dato di tipo Global in quanto tutte le persone, nel nostro caso
processi potrebbero dipendere da quel dato mentre Private potrebbe essere
il titolo di studio (studio) il cui si riferirà ad una caratteristica
di quella determinata persona.
Variabili:
Le variabili sono contenitori di valori di un qualche tipo, ogni
variabile puo`contenere un singolo valore che puo`cambiare nel tempo,
il tipo di questo valore viene comunque stabilito una sola volta e non
puo` cambiare, per dichiarare una variabile all'interno di una sezione
(GLOBAL, LOCAL, PRIVATE) basterà indicarne il nome seguita dal
simbolo ; (punto e virgola) (dato ;), in questo caso la variabile sarà
inizializzata per default sul valore 0 (zero), se si vuole sia inizializzata
su un altro valore si dovrà indicarne subito dopo il nome della
variabile, il simbolo = (assegnazione) e di seguito il valore costante
su cui si vuole inizializzare la variabile e in fine il simbolo ;(dato
= 22 ;), se si vuole specificare un tipo diverso di quello INT che per
default e quello che utilizza DIV, bisogna specificare il tipo all'inizio
del nome (WORD dato ;), si possono infine dichiarare variabili dello stesso
tipo separate da una , (virgola) (BYTE dato_1 , dato_2 =10). In Div ver.1.0
le variabili definite potevano essere esclusivamente di tipo INT (intero),
nella ver.2.0 di DIV vi è la possibilità di dichiarare variabili
nei formati INT (la parola INT può essere omessa visto che tutti
i dati per difetto saranno di questo tipo e compresi tra -2147483648 e
+2147483647, interi di 32 bit con segno - negativo), WORD (si potranno
dichiarare variabili numeriche di tipo intero compresi tra 0 e 65535,
interi di 16 bit senza segno - negativo), BYTE (si dichiarano variabili
di tipo intero compresi tra 0 e 255, interi 8 bit senza segno - negativo),
a questo punto credo sarà più chiaro capire se utilizziamo
degli esempi:
|