next up previous contents index
Next: Sintassi e semantica Up: Introduzione Previous: Cosa è un linguaggio   Indice   Indice analitico

Cosa è un compilatore

Abbiamo dunque capito che un linguaggio di programmazione è un ambiente, avente le proprie regole e strutture, avente una ``lingua'' opportunamente costruita per potere essere tradotta in linguaggio macchina. Immaginiamo di conoscere una di queste ``lingue'', prendiamo il linguaggio C++, e di avere scritto un programma; come possiamo tradurlo in linguaggio macchina ed eseguirlo? Se effettuassimo una traduzione manuale non avremmo tratto nessun vantaggio dall'utilizzare un linguaggio di programmazione che funga da intermediario tra l'uomo e la macchina, perché ci troveremmo comunque a dialogare con essa, cosa che abbiamo detto essere non facile; il grande salto invece è che possiamo utilizzare un programma, detto compilatore, che faccia questo tedioso lavoro al nostro posto, cioé che sia in grado di tradurre ogni frase scritta correttamente in C++ in un linguaggio molto semplice, al livello del calcolatore. Possiamo allora procurarci una volta per tutte un compilatore1.3 e, supponendo di saperlo utilizzare, dargli in pasto il nostro programma scritto in C++; dopo un certo tempo (molto ridotto se il programma è semplice come quelli di esempio contenuti in questo testo) ci verranno restituiti alcuni files oggetto (object files), che non sono altro che la traduzione del nostro programma in una serie di istruzioni che la macchina è in grado di eseguire.

Nel caso poi volessimo eseguire il nostro programma, ossia volessimo fare in modo che le istruzioni contenute nei files oggetto venissero caricate nella memoria centrale e successivamente eseguite dal processore, dovremmo collegare (link) i files oggetto; tale operazione consiste essenzialmente nel creare un file eseguibile, che ad esempio corrisponde nel sistema operativo Windows ad una applicazione (oppure in MS-DOS ad un file .exe) ed è strettamente dipendente dal sistema operativo utilizzato; le modalità di collegamento e i meccanismi che tale operazione sottende non saranno oggetto della nostra trattazione. Prendiamo invece un esempio. Si supponga di avere un file chiamato pippo.cpp contenente un programma C++1.4 e di possedere il compilatore GNU GCC, il quale è libero e può essere scaricato via Internet da numerosi mirrors (come ftp://ftp.unina.it). Per compilare il programma e collegarlo ad un file eseguibile basta digitare il seguente comando

g++ pippo.cpp -o pippo Unix
gxx pippo.cpp -o pippo.exe Dos/Windows

ottenendo, ammesso che il nostro programma pippo.cpp sia privo di errori e che dunque la traduzione possa avere luogo, tre files:

pippo.cpp il nostro programma di partenza, non modificato
pippo.o il file oggetto a esso corrispondente
pippo.exe / pippo il file eseguibile

Possiamo dunque immediatamente caricare il nostro file eseguibile ed ammirare il risultato dei nostri sforzi di programmazione.


next up previous contents index
Next: Sintassi e semantica Up: Introduzione Previous: Cosa è un linguaggio   Indice   Indice analitico
Claudio Cicconetti
2000-09-06