Linguaggi
• Classificati rispetto alle caratteristiche
principali:
– potere espressivo che influenza lo stile di
programmazione
Fondamenti di Informatica
1
Linguaggi - basso livello
• Il linguaggio macchina specifica solo le
operazioni che l'elaboratore può eseguire
– sintattica molto elementare"
– diverso per ogni processore
• dipende dalle caratteristiche architetturali
• E' più orientato alla macchina che ai
problemi da trattare
– è infatti definito di "basso livello"
Fondamenti di Informatica
2
Linguaggi - basso livello
• Una prima evoluzione è stata
l'introduzione di linguaggi simbolici:
linguaggi assemblativi
– ancora orientati alla macchina e non ai
problemi
– più immediati da utilizzare
– definiscono variabili, simboli,...
Fondamenti di Informatica
3
Linguaggi - alto livello
• Altri linguaggi sono basati su:
– la descrizione del problema in modo
intuitivo, dimenticandosi che verranno
eseguiti da un calcolatore
– obiettivo: fornire un mezzo espressivo per
specificare all'elaboratore il compito da
eseguire
Fondamenti di Informatica
4
Linguaggi - alto livello
• Caratteristiche:
– ognuno ha i propri paradigmi che
garantiscono forme espressive appropriate
per alcuni problemi specifici
– questa specificità ha favorito la loro
proliferazione (fenomeno intrinseco alla
natura del linguaggio come forma di
comunicazione)
Fondamenti di Informatica
5
Linguaggi Imperativi
• Linguaggi più evoluti:
– permettono di descrivere operazioni più
complesse di quelle che l'elaboratore può
eseguire
– livello di astrazione più alto
– risalgono agli anni '50
– detti di alto livello di tipo imperativo
– Es: Basic, Fortran, Pascal
Fondamenti di Informatica
6
Linguaggi Imperativi
• Caratteristiche:
– di utilizzo più semplice
– indipendenti dall'elaboratore
– purtroppo ancora legati al modello di Von
Neumann:
• i programmi sono ancora una sequenza di
istruzioni; l'evoluzione del calcolo è costituita
da una variazione dello stato della memoria
Fondamenti di Informatica
7
Linguaggi Imperativi
• Eseguono 3 tipi di operazioni:
– trasferimento dati
– operazioni aritmetiche
– alterazione del flusso del programma
• Già discussi in precedenza
• Basic (semplice ma poco espressivo)
• Fortran (molto usato per il calcolo scientifico
e le librerie molto complete)
Fondamenti di Informatica
8
Linguaggi Funzionali
• Non sono legati al modello di Von
Neumann ma al concetto di
programmazione funzionale
• Il primo linguaggio funzionale:
– Lisp (List Processing), fine anni '50
– caratteristiche di manipolazione agevole di
informazioni di tipo simbolico
Fondamenti di Informatica
9
Linguaggi Funzionali
• Differenze con i linguaggi imperativi:
– il calcolo è basato sul calcolo di valori e
non sull'assegnamento di valori a variabili
– basato su valori e non su effetti
– il risultato è il risultato di una funzione, non
l'effetto causato dalla esecuzione di una
sequenza di operazioni
Fondamenti di Informatica
10
Linguaggi Funzionali
• Caratteristiche:
– meccanismo di definizione funzionale per
casi (tipo switch in C)
– è possibile la ricorsione (utilizzando tali
costrutti condizionali)
– Il Lisp, però, consente anche l'iterazione e
l'assegnamento (tipico dei ling. Imperativi)
Fondamenti di Informatica
11
Linguaggi Dichiarativi
• Basati sulla logica
– obiettivo: formalizzare il ragionamento
– caratterizzati da meccanismi deduttivi
• Programmare significa:
– descrivere il problema con formule del
linguaggio
– interrogare il sistema, che effetua
deduzioni sulla base delle definizioni
Fondamenti di Informatica
12
Linguaggi Dichiarativi
• Programmazione:
– semplice (occorre solo definire la propria
conoscenza del problema)
– avviene tramite una formulazione
dichiarativa
• Esempio: Prolog
Fondamenti di Informatica
13
Linguaggi Dichiarativi
• Un programma Prolog è costituito da:
– Asserzioni incondizionate (fatti):
– Asserzioni condizionate (o regole):
A IF B,C,D,…
A
• A: è la conclusione (conseguente)
• B,C,D: sono le premesse (o antecedenti)
• Una interrogazione ha la forma:
? A, B, C, …
Fondamenti di Informatica
14
Esempio
• Il fattoriale:
Fatt (0,1)
Fatt (z,w) IF Dec(z,z1),
Fatt(z1,w1),Prod(z,w1,w)
• Problemi risolubili:
– calcolo del fatoriale:
? Fatt(3, x)
– calcolo di quel numero il cui fattoriale è noto:
? Fatt(x, 6)
Fondamenti di Informatica
15
Esempio
B
• Ricerca in un grafo orientato:
A
go(A)
arc(A,B) arc(B,C) arc(D,C)
arc(A,C) arc(B,D) arc(C,E)
go(y) IF arc(x,y), go(x)
D
C
E
– con la richiesta ? go(E) viene
determinata la sequenza E, C, A
Fondamenti di Informatica
16
Sintassi e Semantica
• Nei linguaggi naturali si distinguono:
– sintassi (si occupa della forma delle frasi,
delle regole per la loro creazione)
– semantica (significato delle frasi)
• Analogamente per i linguaggi di
programmazione:
– sintassi: definisce i programmi legali
– semantica: significato dei programmi
Fondamenti di Informatica
17
Sintassi e Semantica
• Dopo la definizione di un linguaggio
(con sintassi e semantica) serve un
sistema che possa eseguire i
programmi scritti in tale linguaggio
• Si parla di implementazione di un
linguaggio
– generalmente è un traduttore verso il
linguaggio macchina di un dato elaboratore
Fondamenti di Informatica
18
Sintassi
• Per definire la sintassi di un linguaggio,
è necessario definire le grammatiche
• La grammatica è un insieme di regole
che servono per costruire una frase
Fondamenti di Informatica
19
Grammatica
• La grammatica è definita da:
– V: un alfabeto di simboli terminali
(l'alfabeto del linguaggio)
– N: un alfabeto di simboli non terminali
– S: un simbolo iniziale (o assioma)
– P: un insieme finito di regole sintattiche
(dette produzioni) espresse nella forma:
Xa
Fondamenti di Informatica
20
Grammatica
• Le produzioni possono essere scritte:
– anche nella forma alternativa:
X ::= a
– se esistono più produzioni con parte
sinistra uguale,
X ::= a X ::= b X ::= c
allora si può scrivere:
X ::= a | b | c
Fondamenti di Informatica
21
Grammatica
• Derivazioni:
– una stringa c deriva dalla stringa b se esse
possono essere decomposte in:
b=mAn c=man
con m e n simboli non terminali e se esiste
la produzione
A ::= a
Fondamenti di Informatica
22
Grammatica
• Data una grammatica, il linguaggio
generato è definito come l'insieme delle
frasi derivabili a partire dall'assioma S
• Le frasi di un linguaggio di programmazione sono dette programmi
Fondamenti di Informatica
23
Formalismo di Backus-Naur
(Backus -Naur Form, BNF)
• Il modo visto per definire una
grammatica è detto di Backus-Naur
– introdotto negli anni '50 da Backus e Naur
• Esiste anche una estensione (Extended
BNF, EBNF) che permette una scrittura
più sintetica
Fondamenti di Informatica
24
Esempio di grammatica
V: { il, lo, gatto, topo, sasso, mangia, beve }
N: {<frase>, <soggetto>, <verbo>, <compl-oggetto>,
<articolo>}
S: <frase>
P contiene le seguenti produzioni:
<frase>::=<soggetto><verbo><compl-oggetto>
<soggetto>::=<articolo><nome>
<articolo>::= il | lo
<nome>::= gatto | topo | sasso
<verbo>::= mangia | beve
<compl-oggetto>::=<articolo><nome>
Fondamenti di Informatica
25
Extended BNF
X ::= [a]b
X ::= {a}nb
equivale a X ::= b|ab
equivale a X ::= b|ab|aab|…
ripetendo a fino a n volte
X ::= {a}b
equivale a X ::= b|ab|aab|…
ripetendo a un numero di volte indefinito
Equivale ad avere nella grammatica la
produzione
X ::= b | aX
(ricorsiva)
Fondamenti di Informatica
26
Esempio di grammatica
V: { 0,1,2,3,4,5,6,7,8,9,+,- }
N: {<intero><int-senza-segno><numero>
<cifra-non-nulla><cifra>}
S: <intero>
P contiene le seguenti produzioni:
<intero> ::= [+ | - ] <int-senza-segno>
<int-senza-segno> ::= <cifra> | <cifra-non-nulla><numero>
<numero> ::= <cifra> | <cifra><numero>
<cifra> ::= <cifra-non-nulla> | 0
<cifra-non-nulla> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Fondamenti di Informatica
27
Alberi sintattici
• Il processo di derivazione può essere
descritto tramite un albero sintattico
<frase>
<soggetto>
<verbo>
<articolo>
<nome>
il
gatto
<compl-oggetto>
<articolo> <nome>
mangia
Fondamenti di Informatica
il
topo
28
Diagrammi sintattici
• Sono dei grafi:
– nodi: etichettati con simboli (terminali e
non terminali), collegati da archi orientati
– un arco da i a j significa che il simbolo i è
seguito dal simbolo j
– più archi rappresentano alternative
– si possono aggiungere nodi fittizi per
rappresentare le diramazioni
Fondamenti di Informatica
29
Esempio di
diagramma sintattico
<intero> ::=
0
+
-
<cifra-non-nulla>
<cifra>
Fondamenti di Informatica
30
Sintassi dei linguaggi
di programmazione
• Considerazioni sui linguaggi:
– uno stesso linguaggio può essere generato
da più di una grammatica
– alcune grammatiche sono ambigue: cioè
esistono diversi elementi che possono
essere generati da diverse derivazioni
(esistono cioè diversi alberi sintattici).
Situazione da evitare!
Fondamenti di Informatica
31
Esempio di
grammatica ambigua
• Esempio:
<expr> ::= x | y | z | (<expr>) | <expr>+<expr> |
<expr>*<expr>
• All'espressione x+y*z possono essere
associati due alberi sintattici diversi
– questo influenza anche il modo con cui
viene attribuito il significato all'espressione
Fondamenti di Informatica
32
Esempio di
grammatica ambigua
• Nella definizione dei linguaggi si deve
evitare l'ambiguità
• Esempio:
<istruzione-if> ::= if <espressione>
then <istruzione> else <istruzione>
Fondamenti di Informatica
33
Analizzatore sintattico
• L'analisi della correttezza è eseguita
dall'elaboratore: è suddiviso in 3 passi:
– analisi lessicale: controlla che i simboli
utilizzati appartengano all'alfabeto
– analisi grammaticale: verifica il rispetto
delle regole grammaticali
– analisi sintattica contestuale: verifica
restrizioni di tipo contestuale (tipi di dati,
identificatori non definiti,…)
Fondamenti di Informatica
34
Analizzatore sintattico
• Generalmente l'analizzatore sintattico
esegue le tre verifiche simultaneamente
• Si dice "ad una passata "
• Durante la scansione, se viene trovato
un errore, si cerca di recuperare e si
prosegue fino al termine
Fondamenti di Informatica
35