La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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.

Presentazioni simili


Presentazione sul tema: "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."— Transcript della presentazione:

1 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   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 , ,  … denotano stringhe di terminali e non terminali

2 Grammatiche non contestuali (2) Data G = (V,T, P,S) la relazione di derivazione  G * è cosí definita: Se ,    (V  T)* e A    P allora  A  G . Se  1,  2, …,  m in (V  T)* e  1  G  2  G …  G  m scriviamo  1  G m  m o anche  1  G *  m. 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). G 1 è equivalente a G 2 se L(G 1 ) = L(G 2 ). Esempio. Sia G = ({S}, {a,b), {S  aSb, S  ab}, S). L(G) + { a n b n | n>=1}.

3 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 X 1, …, X k da sinistra a destra allora A  X 1 … X k è 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.

4 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 E E () id + E

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

6 Grammatiche non contestuali (6) (b) Supponiamo di avere una derivazione A  * . Dobbiamo mostrare che c’è un A-albero con frontiera . Se A  *  è in un solo passo allora A   è una produzione dell’albero e l’albero è Se A  *  in k passi allora sia   X 1 … X k il primo Passo. Per ipotesi induttiva esisteranno derivazioni in meno di k passi e X i 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). X2X2 X1X1 A XkXk X1X1 XkXk A t1t1 t2t2 tktk … … …

7 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 + EE  (E) E  E  EE  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 EE EE EE E   + id

8 Grammatiche non contestuali (8) Un linguaggio non contestuale è inerentemente ambiguo se non ha una grammatica non ambigua. Esempio. Il linguaggio L= {a i b j c k | 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 + TT  F E  T F  (E) T  T  FF  id

9 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  non è in L non ci sono produzioni della forma A  . 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

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

11 Grammatiche non contestuali (11) Teorema ( Forma Normale di Chomsky). Qualunque linguaggio non contestuale senza  è 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  aBBB  bS B  b Una prima trasformazione dà S  C b A S  C a AC a  aA  a A  C b AA A  C a S C b  b B  b B  C a BBB  C b S Una seconda trasformazione dà S  C b A S  C a BC a  a A  C b D 1 A  C a S A  a D 1  AA B  C a D 2 B  C b S B  bD 2  BB

12 Grammatiche non contestuali (12) Teorema ( Forma Normale di Greibach). Qualunque linguaggio non contestuale senza  è generato da una grammatica con sole produzioni della forma A  a  dove A è un non terminale, a è un terminale e  è una stringa (eventualmente vuota) di non terminali. Prova. Assumiamo G=(V,T, P,S) con V = {A 1, …, A m } in CNF. Si modificano le produzioni in modo che se A i  A j  allora j > i. Partendo da A 1 assumiamo che per 1 i. Modifichiamo le A k produzioni. Sostituendo al posto di ciascun lato destro di ciascuna A k produzione al più k-1 volte otteniamo A k  A l  con l >= k. Per le produzioni con l = k eliminiamo la ricorsione sinistra. Sia A  A  l |  A  2 | … |  A  r |  1 | … |  s. Si sostituisce con A   i B   i A   i B con 1<= i <= s B   i B con 1<= i <= r

13 Grammatiche non contestuali (13) Esempio Sia G=({A 1, A 2, A 3 }, {a,b}, P, A 1 ) con P A l  A 2 A 3 A 2  A 3 A 1 | b A 3  A 1 A 2 | a A 3  A 1 A 2 diventa A 3  A 2 A 3 A 2 diventa A 3  A 3 A 1 A 3 A 2 | bA 3 A 2 | a A 3  A 3 A 1 A 3 A 2 diventa A 3  bA 3 A 2 B 3 | aB 3 B 3  A 1 A 3 A 2 | A 1 A 3 A 2 B 3 Quindi abbiamo infine le produzioni A l  A 2 A 3 A 2  A 3 A 1 | b A 3  bA 3 A 2 B 3 | aB 3 | bA 3 A 2 | a B 3  A 1 A 3 A 2 | A 1 A 3 A 2 B 3 Infine sostituendo A 3 nella produzione A 2  A 3 A 1, poi usando le produzioni per A 2 per sostituire nella produzione per A l e quindi sostituendo il lato destro di A l nelle produzioni per B 3 otteniamo la forma voluta.


Scaricare ppt "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."

Presentazioni simili


Annunci Google