Strumenti Formali per l ’ Analisi Lessicale – Sintattica dei Compilatori

23
Strumenti Formali per l’Analisi Lessicale – Sintattica dei Compilatori Laureanda Relatore Caterina Mandolini Stefano Bistarelli Anno Accademico 2003-2004 Facolta’ di Economia - CLEI Universita’ degli Studi “G. D’Annunzio” Chieti – Pescara

description

Universita ’ degli Studi “ G. D ’ Annunzio ” Chieti – Pescara. Facolta ’ di Economia - CLEI. Strumenti Formali per l ’ Analisi Lessicale – Sintattica dei Compilatori. Laureanda Relatore Caterina MandoliniStefano Bistarelli. Anno Accademico 2003-2004. Introduzione. - PowerPoint PPT Presentation

Transcript of Strumenti Formali per l ’ Analisi Lessicale – Sintattica dei Compilatori

Page 1: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Strumenti Formali per l’Analisi Lessicale – Sintattica dei

Compilatori

Laureanda RelatoreCaterina Mandolini Stefano Bistarelli

Anno Accademico 2003-2004

Facolta’ di Economia - CLEI

Universita’ degli Studi “G. D’Annunzio”Chieti – Pescara

Page 2: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Introduzione

1) Compilatori

2) Analisi Lessicale – Sintattica

3) Strumenti Formali

Page 3: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Il Compilatore come Traduttore

P1 equivalente a P2

P1

programmasorgente

compilatore

P2

programmaoggetto

Page 4: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Linguaggi di Programmazione

Alto livello: Pascal, C, Java

X=Y+5

Basso livello: linguaggio macchina

001 0110010 0001

Page 5: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Modello analisi - sintesi

P.S. Analisi Sintesi P.O.R. I.

ANALISI

Analisi Lessicale Analisi Sintattica Analisi Semantica

Page 6: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Il modulo dell’analisi

C=2.795 errore!!! (AnLex)

2.795:=C errore!!! (Parser)

C:=2.795 errore!!! (AnSem)

Vogliamo assegnare alla variabile C il numero 2.795. Supponiamo che l’istruzione corretta sia

C := 2.795

Page 7: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Linguaggi Formali

Il linguaggio matematico e’ un linguaggio formale o informale?

x y (f(x)<y)

La lingua italiana e’ un linguaggio formale o informale?

“Conta il numero dei bit”

Page 8: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

E’ un insieme costituito da un numero (finito o infinito) di frasi.

Ogni frase e’ una sequenza finita di simboli.

H = {f1, f2, …, fn, …}

f1= , f2= , … , fn= n , …

H e’ un linguaggio formale?

Linguaggi Formali

Page 9: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Grammatiche Generative

• Parole

• Categorie sintattiche

• Regole di riscrittura

• Categoria sintattica iniziale

Page 10: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Albero di Derivazione

<FRASE>

<SOGGETTO> <PREDICATO>

Pippo mangia

<COMPLEMENTO>

<NOME><ARTICOLO>

fioreil

Page 11: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Classificazione delle Grammatiche alla Chomsky

Tipo 2 - Libere dal ContestoA

Tipo 0

Tipo 1 - Dipendenti dal Contesto A

Tipo 3 - RegolariA aB | a

Page 12: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Automa a Stati Finiti

Nastro di input

Controlloa stati finiti

Page 13: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Nastro di input

Controllo

a stati finiti

Memoria a pila

Automa a Pila

Page 14: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Strumenti Automatici

LEX

YACC(Yet Another Compiler Compiler)

Page 15: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Interazione LEX – YACC

YACCP.S.

LEX ..

Token

Altro token

Page 16: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Un Minicompilatore

Programma YACC

% token NUMERO

%%

e: e ‘+’ e {$$= $1 + $3;}

e: ‘(’ e ‘)’{$$= $2;}

e: NUMERO{$$= yylval;}

Programma LEX

NUMERO [0-9]

%%

{NUMERO} {yylval=valore();

return (NUMERO);}

Page 17: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

e

e +

2e

e

e+

75

)e(

2+(5+7) diviene 14

NUMERO

NUMERO NUMERO

Page 18: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Un programma C ha tante parentesi { quante }.Un programma Pascal ha tanti BEGIN quanti END.

Da che cosa deriva questa “somiglianza”?

Deriva dal fatto che sono entrambi linguaggi liberi.

Conclusioni

Page 19: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Conclusioni

Perche’ i linguaggi di programmazione sono linguaggi liberi?

Perche’ i linguaggi liberi costituiscono un buon compromesso

tra potere espressivo ed efficienza.

Page 20: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Conclusioni

Deriva dal fatto che il riconoscimento dei linguaggi liberi puo’ essere effettuato

tramite l’automa riconoscitore.

Da che cosa deriva la caratteristica dell’efficienza?

Page 21: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Conclusioni

Il costo e’ basso utilizzando i tool.

Quanto costa, in termini di risorse, implementare l’automa riconoscitore?

Page 22: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Conclusioni

Realizzare un compilatore e’ un gioco da ragazzi?

ASSOLUTAMENTE NO!

Page 23: Strumenti Formali  per  l ’ Analisi  Lessicale  –  Sintattica dei Compilatori

Ringraziamenti