In informatica, programma che traduce il codice sorgente (un altro programma) scritto in un linguaggio di programmazione di alto livello in codice oggetto o target (un terzo programma) scritto in un linguaggio di più basso livello. Utilizzando un altro programma, il linker, è possibile ‘collegare’ i vari moduli prodotti da un c. per ottenerne programmi eseguibili. Il processo inverso prende il nome di decompilazione e viene effettuato per mezzo di un decompilatore.
I passi fondamentali eseguiti da un c. sono: a) analisi sintattica e semantica del codice sorgente, b) generazione del codice intermedio, c) ottimizzazione e generazione del codice target. Durante il primo passo, il codice sorgente viene analizzato e segmentato in unità base (i cosiddetti token) che possono essere parole chiave, operatori o nomi di variabili; l’analisi sintattica verifica la correttezza della sequenza dei token ottenuta nel passo precedente per mezzo di una grammatica (tipicamente una grammatica regolare) che permette di individuare errori; quindi, previo passaggio in codice intermedio e ottimizzazione dello stesso, si procede alla traduzione in codice oggetto.