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.

Slides:



Advertisements
Presentazioni simili
LR Parser II Parte Giuseppe Morelli.
Advertisements

Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
MONITORAGGIO MATEMATICA V A Alunni 26 Presenti 23 Quesiti 44 Risposte totali 650 Risultato medio 28,3 media 64,2%
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
Mat_Insieme Lavoro di Gruppo Prodotti Notevoli
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.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
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.
Parser Bottom UP Giuseppe Morelli. Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di.
Linguaggi Regolari e Linguaggi Liberi
Viable Prefixes, conflitti e formato delle tabelle per il parsing LR
Tabelle LALR Costruzione delle tabelle LALR Metodo LALR Introduciamo lultimo metodo di costruzione di tabelle per il parsing LR Nome: lookahead-LR abbreviato.
Costruzione delle tabelle di parsing LR canoniche
Costruzione di tabelle di Parsing SLR
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.
Type Checking (1° parte)
Algoritmi e Programmazione
Frontespizio Economia Monetaria Anno Accademico
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
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.
1 Innovazione dal punto di vista strategico Francesco Berri Medical Director ASTELLAS PHARMA SpA Bologna 10 Giugno 2011.
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.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
EIE 0607 III / 1 A B P a = 30 P b = 35 t = 2, tc = 1 Questo può essere un equilibrio? No! Politiche di un paese importatore: una tariffa allimportazione.
Obiettivi del corso di Statistica Medica.
Algoritmo di Ford-Fulkerson
Programmazione 1 9CFU – TANTE ore
ELEZIONI REGIONALI 2010 PRIMI RISULTATI E SCENARI 14 aprile 2010.
Canale A. Prof.Ciapetti AA2003/04
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Realizzazione e caratterizzazione di una semplice rete neurale per la separazione di due campioni di eventi Vincenzo Izzo.
eliana minicozzi linguaggi1a.a lezione2
Test di ipotesi X variabile casuale con funzione di densità (probabilità) f(x; q) q Q parametro incognito. Test Statistico: regola che sulla base di un.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
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,
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Cos’è un problema?.
Contatore: esempio di circuito sequenziale
CHARGE PUMP Principio di Funzionamento
Velocità ed accelerazione
Esercitazione 1: Rispetto al test di ansia (Media=25; σ=5), calcolare:
Q UESTIONI ETICHE E BIOETICHE DELLA DIFESA DELLA VITA NELL AGIRE SANITARIO 1 Casa di Cura Villa San Giuseppe Ascoli Piceno 12 e 13 dicembre 2011.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
TECNOLOGIE DELLINFORMAZIONE E DELLA COMUNICAZIONE PER LE AZIENDE Materiale di supporto alla didattica.
1)Completa la seguente successione: C4, B7, E10, D13, G16,. A. G19 B
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
6 Prime AFM della Sede Centrale 2-3, 4-5
Calcolo Parallelo e Distribuito
LE SAI LE TABELLINE? Mettiti alla prova!.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
Un trucchetto di Moltiplicazione per il calcolo mentale
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Calendario lezioni ed esercitazioni impartite nell anno accademico 2001/2002 II Semestre Corso di Fisica Sperimentale con Laboratorio Classe di Tecnologie.
14 marzo 2002 Avvisi:.
Esempi risolti mediante immagini (e con excel)
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
I chicchi di riso e la sfida al Bramino
Mercato del lavoro e condizione giovanile: la crisi si acuisce
Il numero più grande Accademia dei Lincei
TRASFORMATA DI FOURIER
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Transcript della presentazione:

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 Compilers Principles,Techniques and Tools, Addison Wesley

2 PARSER LR PARSER LR

3 Algoritmo di Parsing LR Il parser usa uno stack su cui impila stringhe della forma: s 0 X 1 s 1 X 2 s 2 …X m s m s m sul top s 0 X 1 s 1 X 2 s 2 …X m s m con s m sul top dove X i N mentre s i rappresenta uno stato del parser. Il parser e di tipo shift-reduce e il suo comportamento e deciso dallinput corrente a i e dall top dello stack s m. Le tavole del parser sono formate da due funzioni dette action function f e goto function g. Il parser consulta [s m,a i ] che puo valere: shift shift reduce by Areduce by A acceptaccept errorerror

4 Algoritmo di Parsing LR La funzione goto g mappa stati e simboli grammaticali in stati g: S V S ed e la funzione di transizione di un DFA che accetta prefissi accessibili (PrAc) della grammatica G. Un PrAc di una grammatica G e un prefisso di una forma sentenziale canonica destra (FSCD) che puo comparire sul top dello stack. Piu formalmente un PrAc di G e una stringa tale che: S * rm Aw rm w e PREF( ) (*) S * rm Aw rm w e PREF( ) (*) Una maniglia/chiave (handle) di una FSCD di G e una coppia formata da una produzione e una posizione nella FSCD. Nell esempio (*) (A, ) o (A,n) dove n=| +1|. Lo handle esprime che la stringa

