Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2018/19
Corso di Linguaggi
● Che cos’è un Linguaggio di Programmazione?
● Descrivere i linguaggi di programmazione.
● Categorie sintattiche: espressioni, dichiarazioni, comandi.
● Astrazione del controllo e dei dati.
● Gestione della memoria.
● (Cenni) Paradigmi di programmazione.
Linguaggi di Programmazione
Per poter essere effettivamente eseguiti gli algoritmi devono essere opportunamente
formalizzati in termini dei costrutti di un linguaggio di programmazione, cioè devono
essere rappresentati mediante le istruzioni di un opportuno linguaggio di
programmazione. Questo linguaggio sarà definito formalmente da una specifica sintassi
e da una precisa semantica.
In particolare:
1. In linea di principio la realizzazione di ML direttamente in hardware è
sempre possibile ed è concettualmente abbastanza semplice: si tratta di
realizzare mediante dispositivi fisici una macchina fisica tale che il
suo linguaggio macchina coincida con L.
1
A.A. 18/19 Linguaggi - JEREGHI
Considerazioni:
- La realizzazione di ML in hardware offre massima velocità ma
flessibilità nulla.
- La realizzazione mediante software offre massima flessibilità e minima
velocità.
- Quella mediante firmware è intermedia fra le due.
3
A.A. 18/19 Linguaggi - JEREGHI
4
A.A. 18/19 Linguaggi - JEREGHI
Grammatica e sintassi
Come viene descritta la sintassi per i linguaggi di programmazione?
- La forma normale di Chomsky è una tecnica, per descrivere fenomeni
sintattici in modo formale, che usa dei formalismi per limitare
l’ambiguità.
5
A.A. 18/19 Linguaggi - JEREGHI
Una grammatica G è ambigua se esiste almeno una stringa di LG che ammette più
di un albero di derivazione.
Un albero di derivazione testimonia la correttezza sintattica della stringa di
partenza.
Ambiguità: una espressione con più parse tree.
Una grammatica ambigua è possibile renderla non ambigua in modo tale che si
possa utilizzare per tradurre (compilare) in modo univoco un programma.
Semantica
Come la semantica descrive il significato di un linguaggio di
programmazione? Quali punti di vista dobbiamo utilizzare ?
6
A.A. 18/19 Linguaggi - JEREGHI
Analisi lessicale
L’analisi lessicale (scanning) è la prima fase della traduzione ed il
suo scopo è quello di leggere sequenzialmente i simboli di ingresso di cui è
composto il programma e di raggruppare tali simboli in unità logicamente
significative dette token (informazione astratta). I token particolarmente
significativi sono: le parole riservate del linguaggio, gli operatori, le
parentesi aperte e chiuse, inoltre i token corrispondono a specifiche
categorie sintattiche.
Più precisamente i token rappresentano coppie di nome (simbolo astratto
che rappresenta una specifica categoria sintattica: identificatori, operatori)
e valore (sequenza di simboli del testo di ingresso: lo specifico
identificatore, lo specifico operatore).
7
A.A. 18/19 Linguaggi - JEREGHI
Analisi sintattica
L’albero di derivazione viene sottoposto ai controlli relativi ai
vincoli contestuali del linguaggio: controllo delle dichiarazioni, i tipi, il
numero di parametri delle funzioni ecc. A questa fase agli identificatori
vengono associati informazioni come il tipo, il luogo di dichiarazioni e altre
utili (per esempio il suo scope), ma per non creare duplicati vengono create
strutture dati apposta fuori dall’albero di derivazione. Una di queste
strutture viene chiamata tabella dei simboli (cioè degli identificatori).
Pragmatica
La pragmatica di un linguaggio di programmazione è indipendente dalla
sua definizione iniziale. Rientrano nella pragmatica tutti i suggerimenti di
stile di programmazione.
8
A.A. 18/19 Linguaggi - JEREGHI
Categorie sintattiche
1. Espressioni;
2. Comandi;
3. Dichiarazioni.
- Espressioni
Le espressioni sono il componente essenziale di ogni linguaggio perché
se esistono linguaggi dichiarativi nei quali non sono presenti i comandi, le
espressioni, numeriche o simboliche, sono presenti in tutti i linguaggi.
9
A.A. 18/19 Linguaggi - JEREGHI
10