Compilatore - it.LinkFang.org

Compilatore


Disambiguazione – Se stai cercando l'omonima professione editoriale, vedi Curatore editoriale.
Disambiguazione – "Compilazione" rimanda qui. Se stai cercando il tipo di album, vedi Compilation.

Un compilatore è un programma informatico che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto): il processo di traduzione si chiama compilazione mentre l'attività inversa - ovvero passare dal codice oggetto al codice sorgente - è chiamata decompilazione ed è effettuata per mezzo di un decompilatore.

Se tutti i compilatori aderissero esattamente alla specifica del linguaggio, lo stesso programma potrebbe essere compilato senza modifiche da ciascun compilatore, producendo risultati semanticamente uguali, ovvero programmi che producono lo stesso risultato se sottoposti agli stessi dati di ingresso. Nella realtà, molti compilatori implementano il linguaggio in modo incompleto o aggiungono estensioni proprietarie, creando quindi dei dialetti del linguaggio principale. Per i linguaggi che adottano uno standard nella decorazione dei simboli, il codice oggetto generato da compilatori differenti può essere collegato assieme in un unico eseguibile.

Indice

Storia


A partire dal 1950 vennero sviluppati diversi compilatori sperimentali (tra cui l'A-0 System di Grace Hopper), ma nel 1957 il team Fortran presso l'IBM, guidato da John Backus, fu il primo a realizzare un compilatore completo mentre, nel 1960, il COBOL fu uno dei primi linguaggi a essere compilato su più architetture.[1]

L'idea della compilazione prese velocemente piede e molti dei principi di design dei compilatori vennero sviluppati negli anni sessanta. Un compilatore è esso stesso un programma scritto in un qualche linguaggio e, i primi di essi vennero scritti in Assembly. Il primo compilatore auto-compilato, capace cioè di compilare il suo stesso codice, fu creato per il linguaggio Lisp da Hart e Levin presso il MIT nel 1962.[2] L'uso di linguaggi ad alto livello per scrivere i compilatori ebbe una accelerazione nei primi anni settanta quando i linguaggi Pascal e C furono usati per scrivere compilatori per loro stessi: ossia, ad esempio, furono scritti compilatori per il C scritti a loro volta in C.

Descrizione


Lo stesso argomento in dettaglio: Codice sorgente e Codice oggetto.

Quando un linguaggio di programmazione viene definito per la prima volta, sorge il problema di come realizzare il relativo compilatore. In questo caso esistono due approcci possibili:

Funzionamento

Il compilatore prende in ingresso un programma, il codice sorgente, su cui esegue una serie di operazioni in modo da ottenere, in assenza di errori, il codice oggetto. In generale i compilatori sono in grado di riconoscere alcune classi di errori presenti nel programma, e in alcuni casi di suggerire in che modo correggerli.

I compilatori attuali dividono l'operazione di compilazione in due stadi principali il front end e il back end. Nello stadio di front end il compilatore traduce il sorgente in un linguaggio intermedio (di solito interno al compilatore); nello stadio di back end avviene la generazione del codice oggetto.

Stadio di front end

Questo stadio si suddivide in più fasi:

Stadio di back end

Anche lo stadio di back end si divide in più fasi:

Schema riassuntivo

Flusso Attività
Codice sorgente Editing
\({\displaystyle \Downarrow }\)
Analizzatore lessicale Analisi lessicale
\({\displaystyle \Downarrow }\)
Token
\({\displaystyle \Downarrow }\)
Analizzatore sintattico Analisi sintattica
\({\displaystyle \Downarrow }\)
Albero di sintassi
\({\displaystyle \Downarrow }\)
Analizzatore semantico Analisi semantica
\({\displaystyle \Downarrow }\)
Albero di sintassi astratta
\({\displaystyle \Downarrow }\)
Generatore di codice intermedio
\({\displaystyle \Downarrow }\)
codice intermedio
\({\displaystyle \Downarrow }\)
Ottimizzatore codice intermedio
\({\displaystyle \Downarrow }\)
codice intermedio
\({\displaystyle \Downarrow }\)
Generatore codice target
\({\displaystyle \Downarrow }\)
codice target

Note


  1. ^ The World's First COBOL Compilers Archiviato il 20 febbraio 2012 in Internet Archive.
  2. ^ AIM-39 , su ai.mit.edu. URL consultato il 4 novembre 2005 (archiviato dall'url originale il 13 settembre 2006).

Bibliografia


Voci correlate


Altri progetti


Collegamenti esterni


Controllo di autoritàThesaurus BNCF 2330  · LCCN (ENsh86007588  · GND (DE4148248-7  · BNF (FRcb120631538 (data)  · BNE (ESXX532454 (data)  · NDL (ENJA01191219









Categorie: Implementazione dei linguaggi di programmazione | Teoria dei linguaggi formali




Data: 27.11.2020 06:23:56 CET

Sorgente: Wikipedia (Autori [Cronologia])    Licenza: CC-by-sa-3.0

Modifiche: Tutte le immagini e la maggior parte degli elementi di design correlati a questi sono stati rimossi. Alcune icone sono state sostituite da FontAwesome-Icons. Alcuni modelli sono stati rimossi (come "l'articolo ha bisogno di espansione) o assegnati (come" note "). Le classi CSS sono state rimosse o armonizzate.
Sono stati rimossi i collegamenti specifici di Wikipedia che non portano a un articolo o una categoria (come "Redlink", "collegamenti alla pagina di modifica", "collegamenti a portali"). Ogni collegamento esterno ha un'icona FontAwesome aggiuntiva. Oltre ad alcuni piccoli cambiamenti di design, sono stati rimossi i media container, le mappe, i box di navigazione, le versioni vocali e i geoformati.

Notare che Poiché il dato contenuto viene automaticamente prelevato da Wikipedia in un determinato momento, una verifica manuale è stata e non è possibile. Pertanto LinkFang.org non garantisce l'accuratezza e l'attualità del contenuto acquisito. Se ci sono informazioni che al momento sono sbagliate o che hanno una visualizzazione imprecisa, non esitate a Contattaci: e-mail.
Guarda anche: Impronta & Politica sulla riservatezza.