5 Algoritmo di Parsing LR Canonico alla posizione specificata dallo handle puo essere sostituita da A per ottenere la FSCD precedente in una derivazione canonica destra. alla posizione specificata dallo handle puo essere sostituita da A per ottenere la FSCD precedente in una derivazione canonica destra. Il DFA ha come stato iniziale quello impilato dal parser allinizio. Una configurazione del parser e una coppia formata da: il contenuto dello stackil contenuto dello stack linput non ancora lettolinput non ancora letto (s 0 X 1 s 1 X 2 s 3 …X m s m,a j a j+1 …a n ) La mossa corrente del parser e determinata da a j, da s m e dal valore di f[s m,a j ] (action[s m,a j ]) come segue:

6 Algoritmo di Parsing LR Canonico Se f[s m,a j ]=shift allora il parser esegue uno shift e passa alla configurazioneSe f[s m,a j ]=shift allora il parser esegue uno shift e passa alla configurazione (s 0 X 1 s 1 X 2 s 3 …X m s m a j s,a j+1 …a n ) (s 0 X 1 s 1 X 2 s 3 …X m s m a j s,a j+1 …a n ) dove s=g[s m,a j ]. dove s=g[s m,a j ]. se f[s m,a j ]=reduce A allora il parser esegue una azione reduce passando alla configurazione (s 0 X 1 s 1 X 2 s 3 …X m-r s m-r As,a j a j+1 …a n ) dove s=g[s m-r,A] ed r=| |. Cioe il parser spila 2r simboli dallo stack fino ad esporre sul top s m-r ; quindi impila A seguito da s=g[s m-r,A].se f[s m,a j ]=reduce A allora il parser esegue una azione reduce passando alla configurazione (s 0 X 1 s 1 X 2 s 3 …X m-r s m-r As,a j a j+1 …a n ) dove s=g[s m-r,A] ed r=| |. Cioe il parser spila 2r simboli dallo stack fino ad esporre sul top s m-r ; quindi impila A seguito da s=g[s m-r,A]. Se f[s m,a j ]=accept allora il parser termina lanalisi con successo.Se f[s m,a j ]=accept allora il parser termina lanalisi con successo. Se f[s m,a j ]=error allora attiva una routine di errore.Se f[s m,a j ]=error allora attiva una routine di errore.

7 Struttura delle tavole di Parsing LR Si consideri lesempio (1) E E+T, (2) E T,(3) T T*F (4) T F, (5) F (E), (6) F id. La prima slide mostra le tavole canoniche. Il loro difetto e di avere la tavola f sparsa e spreca-spazio. Per questo la slide successiva sposta la parte delle azioni goto sui terminali nella tavola f. Ad esempio se f[s,a]=shift e g[s,a]=n allora f[s,a] diviene action[s,a]=shift n, mentre la funzione g(a) scompare restando solo g(A). Di conseguenza il parser va ridescritto come segue (le nuove funzioni f e g vengono chiamate action e goto):

8 Algoritmo di Parsing LR libro Se action[s m,a j ]=shift s allora il parser esegue uno shift e passa alla configurazioneSe action[s m,a j ]=shift s allora il parser esegue uno shift e passa alla configurazione (s 0 X 1 s 1 X 2 s 3 …X m s m a j s,a j+1 …a n ) (s 0 X 1 s 1 X 2 s 3 …X m s m a j s,a j+1 …a n ) se action[s m,a j ]=reduce A allora il parser esegue una azione reduce passando alla configurazione (s 0 X 1 s 1 X 2 s 3 …X m-r s m-r As,a j a j+1 …a n ), s=goto[s m-r,A] e r=| |. Cioe il parser spila 2r simboli dallo stack fino ad esporre sul top s m-r ; quindi impila A seguito da s=goto[s m-r,A].se action[s m,a j ]=reduce A allora il parser esegue una azione reduce passando alla configurazione (s 0 X 1 s 1 X 2 s 3 …X m-r s m-r As,a j a j+1 …a n ), s=goto[s m-r,A] e r=| |. Cioe il parser spila 2r simboli dallo stack fino ad esporre sul top s m-r ; quindi impila A seguito da s=goto[s m-r,A]. Se action[s m,a j ]=accept allora il parser termina lanalisi con successo.Se action[s m,a j ]=accept allora il parser termina lanalisi con successo. Se action[s m,a j ]=error allora attiva una routine di errore.Se action[s m,a j ]=error allora attiva una routine di errore.

9 Algoritmo di Parsing LR Driver Routine PROC ParserLR; DO /* s TOS state, a next input and ip pointer to it */ IF action[s,a]=shift s THEN push a; push s; ip++ ELSIF action[s,a]=reduce A THEN pop 2| | symbols; /* s becomes TOS */ push A; push goto[s,A]; out A push A; push goto[s,A]; out A ELSIF action[s,a]=accept THEN RETURN ELSE Error() FIODEND.

