Introduzione ai compilatori

 

Con Random abbiamo più volte discusso sul fatto che per sapere programmare bene in generale, si deve conoscere un linguaggio di compilazione a più basso livello possibile, di modo da ottenere, a causa di quei pochi strumenti forniti da tale linguaggio, una elasticità mentale tale da poter affrontare ad occhi chiusi i problemi che potremmo incontrare nel programmare ad esempio in matlab. Ma fermiamoci un secondo: che si intende per basso o alto livello, e cosa cambia da un compilatore all’altro. E allora vediamo una veloce introduzione al mondo della programmazione e dei compilatori.

 

 

Un compilatore è un programma capace di interpretare i programmi da voi scritti in un certo linguaggio, che da adesso chiameremo linguaggio sorgente, e tradurlo in uno in un altro linguaggio. Solitamente il linguaggio di traduzione altro non è che il codice macchina, che è il linguaggio di livello più basso. Quando si dice che un programma è di alto livello, ci si riferisce alla possibilità di astrazione dalle caratteristiche fisiche della macchina in cui si opera, e permettono l’uso di un linguaggio più comprensibile al nostro.

In informatica possiamo distinguere tra compilatori, e interpreti.

Un interprete analizza una riga alla volta, e la esegue direttamente risultando in certi (rari) casi più veloce, e permettendo di individuare immediatamente l’errore.

Il compilatore è invece più complesso, perché attraversa tre fasi diverse prima di cominciare a produrre il codice macchina:

Il processo di compilazione passa per:

Analisi lessicale

Analisi sintattica

Analisi semantica

Nela prima fase si suddivide il codice sorgente in lessemi cioè gli elementi essenziali del linguaggio, quelli che costituiranno le parole chiave del linguaggio. Per ogni lessema produce un token.

Nella seconda fase l’analizzatore sintattico usa i token, e controlla se vengano rispettate le regole sintattiche del linguaggio definire la struttura grammaticale della sequenza di token, ovvero determina e verifica che le istruzioni siamo formulate usando le regole sintattiche giuste

Nell’ultima fase l’analizzatore semantico sfrutta gli output dei primi due analizzatori e controlla la consistenza semantica con le definizioni del linguaggio. L’analisi semantica consiste nell’interpretazione del“significato” delle strutture prodotte nella fase precedente controllando che esse siano legali e significative. Ad esempio verifica che non si voglia associare una lettera ad un numero, ma dipende da come è scritto il linguaggio, lo si potrebbe anche fare.

Spero di non avervi annoiato con questa mini lezione sui compilatori.