compilatore
Programma di un calcolatore elettronico in grado di tradurre direttamente un linguaggio di alto livello in linguaggio macchina. Il compilatore (compiler), suddividendo il processo in una serie di passi elementari finiti, è in grado di acquisire una sequenza di caratteri alfanumerici (le istruzioni scritte nel linguaggio di programmazione relativo) e generare da essa una sequenza di bit interpretabile dalla macchina (ossia espressa in linguaggio macchina). A differenza del linguaggio assemblatore, le cui istruzioni risultano in corrispondenza biunivoca con il linguaggio macchina, la relazione tra un linguaggio di alto livello e il linguaggio macchina è di tipo multivoco, ossia un’istruzione del linguaggio di alto livello produce generalmente più di una istruzione in linguaggio macchina. A tal fine il compilatore non può limitarsi a cercare le corrispondenze in una tabella (come il linguaggio assemblatore) ma deve compiere anche un’analisi sintattica e semantica di ogni istruzione del linguaggio di partenza, in modo da garantire la correttezza della traduzione. Un buon compilatore deve inoltre garantire velocità ed efficienza di compilazione. A tal fine ogni compilatore suddivide il proprio lavoro in più passi. Le fasi principali che vengono eseguite da un processo di compilazione sono in genere la fase di analisi lessicale, nella quale il compilatore esamina i singoli caratteri del codice sorgente raggruppandoli in unità sintattiche; la fase di parsing, in cui esamina la correttezza sintattica di tali unità; la fase di analisi semantica, nella quale verifica la correttezza del significato delle istruzioni; la fase di generazione del codice, in cui avviene l’effettiva trasformazione del codice sorgente in codice macchina; infine, la fase di ottimizzazione nella quale il compilatore vaglia la possibilità di rendere più efficiente il codice generato. Il risultato complessivo della fase di compilazione prevede la scrittura di uno specifico file (detto file oggetto), il quale può essere caricato in memoria ed eseguito dal processore per dare l’uscita desiderata. Grazie alla disponibilità di compilatori si è potuta sviluppare una serie molto numerosa di linguaggi di programmazione di alto livello, che si differenziano in base alla tipologia di problemi che si prefiggono di affrontare. Lo sviluppo del primo compilatore può farsi risalire a Grace Murray Hopper, la quale ideò un programma, chiamato A-0, per programmare UNIVAC I (Universal automatic computer I), uno dei calcolatori più diffusi a metà del Novecento.
→ Computer science; Programmazione, linguaggi di