Costruzione di un compilatore

Wikibooks, manuali e libri di testo liberi.

[modifica] Prefazione

Lo scopo di questo Wikibook è di fornire utili consigli per la creazione di un compilatore, insieme a qualche esempio sia di compilatori che di interpreti. Un po' di teoria è necessaria, ma le sarà dedicato il minimo spazio. Cercando sul Web "compiler construction" si trovano molte informazioni e diversi approcci. Tutto ciò che questo libro si propone è di dimostrare alcuni dei possibili modi di costruire un compilatore. Dopo aver letto questo libro, si potranno giudicare meglio anche gli altri metodi.

Gli obiettivi di questo libro sono:

  • Essere utile e pratico: Esistono svariati libri sui compilatori, in particolare quello soprannominato "dragon book". Tuttavia, mentre le tecniche di analisi lessicale e sintattica sono mature e ben conosciute, il trattamento dei linguaggi di scripting e la compilazione dinamica di bytecode è ancora in evoluzione e poco documentata.
  • Trattare ampiamente i linguaggi orientati agli oggetti.
  • Contenere molti riferimenti esterni.
  • Essere aggiornato: Un vantaggio di un libro di testo online è che può essere aggiornato per trattare nuovi linguaggi o implementazioni.

[modifica] Panoramica

Un compilatore è un programma per computer che traduce un programma per computer scritto in un linguaggio di programmazione (il linguaggio sorgente) in un programma equivalente scritto in un altro linguaggio di programmazione (il linguaggio bersaglio). Il processo di traduzione è chiamato compilazione. Il programma sorgente viene compilato per creare il programma eseguibile. Il programma eseguibile può poi essere lanciato (o eseguito) per fare quello che era specificato nel programma sorgente originale.

Un interprete è un programma per computer che esegue un programma sorgente più o meno direttamente, invece di tradurlo in un altro linguaggio. Un interprete può essere più facile da comprendere rispetto a un compilatore, siccome non ci si deve interessare del linguaggio bersaglio.

In generale, un programma che fa molti calcoli o molte elaborazioni di dati interni sarà più veloce nella forma compilata che quando è interpretato. Ma un programma che fa molto input/output e pochissimi calcoli o elaborazioni di dati potrebbe avere circa la stessa velocità in entrambi i casi.

Il linguaggio sorgente è normalmente un linguaggio ad alto livello, scritto usando un miscuglio di parole inglesi e di notazione matematica. Il linguaggio bersaglio è normalmente un linguaggio a basso livello come un linguaggio assemblativo (assembly), scritto con abbreviazioni piuttosto criptiche di istruzioni macchina. Il linguaggio bersaglio può anche essere il codice macchina per qualche computer reale o virtuale, per esempio il bytecode della Java Virtual Machine.

Essendo essi stessi programmi per computer, sia i compilatori che gli interpreti devono essere scritti in qualche linguaggio di implementazione. Fino all'inizio degli anni 1970, la maggior parte dei compilatori erano scritti nel linguaggio assemblativo di un particolare tipo di computer. L'avvento dei compilatori C e Pascal, entrambi scritti nel loro stesso linguaggio sorgente, ha condotto alla diffusione di linguaggi ad alto livello per scrivere compilatori.

Per ottenre la prima versione di un compilatore scritta nel suo stesso linguaggio sorgente c'è un problema detto di bootstrapping, che consiste nel fatto che non si può compilare il sorgente finché non c'è una versione eseguibile del compilatore, ma per ottenere la versione eseguibile bisogna compilare il sorgente.

Si noti che un compilatore è un programma non banale. Un compilatore non ottimizzante scritto interamente a mano per un linguaggio sorgente semplice verosimilmente richiede più di 3000 righe di codice. Sono disponibili alcuni strumenti di ausilio alla scrittura di compilatori che possono ridurre la dimensione del codice.

[modifica] Introduzione

Se non si è abituati alla terminologia o ai concetti base dei compilatori, si dovrebbe leggere questo capitolo introduttivo dato che il resto del libro li darà per scontati

Strumenti personali
Altre lingue