Messaggi di errore #define L 10 int i,k,r[L]; for(i=0;i
Transcript of Messaggi di errore #define L 10 int i,k,r[L]; for(i=0;i
Linguaggi e compilatori Dal linguaggio sorgente al programma eseguibile
#define L 10
main() { int i,k,r[L]; for(i=0;i<L;i++) { k = 3*i+2; r[i] = k*k; } }
0010011000110001 1000111011001010 1101010010101001 1010101010101111 1010100111111111 0101010101010101
compilatore
Messaggi di errore
Il compilatore
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
2
Linguaggio sorgente e obiettivo
• Esistono... migliaia di linguaggi sorgente ▫ Linguaggi di programmazione generici
C, C++, Pascal, Fortran, Java, Basic, Lisp, Prolog, perl.... ▫ Linguaggi specializzati
Formattazione di testi (Tex, Latex...) Interrogazione di basi di dati
• Il compilatore traduce il linguaggio sorgente in ▫ Un altro linguaggio di programmazione (pascal -> C) ▫ Il linguaggio macchina per un dato processore
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
3
Analisi e sintesi
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
4
X = A+B*C X *
+ =
C B A
Il “contesto” del compilatore
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
5
preprocessore
assembler
linker/loader
scheletro programma sorgente
programma sorgente
programma assembly
programma oggetto
programma eseguibile
librerie
include, define (macro)
La struttura del compilatore
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
6
analisi lessicale
analisi sintattica
analisi semantica
generazione di codice intermedio
ottimizzazione
generazione del codice
gestione degli errori tavola dei simboli
Analisi lessicale (scanning)
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
7
int somma, diff = 0.3;
Analisi sintattica
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
8
istruzione di assegnazione
identificatore espressione
espressione
espressione identificatore
identificatore numero
espressione
espressione A
=
+
*
B C 60
Regole sintattiche
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
9
regole base
regole ricorsive
Analisi semantica • Ricava il significato associato alla struttura sintattica ▫ Verifica che le regole di impiego del linguaggio siano
soddisfatte dichiarazione degli identificatori (ridefinizione,...) controllo dei tipi (uso nelle espressioni, conversione
automatica di tipo, tipo di indici nei vettori, ecc..)
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
10
*
C
D
int D; float C;
funzione di conversione int -> float
Tavola dei simboli • Memorizza gli identificatori con i relativi attributi ▫ utilizzo di memoria ▫ tipo ▫ campo di visibilità ▫ numero e tipo dei parametri per le funzioni
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
11
Allocazione in memoria
Generazione del codice oggetto
Tecnologie per l'elaborazione del linguaggio
Marco Maggini
12
= id1
id2 id3
+ * int-to-float
60
t1 = int-to-float(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3
t1 = id3 * 60.0 id1 = id2 + t1
MOVF id3, R2 MULF #60.0, R2 .............
rappresentazione interna
generazione di codice intermedio
ottimizzazione del codice
generazione del codice oggetto