1 Implementazione di Linguaggi 2 PARTE 5 Implementazione di Linguaggi 2 PARTE 5 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

Le distribuzioni di probabilità continue
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
Sintassi (prima parte)
Traduttore diretto dalla sintassi (seconda parte)
LR Parser Giuseppe Morelli. La maggior parte dei parser Bottom-Up è costituita dai cosiddetti parser LR(k) dove: L indica il verso dellanalisi della stringa.
Linguaggi di Programmazione e compilatori
Traduzione guidata dalla sintassi
Type Checking (1° parte)
Generazione di Codice Intermedio
1 Semantica Operazionale di un frammento di Java: lo stato.
COORDINATE POLARI Sia P ha coordinate cartesiane
Frontespizio Economia Monetaria Anno Accademico
La scelta del paniere preferito
1 Il punto di vista Un sistema è una parte del mondo che una persona o un gruppo di persone, durante un certo intervallo di tempo, sceglie di considerare.
Algoritmi e Strutture Dati
I sistemi di riferimento
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
Alberi binari di ricerca
Heap binomiali.
Cammini minimi con sorgente singola
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Ordini Parziali - Reticoli
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 20/03/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Algoritmi e strutture Dati - Lezione 7
Il problema del dizionario
Algoritmi e Strutture Dati
A.S.E.13.1 ARCHITETTURA DEI SISTEMI ELETTRONICI LEZIONE N° 13 Alcune definizioniAlcune definizioni Algoritmo di sintesi ottima di Quine-McCluskeyAlgoritmo.
Corso di Informatica (Basi di Dati)
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
eliana minicozzi linguaggi1a.a lezione2
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Algoritmi e Strutture Dati
1 Implementazione di Linguaggi 2 PARTE 4 Implementazione di Linguaggi 2 PARTE 4 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
1 Implementazione di Linguaggi 2 PARTE 4 Implementazione di Linguaggi 2 PARTE 4 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
1 Implementazione di Linguaggi 2 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools,
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Unità Didattica 2 I Linguaggi di Programmazione
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
TECNOLOGIE DELLINFORMAZIONE E DELLA COMUNICAZIONE PER LE AZIENDE Materiale di supporto alla didattica.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Calcolo Parallelo e Distribuito
TRASFORMAZIONI GEOMETRICHE
1 Ly-LAB Sistema di gestione dei dati analitici di laboratorio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Voronoi-Based K Nearest Neighbor Search for Spatial Network Databases
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
1 Microsoft Access Gruppo di lavoro Alberti, Boldi, Gaito, Grossi, Malchiodi, Mereghetti, Morpurgo, Rosti, Palano, Zanaboni Informatica per laurea triennale.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
1 Implementazione di Linguaggi 2 PARTE 5 Implementazione di Linguaggi 2 PARTE 5 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Transcript della presentazione:

1 Implementazione di Linguaggi 2 PARTE 5 Implementazione di Linguaggi 2 PARTE 5 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley

2 TRADUZIONE GUIDATA (DIRETTA) DALLA SINTASSI TRADUZIONE GUIDATA (DIRETTA) DALLA SINTASSI Definizioni guidate dalla sintassi (DGS) Una definizione guidata dalla sintassi è una generalizzazione di una CFG in cui ogni simbolo grammaticale è associato un insieme di attributi, suddiviso in due sottoinsiemi chiamati rispettivamente insieme degli attributi ereditati e insieme degli attributi sintetizzati.

3 Attributi e loro gestione Se si pensa un nodo del parse tree associato ad un simbolo grammaticale come una struttura di record con campi destinati a mantenere informazioni allora un attributo corrisponde al nome di un campo. ll valore di un attributo in un nodo del parse tree è definito da una regola semantica associata alla produzione applicata in quel nodo. Il valore di un attributo sintetizzato in un nodo è calcolato in funzione del valore degli attributi dei figli del nodo. ll valore di un attributo in un nodo del parse tree è definito da una regola semantica associata alla produzione applicata in quel nodo. Il valore di un attributo sintetizzato in un nodo è calcolato in funzione del valore degli attributi dei figli del nodo. Il valore di un attributo ereditato in un nodo è calcolato in funzione del valore degli attributi dei fratelli e del genitore del nodo. Le regole semantiche introducono dipendenze tra gli attributi nei nodi. Queste vengono rappresentate da un grafo orientato detto grafo delle dpendenze.