10 Esempio di Parsing LR Step stack input action output 1 0 id*id+id$shift 1 0 id*id+id$shift 2 0id5 *id+id$reduce F id F id 2 0id5 *id+id$reduce F id F id 3 0F3 *id+id$reduce T F T F 3 0F3 *id+id$reduce T F T F 4 0T2 *id+id$shift 4 0T2 *id+id$shift 5 0T2*7 id+id$shift 5 0T2*7 id+id$shift 6 0T2*7id5 +id$reduce F id F id 6 0T2*7id5 +id$reduce F id F id 7 0T2*7F10 +id$reduce T T*F T T*F 7 0T2*7F10 +id$reduce T T*F T T*F 8 0T2 +id$reduce E T E T 8 0T2 +id$reduce E T E T 9 0E1 +id$shift 9 0E1 +id$shift 10 0E1+6 id$shift 11 0E1+6id5 $reduce F id F id

11 Esempio di Parsing LR cont. Step stack input action output 12 0E1+6F3 $reduce T F T F 13 0E1 +6E9 $ reduce E E+T E E+T 14 0E1 $ accept Da un punto di vista pratico sono state usate le grammatiche LR(0) ed LR(1) ed alcune sottoclassi di queste uktime: SLR(1) e LALR(1) benche le potenzialita dei processori di oggi permetta di prendere in considerazione le LR(1) ed anche le LR(k) con k>1 senza grossi problemi.

12 Tavole di Parsing Canoniche Tavole di Parsing Canoniche Stato id + * ( ) $ E T F id + * ( ) $ ss s s ss ss s s ss s A

13 Tavole di Parsing del Libro Tavole di Parsing del Libro Stato id + * ( ) $ E T F s5s4 s6 s7 s5s4 s5s4 s5 s4 s6s 11 s7s7 A

14 Costruzione dell Tavole di Parsing LR Per questo vedremo in dettaglio le tavole LR(0), SLR(1) ed LR(1) trattando le LALR(1) marginalmente solo come meccanismo di semplificazione delle tavole LR. Item LR(0). Un item LR(0) e una produzione con un dot che ne marca una posizione nella parte destra. La produzione A XYZ origina quattro item: A.XYZ A X.YZ A XY.Z A XYZ.; A.XYZ A X.YZ A XY.Z A XYZ.; Mentre A genera il solo item A.. Lidea centrale alla base del metodo consiste nel costruire dalla grammatica un automa finito che riconosca i PrAc della grammatica G. Alla base dei metodi piu semplici (SLR LALR) vi e la Collezione Canonica di Stati LR(0) (CCS0).

15 Tavole LR(0): funzione closure Definizione. Data G=(N,T,P,S) definiamo grammatica estesa G=(N S,T,P S S,S) dove S N e un nuovo simbolo iniziale. Scopo: determinare esattamente la terminazione del parser. Definizione. Chiusura di un insieme di item I. Inizialmente Closure(I)=I.Inizialmente Closure(I)=I. Se A.B Closure(I) e B alllora aggiungere B. a closure(I).Se A.B Closure(I) e B alllora aggiungere B. a closure(I). Il significato intuitivo di Closure e il seguente: se A.B Closure(I) allora durante il parsing e possibile che si analizzi una sottostringa derivata da B. Se inoltre B allora e anche possibile analizzare una sottostringa derivabile da.

16 Tavole LR(0): chiusura Esempio di chiusura. Data la grammatica estesa G (0)E E; (1)E E+T; (2)E T; (3)T T*F; (4)T F; (5)F (E); (6)F id. Calcolo della chiusura di un insieme di item I. Se inizialmente I={E.E}Se inizialmente I={E.E} Allora Closure(I)={E.E, E.E+T, E.T, T.T*F, T.F, F.(E), F.id}.Allora Closure(I)={E.E, E.E+T, E.T, T.T*F, T.F, F.(E), F.id}.

17 Tavole LR(0): routine di chiusura FUNC Closure(I: ItemSet); VAR J:ItemSet; BEGINJ:=I;DO FOR each item A.B J & each B FOR each item A.B J & each B DO J:=J {B. } OD UNTIL J unchanged; RETURN J END.

18 Tavole LR(0): kernel item e item validi Definizione: Un kernel item e: S.SS.S Un item con il dot che non precede la parte destra della produzioneUn item con il dot che non precede la parte destra della produzione Definizione Valid item. Un item A 1. 2 e valido per per un PrAc 1 se esiste una derivazione Definizione Valid item. Un item A 1. 2 e valido per per un PrAc 1 se esiste una derivazione S rm * Aw rm * 1 2 w Sapere che un item A 1. 2 e valido per un PrAc permette di decidere tra unazione shift e reduce quando e al top dello stack. In particolare se A 1 e lo handle e lazione sara reduce. E chiaro che due item validi diversi possono suggerire due azioni contrastant per lo stesso PrAc. Sapere che un item A 1. 2 e valido per un PrAc 1 permette di decidere tra unazione shift e reduce quando 1 e al top dello stack. In particolare se 2 allora lo handle non si trova ancora sullo stack e lazione e shift. Se invece 2 = allora A 1 e lo handle e lazione sara reduce. E chiaro che due item validi diversi possono suggerire due azioni contrastant per lo stesso PrAc.

