Questo libro è progettato principalmente per essere utilizzato come libro di testo in un corso di un semestre sulla progettazione del compilatore per studenti universitari e studenti laureati principianti. Gli unici prerequisiti per questo libro sono la familiarità con gli algoritmi di base e le strutture dati (elenchi, mappe, ricorsione, ecc. ), una conoscenza rudimentale dell'architettura del computer e del linguaggio assembly e una certa esperienza con il linguaggio di programmazione Java.
Uno studio completo dei compilatori potrebbe facilmente riempire diversi corsi di laurea e quindi alcune semplificazioni e compromessi sono necessari per un corso di un semestre accessibile agli studenti universitari. Di seguito sono riportate alcune delle decisioni prese per soddisfare gli obiettivi di questo libro.
- Il libro ha un focus ristretto come corso orientato al progetto sui compilatori. La teoria del compilatore è ridotta al minimo, ma l'orientamento del progetto mantiene la parte "divertente" dello studio dei compilatori.
- Il linguaggio di origine compilato è relativamente semplice, ma è abbastanza potente da essere interessante e stimolante. Ha tipi di dati di base, array, procedure, funzioni e parametri, ma relega molte altre caratteristiche linguistiche interessanti agli esercizi del progetto.
- La lingua di destinazione è il linguaggio assembly per una macchina virtuale con un'architettura basata su stack, simile ma molto più semplice della Java Virtual Machine (JVM). Questo approccio semplifica notevolmente la generazione di codice. Sia un assemblatore che un emulatore per la macchina virtuale sono forniti sul sito web del corso.
- Non sono richiesti o utilizzati strumenti speciali relativi al compilatore all'interno del libro. Gli studenti richiedono l'accesso solo a un compilatore Java e a un editor di testo, ma la maggior parte degli studenti vorrà utilizzare Java con un ambiente di sviluppo integrato (IDE).
- Un componente molto importante di un compilatore è il parser, che verifica che un programma sorgente sia conforme alla sintassi del linguaggio e produce una rappresentazione intermedia del programma adatta per ulteriori analisi e generazione di codice. Esistono diversi approcci all'analisi, ma in linea con l'attenzione su un corso di un semestre, questo libro enfatizza solo un approccio, l'analisi della discesa ricorsiva con un lookahead simbolo.