4 Parsing Tree Decorato e Attribute Grammar Un parsing tree decorato è un parsing tree che riportii valori degli attributi di ogni nodo. Nelle DDS si associa ad ogni produzione A un insieme di regole semantiche della forma: b:=f(c 1,c 2,...,c k ) In cui f è una e b verifica una dei due casi seguenti: 1.b è un attributo sintetizzato di A e c 1,c 2,...,c k sono attributi dei simboli nella parte destra della produzione 2.b è un attributo ereditato di uno dei simboli della parte destra della produzione e c 1,c 2,...,c k attributi di A e di alcuni simboli della parte destra di A. Una attribute grammar è una definizione guidata dalla sintassi in cui le funzioni f non generano side-effect. Quando si vogliono generare side-effect si usano procedure in luogo di funzioni. Le funzioni sono spesso espresse in forma da espressioni

5 Attributi Sintrtizzati Esempio di un semplice calcolatore: L Enprint(E.val) E E 1 +TE.val:=E 1.val+T.val E TE.val:=T.val E TE.val:=T.val T T 1 *FT.val:=T 1.val F.val T FT.val:=F.val F (E)F.val:=E.val F digitF.val:=digit.lexval

6 Attributi sintetizzati: esempio

7 Attributi Ereditati Dipendono dagli attributi di genitore e fratelli e sono utili per esprimere dipendenze dal contesto del linguaggio. Esempio: D TLL.in:=T.type T intT.type:=integer T floatT.type:=real T floatT.type:=real L L 1,idL 1.in:=L.in addtype(id.entry,L.in) L L 1,idaddtype(id.entry,L.in)

8 Attributi ereditati: esempio

9 Ordine di valutazione degli Attributi

10 Ordine di valutazione-grafo di dipendenza Se lattributo b nel nodo n dipende da c nel nodo m allora la regola che valuta b in n deve essere valutata dopo quella che valuta c in m. Le interdipendenze di valutazione degli attributi in un parse tree vengono descritte da un grafo diretto etichettato detto grafo di dipendenza (o delle dipendenze). Il grafo ha un nodo per ogni attributo e un arco dal nodo m al nodo n se b dipende da c. Ogni ordinamento topologico del grafo rappresenta un ordine di valutazione possibile.

11 Ordine di valutazione Qui consideriamo solo metodi che non richiedono la costruzione del grafo di dipendenza (oblivious methods) ma metodi che definiscono lordine in base alla tecnica di parsing adottata. Questo restringe la classe degli attributi definibili ma è semplice da implementare ed estrememente efficiente.

12 Attributi semantici: applicazioni Costruzione di syntax tree. Luso di alberi sintattici come rappresentazione intermedia consente di disaccoppiare il processo di traduzione da quello di analisi. Un albero sintattico è una forma astratta e compatta di parsing tree dipendente solo dal linguaggio e non dalla grammatica adottata per descriverlo.

13 Esempi di Syntax Tree

14 Costruzione del Syntax Tree di espressioni Ogni nodo è rappresentato da un record contrnrntr vari campi. Un nodo può rappresentare un operatore o un operando. Nel primo caso deve anche contenere puntatori agli operandi. Si usano tre funzioni. Ciascuna restituisce un puntatore al nodo creato.

15 Costruzione del Syntax Tree funzioni primitive 1. mknode(op,left,right), crea nodo op (operatore) op e operandi left right. 2. mkleaf(id,entry) crea nodo id (operando). entry è uno spix a symbol table. 3. mkleaf(num,val), crea un nodo di tipo valore: il campo val contiene il valore

16 Costruzione del Syntax Tree funzioni primitive E E 1 +T E.np:=mknode(+,E 1.np,T.np) E E 1 -T E.np:=mknode(-,E 1.np,T.np) E T E.np:=T.np T (E) T.np:=E.np T id T.np:=mkleaf(id,id.entry) T numT.np:=mkleaf(num,num.val)

17 Costruzione del Syntax Tree esempio

18 Costruzione del Syntax Tree a DAG Si usa un grafo orientato aciclico per rappresentare sotto-espressioni comuni. Esempio: a+a*(b-c)+(b-c)*d 1. p1=mkleaf(id,a) 2. p2:=mkleaf(id,a) 3. p3:=mkleaf(id,b) 4. p4:=mkleaf(id,c) 5. p5:=mknode(-,p3,p4)

