La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Grammatiche non contestuali (1)

Presentazioni simili


Presentazione sul tema: "Grammatiche non contestuali (1)"— 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  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

2 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}.

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 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.

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

5 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

6 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

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 + 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

8 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

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 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

10 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

11 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

12 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

13 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.


Scaricare ppt "Grammatiche non contestuali (1)"

Presentazioni simili


Annunci Google