Parser Bottom UP Giuseppe Morelli. Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di.

Slides:



Advertisements
Presentazioni simili
LR Parser II Parte Giuseppe Morelli.
Advertisements

Introduzione ad XML Mario Arrigoni Neri.
Estendere i linguaggi: i tipi di dato astratti
Procedure e funzioni A. Ferrari.
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
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.
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
O L'HA UCCISO IL MAGGIORDOMO OPPURE L'HA UCCISO LA CAMERIERA. LA CAMERIERA NON L'HA UCCISO. QUINDI: L'HA UCCISO IL MAGGIORDOMO. Tale inferenza è valida.
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
Strutture dati elementari
Alberi binari di ricerca
Il ragionamento classico
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Intelligenza Artificiale 1 Gestione della conoscenza lezione 7 Prof. M.T. PAZIENZA a.a
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Sistemi basati su conoscenza Comunicazione basata sul linguaggio naturale Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Usa la tecnica del.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Ricerca della Legge di Controllo
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Modelli simulativi per le Scienze Cognitive Paolo Bouquet (Università di Trento) Marco Casarotti (Università di Padova)
Modelli simulativi per le Scienze Cognitive
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.
Unità Didattica 2 I Linguaggi di Programmazione
Programmazione logica
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
Antonio Cisternino La Macchina di Turing.
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
Lo sviluppo del software e i linguaggi di programmazione
Introduzione ai linguaggi formali e alle stringhe
Grammatiche, Linguaggio e Automi R. Basili TAL - a.a
….e la risoluzione dei problemi
Scrivere per farsi leggere
Linguaggi e modelli computazionali LS Manni Tiziano
Complessità di un algoritmo
ESTENSIONI SEMPLICI e TEOREMA DELL’ELEMENTO PRIMITIVO
Gli Algoritmi L’algoritmo è un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Intelligenza Artificiale 1 Gestione della conoscenza lezione 19 Prof. M.T. PAZIENZA a.a
DerIntCalculator La calcolatrice per integrali e derivate Progetto di Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da: Gabriella.
Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Grammatiche non contestuali (1)
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.
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
In generale, con il termine di grammatica si intende un formalismo che permette di definire un insieme di stringhe mediante l’imposizione di un particolare.
Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo.
Compilatore Programma sorgente Compilatore Programma ‘oggetto’ Statistiche Informazioni debugger Listing Messaggi errore Cross reference.
Linguaggi e Grammatiche Alfabeto : insieme non vuoto di elementi detti simboli A = { a, b, c } Stringa : sequenza di simboli di un alfabeto ab abc abcab.
Intelligenza artificiale idee fondamentali 1. Funzionalismo e test di Turing.
Linguaggi, stringhe e alfabeti. Linguaggi e grammatiche Un linguaggio è un sistema di comunicazione tra persone che permette di trasmettere informazioni.
SISTEMI DI GESTIONE I sistemi di gestione del magazzino utilizzati sono molteplici, ma tutti possono essere riconducibili alle due categorie fondamentali.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Transcript della presentazione:

Parser Bottom UP Giuseppe Morelli

Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di input partendo dalle foglie (bottom) e risalendo via visa verso la radice (top).

Nel seguito verranno trattati parser bottom up noti come Shift-Reduce parser. Sono in grado di costruire grammatiche chiamate LR. La costruzione di parser LR è alquanto complessa; Esistono tuttavia generatori automatici di parser in grado di costruire parser LR efficienti

Riduzioni Il parsing Bottom Up può essere pensato come il processo di riduzione di un data stringa w al simbolo iniziale della grammatica. Ad ogni passo della riduzione uno specifica sottostringa che coincide con il corpo di una produzione è sostituita da il simbolo non terminale della testa della produzione stessa. Durante il parsing è fattore chiave riuscire a determinare quando effetturare una riduzione e quale produzione applicare affinchè il parsing possa proseguire

Ritornando allesempio: La sequenza di riduzioni applicate può essere codificata attraverso: NOTA: Dopo le prime due riduzioni (F->id; T->F) si potrebbe Ridurre T attraverso E->T oppure id (di destra) attraverso F -> id

Per definizione una riduzione è il passo inverso della procedura di derivazione (attraverso la quale un non terminale era sostituito dal corpo di una produzione, durante la generazione di una stringa). Lo scopo del parsing bottom-up è costruire un darivazione al contrario (in senso inverso). Derivazione Riduzione

Esempio Si consideri la grammatica S -> aABe A -> Abc |b B -> d E linput: abbcde Riduzione: abbcde(A->b A->Abc B->d S->aABe) abbcde, aAbcde, aAde, aABe, S Derivazione S => aABe => aAde => aAbcde => abbcde

Per ottenere una riduzione al simbolo iniziale attraverso linversa di una derivazione è necessario essere in grado di riconoscere gli handles(maniglie) delle varie forme proposizionali. Un handle è una sottostringa che coincide con il corpo di una produzione e la cui riduzione rappresenta un passo lungo il processo di derivazione destra inverso Esempio precedente i simboli sottolineati sono handles