19 Costruzione del Syntax Tree a DAG Esempio: a+a*(b-c)+(b-c)*d 6. p6:=mknode(*,p2,p5) 7. p7:=mknode(+,p1,p6) 8. p8:=mkleaf(id,b) 9. p9:=mkleaf(id,c)

20 Costruzione di un Syntax Tree a DAG

21 Costruzione di un Syntax Tree a DAG Algoritmo I nodi del grafo sono memorizzati in un array ciascuno puntato da un cursore (indice). La segnatura di un nodo è formata da una tripla I nodi del grafo sono memorizzati in un array ciascuno puntato da un cursore (indice). La segnatura di un nodo è formata da una tripla Input: op l ed r Output: nodo con segnatura Output: nodo con segnatura Metodo: scandire larray fino a trovare nodo con etichetta op

22 Costruzione di un Syntax Tree a DAG Algoritmo Metodo: scandire larray fino a trovare un nodo m con etichetta op figlio sinistro l e destro r. Se esiste restituire m altrimenti creare un nuovo nodo alla posizione lst e restituire lst. La ricerca può essere ottimizzato con una tavola hash.

23 Calcolo bottom-up di definizioni s- attributed In questo caso gli attributi possono essere valutati bottom-up da un parser shift- reduce o di altro tipo bottom-up che conservi i valori associati ai simboli grammaticali sullo stack. Ad ogni azione reduce il parser valuta gli attributi sintetizzati a partire dai valori sullo stack. Il metodo è applicabile anche a certi tipi di attributi ereditati (parser LR)

24 Calcolo bottom-up di definizioni s- attributed Ipotesi: stack composto da due array paralleli stato-valore. stato è uno spix a parsing table (memorizzare sullo stack anche il simbolo grammaticale non serve, ma per leggibilità identifichiamo lo stato con il simbolo grammaticale).

25 Calcolo bottom-up di definizioni s- attributed

26 Calcolo bottom-up di definizioni s- attributed Supponendo di valutare gli attributi prima della riduzione e che A.a:=f(X.x,Y.y,Z.z) sia associata a A XYZ. Prima di ridurre XYZ ad A i valori di Z.z, Y.y e X.x si trovano in val[top], val[top-1] e val[top-2] rispettivamente. Dopo la riduzione top viene decrementato di 2 e lo stato corrispondente ad A viene impilato in state[top] mentre il valore di A.a in val[top].

27 Definizioni L-attributed Quando il processo di traduzione avviene durante il parsing un ordine di valutazione ottimale dipende dall ordine di creazione dei nodi del parsing tree da parte del parser. Un metodo compatibile con molti parser top- down e bottom-up si basa su una visita depth first dellalbero.

28 Visita depth-first e def. L-attributed PROC dfv(n: node); BEGIN FOR EACH child m OF n FROM left TO right DO eval inherited attributes of m; dfv(m);OD; eval syntetized attributes of n END;

29 Definizioni L-attributed Una definizione è L-attributed se ciascun attributo di ogni regola semantica di ogni produzione A X 1 X 2 …X n è un attributo sintetizzato un attributo sintetizzato un attributo ereditato di Xj 1 un attributo ereditato di Xj 1 j n che dipende solo da: 1. Gli attributi di X 1 X 2 …X j-1 a sinistra di X j 2. Dagli attributi ereditati di A; Ogni definizione S-attributed è L-attributed.

30 Definizioni L-attributed esempio A LML.in:=l(A.i) A LML.in:=l(A.i)M.i:=m(L.s)A.s:=f(M.s) A QR R.i:=r(A.i) Q.i:=q(R.s)A.s:=f(Q.s)

31 Schemi di traduzione Uno schema di traduzione è una DGS in cui gli attributi sono associati ai simboli grammaticali e le azioni semantiche sono inserite tra graffe nella parte destra delle produzioni ad indicare lordine di valutazione. Esempio: A TR A TR R adop T print(adop.lexeme) R 1 | R adop T print(adop.lexeme) R 1 | T num print(num.val) T num print(num.val)

32 Schemi di traduzione

