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.

Slides:



Advertisements
Presentazioni simili
LR Parser II Parte Giuseppe Morelli.
Advertisements

Automi finiti deterministici (DFA) (1)
Automi temporizzati.
Modello IS-LM.
Il problema del minimo albero ricoprente in un grafo non cooperativo
Analizzatori Lessicali con JLex
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
Traduttore diretto dalla sintassi (seconda parte)
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
Traduzione guidata dalla sintassi
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.
Precorsi di Informatica Dott. Antonio Cisternino Settembre 2003
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Momento angolare “Momento angolare” ( o “momento della quantità di moto”) di un punto materiale P avente quantità di moto p = mv rispetto ad un “polo”
Moto di un “punto materiale” P nello spazio tridimensionale:
Equazioni differenziali omogenee e non omogenee :
Moto armonico smorzato
Algoritmi e Strutture Dati
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
1 L 19 Pianificare la gestione: la politica Andrea Castelletti.
Macchine non completamente specificate
Analisi e Sintesi di circuiti sequenziali
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del minimo albero ricoprente in un grafo con archi privati
Algoritmi e Strutture Dati
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Modelli simulativi per le Scienze Cognitive Paolo Bouquet (Università di Trento) Marco Casarotti (Università di Padova)
Modelli simulativi per le Scienze Cognitive
Analisi e Sintesi di circuiti sequenziali. Definizione Una macchina sequenziale é un sistema nel quale, detto I(t) l'insieme degli ingressi in t, O(t)
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 PARTE 4 Implementazione di Linguaggi 2 PARTE 4 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Risoluzione di problemi e ricerca.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
Algoritmi e Strutture Dati
Grammatiche, Linguaggio e Automi R. Basili TAL - a.a
ESTENSIONI SEMPLICI e TEOREMA DELL’ELEMENTO PRIMITIVO
Università degli studi di Lecce
Automi temporizzati cooperanti (TCA) . Automi cooperanti (CA)  Un CA consiste di n automi finiti, ciascuno con insieme di stati, stato iniziale e tabella.
Informatica 3 V anno.
Un problema Progettare un programma per calcolare se un qualsiasi altro programma contiene un ciclo infinito –Ciclo infinito: per esempio, eseguire le.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Automi a pila (1) Un automa a pila (PDA) è M = (Q, S, G, d, q0, Z0, F) dove: Q insieme finito di stati S alfabeto finito di input 3. G alfabeto di pila.
Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 3 - Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
NP completezza. Problemi decisionali I problemi decisionali sono una classe di problemi dove per ogni possibile ingresso un algoritmo deve scegliere una.
1/20 NP completezza. 2/20 Problemi astratti Un problema è un’entità astratta (es. il TSP). Una istanza del problema è un suo caso particolare in cui vengono.
Grammatiche non contestuali (1)
Reti Sequenziali Corso di Architetture degli Elaboratori Reti Sequenziali.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Macchine di Turing (1) Il modello di base ha un controllo finito, un nastro di input diviso in celle e una testa di lettura che esamina una cella alla.
1 Implementazione di Linguaggi 2 PARTE 3 Implementazione di Linguaggi 2 PARTE 3 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
Espressioni regolari (1)
Automi temporizzati.
Le funzioni.
Indecidibilità Limiti della calcolabilità Pigreco-day 14 marzo 2014 Matematica e Incertezza Prof. Antonio Iarlori Mathesis Lanciano-Ortona.
Linguaggi, stringhe e alfabeti. Linguaggi e grammatiche Un linguaggio è un sistema di comunicazione tra persone che permette di trasmettere informazioni.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
L’input che abbiamo.
Automi e stringhe Lezione n°24 Prof.ssa Rossella Petreschi
Transcript della presentazione:

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 di input (letf-to-right) R indica che per la costruzione dellalbero di parse si usa una derivazione destra inversa K indica il numero di simboli di lookahead utilizzati per le decidere come fare evolvere il procedimento di parsing. Per k<=1 indichiamo tali parser con LR I parser LR sono table-driven

