41
Linguaggi e Traduttori: Introduzione al corso Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova A.A. 2006/2007 - Primo semestre

Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Embed Size (px)

Citation preview

Page 1: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Linguaggi e Traduttori:Introduzione al corso

Armando Tacchella

Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab)Dipartimento di Informatica Sistemistica e Telematica (DIST)

Università di Genova

A.A. 2006/2007 - Primo semestre

Page 2: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 3: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 4: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Docenti e loro reperibilità

Mauro Villa Bonino - Piano AmmezzatoDi Manzo Tel. 010-3532818

Riceve su appuntamentoe-mail: [email protected]

Armando Villa Bonino - Ultimo PianoTacchella Tel. 010-3532782

Ricevo Lunedì dalle 16.00 alle 17.00e-mail: [email protected]: www.star.dist.unige.it/~tac

Page 5: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Modalità di esame

Progetto didattico (50%)I Sviluppato in gruppi di 2-3 personeI Argomento scelto da una lista di proposte (FCFS)I Supporto dei membri di STAR-LabI Elaborato: sorgenti, documentazione e relazione finale

Esame orale (50%)I Prerequisito: conclusione del progetto didatticoI Discussione del progettoI Argomenti teorici del corso inerenti al progetto

Page 6: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Riferimenti e materiale didattico

Sito web ufficiale del corso:

www.star.dist.unige.it/~tac/LT-GE

Contiene il seguente materiale:I Programma dettagliatoI Dispense (inclusa questa introduzione) in formato PDFI Bibliografia del corsoI Reperibilità dei docenti

Page 7: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 8: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Competenze teoriche

I Principali modelli di computazioneI Formalismi per la descrizione dei linguaggiI Algoritmi per l’analisi sintatticaI Algoritmi per la traduzione guidata dalla sintassiI Elementi di semantica dei linguaggi di programmazione

Page 9: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Competenze pratiche

I Struttura di un compilatoreI Strumenti per l’analisi lessicaleI Strumenti per l’analisi sintatticaI Gestione del contesto semanticoI Gestione della rappresentazione intermediaI Astrazione proceduraleI Generazione di codice

Page 10: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 11: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Struttura del corso

Il corso si divide in due parti:I Linguaggi formali e traduttoriI Tecnologia dei compilatori

Page 12: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Linguaggi formali e traduttori

I Teoria dei linguaggi e grammaticheI Linguaggi deterministiciI Trattamento degli errori sintatticiI Traduzioni sintatticheI Grammatiche ad attributiI Valutazione degli attributiI Cenni sulla semantica denotazionale

Page 13: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Tecnologia dei compilatori

I Generazione (automatica) di analizzatori lessicali esintattici

I Gestione del contesto semantico e traduzione basata sullasintassi

I Rappresentazioni intermedie: grafiche, lineari, SSAI Gestione dei simboli (dizionario)I Astrazione proceduraleI Generazione di codice: espressioni aritmetiche e logiche,

vettori, stringhe, strutture, iterazioni, chiam ate a procedura

Page 14: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 15: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Traduttori, interpreti e compilatori

Traduttore Elabora un programma traducendolo in uno dipari significato espresso in un diverso linguaggio.

Interprete Produce gli effetti relativi all’esecuzione di un datoprogramma.

Compilatore Un traduttore, solitamente da un programma inlinguaggio di alto livello (sorgente) in uno inlinguaggio più vicino all’hardware (codiceintermedio, assembly, codice macchina).

EsempiI I programmi in C e C++ sono tipicamente compilatiI I programmi PERL e PHP sono tipicamente interpretatiI I programmi in Java vengono compilati (in bytecode) e il

risultato è interpretato dalla JVM

Page 16: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 17: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Perché studiare i compilatori?

I I compilatori sono importanti in quanto responsabili permolti aspetti dell’efficienza di un sistema

I I compilatori sono interessantiI Includono molte applicazioni pratiche dell’informatica

teoricaI Comportano problematiche a livello algoritmico e

ingegneristicoI I compilatori sono molto diffusi

I Linguaggi all’interno dei programmi applicativi (macro)I Formati grafici (per es. Postscript e PDF)I Linguaggi special-purpose

Page 18: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Aspetti salienti

