compilatore
compilatore in informatica, programma che ha lo scopo di tradurre automaticamente in linguaggio macchina un programma scritto in linguaggio di programmazione ad alto livello, detto file sorgente o codice sorgente. Il processore necessita che istruzioni e dati siano forniti in linguaggio macchina; nella traduzione delle istruzioni e dei dati in linguaggio macchina, il compilatore produce un’applicazione eseguibile. Il compilatore è, quindi, responsabile del controllo formale del testo di un codice sorgente scritto da un programmatore e della sua successiva traduzione in codice eseguibile da un computer. Per questa sua azione deve essere fornito di lessico e regole sintattiche del linguaggio di programmazione impiegato, in modo da poter analizzare le istruzioni che vengono immesse e, prima di tradurle, stabilire se siano o meno accettabili. Pertanto il compilatore:
• controlla la coerenza del lessico contenuto nel linguaggio di programmazione con le stringhe alfanumeriche che compongono il testo del programma. Ciò porta a definire il compilatore come un vero e proprio analizzatore lessicale;
• controlla che la struttura delle istruzioni e il loro formalismo seguano le regole sintattiche del linguaggio stesso, cioè la sua grammatica; quest’ultima funzione lo caratterizza come un analizzatore sintattico;
• traduce il testo del programma in stringhe di 0 e 1 direttamente interpretabili ed eseguibili dall’elaboratore.
Se, per esempio, viene immessa un’istruzione scritta in un linguaggio di programmazione, il compilatore controlla innanzitutto che tale stringa contenga solo parole incluse nel lessico del linguaggio e che sia costruita seguendo le regole grammaticali del linguaggio stesso. In questa fase agisce come un automa riconoscitore di un linguaggio. Se l’istruzione è sintatticamente mal formata comunica all’esterno l’errore di sintassi; altrimenti traduce l’istruzione in linguaggio macchina.
Il controllo del compilatore è di tipo sintattico e non semantico: un’istruzione può essere lessicalmente e sintatticamente corretta, ma non fornire il risultato al problema posto perché errata dal punto di vista del suo significato all’interno della procedura risolutiva del problema posto (errore semantico). Inoltre, il compilatore non rivela gli errori che si verificano in fase di esecuzione del programma, cioè nella fase successiva alla compilazione andata a buon fine. Solitamente questi errori (detti errori di run-time) sono associabili a errati indirizzamenti della memoria o dei dispositivi di input-output in fase di definizione delle variabili.