19 Tavole LR(0): funzione closure Definizione. Data G=(N,T,P,S) definiamo grammatica estesa G=(N S,T,P S S,S) dove S N e un nuovo simbolo iniziale. Scopo: determinare esattamente la terminazione del parser. Definizione. Chiusura di un insieme di item I. Inizialmente Closure(I)=I.Inizialmente Closure(I)=I. Se A.B Closure(I) e B alllora aggiungere B. a closure(I).Se A.B Closure(I) e B alllora aggiungere B. a closure(I). Il significato intuitivo di Closure e il seguente: se A.B Closure(I) allora durante il parsing e possibile che si analizzi una sottostringa derivata da B. Se inoltre B allora e anche possibile analizzare una sottostringa derivabile da.

20 Tavole LR(0): funzione goto Definizione. Funzione goto(I,X) definita su insiemi di item e simboli grammaticali: goto(I,X)=Closure({ A X. | A.X I} Intuitivamente se I e linsieme degli item validi per un PrAc allora goto(I,X) e linsieme degli item validi per il PrAc X. Esempio: goto({E E.,E E.+T},+)=Closure({E E+.T})= {E E+.T, T.T*F, T.F, F.(E), F.id} {E E+.T, T.T*F, T.F, F.(E), F.id}

21 Tavole LR(0): funzione goto cont. Per ogni G la funzione goto definisce un DFA che riconosce PrAc di G. Il DFA e costruibile tramite un NFA che usa gli insiemi di item come stati e transizioni da A.X a A X. etichettate X e da A.B a B. etichettate. Ne segue che Closure(I) coincide con la -closure di un insiemi di stati di un NFA come visto a suo tempo. La funzione goto(I,X) realizza la transizione da da I tramite linput X nel DFA ottenuto dal NFA tramite la costruzione basata sui sottoinsiemi di stati gia vista. Per ogni G la funzione goto definisce un DFA che riconosce PrAc di G. Il DFA e costruibile tramite un NFA che usa gli insiemi di item come stati e transizioni da A.X a A X. etichettate X e da A.B a B. etichettate. Ne segue che Closure(I) coincide con la -closure di un insiemi di stati di un NFA come visto a suo tempo. La funzione goto(I,X) realizza la transizione da da I tramite linput X nel DFA ottenuto dal NFA tramite la costruzione basata sui sottoinsiemi di stati gia vista.

22 Insiemi di item canonici LR(0) Algoritmo: Costruzione della Collezione Canonica degli item LR(0) per una grammatica (augmented) G. PROC Items(G); BEGIN C=Closure({s.s}); DO FOR ( I) I C & ( X) X V: goto(I,X) FOR ( I) I C & ( X) X V: goto(I,X) DO C:=C goto(I,X) C:=C goto(I,X) UNTIL C unchanged END;

23 Insiemi di item canonici LR(0) di G G: (0)E E;(1)E E+T;(2)E T;(3)T T*F;(4)T F; (5)F (E); (6)F id. I 0 : E.E I 3 : T F. T.F I 11 : F (E). E.E+T I 4 : F (.E) F.(E) goto(I 0,E)=I 1 E.E+T I 4 : F (.E) F.(E) goto(I 0,E)=I 1 E.T E.E+T F.id goto(I 0,T)=I 2 E.T E.E+T F.id goto(I 0,T)=I 2 T.T*F E.T I 7 : T T*.F goto(I 0,F)=I 3 T.T*F E.T I 7 : T T*.F goto(I 0,F)=I 3 T.F T.T*F F.(E) goto(I 0,()=I 4 T.F T.T*F F.(E) goto(I 0,()=I 4 F.(E) T.F F.id goto(I 0,id)=I 5 F.(E) T.F F.id goto(I 0,id)=I 5 F.id F.(E) I 8 : F (E.) goto(I 1,+)=I 6 F.id F.(E) I 8 : F (E.) goto(I 1,+)=I 6 I 1 : E E. F.id E E.+T goto(I 2,*)=I 7 E E.+T I 5 : F id. I 9 : E E+T. goto(I 4,+)=I 8 E E.+T I 5 : F id. I 9 : E E+T. goto(I 4,+)=I 8 I 2 : E T. I 6 : E E+.T T T.*F goto(I 4,T)=I 2 T T.*F T.T*F I 10 : T T*F. goto(I 4,F)=I 3 T T.*F T.T*F I 10 : T T*F. goto(I 4,F)=I 3

24 Insiemi di item canonici LR(0) di G G: (0)E E;(1)E E+T;(2)E T;(3)T T*F;(4)T F; (5)F (E); (6)F id. I 0 : E.E I 3 : T F. T.F I 11 : F (E). E.E+T I 4 : F (.E) F.(E) goto(I 4,()=I 4 E.E+T I 4 : F (.E) F.(E) goto(I 4,()=I 4 E.T E.E+T F.id goto(I 4,id)=I 5 E.T E.E+T F.id goto(I 4,id)=I 5 T.T*F E.T I 7 : T T*.F goto(I 6,T)=I 9 T.T*F E.T I 7 : T T*.F goto(I 6,T)=I 9 T.F T.T*F F.(E) goto(I 6,F)=I 3 T.F T.T*F F.(E) goto(I 6,F)=I 3 F.(E) T.F F.id goto(I 6,()=I 4 F.(E) T.F F.id goto(I 6,()=I 4 F.id F.(E) I 8 : F (E.) goto(I 6,id)=I 5 F.id F.(E) I 8 : F (E.) goto(I 6,id)=I 5 I 1 : E E. F.id E E.+T goto(I 7,F)=I 10 E E.+T I 5 : F id. I 9 : E E+T. goto(I 7,()=I 4 E E.+T I 5 : F id. I 9 : E E+T. goto(I 7,()=I 4 I 2 : E T. I 6 : E E+.T T T.*F goto(I 7,id)=I 5 T T.*F T.T*F I 10 : T T*F. goto(I 8,))=I 11 T T.*F T.T*F I 10 : T T*F. goto(I 8,))=I 11

25 Insiemi di item canonici LR(0) di G G: (0)E E;(1)E E+T;(2)E T;(3)T T*F;(4)T F; (5)F (E); (6)F id. I 0 : E.E I 3 : T F. T.F I 11 : F (E). E.E+T I 4 : F (.E) F.(E) goto(I 8,+)=I 46 E.E+T I 4 : F (.E) F.(E) goto(I 8,+)=I 46 E.T E.E+T F.id goto(I 9,*)=I 7 E.T E.E+T F.id goto(I 9,*)=I 7 T.T*F E.T I 7 : T T*.F T.T*F E.T I 7 : T T*.F T.F T.T*F F.(E) T.F T.T*F F.(E) F.(E) T.F F.id F.(E) T.F F.id F.id F.(E) I 8 : F (E.) F.id F.(E) I 8 : F (E.) I 1 : E E. F.id E E.+T E E.+T I 5 : F id. I 9 : E E+T. E E.+T I 5 : F id. I 9 : E E+T. I 2 : E T. I 6 : E E+.T T T.*F T T.*F T.T*F I 10 : T T*F. T T.*F T.T*F I 10 : T T*F.

26 Diagrammi LR(0) esempio Diagrammi LR(0) esempio

27 Tavole di parsing S LR(1) Si costruisce a partire dalla collezione C di insiemi di item LR(0) di G calcolando action e goto come segue: 1.Costruire C={I 0,I 1,…I n } Collezione di insiemi di item LR(0) di G 2.La tavola (stato) i deriva da I i con azioni: a)A.a I i & goto(I,a)=I j action[i,a]=shift j b)A. I i a FOLlOW(A) &A S action[i,a]=reduce A b)A. I i a FOLlOW(A) &A S action[i,a]=reduce A c)S S I i action[I,$]=accept Se le regole precedenti generano azioni in conflitto allora G non e SLR(1).

28 Tavole di parsing SLR(1) 3. A N goto[I i,A]=I j goto(i,A)=j 4.Ogni entry non definita in e posta a error 5.Lo stato iniziale del parser e costruito da I 0 ={S.S,…} Una grammatica che possieda una tavola di parsing SLR(1) e detta SLR(1). Ogni grammatica SLR(1) e non ambigua. Esistono grammatiche non ambigue che non sono SLR(1), Es: S L=R S R L *R L id R L

29 Tavole di Parsing Tavole di Parsing Stato id + * ( ) $ E T F id + * ( ) $ ss s s ss ss s s ss s A

30 Item LR(1) Un item LR(1) e una coppia [A.,a] con a T {$} e A. Il secondo componente di un item e chiamato stringa di lookahead. Essa non si usa quando β. Se invece β= la stringa di lookahead a specifica una riduzione A solo quando il token in input è a. Definizione. Un item LR(1) [A.,a] è valido per un PrAc a se esiste una derivazione canonica destra, con = e w=aw o w= & a=$. Definizione. Un item LR(1) [A.,a] è valido per un PrAc a se esiste una derivazione canonica destra S rm * Aw rm * w, con = e w=aw o w= & a=$. In relazione alle grammatiche SLR(1) va notato che l insieme di stringhe di lookahead a che formano gli item LR(1) [A.,a] validi per un prefisso verifica FOLLOW(A) ma in generale FOLLOW(a)

31 Tavole LR(1): funzione closure Definizione. Chiusura di un insieme di item I per una G estesa: Inizialmente Closure(I)=I.Inizialmente Closure(I)=I. Se [A.B,a] Closure(I) e B alllora aggiungere [B.,b] a closure(I) per ogni b FIRST( a)Se [A.B,a] Closure(I) e B alllora aggiungere [B.,b] a closure(I) per ogni b FIRST( a) Il significato intuitivo di Closure e il seguente: se A.B Closure(I) allora durante il parsing e possibile che si analizzi una sottostringa derivata da B. Se inoltre B allora e anche possibile analizzare una sottostringa derivabile da per tutti gli input b tali che b FIRST( a)

32 Tavole LR(1): routine di chiusura FUNC Closure(I: ItemSet); VAR J:ItemSet; BEGINJ:=I;DO FOR each item [A.B,a] J & each B & each b FIRST( a) DO J:=J {[B.,b]} OD UNTIL J unchanged; RETURN J END.

33 Tavole LR(1): funzione goto Definizione. Funzione goto(I,X) definita su insiemi di item e simboli grammaticali: goto(I,X)=Closure({ [A X.,a]| [A.X,a] I} Ancora se I e linsieme degli item validi per un PrAc allora goto(I,X) e linsieme degli item validi per il PrAc X.

34 Insiemi di item canonici LR(1) Algoritmo: Costruzione della Collezione Canonica degli item LR(1) per una grammatica (augmented) G. PROC Items(G); BEGIN C=Closure({[s.s,$]}); DO FOR each I C & each X V such that goto(I,X) FOR each I C & each X V such that goto(I,X) DO C:=C goto(I,X) /* INCL(C,goto(I,X)) */ UNTIL C unchanged END;

35 Insiemi di item canonici LR(1) di G 2 Insiemi di item canonici LR(1) di G 2 G 2 : (0)S S;(1)S CC;(2)C cC;(3)C d; I 0 : [S.S,$] I 3 : [C c.C,c] [C.d,$] goto(I 2,d)=I 7 [S.CC,$] [C c.C,d] I 7 : [C d.,$] goto(I 3,C)=I 8 [S.CC,$] [C c.C,d] I 7 : [C d.,$] goto(I 3,C)=I 8 [C.cC,c] [C.cC,c] I 8 : [C cC.,c] goto(I 3,c)=I 8 [C.cC,c] [C.cC,c] I 8 : [C cC.,c] goto(I 3,c)=I 8 [C.cC,d] [C.cC,d] [C cC.,d] goto(I 3,d)=I 4 [C.cC,d] [C.cC,d] [C cC.,d] goto(I 3,d)=I 4 [C.d,c] [C.d,c] I 9 : [C c.,$] goto(I 6,C)=I 9 [C.d,c] [C.d,c] I 9 : [C c.,$] goto(I 6,C)=I 9 [C.d,d] [C.d,d] goto(I 0,S)=I 1 goto(I 6,c)=I 6 [C.d,d] [C.d,d] goto(I 0,S)=I 1 goto(I 6,c)=I 6 I 1 : [S S.,$] I 4 : [C d.,c] goto(I 0,C)=I 2 goto(I 6,d)=I 7 I 2 : [S C.C,$] [C d.,d] goto(I 0,c)=I 3 [C.cC,$] I 5 : [S CC.,$] goto(I 0,d)=I 4 [C.cC,$] I 5 : [S CC.,$] goto(I 0,d)=I 4 [C.d,$] I 6 : [C c.C,$] goto(I 2,C)=I 5 [C.d,$] I 6 : [C c.C,$] goto(I 2,C)=I 5 [C.cC,$] goto(I 2,c)=I 6 [C.cC,$] goto(I 2,c)=I 6

36 Insiemi di item canonici LR(0) di G 2 Insiemi di item canonici LR(0) di G 2 G 2 : (0)S S;(1)S CC;(2)C cC;(3)C d; I 0 : [S.S] I 4 : [C d.] goto(I 0,S)=I 1 goto(I 3,c)=I 3 [S.CC] I 5 : [C CC.] goto(I 0,C)=I 2 goto(I 3,d)=I 4 [S.CC] I 5 : [C CC.] goto(I 0,C)=I 2 goto(I 3,d)=I 4 [C.cC] I 6 : [C cC.] goto(I 0,c)=I 3 [C.cC] I 6 : [C cC.] goto(I 0,c)=I 3 [C.d] goto(I 0,S)=I 1 goto(I 0,d)=I 4 [C.d] goto(I 0,S)=I 1 goto(I 0,d)=I 4 I 1 : [S S.] goto(I 0,C)=I 2 I 2 : [S C.C] goto(I 0,c)=I 3 [C.cC] goto(I 0,d)=I 4 [C.cC] goto(I 0,d)=I 4 [C.d] goto(I 2,C)=I 5 [C.d] goto(I 2,C)=I 5 I 3 : [C c.C] goto(I 2,c)=I 3 [C.cC] goto(I 2,d)=I 4 [C.cC] goto(I 2,d)=I 4 [C.d] goto(I 3,C)=I 6 [C.d] goto(I 3,C)=I 6

37 Insiemi di item canonici LR(0) di G 2 Insiemi di item canonici LR(0) di G 2 G 2 : (0)S S;(1)S CC;(2)C cC;(3)C d; I 0 : [S.S] I 4 : [C d.] goto(I 3,c)=I 3 I 0 : [S.S] I 4 : [C d.] goto(I 3,c)=I 3 [S.CC] I 5 : [C CC.] goto(I 3,d)=I 4 [S.CC] I 5 : [C CC.] goto(I 3,d)=I 4 [C.cC] I 6 : [C cC.] [C.cC] I 6 : [C cC.] [C.d] goto(I 0,S)=I 1 [C.d] goto(I 0,S)=I 1 I 1 : [S S.] goto(I 0,C)=I 2 I 1 : [S S.] goto(I 0,C)=I 2 I 2 : [S C.C] goto(I 0,c)=I 3 I 2 : [S C.C] goto(I 0,c)=I 3 [C.cC] goto(I 0,d)=I 4 [C.cC] goto(I 0,d)=I 4 [C.d] goto(I 2,C)=I 5 [C.d] goto(I 2,C)=I 5 I 3 : [C c.C] goto(I 2,c)=I 3 I 3 : [C c.C] goto(I 2,c)=I 3 [C.cC] goto(I 2,d)=I 4 [C.cC] goto(I 2,d)=I 4 [C.d] goto(I 3,C)=I 6 [C.d] goto(I 3,C)=I 6

38 Insiemi di Item LR(1): diagramma Insiemi di Item LR(1): diagramma

39 Costruzione delle Tavole LR(1) Input: una grammatica estesa G. Output: tavole canoniche LR(1) di G. 1.Costruire C={I 0,I 1,...,I n } CCII LR(1) 2.La tavola i deriva da I i con action seguente: a)se [A.a,b] I i e goto(I i,a)=I j allora action[i,a]=shift j b)se [A.,a] I i e AS allora action[i,a]=reduce A b)se [A.,a] I i e AS allora action[i,a]=reduce A c)se [S S,$] I i allora action[i,$]= accept 3.Se goto(I i,A)=I j allora goto[i,$]=j 4.Porre tutte le entry non definite in 1),2) e 3) a error 5.Lo stato iniziale del parser è quello contenente [S.S,$] Se le tavole non presentano conflitti shift-reduce o reduce-reduce allora la grammatica G è LR(1).

