1 / 13

Grammatiche non contestuali (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.

nanda
Download Presentation

Grammatiche non contestuali (1)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 ÞGa2 ÞG … ÞGam scriviamo a1 ÞGmam 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. Teorema. Sia G = (V,T, P, S) non contestuale. Allora SÞ*ase e solo se c’è un albero di derivazione di G con frontiera a. Prova. Proviamo che per ogni A  V AÞ*ase 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 acon 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. Grammatiche non contestuali (5) A … Xk X1 X2

  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). Grammatiche non contestuali (6) A … X1 Xk A … X1 X2 Xk … t1 t2 tk

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

  8. Un linguaggio non contestuale è inerentementeambiguo 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 (8)

  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 (9)

  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 (10)

  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 (11)

  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 Ajg allora j > i. Partendo da A1 assumiamo che per 1<= i <k sia Ai Ajg inP 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 Alg 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 (12)

  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 Al A2A3 A2 A3A1 | b A3 bA3A2B3 | aB3 | bA3A2 | a B3 A1A3A2 |A1A3A2B3 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. Grammatiche non contestuali (13)

More Related