I I compilatori svolgono diversi compiti per i quali l’efficienzarappresenta un requisito fondamentale

I Le prestazioni in fase di esecuzione di un programma sonoinfluenzate pesantemente dal compilatore

I Dai compilatori dipende la possibilità di utilizzareefficacemente i costrutti messi a disposizione dai linguaggi

I La crescente complessità delle architetture dei sistemi dielaborazione rende necessari compilatori sempre piùsofisticati

Page 19: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Discipline coinvolte

Lo sviluppo dei compilatori richiede diversi contributi

Intelligenza ArtificialeAlgoritmi di ricerca stocasticiTecniche euristiche

AlgoritmiAlgoritmi su grafi, DizionariProgrammazione Dinamica

Informatica TeoricaAutomi a stati finiti e a pilaGrammatiche

Sistemi OperativiGestione della memoriaSincronizzazione, Località

Page 20: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 21: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Schema funzionale di un compilatore

............................

........................................................

eseguibilecodice

errori

sorgentecodice

COMPILATORE

Principi fondamentali:I Il compilatore deve preservare il significato del codice

sorgenteI Il compilatore deve migliorare il codice sorgente in modo

che gli effetti siano misurabili sul codice eseguibile

Page 22: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Architettura di un compilatore (I)

............................ ........................................................

............................

errori

sorgentecodice

eseguibilecodice

IRFront End Back End

I Utilizzo di una rappresentazione intermedia (IR)I È possibile prevedere molteplici Front EndI Il Front End svolge computazioni in O(n), O(nlogn), . . .

I Il Back End svolge computazioni potenzialmente in O(2n)

Page 23: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Architettura di un compilatore (II)

............................ ............................

............................

............................ ............................

sorgentecodice

IRFront End

errori

codiceeseguibile

Back EndIR

Optimizer

I L’Optimizer è un insieme di moduli (passate)I Migliora il codice IR in qualche sensoI Nomenclatura diffusa ma imprecisa: non esiste una

definizione di ottimalità sufficientemente generale

Page 24: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 25: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Elementi del Front End

............................

............................

............................ ............................

errori

sorgentecodice

Scanner Parser

IRtokenstream

I Riconoscere programmi corretti (errati)I Emettere messaggi di errore fruibiliI Effettuare analisi lessicali, sintattiche, semanticheI Produrre codice intermedio e dizionario dei simboli

Elevato grado di automazione

Page 26: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Analizzatore lessicale (Scanner)

I Converte uno stream di caratteri in uno stream di tokenI Il token è una coppia (parte del discorso, lessema)I Esempio:

x = x + y ⇒< id , x >< iseq, =>< id , x >< plus, + >< id , y >

I Nel caso di “=” e “+” è superfluo memorizzare il lessemac’è corrispondenza biunivoca con la parte del discorso

I Invece un identificatore (id) può corrispondere a più lessemiI Lo scanner “distilla” spazi bianchi, ritorni a capo, ecc.I La velocità è un fattore cruciale

Page 27: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Analizzatore sintattico (Parser)

I Riconosce la sintassi indipendente dal contesto e lerelative violazioni

I Guida l’analisi “semantica” dipendente dal contesto, ad es.controllo dei tipi, numero di parametri, dichiarazione degliidentificatori

I Costruisce la rappresentazione intermedia del sorgente

Page 28: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Grammatiche libere dal contesto (Context-free)

I La sintassi indipendente dal contesto è specificata con unagrammatica; ad esempio:1. goal:=expr2. expr:=expr op term | term3.term:=NUM | ID4. op:=+ | -

I Formalmente, una grammatica G = (S, N, T , P)I S è il simbolo inizialeI N è l’insieme di simboli non terminaliI T è l’insieme di simboli terminali (o parole)I P è un insieme di produzioni o regole di riscrittura

I Nell’esempio S=goal, N={expr,op,term},T={NUMBER, ID, +, -} e P={1,2,3,4}

Page 29: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Utilizzo di grammatiche context-free (CFG)

Data una CFG possiamo derivare espressioni utilizzandosostituzioni ripetute; ad esempio:

Produzione Risultatogoal

1 expr2 expr op term3 expr op y4 expr - y2 expr op term - y3 expr op 2 - y4 expr + 2 - y2 term + 2 - y3 x + 2 - y