… Data una forma proposizionale destra γ un handle per γ è una produzione A -> β ed una posizione in γ corrispondente ad una occorrenza di β tale che rimpiazzando β con A si ottiene ancora una forma sentenziale destra che precede immediatamente γ in una derivazione destra per γ. o equivalentemente Se S => αAw => αβw allora la produzione A->β nella posizione seguente ad α è un handle di αβw.

NOTE Alla destra dellhandle la stringa w è fatta solo di simboli terminali Se una grammatica è non ambigua ogni forma sentenziale destra avrà solo un handle (ovvero le derivazioni destre sono univocamente determinte) Sebbene formalmente un handle è una produzione spesso ci si riferirà solo al suo body

Esempi. Si consideri la stringa id+id*id e la grammatica: E -> E+E | E*E | (E) | id –id+id*id => E + id * id => E+E*id => E+E*E => E+E => E –id+id*id =>E+id*id =>E+E *id => E*id => E*E => E

Linversa di una derivazione destra può essere ottenuta attraverso un procediemento di potatura degli handle (handle pruning).

Si parte dalla stringa di terminali w da ridurre; se w è una frase della grammatica(sentence: derivazione ovvero forma sentenziale con soli terminali) allora sia w =γ n dove γ n è n-esima forma sentenziale destra di una derivazione destra Per ricostruire la derivazione nellordine inverso: localizzare lhandle β n in γ n e rimpiazzare β n con la testa della produzione A n -> β n per ottenere la forma sentenziale γ n- 1. Si continua trovando β n-1 in γ n-1 …. fino ad arrivare al simbolo iniziale. La sequenza delle produzioni utilizzate (in ordine inverso) rappresenta la derivazione destra per la stringa di input

Shift- Reduce parser Per una corretta potatura dellalbero si devono affrontare e risolvere due problemi: 1.Bisogna essere in grado di localizzare la sottostringa da ridurre 2.Bisogna determinare quale produzione utilizzare nella riduzione Tali problemi possono essere affrontati utilizzando: –Uno stack per contenere i simboli della grammatica ovvero un prefisso della forma sentenziale destra fino ad un handle –Un buffer di input per contenere la porzione di input di cui ancora si deve fare il parsing.

Convenzionalmente il $ indica sia il top dello stack sia la destra della stringa di input Inizialmente stack vuoto e stringa w si indicherà con: Durante il processo di analisi della stringa di input da sinistra a destra, il parser muoverà 0 o più simboli nello stack fino a quando non sarà in grado di ridurre una stringa della grammatica (corpo della produzione) con il top dello stack (sostituisce top con non terminale testa della produzione). La fine senza errori è determinata dalla presenza del simbolo iniziale nello stack, con buffer di input vuoto.

Operazioni di un parser Shift Reduce. Shift: sposta il successivo simbolo di input nello stack Reduce: riduzione dellhandle sullo stack (top) mediante una opportuna produzione. Sostituzione dellhandle con un non terminale Accept: Segnalazione che il parsing si è concluso con successo Error: Segnalare errore di sintatti e richiamare una opportuna procedure di recovery.

Esempio E -> E + E E -> E * E E -> (E) E -> id STACKINPUTAZIONE $ $ id $ E $ E + id $ E + E $ E + E id $ E + E E $ E + E $ E id + id id $ + id id $ id $ $ SHIFT REDUCE E id SHIFT, SHIFT REDUCE E id SHIFT, SHIFT (perché NON REDUCE E E + E) REDUCE E id E E E E E + E ACCEPT

Handle e top dello stack Due passi successivi di una derivazione destra possono essere di due forme differenti: βBy sostiuisce A e B (terminale più a destra) è sostituito da γ Considerando in senso inverso ad un dato istante lo stack sarà si riduce γ con B Shift y, riduce βBy con A….

La seconda forma prevede: A è epanso per primo con y fatto solo di terminali; mentre qualche terminale B sta a sinistra di y con handle γ Considerando in senso inverso ad un dato istante lo stack sarà:---- Si riduce γ con B shiftano x e y; ridurre y con A

Conflitti Un parser shift-reduce può raggiungere una configurazione in cui, pur conoscendo lo stack nella sua interezza ed i simboli di input da trattare, non sa decidere se: –Effettaure una operazione di SHIFT o di REDUCE (conflitto Shift/Reduce) –Scegliere fra più riduzioni possibili quale effettuare (conflitto Reduce/Reduce)

Esempio Quando il parser è nella seguente configurazione: Non è possibile determinare se nello stack cè un handle oppure no quindi se fare un o shift o una riduzione

Esempio Quando il parser è nella seguente configurazione: Non sappiamo decidere quale riduzione fare tra (5) e (7) Se invece di id per array e procedure il lexer restituisce risp. id e procid per i costrutti