Messaggi di errore #define L 10 int i,k,r[L]; for(i=0;i

Post on 17-Feb-2019

215 views 0 download

Transcript of Messaggi di errore #define L 10 int i,k,r[L]; for(i=0;i

Linguaggi e compilatori Dal linguaggio sorgente al programma eseguibile

#define L 10

main() { int i,k,r[L]; for(i=0;i<L;i++) { k = 3*i+2; r[i] = k*k; } }

0010011000110001 1000111011001010 1101010010101001 1010101010101111 1010100111111111 0101010101010101

compilatore

Messaggi di errore

Il compilatore

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

2

Linguaggio sorgente e obiettivo

•  Esistono... migliaia di linguaggi sorgente ▫  Linguaggi di programmazione generici

  C, C++, Pascal, Fortran, Java, Basic, Lisp, Prolog, perl.... ▫  Linguaggi specializzati

  Formattazione di testi (Tex, Latex...)   Interrogazione di basi di dati

•  Il compilatore traduce il linguaggio sorgente in ▫  Un altro linguaggio di programmazione (pascal -> C) ▫  Il linguaggio macchina per un dato processore

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

3

Analisi e sintesi

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

4

X = A+B*C X *

+ =

C B A

Il “contesto” del compilatore

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

5

preprocessore

assembler

linker/loader

scheletro programma sorgente

programma sorgente

programma assembly

programma oggetto

programma eseguibile

librerie

include, define (macro)

La struttura del compilatore

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

6

analisi lessicale

analisi sintattica

analisi semantica

generazione di codice intermedio

ottimizzazione

generazione del codice

gestione degli errori tavola dei simboli

Analisi lessicale (scanning)

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

7

int somma, diff = 0.3;

Analisi sintattica

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

8

istruzione di assegnazione

identificatore espressione

espressione

espressione identificatore

identificatore numero

espressione

espressione A

=

+

*

B C 60

Regole sintattiche

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

9

regole base

regole ricorsive

Analisi semantica •  Ricava il significato associato alla struttura sintattica ▫  Verifica che le regole di impiego del linguaggio siano

soddisfatte   dichiarazione degli identificatori (ridefinizione,...)   controllo dei tipi (uso nelle espressioni, conversione

automatica di tipo, tipo di indici nei vettori, ecc..)

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

10

*

C

D

int D; float C;

funzione di conversione int -> float

Tavola dei simboli •  Memorizza gli identificatori con i relativi attributi ▫  utilizzo di memoria ▫  tipo ▫  campo di visibilità ▫  numero e tipo dei parametri per le funzioni

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

11

Allocazione in memoria

Generazione del codice oggetto

Tecnologie per l'elaborazione del linguaggio

Marco Maggini

12

= id1

id2 id3

+ * int-to-float

60

t1 = int-to-float(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3

t1 = id3 * 60.0 id1 = id2 + t1

MOVF id3, R2 MULF #60.0, R2 .............

rappresentazione interna

generazione di codice intermedio

ottimizzazione del codice

generazione del codice oggetto