Vantaggi e svantaggi dei parser LR(k) Generalità: praticamente tutti i linguaggi di programmazione possono essere riconosciuti con parser LR. Efficienza: è il metodo shift-reduce bottom-up senza backtracking più generale ed efficiente Potenza: la classe LR(k) estende la classe LL(k) Capacità di rilevare errori: un errore viene riconosciuto immediatamente al suo verificarsi. Svantaggi: Complessità: necessitano appositi tools per la generazione automatica

Un parser Bottom-up, shift-reduce, deve continuamente scegliere se effettuare una operazione di SHIFT o una di REDUCE: Es: Shift * oppure Reduce T con E -> T ????

Stati ed items La scelta è fatta mantenendo ed utilizzando gli stati, che permettono di tenere traccia circa la posizione della situazione di parse. Gli stati sono insiemi di items Item (item LR(0))di una grammatica G è una produzione di G con un punto in una posizione del corpo della stessa. Es. A ->XYZ Mentre A -> ε ha item A->.

Canonical LR(0) collection Un item indica lo stato di avanzamento nellutilizzo di una produzione in un qualsiasi passo del processo di parsing. Es. A -> X.YZ indica che è stato già provato che una parte della stringa di input è derivabile da X e si spera il resto sia derivabile da YZ. Mentre A->XYZ. indica che è giunto il momento di ridurre la stringa derivata da XYZ con A. Una collezione di insiemi di item (stati) (LR(0) Canonical collection) fornisce le basi per la costruzione di un automa a stati finiti deterministico (Automa LR(0)) usato per le decisioni del parser. Ogni stato dellautoma è un insieme di items.

Grammatica Aumentata Per la costruzione della collezione LR(0) canonica di una data grammatica si definisce una grammatica aumentata (argumented grammar) e due funzioni CLOSURE e GOTO. Se G è una grammatica la grammatica aumentata G è una grammatica con: –Tutte le produzioni di G –La nuova produzione S -> S con (S simbolo iniziale di G) –S simbolo iniziale (G) Una stringa è accettata se si applica la produzione S -> S

CLOSURE (chiusura di insiemi di Item) Se I è un insieme di Item per la grammatica G allora CLOSURE(I) è costruito seguendo 2 regole: 1.In CLOSURE (I) vengono aggiunti tutti gli Item già presenti in I 2.Se A -> α.Bβ è in CLOSURE(I) e B -> γ è una produzione allora si aggiunge a CLOSURE (I) anche litem B ->.γ ( se non cè ancora). Tale regola si applica finchè si possono aggiungere elementi.

Esempio Supponiamo sia I ={[E->.E]} un insieme di items della grammatica aumentata seguente CLOSURE(I) ={ [E->.E], [E->.E+T], [E->.T], [T->.T*F],[T->.F], [F->.(E)], [F->.id] } F

Algoritmo

GOTO La funzione GOTO permette di definire le transizioni nellautoma LR(0) canonico di una grammatica; GOTO(I,X) con I insieme di items, X un simbolo della grammatica è definito come: GOTO(I,X) = CLOSURE {A -> αX.β : A -> α.Xβ Є I } Esempio: –Se I = E ->.E allora GOTO(I, E) = {[E->E.], E->E. β }

Calcolo della collezione canonica LR(0)

SLR Concetto chiave la costruzione dell LR(0) automa. Gli stati dellautoma sono gli insiemi di Item della collezione canonica LR(0) e le transizioni sono determinate dalla funzione GOTO Lo stato iniziale coincide con CLOSURE({[S->.S]}) La scelta di SHIFT o REDUCE è fatta come segue: –Se la stringa γ porta lautoma LR(0) dallo stato 0 allo stato j; se lo stato j ha una transizione etichettata con il successivo simbolo di input a, allora si sceglierà di shiftare a, altrimenti si riduce con la produzione indicata allo stato j.

F

Classificazione di item Kernel items: –S->.S –A->α.Bβ con α != ε Non Kernel items: –A->.β con β != S