40 Grammatiche LR definizione non algoritmica Definizione: una grammatica G e LR(k) se detta G la versione estesa di G, allora G e LR(k), k 0 se le tre condizioni seguenti: 1.S * rmG Aw rmG w 2.S * rmG Bx rmG y 3.FIRST k (w)=FIRST k ( ) Implicano che Ay= Bx ( cioè = A=B x=y)

41 Tavole di Parsing LR(1) esempio Tavole di Parsing LR(1) esempio Stato c d $ S C s3s41 2 A s6s75 8 r3 r1 s3 s4 s6s79 r3 r2 G2: (0)S S;(1)S CC;(2)C cC;(3)C d;

42 Tavole di Parsing LR(1) esempio Tavole di Parsing LR(1) esempio Stato c d $ S C s3s41 2 A s6s75 8 r3 r1 s3 s4 s6s79 r3 r2 G2: (0)S S;(1)S CC;(2)C cC;(3)C d; goto (I 0,c)=I 3 goto(I 0,d)=I 4 goto(I 0,S)=I 1 goto(I 0,C)=I 2 goto(I 2,c)=I 6 goto(I 2,d)=I 7 goto(I 2,C)=I 5 goto(I 3,c)=I 3 goto(I 3,d)=I 4 goto(I 3,C)=I 8 goto(I 6,c)=I 6 goto(I 6,d)=I 7 goto(I 6,C)=I 9

