Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1
Introduzione Una volta progettato un algoritmo codificato in un linguaggio di programmazione di alto livello caricato mediante un editor sul disco del computer non dobbiamo dimenticare che la macchina, comunque, è in grado di interpretare solo e soltanto il linguaggio binario. Perciò, ci poniamo le seguenti questioni: Il calcolatore comprende anche altri linguaggi oltre al binario? Che tipi di errore in genere vengono commessi nello scrivere un programma? 3 Compilatori ed Interpreti La possibilità di programmare con linguaggi orientati all uomo è consentita dalla esistenza di appositi programmi traduttori. I programmi di traduzione del programma sorgente in un programma eseguibile, possono essere classificati in due tipi, a seconda del loro modo di eseguire il processo di traduzione del programma sorgente: compilatori interpreti TRADUTTORI COMPILATORI INTERPRETI 4 2
Il compilatore Il compilatore è un programma che effettua le seguenti azioni sul programma scritto dal programmatore (programma sorgente): legge il programma sorgente, istruzione per istruzione; controlla (decodifica), istruzione per istruzione, segnalando la presenza di eventuali errori sintattici (che il programmatore dovrà correggere); riconosce il tipo di istruzione; traduce ciascuna istruzione (se il programma è privo di errori) creando il programma oggetto, un file su disco con estensione.obj (scritto in binario) 5 Il linker Nello scrivere il programma sorgente il programmatore ha soltanto utilizzato certe istruzioni (ad es. di lettura e di stampa) senza descriverne il funzionamento. E allora necessario che il programma oggetto creato sia completato con questi riferimenti mancanti che si trovano nelle librerie del compilatore. Ciò si ottiene mediante una seconda fase detta link. Il linker è un altro programma che svolge questa azione. Il linker esaminando il programma oggetto, crea il programma eseguibile che essendo scritto in linguaggio binario sarà direttamente interpretabile dalla macchina. 6 3
Compilazione e linking Schema completo del processo di compilazione linking La compilazione trasforma il programma sorgente in programma oggetto L operazione di link trasforma il programma oggetto in programma eseguibile Esempi di linguaggi tipicamente compilati sono: Pascal, C, C++, Fortran, COBOL, Java (parzialmente) 7 L interprete L interprete effettua le seguenti azioni istruzione per istruzione, man mano che le scriviamo, un pò come fanno gli interpreti simultanei nelle trasmissioni televisive o nelle interviste. legge il programma sorgente, istruzione per istruzione; controlla (decodifica) ciascuna istruzione (in caso di errori sintattici, la traduzione si blocca e il programmatore deve provvedere alla correzione e lanciare daccapo l interprete); preleva dalla memoria i dati richiesti dall istruzione; riconosce il tipo di istruzione; esegue l istruzione. Esempi di linguaggi tipicamente interpretati sono: PHP, sql, HTML 8 4
Confronto Compilatori/Interpreti Tra i compilatori e gli interpreti esistono ovviamente differenze che comportano vantaggi e svantaggi rispettivi. Presenza in RAM con il programma Velocità di esecuzione del programma Interattività File eseguibile Segretezza del codice Rieseguibile senza tradurre di nuovo Facilità nel collaudo Compilatori ALTA Interpreti BASSA 9 Errori di programmazione Così come nel parlare o nello scrivere si possono commettere errori, così nel programmare possiamo incorrere in: errori sintattici errori logici errori a tempo di esecuzione 10 5
Errori sintattici Gli errori sintattici: consistono in una errata scrittura di un istruzione o di una parola chiave (errore lessicale) rispetto alla sintassi prevista vengono rilevati al momento della traduzione sono segnalati dal compilatore o dall interprete, che indica anche il punto in cui si sono verificati devono essere corretti dal programmatore, intervenendo sul listato del programma per poi rieseguire il processo di compilazione. 11 Errori logici Gli errori logici: sono errori di logica commessi a livello di analisi del problema e riguardano il procedimento risolutivo realizzato. In particolare, sono errori di interpretazione dell istruzione al momento della sua esecuzione vengono rilevati al momento della esecuzione del programma devono essere corretti dal programmatore intervenendo sul procedimento risolutivo del problema in esame. 12 6
Errori a tempo di esecuzione Gli errori a tempo di esecuzione (run time errors) si possono manifestare in diversi modi: il programma si blocca: l errore ha causato un blocco della CPU a causa di un operazione non permessa (ad esempio una divisione per 0); il programma va in loop infinito: la CPU continua ad eseguire senza fine un certo blocco di istruzioni. Il programmatore deve bloccare dall esterno l esecuzione del programma 13 Rilevamento degli errori Mentre gli errori sintattici vengono rilevati dal traduttore, gli errori logici e quelli run time possono essere rilevati mediante un programma di utilità detto debugger, che consente di: eseguire il programma step-by-step, ossia un istruzione alla volta, in modo che il programmatore possa esaminare in quale punto si verifica l errore. esaminare, uno ad uno, il contenuto di variabili desiderate, per vedere in quali punti l esecuzione si discosta da quella attesa. 14 7
Gli avvertimenti (warning) Altri messaggi che possono dari i traduttori riguardano punti critici del programma sorgente; non sono propriamente errori, ma avvertimenti (dette warning); tant è vero che la traduzione viene completata ugualmente; tuttavia, è sempre buona cosa evitare anche la presenza di warning nel programma! 15 Moderni linguaggi di programmazione I moderni linguaggi di programmazione, tutti ormai orientati all uomo, hanno costituito la terza generazione di linguaggi (la prima era stato il linguaggio binario e la seconda l assembly). Tra essi, ricordiamo: C Linguaggio procedurale per scopi generali, usato per realizzare sistemi operativi, software di base vario, software di controllo industriale e per la realizzazione di basi di dati C++ - Linguaggio C nella versione ad oggetti Java Linguaggi ad oggetti oggi molto diffuso nell ambito delle architetture client/server per la programmazione in rete HTML Linguaggio dichiarativo interpretato oggi molto usato nell ambito Web, per la costruzione di pagine omonime. Richiede la presenza di un browser per la sua interpretazione Cobol Linguaggio procedurale per scopi gestionali e aziendali, ancora molto usato specialmente in banche e aziende. 16 8
Moderni linguaggi di programmazione Vi sono poi linguaggi ad altissimo livello (Ultra High Level Language, UHLL) appartenenti alla quarta generazione di linguaggi, tra cui: Fogli elettronici, per la gestione tabellare di grandi quantità di dati di vario tipo DBMS, linguaggi per le gestione di basi di dati, anche in rete, che consentono la manipolazione di grandi masse dati anche attraverso reti telematiche Infine i linguaggi di quinta generazione, usati nell ambito dell Intelligenza Artificiale (I.A.) per la costruzione di sistemi esperti, riconoscimento vocale, autoapprendimento anche a distanza, diagnosi dei guasti, diagnosi medica. 17 Argomenti Compilatori e interpreti Rilevamento degli errori Il compilatore Gli avvertimenti (warning) Il linker Moderni linguaggi di programmazione Compilazione e linking L interprete Confronto Compilatori/Interpreti Errori di programmazione Errori sintattici Errori logici Errori a tempo di esecuzione 18 9
Altre fonti di informazione P.Gallo, F.Salerno Informatica Generale 1, ed. Minerva Italica G.Callegarin Corso di Informatica 1, ed. CEDAM 19 10