Algoritmo di Parsing

Alcune note Come mostra la figura un parser LR consiste di un input, un output, un programma di controllo, uno stack ed infine una tabella di parsing che ha due parti (ACTION e GOTO) Il programma di controllo è lo stesso per tutti i parser LR La differenza tra parser LR è determinata dalla tabella di parsing

Lo stack contiene una sequenza di stati che nel caso di SLR parser corrispondono a quelli dellautoma LR(0). Per costruzione ogni stato coincide con un insieme di items ovvero Ij = GOTO(Ii,X) rappresenta una transizione dallo stato i allo stato j. Ad ogni stato eccetto che a quello iniziale è possibile associare un solo simbolo della grammatica

Struttura della tabella di parsing LR Tale tabella consiste di: –ACTION: Una funzione per le azioni del parser che prende come argomenti uno stato i ed un simbolo terminale a e restituisce ACTION[i,a] come segue: = Shift j (con j uno stato): in effetti è il simbolo che deve essere shiftato ma come visto in precedenza cè una corrispondenza tra simbolo e stato. = Reduce A->β: viene sostituito β (top dello stack) con la testa della produzione A = Accept: il processo di parsing finisce accettando linput = Error: linput non è riconosciuto ed il parser genera errore. –GOTO:Viene estesa agli stati i e j la funzione GOTO[Ii, A] = Ij applicata e definita per gli insiemi di Item

Input: stringa w e tabella di Parsing LR per G Output: riduzione al simbolo iniziale a partire da w se w appartiene a L(G) altrimenti errore

Definizione dellinsieme FOLLOW Dato un simbolo non terminale A si definisce FOLLOW(A) linsieme di simboli terminali che appaiono immediatamente alla destra di A in una forma proposizionale. Ovvero linsieme di simboli terminali a per i quali esiste una derivazione della forma S =>αAaβ per qualche α e β. Il calcolo di FOLLOW avviene: –Si posizione $ nel FOLLOW(S) S= simbolo iniziale –Se esiste una produzione del tipo A->αBβ allora gli elementi di FIRST(β) si aggiungono in FOLLOW(B) escludendo ε –Se esiste una produzione A->αB o una produzione A->αBβ con ε Є FIRST(β) allora FOLLOW(B) conterrà tutto FOLLOW(A).

Costruzione della tabella SLR Data G si costruisce la grammatica aumentata G quindi: 1.Si costruisce la collezione canonica LR(0) (insiemi di Items) c = {I 0, I 1, ….,I n } 2.Lo stato i è costruito da I i. Lazione per lo stato i è determinata come segue: a)Se [A-> α.aβ] è in I i e GOTO(I i,a) = I j allora ACTION[i,a] = shift j b)Se [A-> α.] è in I i allora ACTION[i,a] = reduce A-> α per ogni a Є FOLLOW(A) c)Se [S -> S.] è in I i allora ACTION[i, $] = accept 3.GOTO deve essere costruita per tutti i non termiali Secondo la regola se GOTO(Ii,a)=Ij allora GOTO(i,a) = j 4.Errore se vi sono entry non definit da 2 e 3 5.Lo stato iniziale è quello ottenuto dallinsieme di Item contenente [S->S]

Esempio Consideriamo la grammatica aumentata S=I I->S S->B S->Caa B->bC C->bbCa C->e Per costruire la tabella SLR Calcoliamo FOLLOW dei Non terminali e linsieme di items LR(0) Follow(I): $ Follow(S): $ Follow(B): $ Follow(C): a$

I0 I->°S S->°B S->°Caa B->°bC C->°bbCa C->e° I1 I->S° I2 S->B° I3 S->C°aa I4 B->b°C C->b°bCa C->°bbCa C->e° I5 S->Ca°a I6 B->bC° I7 C->bb°Ca C->b°bCa C->°bbCa C->e° I8 S->Caa° I10 C->bbCa° I9 C->bbC°a S B C b a C b a C a

Stringa bbba Goto (4,C)