1. goal:=expr2. expr:=expr op term | term3.term:=NUM | ID4. op:=+ | -

Page 30: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Alberi sintatticiData un’espressione possiamo interpretarla utilizzando unaCFG: tale procedimento può essere rappresentato con unalbero sintattico

goal

��expr

sshhhhhhhhhhhhh

�� &&MMMMMMM

expr

xxqqqqqqq

�� &&MMMMMMM op

��

term

��expr

��

op

��

term

��

- <ID,y>

term

��

+ <NUM,2>

<ID,x>

Page 31: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Alberi sintattici astratti (AST)

I Racchiudono le stesse informazioni degli alberi sintatticima eliminano l’informazione ridondante

I Costituiscono una tipologia di rappresentazione intermedia

-

xxqqqqqqq

&&MMMMMMM

+

xxqqqqqqq

&&MMMMMMM <ID,y>

<ID,x> <NUM,2>

Page 32: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 33: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Elementi del Back End

............................ ............................

............................

............................ ............................

errori

codiceeseguibile

IRIRIR Selezionedelle Allocazione

dei registri

Schedulingdelle

istruzioniistruzioni

I Tradurre codice IR in codice eseguibileI Scegliere le istruzioni per realizzare le operazioniI Decidere i valori da conservare nei registriI Assicurare il rispetto delle interfacce di sistema

Basso grado di automazione

Page 34: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Selezione delle istruzioni

Obbiettivo: produrre codice veloce e compattoI Utilizzare proficuamente le caratteristiche dell’HWI Il “problema del futuro” agli inizi degli anni ’80

I Architetture CISC sempre più complesseI L’ortogonalità delle architetture RISC ha semplificato il

problema

Page 35: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Allocazione dei registri

Obbiettivo: caricare i valori necessari nei registri primadell’utilizzo

I Gestione di un numero limitato di risorseI Può influenzare la scelta delle istruzioniI Può inserire operazione di LOAD e STOREI L’allocazione ottima é un problema NP-completoI I compilatori usano soluzioni approssimate

Page 36: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Riordino delle istruzioni (Scheduling)

Obbiettivi:I Minimizzare stalli e bolle nella pipelineI Utilizzare tutte le unità funzionali efficacemente

Lo scheduling ottimale è un problema NP-completo in quasitutti i casi di interesse pratico, pertanto i compilatori utilizzanotecniche euristiche

Page 37: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 38: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Schema di compilatore con ottimizzazioni

............................ ............................

............................

............................ ............................

sorgentecodice

IRFront End

errori

codiceeseguibile

Back EndIR

Optimizer

Obbiettivi:I Analizzare il codice intermedio e trasformarloI Ridurre il tempo di esecuzione (primario)I Preservare la semantica del codice iniziale

Le dimensioni del codice e il consumo di risorse sono altriobbiettivi che possono essere di prioritari in casi specifici

Page 39: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Esempi di ottimizzazioni possibili

I Scoprire e propagare valori costantiI Minimizzare il numero di esecuzioni di una computazione

dispendiosaI Specializzare computazioni sulla base del contestoI Scoprire computazioni ridondantiI Rimuovere codice inutile o irraggiungibileI Codificare un idioma in qualche forma particolarmente

efficiente

Page 40: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Outline

Informazioni sul corsoDocenti, modalità di esame, riferimentiObbiettivi del corsoProgramma del corso

Introduzione ai compilatoriTerminologiaMotivazioniArchitettura

Elementi di un compilatoreInterfaccia verso il sorgente (Front End)Interfaccia verso l’eseguibile (Back End)OttimizzazioneAmbiente di esecuzione

Page 41: Linguaggi e Traduttori: Introduzione al corsotac/LT-GE/Materiale/Introduzione.pdf · Analizzatore lessicale (Scanner) ... Le dimensioni del codice e il consumo di risorse sono altri

Ruolo dell’ambiente di esecuzione

I Gestione della memoriaI allocazione dinamica (heap) e static (stack frame)I deallocazioneI garbage collection

I Controllo dei tipi a run-timeI Gestione degli errori a run-timeI Interfaccia con il sistema operativoI Eventualmente, gestione di thread, comunicazione,

sincronizzazione