43 Tavole di Parsing LR(0) esempio Tavole di Parsing LR(0) esempio Stato act c d $ S C s 4 1 A s6s75 8 r3 r1 s3 s4 s6s79 r3 r2 G2: (0)S S;(1)S CC;(2)C cC;(3)C d; G2: (0)S S;(1)S CC;(2)C cC;(3)C d; goto (I 0,c)=I 3 goto(I 0,d)=I 4 goto(I 0,S)=I 1 goto(I 0,C)=I 2 goto(I 2,c)=I 6 goto(I 2,d)=I 7 goto(I 2,C)=I 5 goto(I 3,c)=I 3 goto(I 3,d)=I 4 goto(I 3,C)=I 8 goto(I 6,c)=I 6 goto(I 6,d)=I 7 goto(I 6,C)=I 9 32

44 Costruzione delle Tavole LA LR(1) Definiamo core(I)={[A. ] | [A.,u] I} Poichè il core di goto(I,X) dipende dal core di I, ne segue che goto( H I i )= H goto(I i ). Quindi i goto di stati immersi sono a loro volta tra loro immergibili. Le tavole ottenute in questo modo, come ottimizzazione della collezione di stati canonici LR(1) sono tuttavia anche ottenibili a partire dalla collezione canonica di stati LR(0). Questo ne fa un algoritmo molto efficiente.

