COMPILATORI
Un compilatore si riferisce a un programma informatico utilizzato per tradurre un codice informatico scritto in un linguaggio di programmazione (denominato linguaggio di origine) in un altro linguaggio di programmazione (denominato linguaggio di destinazione). Il termine compilatore viene applicato principalmente ai programmi che traducono i codici sorgente da un linguaggio di programmazione di alto livello a un linguaggio di programmazione di livello inferiore. Ad esempio, codice macchina, codice oggetto o linguaggio assembly per creare un programma eseguibile.
È importante notare che esistono molti tipi diversi di compilatori. Nel caso in cui il programma compilato possa essere eseguito su un computer il cui sistema operativo o CPU è diverso da quello eseguito dal compilatore, il compilatore viene definito cross-compilatore. Un compilatore bootstrap invece è scritto nel linguaggio che intende compilare. Un decompilatore è un programma utilizzato per tradurre un linguaggio di basso livello in un linguaggio di livello superiore. Un programma utilizzato per tradurre tra linguaggi di alto livello viene definito compilatore da sorgente a sorgente. Può anche essere definito transpiler. Un programma responsabile della traduzione della forma delle espressioni senza cambio di lingua è noto come riscrittore linguistico. Il termine compilatore-compilatore si riferisce a quegli strumenti utilizzati per creare parser responsabili dell'esecuzione dell'analisi della sintassi.
Alcune delle operazioni eseguite da un compilatore includono: preelaborazione, parsing, analisi semantica (traduzione diretta dalla sintassi), analisi lessicale, generazione di codice, ottimizzazione del codice e conversione dei programmi di input in una rappresentazione intermedia. I compilatori sono responsabili dell'implementazione di queste operazioni in diverse fasi che promuovono trasformazioni corrette e una progettazione efficiente dell'input sorgente nell'output di destinazione. Gli errori del programma causati da un comportamento errato del compilatore possono essere molto difficili da individuare e risolvere. Gli implementatori del compilatore investono quindi sforzi significativi per garantire la correttezza del compilatore.
È importante notare che i compilatori non sono gli unici traduttori utilizzati per trasformare i programmi sorgente. Un software per computer responsabile della trasformazione e quindi dell'esecuzione delle operazioni indicate viene definito interprete. Il processo di traduzione influenza la progettazione dei linguaggi informatici che porta a una preferenza di interpretazione o compilazione. In pratica l'implementazione di un interprete per compilatori e linguaggi compilati può essere implementata per linguaggi interpretati.
Si noti che quando si utilizza un compilatore, viene utilizzato un processo in due passaggi per eseguire un programma,
LA CATENA DI STRUMENTI DI COMPILAZIONE
Per programmi di grandi dimensioni, il compilatore fa parte di una catena di strumenti in più fasi,
(preprocessore)- (compilatore)- (assemblatore)- (linker)- (caricatore).
STRUTTURA DI UN COMPILATORE
I compilatori moderni sono costituiti da due parti principali. Ognuna di queste parti è spesso suddivisa. Queste due parti principali sono il front-end e il back-end.
Il front-end è responsabile dell'analisi del programma sorgente, costruisce una rappresentazione intermedia del programma e ne determina le parti costitutive. Generalmente il front-end è indipendente dalla lingua di destinazione.
Il back-end invece è responsabile della sintesi del programma target dalla rappresentazione intermedia prodotta dal front-end. In generale, si dice che il back-end sia indipendente dalla lingua di partenza.