COMPILAZIONE. Tarsformazione di linguaggi

Размер: px
Начинать показ со страницы:

Download "COMPILAZIONE. Tarsformazione di linguaggi"

Транскрипт

1 COMPILAZIONE Tarsformazione di linguaggi

2 Le fasi della compilazione File sorgente Compilazione File sorgente File sorgente File sorgente Compilazione Compilazione Compilazione Libreria di run-time File oggetto File oggetto File oggetto File oggetto Link File eseguibile Il set di istruzioni del C è molto limitato: molte operazioni vengono delegate alla libreria di run time, che contiene programmi di supporto Le funzioni sono divise in gruppi, quali I/O, gestione della memoria, operazioni matematiche e manipolazione di stringhe, Per ogni gruppo di funzioni esiste un file sorgente, chiamato file header, contenente le informazioni necessarie per utilizzare le funzioni I codici sorgente ed oggetto possono essere suddivisi in più file, il codice eseguibile di un programma risiede in un unico file

3 Le fasi della compilazione File sorgente Compilazione File oggetto Link File eseguibile

4 La compilazione del file sorgente Il preprocessore legge in input un sorgente C e produce in output un sorgente C, dopo aver effettuato trasformazioni e sostituzioni sul file sorgente iniziale. Alcune operazioni gestite dal preprocessore C sono Inclusione di file esterni (tramite la direttiva #include) Rimozione dei commenti Espansione delle macro Esclusione di parti di codice al verificarsi di determinate condizioni (compilazione condizionale) Il compilatore ha il compito di tradurre il codice sorgente in codice oggetto ed è esso stesso un programma (o un gruppo di programmi) che deve essere eseguito Il compilatore riceve in ingresso un programma scritto in un determinato linguaggio di programmazione di alto livello e produce in uscita il codice oggetto, cioè istruzioni in un linguaggio tipicamente di basso livello, come l assembly (mappabile 1 a 1 con il codice macchina ma ancora comprensibile all uomo), che rappresenta una fase intermedia tra il codice sorgente ed il codice eseguibile

5 La compilazione del file sorgente Il codice assembly deve essere ora tradotto in codice macchina binario. La traduzione è eseguita dall Assembler. Nel linguaggio macchina le istruzioni sono rappresentate da una sequenza di cifre binarie che codificano le istruzioni e i dati su cui lavora la CPU: codice operativo dell istruzione operando Un programma (istruzioni + dati) è quindi una sequenza di numeri binary:

6 La compilazione del file sorgente Nel linguaggio assembly le singole istruzioni binarie sono rappresentate con un codice mnemonico: LOAD 220 SUM 252 MEM 220 Il passaggio da assembly a linguaggio macchina è quindi un operazione più semplice di quanto non lo sia quella di passare da un lingiaggio ad alto livello ad assembly. Il linguaggio assembly rispecchia fedelmente le istruzioni del linguaggio macchina, quindi linguaggi assembly differenti per CPU caratterizzate da diversi insiemi di istruzioni I linguaggi di alto livello sono più simili al linguaggio naturale: somma = somma+nuovo_dato;

7 Il link ed il caricamento I file oggetto creati dal compilatore vengono trasformati in un unico file eseguibile mediante il programma di link. Il linker, nel caso in cui la costruzione del programma oggetto richieda l unione di più moduli (compilati separatamente), provvede a collegarli formando un unico programma eseguibile Il linker provvede anche alla risoluzione dei riferimenti a funzioni e variabili definite altrove (ad es., in librerie standard o definite dall utente) La necessità di collegare tra loro procedure diverse deriva dal fatto che di solito i programmi vengono scritti suddividendoli in più procedure, le quali sono tipicamente tradotte in modo separato. La scelta di compilare e assemblare separatamente ogni procedura sorgente risponde a criteri di modularità, in quanto in tal modo risulta più semplice la modifica di una delle sue parti, a vantaggio della velocità complessiva del processo di traduzione e collegamento. Ciò risulta tanto più importante al crescere del numero di procedure presenti (che in programmi particolarmente complessi possono raggiungere le migliaia di unità). Inoltre, i programmi fanno spesso appello a funzioni standard il cui codice è già stato scritto, compilato e testato, tanto che il relativo file oggetto viene opportunamente conservato in un apposita parte del software di sistema, detta libreria di codice, pronto per essere utilizzato da chiunque ne abbia bisogno.

8 Il link ed il caricamento A un livello architetturale più basso, il ruolo fondamentale del linker consiste nella risoluzione del problema della rilocazione e del binding dei nomi, operazioni legate alle variazioni di indirizzo dei segmenti di codice in seguito alla compilazione. Nonostante l operazione di link sia gestita automaticamente in alcuni sistemi operativi (per es., UNIX), il linker è un programma distinto dal compilatore: in alcuni ambienti il programma di link deve essere lanciato separatamente Infine, durante la fase di caricamento (o loading), il programma eseguibile viene prelevato dalla memoria di massa e caricato nella memoria principale; la maggior parte dei sistemi operativi carica automaticamente un programma quando viene digitato il nome (o cliccata l icona) di un file eseguibile Per ciascuna istruzione e ciascun dato del programma deve essere definito l indirizzo di memoria principale in cui devono essere registrati. Il caricatore, con l ausilio del S. O., individua una area della memoria centrale che può contenere la sequenza di istruzioni e dati del programma da caricare

9 Riassumendo 1. Traduzione in linguaggio target (tipicamente assembly) Analisi: lessicale (token), grammaticale (albero di sintassi), contestuale (albero di sintassi astratto) Trasformazione del programma sorgente in programma oggetto (forma più vicina al linguaggio macchina): Creazione della tabella dei simboli Ottimizzazioni (rimozione ripetizioni, eliminazione cicli, gestione registri, etc.) per aumentare l efficienza di calcolo 2. Collegamento Il codice oggetto così formato può ancora contenere simboli irrisolti e riferimenti esterni a programmi di servizio (librerie di run time) contiene indirizzi relativi Il linker collega i diversi moduli oggetto

10 Albero della sintassi Ad esempio, due alberi sintattici distinti per l istruzione if B1 then if B2 then S1 else S2 potrebbero essere quellli rappresentati in figura:

11 Riassumendo 3. Caricamento in memoria Il loader serve per caricare in memoria un programma rilocabile (in un programma rilocabile gli indirizzi di memoria generati dal compilatore sono relativi: gli indirizzi sono espressi a meno di una costante di rilocazione (o spiazzamento) Il valore della costante di rilocazione è definito all atto del caricamento del programma per la sua esecuzione sulla base dell effettiva occupazione, stato e pianificazione della memoria in quel momento. Agli indirizzi relativi è aggiunto il valore della costante di rilocazione per ottenere quello dell effettivo indirizzo assoluto in cui caricare ciascuna istruzione) Nel caricamento vengono fissati tutti gli indirizzi relativi variabili, salti, etc. Vengono caricati anche i programmi di supporto, se necessari

12 Riassumendo Editor Disk Il programma è creato con l editor e salvato sudisco I file che vengono creati sono i seguenti:.c - file sorgente prodotto da un editor di testo e preso in ingresso dal compilatore.obj - file oggetto prodotto dal compilatore dopo aver processato i file sorgente e elaborato poi dal linker.exe - file eseguibile prodotto dal linker. Preprocessor Compiler Linker Loader Disk CPU Disk Disk Disk Primary Memory... Primary Memory... Il preprocessore analizza il codice Il compilatore crea il codice oggetto e lo salva su disco Il linker collega l oggetto con le librerie, crea un file eseguibile e lo salva su disco Il loader carica il programma in memoria La CPU preleva le singole istruzioni e le elabora, salvando i nuovi valori ottenuti durante l esecuzione

13 Ambiente di sviluppo È l insieme dei programmi che, complessivamente, consentono la scrittura, la verifica e l esecuzione di nuovi programmi (fasi di sviluppo) Oltre a editor (per la scrittura dei file sorgente), compilatore, linker e loader, può includere un programma di rilevamento e correzione degli errori La compilazione, per quanto consista delle diverse fasi appena descritte, può essere eseguita con un unico comando che traduce il file sorgente in un file binario eseguibile Il compilatore interrompe la compilazione su file sorgenti che contengono errori lessicali e sintattici, oltre che evidenti errori semantici. Inoltre, il compilatore produce messaggi di warning indicando parti di codice che potrebbero presentare problemi durante l esecuzione. Debugger: consente di eseguire passo passo un programma, controllandone la correttezza, al fine di scoprire ed eliminare errori non rilevati in fase di compilazione

14 Compilatori e interpreti Compilatore: PRIMA si traduce tutto il programma POI si esegue la versione tradotta

15 Compilatori e interpreti Interprete: PRIMA si traduce una singola istruzione del programma sorgente nell istruzione in linguaggio macchina equivalente, la quale viene subito eseguita, POI si passa all interpretazione dell istruzione successiva. Traduzione ed esecuzione sono intercalate. (L interpretazione può essere vista come la riproposizione ad alto livello del ciclo di fetch-execute della macchina di von Neumann)

16 Compilatori e interpreti Esempio di Compilatore: Dobbiamo sottoporre un curriculum, in inglese, ad una azienda, ma non conosciamo l inglese Abbiamo bisogno di un traduttore che traduca quanto scritto da noi dall italiano all inglese contattiamo il traduttore il traduttore riceve il testo da tradurre il traduttore fornisce il testo tradotto possiamo sottoporre il nostro curriculum all azienda

17 Compilatori e interpreti Esempio di interprete: Dobbiamo incontrare un manager cinese per motivi di lavoro ma non conosciamo il cinese Abbiamo bisogno di un interprete che traduca il nostro dialogo contattiamo l interprete parliamo in italiano, in presenza dell interprete contemporaneamente l interprete comunica al manager cinese quanto detto da noi e viceversa Il compito dell interprete si svolge contestualmente all incontro col manager cinese

18 Compilatori e interpreti Riassumendo I compilatori traducono un intero programma dal linguaggio sorgente al linguaggio macchina della macchina prescelta: traduzione e esecuzione procedono separatamente al termine della compilazione è disponibile la versione tradotta del programma la versione tradotta è però specifica per quella macchina per eseguire il programma basta avere disponibile la versione tradotta (non è necessario ricompilare) Gli interpreti invece traducono e immediatamente eseguono il programma istruzione per istruzione, infatti: traduzione ed esecuzione procedono insieme al termine non vi è alcuna versione tradotta del programma originale se si vuole rieseguire il programma occorre anche ritradurlo

19 Compilatori e interpreti L esecuzione di un programma compilato è più veloce dell esecuzione di un programma interpretato. Per distribuire un programma interpretato si deve necessariamente distribuire il codice sorgente, rendendo possibili operazioni di plagio. Nei programmi interpretati, è facilitato il rilevamento di errori di run time. Sebbene in linea di principio un qualsiasi linguaggio possa essere tradotto sia mediante compilatori sia mediante interpreti, nella pratica si tende verso una differenziazione già a livello di linguaggio: Tipici linguaggi interpretati: Basic, Javascript, Perl,... Tipici linguaggi compilati: C, Fortran, Pascal, ADA, (NOTA: Java costituisce un caso particolare, anche se si tende a considerarlo interpretato; applica un ibrido fra le due soluzioni, utilizzando un compilatore per produrre del codice intermedio che viene successivamente interpretato)

20 Compilatore, sistema operativo, hardware

21 Interprete, sistema operativo, hardware

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada

Подробнее

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Fondamenti di Informatica Daniele Loiacono Ho definito un algoritmo e adesso? Daniele Loiacono Dall algoritmo all esecuzione q Come deve essere formalizzato un algoritmo affinché

Подробнее

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione E una notazione con cui e possibile descrivere gli algoritmi. Programma: e la rappresentazione di un algoritmo in un particolare linguaggio di programmazione. In generale, ogni

Подробнее

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione DAGLI ALGORITMI AI LINGUAGGI Linguaggi di Programmazione E` una notazione con cui e` possibile descrivere gli algoritmi. Programma: e` la rappresentazione di un algoritmo in un particolare linguaggio di

Подробнее

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L attività di progettare e realizzare un programma è detta programmazione

Подробнее

I Linguaggi di Programmazione

I Linguaggi di Programmazione I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Подробнее

Linguaggi, compilatori e interpreti

Linguaggi, compilatori e interpreti Linguaggi, compilatori e interpreti 1 Il codice macchina Ciascun calcolatore ha un ampio insieme di istruzioni che è in grado di eseguire. Le istruzioni vengono rappresentate mediante sequenze di bit 001000100011

Подробнее

Il linguaggio di programmazione Python

Il linguaggio di programmazione Python Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani ([email protected])

Подробнее

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri Concetti di Base sulla Programmazione Prof.Ing.S.Cavalieri 1 La Programmazione Dato un problema INFORMATICO, programmare significa: Definire i dati in ingresso e il risultato che si vuole raggiungere Definire

Подробнее

Lezione 16. Il Software di base

Lezione 16. Il Software di base Lezione 16 Software di base Il Software di base Con il termine software di base si intende l insieme dei programmai che consentono ad un utente di eseguire operazioni base come costruire e mandare in esecuzione

Подробнее

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Подробнее

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 28 Linguaggi 2 / 28 Linguaggi 3 / 28 Linguaggi di alto livello Si basano su una macchina

Подробнее

Sorgenti di errore. Laboratorio di Informatica 1

Sorgenti di errore. Laboratorio di Informatica 1 Sorgenti di errore Semplificazioni introdotte nel modello Errori nei dati (errore inerente) Errori di arrotondamento nei dati e nei calcoli (errori dovuti alla precisione finita) Errori di troncamento:procedimento

Подробнее

Linguaggi di programmazione

Linguaggi di programmazione Parte 2 Linguaggi di programmazione Livello di Astrazione per la Codifica di un Algoritmo Si può risolvere un problema senza prima fissare un insieme di azioni, di mosse elementari possibili per l elaboratore?

Подробнее

INFORMATICA. L informatica comprende:

INFORMATICA. L informatica comprende: Varie definizioni: INFORMATICA Scienza degli elaboratori elettronici (Computer Science) Scienza dell informazione Definizione proposta: Scienza della rappresentazione e dell elaborazione dell informazione

Подробнее

Introduzione. Informatica B. Daniele Loiacono

Introduzione. Informatica B. Daniele Loiacono Introduzione Informatica B Cos è l informatica? q È la scienza che si occupa della rappresentazione dell informazione e della sua elaborazione e gestione " Si occupa dell informazione, che fa parte di

Подробнее

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI Linguaggi di alto livello Barriera di astrazione C Fortran Cobol Modula-2 Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI C Fortran Modula-2

Подробнее

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2003/04 Elementi di programmazione Stefano Ferrari Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Stefano Ferrari Università

Подробнее

Introduzione a Java. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

Introduzione a Java. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni Introduzione a Java IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni Linguaggi di programmazione Ogni programma viene scritto utilizzando un linguaggio specializzato, formale e comprensibile da

Подробнее

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di alto livello, compilatori e interpreti Linguaggi di alto livello, compilatori e interpreti Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Il punto della situazione STATO DATI

Подробнее

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Calcolatori Elettronici Parte VIII: linguaggi assemblativi Anno Accademico 2013/2014 Calcolatori Elettronici Parte VIII: linguaggi assemblativi Prof. Riccardo Torlone Universita di Roma Tre Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività

Подробнее

Introduzione alla programmazione. Walter Didimo

Introduzione alla programmazione. Walter Didimo Introduzione alla programmazione Walter Didimo Programmi Un programma è una frase (anche molto lunga) che descrive delle azioni che devono essere svolte da un calcolatore La frase deve essere dettagliata

Подробнее

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente

Подробнее

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Подробнее

Parte VII. Traduzione e Collegamento

Parte VII. Traduzione e Collegamento Parte VII Traduzione e Collegamento VII.1 Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività Maggiore produttività Migliore leggibilità Facilità di documentazione Minore controllo

Подробнее

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C

Подробнее

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Подробнее

Fondamenti di Informatica T. Il Software

Fondamenti di Informatica T. Il Software Il Software TECNOLOGIA DIGITALE CPU, memoria centrale e dispositivi sono realizzati con tecnologia elettronica digitale. Dati ed operazioni vengono codificati a partire da due valori distinti di grandezze

Подробнее

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura [email protected] 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina

Подробнее

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema Algoritmo 2 Procedimento di risoluzione di un problema La programmazione Ver. 2.4 Permette di ottenere un risultato eseguendo una sequenza finita di operazioni elementari Esempi: Una ricetta di cucina

Подробнее

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica Corso di Laurea Ingegneria Informatica Laboratorio di Informatica Capitolo 4 Traduzione ed esecuzione di programmi Ottobre 2006 Traduzione ed esecuzione di programmi 1 Nota bene Alcune parti del presente

Подробнее

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo [email protected] Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Подробнее

Il linguaggio Assembly

Il linguaggio Assembly Il linguaggio Assembly Linguaggio macchina Linguaggio definito da un insieme di istruzioni, codificate come stringhe di bit, che il processore può interpretare ed eseguire direttamente Linguaggio Assembly

Подробнее

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 1 Introduzione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Linguaggi di Programmazione Sintassi

Подробнее

Cosa è un programma. Informatica di Base -- R.Gaeta 18

Cosa è un programma. Informatica di Base -- R.Gaeta 18 Cosa è un programma Il programma è la scatola nera che risolve il problema computazionale; Il programma è una sequenza di istruzioni che devono essere eseguite; Il programma è la traduzione per il computer

Подробнее

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Lez. 8 La Programmazione Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Dott. Pasquale De Michele Dott. Raffaele Farina Dipartimento di Matematica e Applicazioni Università di Napoli

Подробнее