45 Costruzione delle Tavole LA LR(1) Se nella collezione canonica di insiemi di item LR(1) di G 2 uniamo gli stati I 4 e I 7 in un nuovo stato I 47 con 3 item [C d.,c/d/$] allora il parser ha azione reduce_C d su ogni input, anche su quelli su cui loriginale dichiara error (es. ccd cdcdc). La primo token in input errato. Lottimizzazione consiste nell immergere gli stati con lo stesso core, cioè stati che differiscono solo per il token di lookahead (idem per I 3 -I 6 e I 8 -I 9 ).

46 Corrispondenti Item LALR(1) Corrispondenti Item LALR(1)

47 Corrispondenti Item LALR(1) Corrispondenti Item LALR(1)

48 Corrispondenti Item LR(0) Corrispondenti Item LR(0)

49 Insieme LALR(1) e LR(0) Insieme LALR(1) e LR(0)

50 Tavole di Parsing LR(1) esempio Tavole di Parsing LR(1) esempio Stato c d $ S C s3s41 2 A s6s75 8 r3 r1 s3 s4 s6s79 r3 r2 G2: (0)S S;(1)S CC;(2)C cC;(3)C d; goto (I 0,c)=I 3 goto(I 0,d)=I 4 goto(I 0,S)=I 1 goto(I 0,C)=I 2 goto(I 2,c)=I 6 goto(I 2,d)=I 7 goto(I 2,C)=I 5 goto(I 3,c)=I 3 goto(I 3,d)=I 4 goto(I 3,C)=I 8 goto(I 6,c)=I 6 goto(I 6,d)=I 7 goto(I 6,C)=I 9