33 Schemi di traduzione Nel progetto di schemi di traduzione occorre rispettare vincoli per garantire la disponibilità del valore di un attributo al momento dell uso. Per questo si usano definizioni L- attributed o meglio s-attributed. In questo caso le azioni vengono inserite in coda alla produzione, esempio: T T 1 *F T.val:=T 1.val F.val T T 1 *F T.val:=T 1.val F.val T T 1 *F T.val:=T1.val F.val) T T 1 *F T.val:=T1.val F.val)

34 Schemi di traduzione: regole 1. Un attributo ereditato di un simbolo nella parte destra di una produzione deve essere calcolato un una azione che precede il simbolo, 2. Unazione non deve usare un attributo sintetizzati di un token a destra dellazione stessa, 3. Un attributo sintetizzato della parte sinistra di una prod. va calcolato solo dopo quelli a cui fa riferimento (OK in coda alla produzione)

35 Schemi di traduzione L-attributed Una TGDS L-attributed è trasformabile in uno schema conforme alle tre regole precedenti. Esempio (formattazione testo): S B B.ps:=10; S.ht:=B.ht S B B.ps:=10; S.ht:=B.ht B B 1 B 2 B 1.ps:=B.ps; B 2.ps:=B.ps B.ht:=max(B 1.ht,B 2.ht) B.ht:=max(B 1.ht,B 2.ht) B B 1 sub B 2 B 1.ps:=B.ps; B 2.ps:=shrink(B.ps) B.ht:=disp(B 1.ht,B 2.ht) B.ht:=disp(B 1.ht,B 2.ht) B text B.ht:=text.h B.ps; B text B.ht:=text.h B.ps;

36 Schemi di traduzione L-attributed B sta per box, B B 1 B 2 indica giustap- posizione di testo, B B 1 sub B 2 denota loperazione pedice: B2 viene posto a destra in basso di B1 ma in dimensione ridotta. ps è ereditato e indica laltezza di una formula

37 Schemi di traduzione L-attributed S B.ps:=10 B S.ht:=B.ht S B.ps:=10 B S.ht:=B.ht B B 1.ps:=B.ps B 1 B 2.ps:=B.ps B 2 B.ht:=max(B 1.ht,B 2.ht) B B 1.ps:=B.ps B 1 B 2.ps:=B.ps B 2 B.ht:=max(B 1.ht,B 2.ht) B B 1.ps:=B.ps B 1 sub B 2.ps:=shrink(B.ps) B 2 B.ht:=disp(B 1.ht,B 2.ht) B.ht:=disp(B 1.ht,B 2.ht) B text B.ht:=text.h B.ps; B text B.ht:=text.h B.ps;

38 Traduzioni topdown Implementazione di DGS L-attributed con parser topdown: E E 1 +T E.val:=E 1.val+T.val E E 1 +T E.val:=E 1.val+T.val E E 1 -T E.val:=E 1.val+T.val E E 1 -T E.val:=E 1.val+T.val E T E.val:=T.val E T E.val:=T.val T (E) T.val:=E.val T (E) T.val:=E.val T num T.val:=num.val T num T.val:=num.val

39 Traduzioni topdown Implementazione di DGS L-attributed con parser topdown: E T R.i:=T.val R E.val:=R.s E T R.i:=T.val R E.val:=R.s R +T R 1.i:=R.i+T.val R 1 R.s:=R 1.s R +T R 1.i:=R.i+T.val R 1 R.s:=R 1.s R -T R 1.i:=R.i-T.val R 1 R.s:=R 1.s R -T R 1.i:=R.i-T.val R 1 R.s:=R 1.s R R.s:=R.i R R.s:=R.i T (E) T.val:=E.val T (E) T.val:=E.val T num T.val:=num.val T num T.val:=num.val

40 Traduzioni topdown Si ricordi che un attributo ereditato di un token deve essere valutato in una azione che compare prima del token mentre un attributo sintetizzato della parte sinistra deve essere valutato dopo gli attributi Da cui ssso dipende.

41 Traduzioni topdown A A 1 Y A.a:=g(A 1.a,Y.y) A A 1 Y A.a:=g(A 1.a,Y.y) A X A.a:=f(X.x) A X A.a:=f(X.x) A XR R YR| R YR| Con le azioni sementiche diviene: A X R.i:=f(X.x) A X R.i:=f(X.x) R A.a:=R.s R A.a:=R.s R Y R.i:=g(R.i,Y.y) R 1 R.s:=R 1.s R Y R.i:=g(R.i,Y.y) R 1 R.s:=R 1.s R R.s:=R.i R R.s:=R.i