Un compilatore è un programma speciale che elabora le istruzioni scritte in un particolare linguaggio di programmazione e le trasforma in linguaggio macchina o "codice" utilizzato dal processore di un computer. In genere, un programmatore scrive le istruzioni del linguaggio in un linguaggio come Pascal o C una riga alla volta utilizzando un file editore. Il file creato contiene quelli che vengono chiamati dichiarazioni della fonte. Il programmatore esegue quindi il compilatore del linguaggio appropriato, specificando il nome del file che contiene le istruzioni di origine.
Durante l'esecuzione (esecuzione), il compilatore prima analizza (o analizza) tutte le istruzioni del linguaggio sintatticamente una dopo l'altra e poi, in una o più fasi successive o "passaggi", costruisce il codice di output, assicurandosi che le istruzioni che si riferiscono a altre affermazioni sono indicate correttamente nel codice finale. Tradizionalmente, è stato chiamato l'output della compilation codice oggetto oa volte un file modulo oggetto . (Notare che il termine "oggetto" qui non è correlato alla programmazione orientata agli oggetti.) Il codice oggetto è un codice macchina che il processore può eseguire un'istruzione alla volta.
Il linguaggio di programmazione Java, un linguaggio utilizzato nella programmazione orientata agli oggetti, ha introdotto la possibilità di compilare l'output (chiamato bytecode) che può essere eseguito su qualsiasi piattaforma di sistema informatico per cui è fornita una macchina virtuale Java o un interprete di bytecode per convertire il bytecode in istruzioni che può essere eseguito dal processore hardware effettivo. Utilizzando questa macchina virtuale, il bytecode può essere facoltativamente ricompilato sulla piattaforma di esecuzione da un compilatore just-in-time. (Vedi anche: compilatore Java)
Tradizionalmente in alcuni sistemi operativi, dopo la compilazione era richiesto un passaggio aggiuntivo: quello di risolvere la posizione relativa di istruzioni e dati quando più di un modulo oggetto doveva essere eseguito contemporaneamente e si riferivano reciprocamente alle sequenze di istruzioni o ai dati dell'altro . A volte veniva chiamato questo processo modifica del collegamento e l'output noto come a modulo di carico.
Un compilatore funziona con quelli che a volte vengono chiamati 3GL e linguaggi di livello superiore. Un assemblatore lavora su programmi scritti utilizzando il linguaggio assembler di un processore.