51 Grammatiche LL ed LR Teorema (decidibilita): date due grammatiche LL(k), G 1 e G 2, il problema L(G 1 )=L(G 2 ) e decidibile. La seguente grammatica: S A|B, A aAb|0, B aBbb|1 e LR(0) ma non LL(k) per ogni k 0. Teorema. Ogni grammatica LL(k) e anche LR(k), k 0. Definizione. Um linguaggio CFG e deterministico se esite un DPDA (Deterministic PushDown Automaton) che lo accetta.

52 Linguaggi LL ed LR Definizione. Un linguaggio L tale che nessuna w L e della forma w=xy con x L e detto avere la proprieta del prefisso (prefix-free). Teorema. L linguaggio deterministico: G LR(1): L=L(G). L linguaggio deterministico: G LR(1): L=L(G). Se inoltre L e prefix-free allora: G LR(0): L=L(G). Altrimenti detto L T* CFG deterministico e G LR(0): L Altrimenti detto L T* CFG deterministico e T G LR(0): L =L(G).

53 Linguaggi LL ed LR cont. Teorema. Dato un linguaggio L per cui esiste una grammatica G, LL(k) e priva di -produzioni, tale che L=L(G) e k>1, allora esiste una grammatica G, LL(k-1) tale che L=L(G). Teorema. Per ogni k 0 la classe dei linguaggi LL(k) e propriamente inclusa in quella dei linguaggi LL(k+1).

54 Rapporto tra grammatiche LL, LR,... Rapporto tra grammatiche LL, LR,...

55 Rapporto tra linguaggi LL, LR,... Rapporto tra linguaggi LL, LR,...

56 FINE LR FINE LR Le slide che seguono devono essere ignorate. Sono solo un pattern per future modifiche

57 Corrispondenti Item LALR(1) Corrispondenti Item LALR(1)

58 Seminari su grammatiche e linguaggi LL, LR,... Seminari su grammatiche e linguaggi LL, LR,... 1.Linguaggi e grammatiche LL, LR e deterministici. 2.Teoremi di inclusione tra tali linguaggi, eventuali controesempi 3.PDA non deterministici e non: linguaggi relativi.

59 Seminari su rapporti tra XML e scanner, parser, grammatiche e linguaggi Seminari su rapporti tra XML e scanner, parser, grammatiche e linguaggi 1.Confronto tra XML BNF EBNF come strumenti per descrivere linguaggi e grammatiche. Aspetti teorici associati per la costruzione automatica di parser. 2.Uso di XML e strumenti associati come standard di scambio dati tra parser scanner compiler ecc. 3.Problemi di parsing di documenti XML e strumenti associati applicazioni e teoria.

60 Tavole di Parsing LR(1) esempio Tavole di Parsing LR(1) esempio Stato id + * ( ) $ E T F id + * ( ) $

61 Tavole di Parsing LR(1): esempio Tavole di Parsing LR(1): esempio stato 0 1 2