Compiler

Un compilatore è un programma che traduce il codice sorgente in codice oggetto per essere compreso da una specifica unità di elaborazione centrale (CPU). L'atto di tradurre il codice sorgente in codice oggetto è noto come compilazione. La compilazione viene in genere utilizzata per i programmi che traducono il codice sorgente da un linguaggio di programmazione di alto livello (come C ++) a un linguaggio di programmazione di basso livello (come il codice macchina) per creare un programma eseguibile. Allo stesso modo, quando una lingua di basso livello viene convertita in una lingua di alto livello, il processo viene chiamato decompilazione.


Fasi di un compilatore

Un compilatore esegue i suoi processi in fasi per promuovere una progettazione efficiente e corrette trasformazioni dall'input di origine all'output di destinazione. Le fasi sono le seguenti:

1. Analizzatore lessicale

È anche chiamato scanner. Il compilatore converte la sequenza di caratteri che appaiono nel codice sorgente in una serie di caratteri stringa noti come token. Questi token sono definiti da espressioni regolari che vengono comprese dall'analizzatore lessicale. Rimuove anche errori lessicali, commenti e spazi bianchi.

2. Analizzatore di sintassi

L'analizzatore di sintassi costruisce l'albero di analisi, che è costruito per verificare l'ambiguità nella grammatica data. L'analizzatore di sintassi prende tutti i token uno per uno e utilizza Context Free Grammar per costruire l'albero di analisi. È possibile rilevare un errore di sintassi se l'input non è conforme alla grammatica.

3. Analizzatore semantico

L'analizzatore semantico verifica l'albero di analisi costruito dall'analizzatore di sintassi. Esegue anche il controllo del tipo, il controllo dell'etichetta e il controllo del flusso.

4. Generatore di codice intermedio

Il generatore di codice intermedio genera codice intermedio per l'esecuzione da parte di una macchina. Il codice intermedio viene convertito in linguaggio macchina utilizzando le ultime due fasi, che dipendono dalla piattaforma.

5. Ottimizzatore di codice

L'ottimizzatore del codice trasforma il codice in modo che consumi meno risorse e produca più velocità. Il significato del codice che si sta trasformando non viene alterato.

6. Generatore di codice di destinazione

Questa è la fase finale della fase finale della compilazione. Il generatore di codice di destinazione scrive codice che una macchina può comprendere e registra anche allocazione, istruzione e selezione. L'output dipende dal tipo di assemblatore. Il codice ottimizzato viene quindi convertito in codice macchina, formando l'input per il linker e il loader.


Tipi di compilatori

Esistono molti tipi di compilatori, ad esempio:

  • Cross compilatore: Il programma compilato viene eseguito su un computer che ha un sistema operativo o CPU diverso da quello su cui gira il compilatore. È in grado di creare codice per una piattaforma diversa da quella su cui è in esecuzione il compilatore
  • Compilatore da sorgente a sorgente: Conosciuto anche come transcompilatore, traduce il codice sorgente scritto in un linguaggio di programmazione nel codice sorgente di un altro linguaggio di programmazione.
  • Compilatore just-in-time (JIT): Un compilatore che rinvia la compilazione fino al runtime. Questo compilatore viene utilizzato per linguaggi come Python e JavaScript e generalmente viene eseguito all'interno di un interprete.

Lascia un commento