Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Compilatore
Un programma sorgente deve essere ‘tradotto’ in linguaggio macchina per poter essere eseguito
Un compilatore è un programma che esegue questa ‘traduzione’ generando un programma oggetto
Il compilatore effettua la traduzione sulla base del lessico, sintassi e semantica del linguaggio di programmazione usato per il programma sorgente
Il programa sorgente è costituito da una sequenza di simboli appartenenti al lessico del linguaggio di programmazione usato (caratteri alfabetici, cifre, simboli di
operatori, …) che è opportunamente analizzata dal compilatore per produrre le sequenze binarie formanti il programma oggetto
In un programma è possibile riconoscere:
Componenti lessicali, quali parole chiavi, operatori, nomi di variabili e di costanti
Istruzioni, formate da opportune sequenze di componenti lessicali secondo i costrutti sintattici del linguaggio di programmazione.
Possono essere distinte in istruzioni di tipo dichiarativo (definenti gli elementi da elaborare quali tipi, variabili, etc.) e istruzioni di tipo esecutivo (definenti le azioni elaborative)
Compilatore
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Per effettuare la traduzione il compilatore usa e genera alcune tabelle, tra cui:
Tabella dei codici operativi: riporta gli elementi corrispondenti ad operatori ed i relativi codici macchina. E’ una tabella statica.
Tabella degli pseudocodici: tabella statica per far corrispondere a ciascun pseudocodice l’indirizzo di inizio di un programma (o sottoprogramma) che esegue le operazioni richieste dallo specifico pseudocodice.
Compilatore
Tabella dei simboli: tabella dinamica che fa corrispondere a ciasuno dei nomi simbolici del programma sorgente (nomi di variabili, di costanti, …) informazioni descriventi le proprietà associate a quel nome, quali:
- Tipo
- indirizzo di memoria assegnato - dimensione
- ….
Compilatore
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Compilatore
La traduzione è effettuata mediante tre fasi:
- analisi lessicale - analisi sintattica - analisi semantica
È analizzata la sequenza di caratteri costituenti ciascuna istruzione e sono identificati i simboli effettivi (token), quali nomi di identificatori, costanti, operatori, parole chiavi, delimitatori, …
E’ costruita/aggiornata la tabella dei simboli
E’ effettuata la conversione delle costanti nella rappresentazione interna
Sono identificati e diagnosticati errori di tipo lessicale
Analisi Lessicale
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Esempio:
ALFA =AA + 50;
A L F A = A A + 50 ; A L F A = A A + 50 ; i d o i o c d
i = identificatore d = delimitatore c = costante o = operatore
Analisi Lessicale
Tabella simboli:
Token Classe Tipo Occupazione Indirizzo …
ALFA VARIABILE INT 2 BYTE …
AA VARIABILE INT 2 BYTE …
Analisi Lessicale
Esempio:
int ALFA, AA;
…
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Analisi Sintattica
E’ analizzata la sequenza dei token e degli altri simboli risultanti dall’analisi lessicale per verificarne la sintassi
Essi sono raggruppati in strutture sintattiche (alberi sintattici) per ottenere forme più generali delle istruzioni.
Tale rappresentazione è usata per classificare ciascuna istruzione.
Sono identificati e diagnosticati errori sintattici
Analisi Sintattica
Esempio: ALFA =AA + 50;
ALFA =
AA 50
+
i =
i c
+
<identificatore> = <espressione>
Espressione Operatore di
assegnazione
Classificata come calcolo ed assegnazione
Nella istruzione: A = B * (C+H));
è riconosciuto un errore di sintassi
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Analisi Semantica
E’ effettuata la verifica semantica dell’istruzione e se questa è corretta viene generato il codice macchina.
Esempi di violazioni semantiche sono:
Operazioni tra operandi di tipo non compatibile b+c con b stringa e c intero
… ma non in C …
Operandi non validi per gli operatori cui sono applicati b*c con b e c di tipo stringa
Uso di variabili non dichiarate Violazioni della cardinalità di array
Analisi Semantica
Token Classe Tipo Occupazione Indirizzo …
ALFA VARIABILE INT 2 BYTE 8000
AA VARIABILE INT 2 BYTE 8004
50 COSTANTE INT 1 BYTE
Esempio: ALFA =AA + 50;
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
Programma Sorgente
Programma Oggetto
Analizzatore Lessicale
Analizzatore Sintattico
Analizzatore Semantico
TABELLE Sequenza
caratteri
Sequenza Token
Generatore Testo oggetto
Albero Sintattico
COMPILATORE