Grammatiche non contestuali (1)

Slides:



Advertisements
Presentazioni simili
Automi finiti deterministici (DFA) (1)
Advertisements

Alberi binari Definizione Sottoalberi Padre, figli
I.T.C.G. Mosè Bianchi Mauro Bosisio Classe A2 Geometri Anno scolastico 2000\2001.
Alfabeti, Stringhe e Linguaggi
Estendere i linguaggi: i tipi di dato astratti
Sintassi (prima 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.
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
Costruzione delle tabelle di parsing LR canoniche
Traduzione guidata dalla sintassi
Capitolo 8 Sistemi lineari.
Sistemi di Lindenmayer
1 Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone
1 ESEMPIO F ~ F’’ Definizione
Il linguaggio della geometria
RB-alberi (Red-Black trees)
Il ragionamento classico
Esempio : 2x+5=11-x è un’uguaglianza vera se x è uguale a 2.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 15/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Liceo Scientifico "A.Volta" Reggio Calabria
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati (Mod. B)
Il secondo criterio di congruenza dei triangoli
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati 20 aprile 2001
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Alfabeti, Stringhe e Linguaggi Def: un insieme è una collezione non ordinata di oggetti o elementi Gli insiemi sono scritti tra { }. Gli elementi sono.
-calcolo Vogliamo studiare le problematiche relative al meccanismo di chiamata di funzione (eg differenze fra binding statico e dinamico) in isolamento.
Implementazione di Linguaggi 2
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,
geometria euclidea Realizzato dall’alunna: PARIMBELLI ILARIA
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
Logica Matematica Seconda lezione.
Grammatiche, Linguaggio e Automi R. Basili TAL - a.a
EQUAZIONI DI PRIMO GRADO
ESTENSIONI SEMPLICI e TEOREMA DELL’ELEMENTO PRIMITIVO
Che cosa è un insieme convesso?
La rappresentazione delle informazioni in un computer Seconda parte.
Calcolo letterale.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Esecuzione di un Programma [P] Una computazione corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue.
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.
Claudio Arbib Università dell’Aquila Ricerca Operativa Metodo del simplesso per problemi di distribuzione single-commodity.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
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.
Espressioni regolari (1)
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Automi temporizzati.
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.
Il problema della ricerca Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione.
Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli
La circonferenza e l’ellisse La sezione conica è l’intersezione di un piano con un cono. La sezione cambia a seconda dell’inclinazione del piano. Se il.
TEORIA ELEMENTARE DEGLI INSIEMI
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.
Linguaggi, stringhe e alfabeti. Linguaggi e grammatiche Un linguaggio è un sistema di comunicazione tra persone che permette di trasmettere informazioni.
Teoremi sulle funzioni derivabili 1. Definizione di massimo globale x0x0 f(x 0 ) Si dice massimo assoluto o globale di una funzione il più grande dei.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Le frazioni A partire da N vogliamo costruire un nuovo insieme numerico nel quale sia sempre possibile eseguire la divisione. Per fare ciò dobbiamo introdurre.
Alberi binari Definizione Sottoalberi Padre, figli
Transcript della presentazione:

Grammatiche non contestuali (1) Esempio. E  E + E E  E * E E  (E) E  id Applicandole sostituzioni a partire da E si ottengono tutte le espressioni aritmetiche con + e * e operandi rappresentati da id. Una grammatica non contestuale (context-free) è G = (V,T, P,S) con V insieme di non terminali, T insieme di terminali (V  T = Ø), S simbolo di inizio o assioma, P insieme di produzioni A  a con A non terminale e stringa in (V  T)*. Convenzioni. A, B, … denotano non terminali a, b, … e stringhe minuscole in grassetto denotano terminali X, Y, … denotano terminali o non terminali x, y, … denotano stringhe di terminali a , b , g … denotano stringhe di terminali e non terminali

Grammatiche non contestuali (2) Data G = (V,T, P,S) la relazione di derivazione ÞG* è cosí definita: Se a,g  (V  T)* e A  b  P allora a A g ÞG abg . Se a1, a2, …, am in (V  T)* e a1 ÞG a2 ÞG … ÞG am scriviamo a1 ÞGm am o anche a1 ÞG* am . Il linguaggio generato da G è L = {w | w  T* e S ÞG* w}. L è un linguaggio non contestuale (CFL) se è L(G) per una grammatica non contestuale (CFG). G1 è equivalente a G2 se L(G1) = L(G2). Esempio. Sia G = ({S}, {a,b), {S  aSb, S  ab}, S). L(G) + { anbn | n>=1}.

Grammatiche non contestuali (3) Un albero di derivazione è un albero con vertici interni etichettati con non terminali, foglie etichettate con terminali e tale che se un vertice interno è etichettato con A e i suoi figli sono etichettati con X1, …, Xk da sinistra a destra allora A  X1 … Xk è una produzione della grammatica. Le derivazioni possono essere rappresentate con alberi di derivazione. Un sottoalbero di un albero di derivazione è un vertice dell’albero con tutti i suoi discendenti, gli archi che li connettono e le etichette. Se la radice è etichettata con A lo chiamiamo A-albero.

Grammatiche non contestuali (4) Esempio.G=({E},{+,*,(,),id},{EE+E, EE*E, E(E), E id}, E) Una derivazione è E Þ E*E Þ (E)*E Þ (E)*id Þ (E+E)*id Þ (E+id)*id Þ (id+id)*id. L’albero corrispondente è E E E * ( ) id E E E + id id

Grammatiche non contestuali (5) Teorema. Sia G = (V,T, P, S) non contestuale. Allora S Þ* a se e solo se c’è un albero di derivazione di G con frontiera a. Prova. Proviamo che per ogni A  V A Þ* a se e solo c’è un A-albero con frontiera a. (a) Assumiamo a frontiera di un A-albero e proviamo A Þ* a per induzione sul numero di vertici interni. Se c’è un solo vertice allora l’albero è Allora A  a con a = X1 … Xk è una produzione e A Þ* a è una derivazione in un passo. Supponiamo che la tesi valga fino a k-1 vertici interni e che a sia frontiera di un A-albero con k vertici interni (k>1). Prendiamo i figli di A e siano X1 , … , Xk le etichette da sinistra. Allora A  X1 … Xk è una produzione e almeno un è un non terminale. Quindi ci deve essere Xi  ai. Concludendo, A Þ X1 … Xk Þ* a1 X2 … Xk Þ* … Þ* a1 a2 … ak = a. A … X1 X2 Xk

Grammatiche non contestuali (6) (b) Supponiamo di avere una derivazione A Þ* a. Dobbiamo mostrare che c’è un A-albero con frontiera a. Se A Þ* a è in un solo passo allora A  a è una produzione dell’albero e l’albero è Se A Þ* a in k passi allora sia a Þ X1 … Xk il primo Passo. Per ipotesi induttiva esisteranno derivazioni in meno di k passi e Xi alberi tali che l’albero cercato è Se w  L(G) per una CFG G allora w ha almeno un albero di derivazione e corrispondentemente a un albero di derivazione ha una derivazione da più a sinistra (leftmost) e un’unica derivazione da più a destra (rightmost). A … X1 Xk A … X1 X2 Xk … t1 t2 tk

Grammatiche non contestuali (7) Una grammatica non contestuale è ambigua se una parola ha più di un albero di derivazione o, equivalentemente, più di una derivazione da più a sinistra o più di una derivazione da più a destra. Esempio. Sia G = ({E},{+, *, (,), id}, P, E) dove P è E  E + E E  (E) E  E * E E  id La parola id+id*id ha due derivazioni da più a sinistra E Þ E+E Þ id+E Þ id+E*E Þ id+id*E Þ id+id*id E Þ E*E Þ E+E*E Þ id+E*E Þ id+id*E Þ id+id*id e corrispondentemente due alberi di derivazione E E E E E + E * E E E E + id id * id id id id

Grammatiche non contestuali (8) Un linguaggio non contestuale è inerentemente ambiguo se non ha una grammatica non ambigua. Esempio. Il linguaggio L= {ai bjck | i=j oppure j=k, i,j,k >= 1} Il linguaggio delle espressioni aritmetiche non è inerentemente ambiguo perché ha una grammatica non ambigua G = ({E, T, F},{+, *, (,), id}, P, E) dove P è E  E + T T  F E  T F  (E) T  T * F F  id

Grammatiche non contestuali (9) Teorema. Se L è un linguaggio non contestuale può esssere generato da una grammatica non contestuale con le seguenti proprietà: 1. Ogni non terminale e ogni terminale di G appaiono nella derivazione di qualche parola di L. 2. Non ci sono produzioni A  B con A, B non terminali. Inoltre se e non è in L non ci sono produzioni della forma A  e . Prova. 1. Si eliminano prima i simboli che non portano a nessuna stringa terminale e poi i simboli che non compaiono in nessuna forma sentenziale derivata dall’assioma. Esempio. Prendiamo la grammatica S  AB S  a A  a Primo passo. Si ottiene S  a A  a Secondo passo. Si ottiene S  a Nota che facendo i passi in ordine inverso si avrebbe S  a A  a

Grammatiche non contestuali (10) Se e non è in L, L può essere generato da una grammatica senza produzioni della forma A  e. Esempio. Prendiamo la grammatica S  ABc A  a B  b A  e B  e Una grammatica equivalente senza e-produzioni è la seguente: S  Abc S  c S  Ac A  a S  Bc B  b

Grammatiche non contestuali (11) Teorema (Forma Normale di Chomsky). Qualunque linguaggio non contestuale senza e è generato da una grammatica con sole produzioni della forma A  BC A  a Esempio. Prendiamo la grammatica G=({S,A,B},{a,b},P,S) con P S  bA S  aB A  bAA A  aS A  a B  aBB B  bS B  b Una prima trasformazione dà S  CbA S  CaA Ca  a A  a A  CbAA A  CaS Cb  b B  b B  CaBB B  CbS Una seconda trasformazione dà S  CbA S  CaB Ca  a A  CbD1 A  CaS A  a D1  AA B  CaD2 B  CbS B  b D2  BB

Grammatiche non contestuali (12) Teorema (Forma Normale di Greibach). Qualunque linguaggio non contestuale senza e è generato da una grammatica con sole produzioni della forma A  aa dove A è un non terminale, a è un terminale e a è una stringa (eventualmente vuota) di non terminali. Prova. Assumiamo G=(V,T, P,S) con V = {A1, …, Am} in CNF. Si modificano le produzioni in modo che se Ai  Aj g allora j > i. Partendo da A1 assumiamo che per 1<= i <k sia Ai  Aj g in P se e solo se j >i. Modifichiamo le Ak produzioni. Sostituendo al posto di ciascun lato destro di ciascuna Ak produzione al più k-1 volte otteniamo Ak  Al g con l >= k. Per le produzioni con l = k eliminiamo la ricorsione sinistra. Sia A  Aal | Aa2 | … | Aar | b1 | … | bs . Si sostituisce con A  bi B  ai A  biB con 1<= i <= s B  ai B con 1<= i <= r

Grammatiche non contestuali (13) Esempio Sia G=({A1, A2, A3 }, {a,b}, P, A1) con P Al  A2A3 A2  A3A1 | b A3  A1A2 | a A3  A1A2 diventa A3  A2A3A2 diventa A3  A3A1A3A2 | bA3A2 | a A3  A3A1 A3A2 diventa A3  bA3A2B3 | aB3 B3  A1A3A2 | A1A3A2B3 Quindi abbiamo infine le produzioni A3  bA3A2B3 | aB3 | bA3A2 | a Infine sostituendo A3 nella produzione A2  A3A1, poi usando le produzioni per A2 per sostituire nella produzione per Al e quindi sostituendo il lato destro di Al nelle produzioni per B3 otteniamo la forma voluta.