Linguaggi Liberi da Contesto Nicola Fanizzi Corso di Linguaggi di Programmazione Dipartimento di Informatica Università degli Studi di Bari 1 maggio 2014 Sommario 1 2 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Ambiguità Proprietà dei Ling. Liberi Principio di sostituzione Pumping Lemma per L2 Esercizi – Pumping Lemma Proprietà di Chiusura Chiusura rispetto all’Unione Chiusura rispetto al Prodotto Chiusura rispetto all’Iterazione Altre Proprietà di Chiusura Esercizi – proprietà di chiusura 3 Configurazioni Istantanee e Transizioni Accettazione di Stringhe e Linguaggi Esempi 4 Forme Normali FN di Chomsky FN NLR FN di Greibach Trasformazioni delle grammatiche libere Teorema delle Forme Normali Predicati Decidibili Automi a Pila N. Fanizzi Linguaggi di prog.+Lab Parsing: Algoritmo CYK Linguaggi Liberi da Contesto 1 maggio 2014 2 / 91 Nozioni Preliminari Sommario 1 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Ambiguità 2 Proprietà dei Ling. Liberi 3 Automi a Pila 4 Forme Normali N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 3 / 91 Nozioni Preliminari Grammatiche e Linguaggi Liberi da Contesto Una grammatica G = (Σ, V, S, P) è una grammatica libera da contesto sse le sue produzioni sono tutte del tipo: A −→ ω con A ∈ V e ω ∈ (V ∪ Σ)∗ Il linguaggio L(G) si dice linguaggio libero da contesto nome: in una derivazione, ogni non terminale può essere sostituito con una parte destra di una sua produzione, indipendentemente dal contesto della forma di frase in cui si trova sostituzione sempre valida appartiene a questa categoria la maggior parte dei linguaggi di programmazione N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 4 / 91 Nozioni Preliminari Osservazioni La classe dei linguaggi liberi è inclusa in quella dei linguaggi contestuali L2 liberi L1 contestuali XXXX Una grammatica libera considera produzioni dove il contesto destro e quello sinistro siano vuoti (= ) Eccezione una grammatica libera ammette ogni tipo di -regola ossia ogni produzione del tipo A −→ con A 6= S vietate dalle grammatiche contestuali N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 5 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Alberi Le derivazioni di una grammatica libera possono essere rappresentate graficamente attraverso alberi Albero: grafo orientato, aciclico, connesso tale che ogni nodo ha al più un arco entrante la lunghezza di un cammino dalla radice ad una foglia è data dal numero di nodi incontrati radice interno interno foglia interno foglia foglia interno l’altezza dell’albero è data dalla lunghezza del cammino più lungo interno la sequenza delle foglie (lette da sinistra verso destra) si definisce frontiera dell’albero foglia foglia frontiera N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 6 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Alberi di Derivazione I ∗ Data G = (Σ, V , S, P) libera e w ∈ Σ∗ tale che S =⇒ w, un albero di derivazione di w, denotato, Tw è così formato: 1 radice ← S 2 nodi interni ← simboli di V 3 foglie ← simboli di Σ ∪ V ∪ {} (o solo Σ se totalmente espanso) 4 se ∃A −→ X1 X2 · · · Xk ∈ P allora un nodo interno A può essere padre dei nodi figli X1 , X2 , . . . , Xk A X1 5 N. Fanizzi X2 A ··· A Xk w si ottiene da Tw leggendo le foglie da sinistra a destra Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 7 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Alberi di Derivazione II Osservazioni Un albero di derivazione non impone alcun criterio di scelta del non terminale da espandere tramite una regola di produzione per ottenere la sequenza corrispondente ad una derivazione data una derivazione esiste uno ed un solo albero che la rappresenta dato un albero di derivazione esistono più derivazioni possibili a seconda dell’ordine scelto per l’applicazione delle produzioni N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 8 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Data G = ({a}, {S, H}, S, P) libera, con Esempio 1 P = {S −→ Ha, 2 3 H −→ HS, H −→ a} S H S H H a a a a La stringa aaaa ∈ L(G) si deriva sia tramite: S =⇒ Ha =⇒ HSa =⇒ aSa =⇒ aHaa =⇒ aaaa 1 2 3 1 3 sia con: S =⇒ Ha =⇒ HSa =⇒ HHaa =⇒ Haaa =⇒ aaaa 1 N. Fanizzi Linguaggi di prog.+Lab 2 1 3 Linguaggi Liberi da Contesto 3 1 maggio 2014 9 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Derivazioni Canoniche I Data una grammatica G = (Σ, V , S, P) si dirà che la derivazione S =⇒ ω1 =⇒ ω2 =⇒ · · · =⇒ ωn = w ∈ Σ∗ dove ωi = αi Aβi e ωi+1 = αi φi βi , con i = 1, . . . , n − 1 è una derivazione canonica sinistra (risp. canonica destra) sse per ogni i = 1, . . . , n − 1 risulta: αi ∈ Σ∗ (risp. βi ∈ Σ∗ ) Talvolta queste derivazioni vengono denotate con =⇒ e =⇒, lm rispettivamente N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto rm 1 maggio 2014 10 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Derivazioni Canoniche II Esempio Si consideri la grammatica con produzioni: S −→ 0B | 1A A −→ 0 | 0S | 1AA P= B −→ 1 | 1S | 0BB Derivazione sinistra di 001101: S =⇒ 0B =⇒ 00BB =⇒ 001SB =⇒ 0011AB =⇒ 00110B =⇒ 001101 Derivazione destra di 001101: S =⇒ 0B =⇒ 00BB =⇒ 00B1 =⇒ 001S1 =⇒ 0011A1 =⇒ 001101 ma anche: S =⇒ 0B =⇒ 00BB =⇒ 00B1S =⇒ 00B10B =⇒ 00B101 =⇒ 001101 N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 11 / 91 Nozioni Preliminari Alberi di Derivazione e Derivazioni Canoniche Derivazioni Canoniche III G = ({a, +, *}, {E, I}, E, P) con P = {E −→ E+E|E *E|I, I −→ a} Derivazione sinistra di a+a: E =⇒ E+E =⇒ I+E =⇒ a+E =⇒ a+I =⇒ a+a Derivazione destra di a+a: E =⇒ E+E =⇒ E+I =⇒ E+a =⇒ I+a =⇒ a+a Derivazione non canonica di a+a: E =⇒ E+E =⇒ E+I =⇒ I+I =⇒ a+I =⇒ a+a N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 12 / 91 Nozioni Preliminari Ambiguità Ambiguità I Una grammatica G libera si dice ambigua sse esiste w ∈ L(G) generabile attraverso almeno due alberi di derivazione differenti ovvero sse w ammette almeno due derivazioni sinistre (o destre) Esempio G = ({a, +, *}, {E, I}, E, P) ambigua con P = {E −→ E+E|E *E|I, I −→ a} Ad es. w = a+a*a ottenibile mediante 2 alberi: E E E E I a N. Fanizzi E E E E E I I I I a a + a Linguaggi di prog.+Lab E * Linguaggi Liberi da Contesto + a * I a 1 maggio 2014 13 / 91 Nozioni Preliminari Ambiguità Ambiguità II Esempio G = (Σ, V, S, P) con Σ = {if, else, (, ), a, b, p, q} V = {S, C} P = { S −→ if C S else S | if C S | a | b, C −→ (p) | (q) } Si consideri la stringa if (p) if (q) a else b S if S C (p) if S C S else S (q) a N. Fanizzi Linguaggi di prog.+Lab if C (p) b Linguaggi Liberi da Contesto else S if C S S b (q) a 1 maggio 2014 14 / 91 Nozioni Preliminari Ambiguità Ambiguità III G0 = (Σ, V ∪ {S1 , S2 }, S, P0 ) non ambigua, si adotta else alla if più vicina: la convenzione di associare ogni S −→ S | S 1 2 S1 −→ if C S1 else S1 | a | b 0 P = S2 −→ if C S | if C S1 else S2 C −→ (p) | (q) S S2 if C S (p) S1 if C (q) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto S1 else S1 a b 1 maggio 2014 15 / 91 Nozioni Preliminari Ambiguità Ambiguità IV Teorema Il problema del riconoscimento dell’ambiguità di un linguaggio libero non è decidibile. In pratica: soluzioni con aggiunta di livelli di precedenza, parentesi e associatività Esempio modificando la precedente grammatica ambigua: G = ({a, +, *, (, )}, {E, I, T, F}, E, P) non ambigua con P = {E −→ T|E+E, T −→ F|T *T, F −→ I|(E), I −→ a} Un linguaggio libero L si dice inerentemente ambiguo sse ogni grammatica che lo genera è ambigua Esempio N. Fanizzi L = {ai bj ck | i, j, k > 0, (i = j) ∨ (j = k)} Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 16 / 91 Proprietà dei Ling. Liberi Sommario 1 Nozioni Preliminari 2 Proprietà dei Ling. Liberi Principio di sostituzione Pumping Lemma per L2 Proprietà di Chiusura 3 Automi a Pila 4 Forme Normali N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 17 / 91 Proprietà dei Ling. Liberi Principio di sostituzione Principio di sostituzione I P = {E → T|E+T, T → F|T *F, F → i|(E)} E E E + T T T F F i i E F * ( T E E + E T ) F F i T T F F i i F * ( ) E T F T * F i F (E ) i T T T + F i i N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 18 / 91 Proprietà dei Ling. Liberi Principio di sostituzione Principio di sostituzione II S A A u N. Fanizzi Linguaggi di prog.+Lab v w Linguaggi Liberi da Contesto x y 1 maggio 2014 19 / 91 Proprietà dei Ling. Liberi Principio di sostituzione Principio di sostituzione III Sottoalberi si possono sostituire con sottoalberi di pari radice Generalizzazione: se si incontra almeno due volte un NT A nell’albero di derivazione di z: il sottoalbero interno con radice A genera w quello esterno genera vwx sostituendo l’albero esterno con quello interno si ottiene un albero valido per uwy invece, sostituendo interno con quello esterno si ottiene un albero per uvvwxxy cioè uv2 wx2 y iterando questa sostituzione possono derivare le stringhe in {uvn wxn y | n ≥ 0} N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 20 / 91 Proprietà dei Ling. Liberi Principio di sostituzione Principio di sostituzione IV S A A u v w x y S S A A A w u v x y A u Linguaggi di prog.+Lab Proposizione N. Fanizzi y Linguaggi Liberi da Contesto v w x 1 maggio 2014 21 / 91 Proprietà dei Ling. Liberi Principio di sostituzione Relazione altezza albero – lunghezza stringa I Il fattore di ramificazione per una grammatica libera G = (Σ, V , S, P) è dato da: max{|ω| ∈ N | A −→ ω ∈ P} Proposizione Data una grammatica libera G = (Σ, V, S, P) con fattore di ramificazione m, sia w ∈ L(G). Se h ∈ N è l’altezza di Tw , allora |w| ≤ mh Dim. Per induzione sull’altezza h dell’albero di Tw : N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 22 / 91 Proprietà dei Ling. Liberi Principio di sostituzione Relazione altezza albero – lunghezza stringa II h = 1 In tal caso, der. diretta con una S −→ ω. Ma |ω| ≤ m = m1 h > 1 Si suppone che la tesi valga per alberi di altezza pari al più a h, si deve dimostrare per Tw di altezza h + 1. Sia S −→ ω, dove α = X1 X2 · · · Xk con Xi ∈ Σ ∪ V in ω, i = 1, . . . , k ≤ m la prod. che determina il livello più alto dell’albero Tw Ogni Xi può essere, a sua volta, radice di Ti di altezza ≤ h. Quindi, per ipotesi di induzione, i Ti generano k stringhe wi tali che |wi | ≤ mh . Pertanto: P Pk h h h h+1 |w| = ki=1 |wi | ≤ i=1 m = k · m ≤ m · m = m N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 23 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Pumping Lemma per Linguaggi Liberi I Teorema (uvwxy) Sia L un linguaggio libero da contesto. Esiste una costante p, dipendente solo da L, tale che ogni z ∈ L con |z| > p può essere scritta come uvwxy in modo che: 1 |vwx| ≤ p 2 al più uno tra v e x è la parola vuota (vx 6= ) 3 ∀i ∈ N : uvi wxi y ∈ L Dim. Sia G una grammatica che genera L Siano m = max{|ω| | A −→ ω ∈ P} e k = |V | Posto p = mk+1 , consideriamo z ∈ L tale che |z| > p N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 24 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Pumping Lemma per Linguaggi Liberi II Per il lemma: |z| > p = mk+1 allora ogni albero di derivazione per z ha un’altezza maggiore di k + 1 k = |V| implica che in un cammino dell’albero ci sia una multipla occorrenza di un NT, sia esso A ∈ V Possiamo identificare 2 occorrenze: 1) la prima compare ad una distanza dalle foglie ≤ k + 1 sia vwx la stringa derivata dal suo sottoalbero 2) dalla seconda occorrenza di A deriva la sottostringa w N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 25 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Pumping Lemma per Linguaggi Liberi III 1 2 3 Dal Lemma risulta: |vwx| ≤ mk+1 = p Per assurdo, se fosse v = = x, la sostituzione del sottoalbero superiore con quello inferiore non provoca nessun cambiamento. Ma, in tal caso, esiste un cammino di lunghezza ≤ k + 1 e quindi si avrebbe un albero per z di altezza ≤ k + 1. Contraddizione. Applicando il principio di sostituzione a z = uvwxy sostituiamo il sottoalbero inferiore con quello superiore, ottenendo: uwy = uv0 wx0 y Con la sostituzione inversa: uv2 wx2 y e ripetendo i − 1 volte: uvi wxi y N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 26 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Pumping Lemma per Linguaggi Liberi IV Osservazioni Dato un linguaggio generato da una grammatica non libera non si può escludere che esista una grammatica libera che lo generi Se un linguaggio infinito non rispetta il Pumping Lemma dei linguaggi liberi non può essere generato da una grammatica libera Quindi questo teorema fornisce una condizione necessaria ma non sufficiente perché un linguaggio sia libero Si utilizza per dimostrare che un linguaggio non è libero N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 27 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Esercizi – Pumping Lemma I Dimostrare che i seguenti linguaggi non sono liberi da contesto: 1 {at | t primo} 2 {an bn cn | n > 0} 3 {an | n ≥ 0} 4 {ai bj | i = 2j , i, j ≥ 0} 5 {an bm | n > 2m , n, m ≥ 0} 6 {ak br | k > 0, r > k 2 } 7 {an bm cp | 1 ≤ n ≤ m ≤ p} 8 {a2 | n ≥ 1} 9 {ai bj ci dj | i, j ≥ 1} 10 {ww | w ∈ {0, 1}+ } 2 N. Fanizzi n Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 28 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Esercizi – Pumping Lemma II Esercizio 1. Dimostrare che L = {at | t primo} ∈ / L2 Dato p del P.L., sia t primo tale che t > p Si può scegliere quindi z = at ∈ L Sia z = uvwxy, con v = ak e x = ah , essendo k + h > 0 (poiché vx 6= ) Si consideri z(t+1) = uv(t+1) wx(t+1) y |z(t+1) | = |z| + |vt | + |xt | = t + (k + h)t = t(1 + k + h) Ma t(1 + k + h) non è primo, quindi z(t+1) 6∈ L Contraddizione. Quindi L ∈ / L2 . N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 29 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Esercizi – Pumping Lemma III Esercizio 2. Dimostrare che L = {an bn cn | n > 0} non è libero Supponiamo che L sia libero. Allora vale il P.L.: per un certo p ∈ N fissato si consideri z = uvwxy = ap bp cp ∈ L: |z| = 3p > p. Per il P.L.: |vwx| ≤ p e zi = uvi wxi y ∈ L, ∀i ∈ N con vx 6= Per costruzione, vwx non può contenere assieme sia a iniziali sia c finali, essendo |vwx| ≤ p Quindi 2 casi: 1. nessuna c: quindi z0 = uv0 wx0 y = uwy 6∈ L avendo perso delle a e b in v e x ma non le c di z 2. nessuna a: analogamente, uwy 6∈ L avendo meno b e c delle a rimaste inalterate (sono p). (nessuna b, ma solo a e c, impossibile) Quindi L non può essere libero N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 30 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Esercizi – Pumping Lemma IV 2 Esercizio 3. Dimostrare che L = {an | n ≥ 0} non è libero Supponiamo che L = {, a, aaaa, a9 , a16 , . . .} sia libero. Valendo il Pumping Lemma per un certo p ∈ N. 2 si considera z = uvwxy = ap ∈ L tale che |z| = p2 > p Anche z2 = uv2 wx2 y ∈ L (per la 3. del Lemma) Ma si osservi la catena di maggiorazioni: |z2 | = |z| + |vx| ≤ p2 + p < p2 + 2p + 1 = (p + 1)2 Quindi: |z2 | < (p + 1)2 . Ma |z2 | = |z| + |vx| > |z| = p2 Perciò p2 < |z2 | < (p + 1)2 lunghezza compresa tra due quadrati consecutivi di n.ri naturali, ciò implica che z2 6∈ L. Assurdo, quindi L non è libero N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 31 / 91 Proprietà dei Ling. Liberi Pumping Lemma per L2 Esercizi – Pumping Lemma V Esercizio 5. Dimostrare che {an bm | n > 2m , n, m ≥ 0} 6∈ L2 Se vale il Pumping Lemma per un certo p ∈ N si considera p z = uvwxy = a(2 +s) bp ∈ L tale che |z| = 2p + s + p > p Caso: v = ah e x = bk . Allora |zi | = |uvi wxi y| = |z| + (i − 1)h + (i − 1)k = 2p + s + p + (i − 1)h + (i − 1)k. Se ∃i : 2p + s + (i − 1)h ≤ p + (i − 1)k allora zi 6∈ L La diseq. si può semplificare 2p + (i − 1)h ≤ (i − 1)k da cui: i(k − h) ≥ 2p − (k − h) ossia i ≥ 2p /(k − h) − 1. Se k > h allora basta considerare i = 2p ≥ 2p /(k − h) − 1 Altri casi, per esercizio. Quindi L non è libero N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 32 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Chiusura rispetto all’unione I Teorema (chiusura unione) La classe dei linguaggi liberi L2 è chiusa rispetto all’unione. Dim. Siano L1 , L2 ∈ L2 , generati, risp., da G1 = (Σ, V1 , S1 , P1 ) e G2 = (Σ, V2 , S2 , P2 ) con V1 ∩ V2 = ∅ Si costruisce G = (Σ, V , S, P) con V = V1 ∪ V2 ∪ {S}, S 6∈ V1 ∪ V2 P = {S −→ S1 |S2 } ∪ P1 ∪ P2 [Nota: questo vale anche per L1 , L2 ∈ Li , i = 0, 1] N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 33 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Chiusura rispetto al prodotto Teorema (chiusura prodotto) La classe dei linguaggi liberi L2 è chiusa rispetto al prodotto Dim. Date G1 = (Σ, V1 , S1 , P1 ) e G2 = (Σ, V2 , S2 , P2 ) libere tali che L(Gi ) = Li , i = 1, 2 si costruisce G = (Σ, V, S, P) con P = {S −→ S1 · S2 } ∪ P1 ∪ P2 Si osservi che questo metodo vale per solo la classe L2 (per L0,1 occorre evitare l’interferenza dei contesti) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 34 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Chiusura rispetto all’iterazione Teorema (chiusura iterazione) La classe dei linguaggi liberi L2 è chiusa rispetto all’iterazione Dim. Per L1 ∈ L2 , considerata G1 = (Σ, V1 , S1 , P1 ), costruiamo G = (Σ, V1 ∪ {S}, S, P) dove: P = {S −→ , S −→ S1 S} ∪ P1 Anche questo metodo vale per solo la classe L2 (per L0,1 occorre evitare l’interferenza dei contesti) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 35 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Altre proprietà di chiusura Proposizione La classe dei linguaggi liberi L2 non è chiusa rispetto al complemento e all’intersezione Dim. si considerino i linguaggi L1 = {an bn ck | n, k > 0} e L2 = {an bk ck | n, k > 0} la cui intersezione è L1 ∩ L2 = {ak bk ck | k > 0} ∈ L1 \ L2 Tuttavia: Teorema Se L è libero e LR è regolare allora L ∩ LR è libero N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 36 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Chiusura rispetto alla sostituzione I Si definisce una sostituzione su Σ come s : Σ → ℘(T ∗ ) tale che: a ∈ Σ 7→ s(a) = La ⊆ T ∗ Questa funzione si può estendere alle stringhe, s : Σ∗ → ℘(T ∗ ) con w = a1 a2 · · · an ∈ Σ∗ 7→ s(w) = s(a1 )s(a2 ) · · · s(an ) ed ai linguaggi: s : ℘(Σ∗ ) → ℘(T ∗ ) con [ L ⊆ Σ∗ 7→ s(L) = s(w) w∈L N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 37 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Chiusura rispetto alla sostituzione II Esempio Siano s(0) = {an bn | n > 0} e s(1) = {aa, bb}. Sia w = 01, allora s(w) = s(0)s(1) = {w | w = an bn aa ∨ w = an bn bb, n > 0} Sia L = L(0∗ ), allora s(L) = s((0)∗ ) = [s(0)]∗ , quindi s(L) = {an1 bn1 an2 bn2 · · · ank bnk | k ≥ 0} Teorema (chiusura sostituzione) La classe dei linguaggi liberi è chiusa rispetto alla sostituzione. Da ciò discendono anche le chiusure rispetto ad unione, prodotto e chiusure positiva e transitiva e riflessiva (+ e ∗ ) ed anche: Teorema (chiusura omomorfismo) La classe dei linguaggi liberi è chiusa rispetto ad omomorfismo (ed anche all’omomorfismo inverso) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 38 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Chiusura rispetto alla riflessione Una parola w ∈ Σ∗ si dice palindroma se w = wR Proposizione Sia w ∈ Σ∗ . Allora w è palindroma sse ∃v ∈ Σ∗ ∃s ∈ Σ ∪ {} w = vsvR Teorema (chiusura rispetto alla riflessione) La classe dei linguaggi liberi è chiusa rispetto a riflessione. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 39 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Esercizi – proprietà di chiusura I 1 2 3 Dimostrare che L = {an bn cm | n, m > 0} è libero Dati L1 = {an bn | n ≥ 0} e L2 = {a}∗ · {bb}∗ , dimostrare che L = L1 ∩ L2 è libero Utilizzare la proprietà di chiusura di L2 rispetto a ∪ per dimostrare che i seguenti linguaggi sono liberi: i. L = {ai bk | i 6= k, i, k ≥ 0} ii. L = {w ∈ {a, b}∗ | w = wR } iii. L = {a, b}∗ \ {ai bi | i ≥ 0} 4 Usando la proprietà di chiusura dell’intersezione con ling. regolari, dimostrare che sono liberi: i. {an bn | n 6= 7} ii. {0n 1n | n = 3k + 1, k ≥ 0} iii. {w ∈ {a, b}∗ | w palindroma, |w| 6= 3k, k ≥ 0} 5 Analogamente, dimostrare che non sono liberi: i. an bm ck | k ≥ m ≥ n ≥ 0 ii. {w ∈ {a, b, c}∗ | na (w) = nb (w) = nc (w)} N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 40 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Esercizi – proprietà di chiusura II Esercizio 1. Dimostrare che L = {an bn cm | n, m > 0} è libero e trovare una grammatica che lo generi L può essere inteso come prodotto di linguaggi: L1 = {an bn | n > 0} libero e L2 = {cm | m > 0} = {c}+ = {c}∗ \ {} lineare destro (e quindi anche libero L3 ( L2 ) L = L1 · L2 deve essere libero per la chiusura G1 = ({a, b}, {S1 }, S1 , P1 ) con P1 = {S1 −→ aS1 b|ab} G2 = ({c}, {S2 }, S2 , P2 ) Quindi: G = (Σ, V , S, P) Σ = {a, b} ∪ {c} = {a, b, c} con P2 = {S2 −→ cS2 |c} V = V1 ∪ V2 ∪ {S} = {S, S1 , S2 } P ={S −→ S1 S2 } ∪ P1 ∪ P2 = ={S −→ S1 S2 , S1 −→ aS1 b|ab, S2 −→ cS2 |c} N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 41 / 91 Proprietà dei Ling. Liberi Proprietà di Chiusura Esercizi – proprietà di chiusura III Esercizio 3. Utilizzare la proprietà di chiusura di L2 rispetto a ∪ per dimostrare che i seguenti linguaggi sono liberi: i. L = {ai bk | i 6= k, i, k ≥ 0} ii. L = {w ∈ {a, b}∗ | w = wR } iii. L = {a, b}∗ \ {ai bi | i ≥ 0} 1 2 3 Riscrivendo L come segue {ai bk | i < k} ∪ {ai bk | i > k} . . . Si osservi che w ∈ L ⇔ w = szs, e inoltre w = uuR oppure w = usuR , con s ∈ Σ e z ∈ L, u ∈ Σ∗ . . . Scomponiamo il linguaggio (in modo ricorsivo) come segue L ={wa | w ∈ Σ∗ } ∪ {bw | w ∈ Σ∗ } ∪ {sws | w ∈ Σ∗ , s ∈ Σ} ∪ {azb | z ∈ L} N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 42 / 91 Automi a Pila Sommario 1 Nozioni Preliminari 2 Proprietà dei Ling. Liberi 3 Automi a Pila Configurazioni Istantanee e Transizioni Accettazione di Stringhe e Linguaggi Esempi 4 Forme Normali N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 43 / 91 Automi a Pila Introduzione Automi con Memoria Per riconoscere linguaggi più complessi rispetto a quelli di Ldf occorrono altri strumenti più potenti: Dato un alfabeto finito Σ di ingresso: nastro di ingresso: contiene i simboli dell’alfabeto di ingresso Σ; su un simbolo insiste una testina di lettura memoria ausiliaria: ha capacità virtualmente illimitata ed un proprio alfabeto di memoria (o di lavoro) Se l’organizzazione della memoria è a stack, si definirà l’automa risultante automa a pila (o automa push-down, PDA) unità di controllo: controlla le transizioni dell’automa, in base al contenuto della memoria e del simbolo letto dalla testina sul nastro. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 44 / 91 Automi a Pila Introduzione Modello di PDA a b a a b a q0 q1 q2 q3 q4 q5 N. Fanizzi Linguaggi di prog.+Lab b a Control Unit Linguaggi Liberi da Contesto a b a A B A Z0 stack ● a 1 maggio 2014 45 / 91 Automi a Pila Introduzione Automi a pila I Un automa a pila è costituito da una n-pla: M = (Q, Σ, Γ, δ, q0 , Z0 , F) Q insieme finito e non vuoto degli stati Σ insieme finito e non vuoto detto alfabeto di ingresso Γ insieme finito e non vuoto detto alfabeto della pila δ funzione di transizione: δ : Q × (Σ ∪ {}) × Γ −→ ℘(Q × Γ∗ ) scritta anche come (q0 , σ) ∈ δ(q, s, Z) ovvero (q, s, Z, q0 , σ) q0 ∈ Q è lo stato iniziale Z0 ∈ Γ è il simbolo iniziale della pila F ⊆ Q è l’insieme degli stati finali N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 46 / 91 Automi a Pila Introduzione Automi a pila II Diagramma di transizione: 0,Z0 /ZZ0 1,Z0 /UZ0 0,Z/ZZ 0,U/ZU 1,Z/UZ 1,U/UU q0 N. Fanizzi Linguaggi di prog.+Lab 0,Z/ 1,U/ ,Z0 /Z0 ,Z/Z ,U/U q1 ,Z0 /Z0 Linguaggi Liberi da Contesto q2 1 maggio 2014 47 / 91 Automi a Pila Configurazioni Istantanee e Transizioni Configurazioni Istantanee e transizioni I Per descrivere lo stato globale di un PDA in ogni istante, una configurazione istantanea (ID) è una terna (q, w, σ) ∈ Q × Σ∗ × Γ∗ q∈Q w = a1 a2 · · · an ∈ σ = Z1 Z2 · · · Zm stato corrente dell’unità di controllo Σ∗ sottostringa da esaminare sul nastro (testina posizionata su a1 ) contenuto della pila (con Z1 in cima) configurazione iniziale (q0 , w, Z0 ) configurazione finale (q, , σ) N. Fanizzi Linguaggi di prog.+Lab con q ∈ F, σ ∈ Γ∗ Linguaggi Liberi da Contesto 1 maggio 2014 48 / 91 Automi a Pila Configurazioni Istantanee e Transizioni Configurazioni Istantanee e transizioni II Sia M nello stato q, sia a letto sul nastro e A in cima alla pila: 1 se δ contiene (q, a, A, q0 , A1 · · · Ak ) ossia se (q0 , A1 · · · Ak ) ∈ δ(q, a, A) M può operare la transizione: (q, aw, Aσ) ` (q0 , w, A1 · · · Ak σ) 2 se δ è descritta dalla n-pla (q, , A, q0 , A1 · · · Ak ) ossia se (q0 , A1 · · · Ak ) ∈ δ(q, , A) allora M può operare la transizione: (q, w, Aσ) ` (q0 , w, A1 · · · Ak σ) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 49 / 91 Automi a Pila Accettazione di Stringhe e Linguaggi Condizioni di accettazione per PDA w ∈ Σ∗ è accettata dal PDA M in condizione di stato finale sse: ∗ q ∈ F, σ ∈ Γ∗ (q0 , w, Z0 ) ` (q, , σ) linguaggio accettato da M in condizione di stato finale: ∗ L(M) = {w ∈ Σ∗ | (q0 , w, Z0 ) ` (q, , σ) con q ∈ F, σ ∈ Γ∗ } w ∈ Σ∗ è accettata dal PDA M in condizione di pila vuota sse: ∗ (q0 , w, Z0 ) ` (q, , ) q∈Q linguaggio accettato da M in condizione di pila vuota: ∗ L(M) = {w ∈ Σ∗ | (q0 , w, Z0 ) ` (q, , ) con q ∈ Q} N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 50 / 91 Automi a Pila Accettazione di Stringhe e Linguaggi Linguaggi accettati da PDA Teorema La classe dei linguaggi accettati da PDA in condizione di pila vuota coincide con la classe dei linguaggi accettati in condizione di stato finale Dim. (cenni) Se si raggiunge uno stato finale e la pila non è vuota occorre ripulire la pila dai simboli restanti senza cambiare stato Se la pila è vuota bisogna obbligare l’automa a transitare in uno stato finale senza modificare la situazione della pila N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 51 / 91 Automi a Pila Esempi PDA – Esempio #1 / I L = {w ∈ {a,b}∗ | na (w) = nb (w)} G = (Σ, V , S, P) Σ = {a,b} V = {S} P = {S −→ ab|ba|SS|aSb|bSa} M = (Q, Σ, Γ, δ, q0 , Z0 , F) Q = {q0 } Γ = {Z0 , A, B} F=∅ N. Fanizzi Linguaggi di prog.+Lab pila A B Z0 Linguaggi Liberi da Contesto stato q0 q0 q0 a AA AZ0 b BB BZ0 1 maggio 2014 52 / 91 Automi a Pila Esempi PDA – Esempio #1 / II Programma per PDA (è omesso lo stato q0 ): 1 (a, Z0 , AZ0 ) 2 (b, Z0 , BZ0 ) 3 (a, A, AA) 4 (b, B, BB) 5 (a, B, ) 6 (b, A, ) 7 (, Z0 , ) N. Fanizzi -regola per cancellare il fondo della pila Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 53 / 91 Automi a Pila Esempi PDA – Esempio #1 / III pila A B Z0 stato q0 q0 q0 a AA AZ0 b BB BZ0 stringa abba (q0 , abba, Z0 ) ` (q0 , bba, AZ0 ) ` (q0 , ba, Z0 ) ` (q0 , a, BZ0 ) ` (q0 , , Z0 ) ` (q0 , , ) la stringa è accettata. stringa aababa (q0 , aababa, Z0 ) ` (q0 , ababa, AZ0 ) ` (q0 , baba, AAZ0 ) ` (q0 , aba, AZ0 ) ` (q0 , ba, AAZ0 ) ` (q0 , a, AZ0 ) ` (q0 , , AAZ0 ) la stringa non è accettata. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 54 / 91 Automi a Pila Esempi PDA – Esempio #2 / I L = {wcwR | w ∈ {a,b}∗ } G = (Σ, V , S, P) Σ = {a,b,c} V = {S} P = {S −→ c|aSa|bSb} M = (Q, Σ, Γ, δ, q0 , Z0 , F) Q = {q0 , q1 } q0 : lettura q1 : match Γ = {Z0 , A, B} F=∅ N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 55 / 91 Automi a Pila Esempi PDA – Esempio #2 / II pila A A B B Z0 Z0 stato q0 q1 q0 q1 q0 q1 a (q0 , AA) (q1 , ) (q0 , AB) (q0 , AZ0 ) - b (q0 , BA) (q0 , BB) (q1 , ) (q0 , BZ0 ) - c (q1 , A) (q1 , B) (q1 , Z0 ) - Osservazione c segnala il cambiamento di stato (centro del palindromo): in q1 si comincia a svuotare la pila riempita nello stato q0 N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 56 / 91 Automi a Pila Esempi PDA – Esempio #2 / III Programma per PDA: 1 (q0 , a, Z0 , q0 , AZ0 ) 2 (q0 , a, A, q0 , AA) 3 (q0 , a, B, q0 , AB) 4 (q0 , b, Z0 , q0 , BZ0 ) 5 (q0 , b, A, q0 , BA) 6 (q0 , b, B, q0 , BB) 7 (q0 , c, Z0 , q1 , Z0 ) 8 (q0 , c, A, q1 , A) 9 (q0 , c, B, q1 , B) 10 (q1 , a, A, q1 , ) 11 (q1 , b, B, q1 , ) 12 (q1 , , Z0 , q1 , ) N. Fanizzi Linguaggi di prog.+Lab la 1. la 2. e la 3. si possono riassumere con: (q0 , a, Z, q0 , AZ) ∀Z ∈ Γ la 4. la 5. e la 6. si possono riassumere con: (q0 , b, Z, q0 , BZ) ∀Z ∈ Γ la 7. la 8. e la 9. si possono riassumere con: (q0 , c, Z, q1 , Z) ∀Z ∈ Γ -regola Linguaggi Liberi da Contesto 1 maggio 2014 57 / 91 Automi a Pila Esempi PDA – Esempio #3 / I L = {wwR | w ∈ {a, b}∗ } G = (Σ, V , S, P) M = (Q, Σ, Γ, δ, q0 , Z0 , F) Q = {q0 , q1 } Σ = {a,b} q0 : lettura q1 : match V = {S} P = {S −→ |aSa|bSb} Γ = {Z0 , A, B} F=∅ N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 58 / 91 Automi a Pila Esempi PDA – Esempio #3 / II pila A A B B Z0 Z0 stato q0 q1 q0 q1 q0 q1 a {(q0 , AA), (q1 , )} (q1 , ) (q0 , AB) (q0 , AZ0 ) - b (q0 , BA) {(q0 , BB), (q1 , )} (q1 , ) (q0 , BZ0 ) - automa non deterministico con due possibilità, trovandosi in q0 leggere il prossimo simbolo dal nastro passare in q1 N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 59 / 91 Automi a Pila Esempi PDA – Esempio #3 / III Programma per PDA: 1 (q0 , a, Z, q0 , AZ) ∀Z ∈ Γ 2 (q0 , b, Z, q0 , BZ) 3 (q0 , , Z, q1 , Z) 4 (q1 , a, A, q1 , ) 5 (q1 , b, B, q1 , ) 6 (q1 , , Z0 , q1 , ) N. Fanizzi Linguaggi di prog.+Lab (invece della -regola precedente) Linguaggi Liberi da Contesto 1 maggio 2014 60 / 91 Automi a Pila Esempi PDA – Esempio #3 / IV pila A A B B Z0 Z0 stato q0 q1 q0 q1 q0 q1 a {(q0 , AA), (q1 , )} (q1 , ) (q0 , AB) (q0 , AZ0 ) - b (q0 , BA) {(q0 , BB), (q1 , )} (q1 , ) (q0 , BZ0 ) - Riconoscimento della stringa abba (q0 , abba, Z0 ) ` (q0 , bba, AZ0 ) ` (q0 , ba, BAZ0 ) ? 2 scelta ` (q0 , a, BBAZ0 ) ` (q0 , , ABBAZ0 ) blocco. 5 scelta ` (q1 , a, AZ0 ) ` (q1 , , Z0 ) ` (q1 , , ) La stringa è accettata. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 61 / 91 Automi a Pila Esempi PDA e determinismo Osservazioni L1 = {wcwR | w ∈ {a,b}∗ } accettato da un PDA deterministico L2 = {wwR | w ∈ {a,b}∗ } accettato da un PDA non deterministico si può dimostrare che 6 ∃M ∈ PDA deterministico tale che L(M) = L2 pertanto la classe dei linguaggi riconosciuta dai PDA deterministici è inclusa strettamente in quella dei linguaggi riconosciuti da PDA non deterministici N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 62 / 91 Forme Normali Sommario 1 Nozioni Preliminari 2 Proprietà dei Ling. Liberi 3 Automi a Pila 4 Forme Normali FN di Chomsky FN NLR FN di Greibach Trasformazioni delle grammatiche libere Teorema delle Forme Normali Predicati Decidibili N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 63 / 91 Forme Normali Forme Normali I Esempio Si consideri G = (Σ, V , S, P) Σ = {0,1,2} V = {S, A, B} P = {S −→ 0SAB|1, A −→ 1A|1, B −→ 2B|2} Data la forma delle produzioni, la lettura del primo simbolo (terminale) può essere usata in modo predittivo per decidere il resto della stringa che si dovrà derivare N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 64 / 91 Forme Normali Forme Normali II Costruiamo l’automa a pila equivalente: M = (Q, Σ, Γ, δ, q0 , Z0 , F) Q = {q0 } Γ = {S, A, B} con Z0 = S F=∅ pila S A B N. Fanizzi stato q0 q0 q0 0 (q0 , SAB) Linguaggi di prog.+Lab 1 (q0 , ) {(q0 , A), (q0 , )} 2 {(q0 , B), (q0 , )} Linguaggi Liberi da Contesto 1 maggio 2014 65 / 91 Forme Normali Forme Normali III Se le produzioni della grammatica sono in una certa forma si può definire facilmente un PDA mediante il seguente risultato: Teorema Data G = (Σ, V, S, P) libera con produzioni della forma A −→ bσ con b ∈ Σ, σ ∈ V ∗ , esiste un PDA M, tale che L(G) = L(M). Dim. Si consideri M = (Q, Σ, Γ, δ, q0 , Z0 , F) con Q = {q0 } Γ=V Z0 = S F=∅ ∀A −→ bα ∈ P : (q0 , α) ∈ δ(q0 , b, A) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 66 / 91 Forme Normali FN di Chomsky Forma Normale di Chomsky Una grammatica libera G = (Σ, V , S, P) è in forma normale di Chomsky se ogni produzione è di uno dei tipi seguenti: 1 S −→ 2 A −→ BC con A ∈ V e 3 N. Fanizzi B, C ∈ V \ {S} B, C ∈ V se S −→ ∈ P altrimenti A −→ a con A ∈ V, a ∈ Σ Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 67 / 91 Forme Normali FN NLR Forma Normale NLR Una grammatica libera G = (Σ, V , S, P) è in forma priva di ricorsioni sinistre (NLR, No Left Recursion) se non ha produzioni del tipo: A −→ Aβ dove A ∈ V , β ∈ (V ∪ Σ)∗ N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 68 / 91 Forme Normali FN di Greibach Forma Normale di Greibach Una grammatica libera G = (Σ, V , S, P) è in forma normale di Greibach (GNF, Greibach Normal Form) se ogni produzione è del tipo: 1 S −→ 2 A −→ aσ dove A ∈ V , N. Fanizzi Linguaggi di prog.+Lab a ∈ Σ, σ ∈ V∗ Linguaggi Liberi da Contesto 1 maggio 2014 69 / 91 Forme Normali Trasformazioni delle grammatiche libere Passaggio alle Forme Normali Teorema Sia G una grammatica libera. Allora esistono Gi , i = 1, 2, 3 equivalenti a G, tali che G1 è in forma normale di Chomsky G2 è in forma normale di Greibach G3 è in forma normale NLR priva di ricorsioni sinistre N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 70 / 91 Forme Normali Trasformazioni delle grammatiche libere Trasformazioni e riduzioni Tramite opportuni algoritmi,1 è possibile trasformare una grammatica libera nella equivalente grammatica ridotta eliminando le -produzioni le produzioni unitarie (chain-rules) A −→ B i simboli inutili X: ∗ non generativi X =⇒ 6 w ∈ Σ∗ o ∗ non raggiungibili S =⇒ 6 αXβ 1 Ad es. cfr. [Ausiello et al.,(2003)][Hopcroft et al.,(2009)]. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 71 / 91 Forme Normali Trasformazioni delle grammatiche libere Sostituzione Considereremo nel seguito linguaggi privi di (si può sempre aggiungere facendola produrre da S) Teorema (sostituzione) Sia G = (Σ, V, S, P) libera. Se ∃A −→ σBδ ∈ P con σ, δ ∈ (Σ ∪ V )∗ e ∃B 6= A : B −→ ω1 | · · · |ωn ∈ P ˆ = (Σ, V, S, P) ˆ equivalente con: allora si può costruire G ˆ = P \ {A −→ σBδ} ∪ {A −→ σω1 δ| · · · |σωn δ} P Esempio A −→ 0|00A|01B2 e B −→ 011A|1 Sostituendo B in A: A −→ 0|00A|01011A2|0112 e B −→ 011A|1 N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 72 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni inutili I Esempio S −→ 0S1||A e A −→ 0A S −→ A è inutile perché A non è generatore di stringhe terminali Esempio S −→ A, A −→ 0A|, B −→ 1A B inutile perché non è raggiungibile da S pur generando (via A) stringhe di terminali Definizione (non-terminali utili) Data G = (Σ, V , S, P) libera. Si dirà che A ∈ V è utile sse ∗ ∗ ∃w ∈ L(G) : S =⇒ σAδ =⇒ w con σ, δ ∈ (Σ ∪ V )∗ . Si dirà inutile un non-terminale che non è utile. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 73 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni inutili II Esempio S −→ 0S|A|C, A −→ 0, B −→ 00, C −→ 0C1 NT utili perché generatori di stringhe terminali: A per A −→ 0, B per B −→ 00, S per S =⇒ A =⇒ 0 Rimuovendo C: S −→ 0S|A, A −→ 0, B −→ 00 Studiamo le dipendenze con un grafo di raggiungibilità: S A B due NT C e D sono collegati da un arco sse ∃(C −→ σDδ) ∈ P Quindi eliminando B rimangono: S −→ 0S|A, A −→ 0 N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 74 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni inutili III Teorema (eliminazione non-terminali e prod. inutili) ˆ = (Σ, V, ˆ S, P) ˆ libera Sia G = (Σ, V, S, P) libera. Esiste G equivalente senza non-terminali e produzioni inutili Dim. 1 data G, costruire G0 = (Σ, V 0 , S, P0 ): 1 2 V0 ← ∅ esegui per ogni A ∈ V tale che A −→ ω ∈ P con ω ∈ (Σ ∪ V 0 )∗ : V 0 ← V 0 ∪ {A} 3 2 ˆ data G0 , costruire G: 1 2 3 N. Fanizzi fintantoché V 0 sia stato modificato P0 prende da P le prod. con simboli in Σ ∪ V 0 Si costruisce il grafo delle dipendenze di G0 Si trovano le var. non raggiungibili da S Si eliminano le loro produzioni Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 75 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle -produzioni I Una produzione A −→ si dice -produzione Spesso si possono rimuovere Esempio S −→ 0N1, N −→ 0N1| per generare {0n 1n | n > 0} Si rimuove la -produzione per sostituzione: S −→ 0N1|01, N −→ 0N1|01 Un non-terminale A tale che ∗ A =⇒ si dice annullabile N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 76 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle -produzioni II Teorema (eliminazione -produzioni) Sia G = (Σ, V, S, P) libera tale che 6∈ G. ˆ = (Σ, V ˆ , S, P) ˆ libera equivalente senza -produzioni Allora esiste G Dim. 1 trovare VN ⊆ V insieme dei non-terminali annullabili in G 1 2 per ogni produzione A −→ ∈ P: VN ← VN ∪ {A} ripeti per ogni produzione B −→ A1 · · · Ak ∈ P con A1 , . . . , Ak ∈ VN : VN ← VN ∪ {B} fino a quando non ci sono più modifiche 2 N. Fanizzi per ogni p = A −→ s1 · · · sk ∈ P con s1 , . . . , sk ∈ V ∪ Σ: ˆ←P ˆ ∪ {p} ∪ sostNull(p, VN ) P Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 77 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle -produzioni III Osservazione sostNull(p, VN ) restituisce l’insieme delle produzioni ottenute sostituendo le variabili annullabili di VN in p con in tutte le combinazioni possibili (tranne A −→ , nel caso le si fossero tutte annullabili) Esempio data G con produzioni: S −→ AB0C, A −→ BC, B −→ 1|, C −→ D|, D −→ 2 dall’algoritmo VN = {A, B, C}, per cui si trasforma in: S −→ AB0C|B0C|A0C|AB0|0C|B0|A0|0 A −→ BC|B|C B −→ 1 C −→ D D −→ 2 N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 78 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni unitarie I Una produzione A −→ B si dice produzione unitaria Si possono rimuovere utilizzando il teorema di sostituzione Teorema (eliminazione produzioni unitarie) Sia G = (Σ, V, S, P) libera tale priva di senza -produzioni. Allora ˆ = (Σ, V, ˆ S, P) ˆ libera equivalente senza produzioni unitarie esiste G N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 79 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni unitarie II Dim. le produzioni A −→ A si possono eliminare direttamente. ˆ ← {p ∈ P | p prod. non unitaria} P Costruire il grafo delle dipendenze tra NT limitato alle prod. unitarie arco da C a D sse C −→ D ∈ P ∗ Per ogni hA, Bi, tali che A =⇒ B con A 6= B secondo il grafo: ˆ Selezionare le prod. di B in P: ˆ B −→ ω1 |ω2 | · · · |ωm ∈ P ˆ←P ˆ ∪ {A −→ ω1 |ω2 | · · · |ωm } P N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 80 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni unitarie III Esempio date le prod. S −→ A0|B, A −→ 0|12|B, B −→ A|11 S ∗ ∗ B ∗ A ∗ da cui: S =⇒ A, S =⇒ B, A =⇒ B, B =⇒ A Quindi si inizializza con: {S −→ A0, A −→ 0|12, B −→ 11} A A B B A A z}|{ z}|{ z}|{ z}|{ z}|{ z}|{ Aggiungendo: S −→ 0 | 12 | 11 , A −→ 11 , B −→ 0 | 12 si ottiene: S −→ A0|0|12|11, A −→ 0|12|11, B −→ 11|0|12 con B inutile N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 81 / 91 Forme Normali Trasformazioni delle grammatiche libere Rimozione delle produzioni unitarie IV Osservazioni applicare le sostituzioni direttamente alle singole prod. unitarie non funzionerebbe nel caso di dipendenze cicliche per esercizio, provare con la gramm. dell’es. precedente su alcuni testi si parla di chiusura della rel. di raggiungibilità tramite prod. unitarie UG hA, Bi ∈ UG sse A −→ B chiusura UG∗ = {hA, Bi | A −→ B}∪{hA, Ci | hA, Bi ∈ UG∗ ∧B −→ C ∈ P} ∗ quindi hA, Bi ∈ UG∗ sse A =⇒ B N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 82 / 91 Forme Normali Trasformazioni delle grammatiche libere Applicazione delle trasformazioni Dato che una trasformazione può generare problemi dell’altro tipo, l’ordine consigliato è: 1 Rimozione delle -produzioni 2 Rimozione produzioni inutili 3 Rimozione delle produzioni unitarie altre trasformazioni: Eliminazione ricorsione sinistra Fattorizzazione N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 83 / 91 Forme Normali Teorema delle Forme Normali Teoremi di Equivalenza Attraverso le trasformazioni trattate in precedenza Un linguaggio libero è sempre generabile da una grammatica libera in GNF Da ciò discendono: Teorema Ogni linguaggio libero è riconosciuto da un automa a pila Teorema Ogni linguaggio accettato da un automa a pila è libero N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 84 / 91 Forme Normali Predicati Decidibili Predicati Decidibili Sfruttando le argomentazioni del pumping lemma si può determinare, mediante opportuni algoritmi, se una grammatica libera genera un linguaggio infinito, vuoto o finito ma non vuoto [Ausiello et al.,(2003)]: Teorema Data una grammatica G di tipo 2 è decidibile stabilire se L(G) è infinito. Teorema Data una grammatica G di tipo 2 è decidibile stabilire se L(G) = ∅. quindi, per esclusione: Teorema Data una grammatica G di tipo 2 è decidibile stabilire se L(G) è finito ma non vuoto. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 85 / 91 Forme Normali Predicati Decidibili Appartenenza ad un linguaggio libero Teorema Data una grammatica G di tipo 2 ed una stringa sul suo alfabeto w ∈ Σ∗ è decidibile stabilire se w ∈ L(G) È questo il lavoro svolto da ogni parser per un dato ling. di programmazione: controllare se una stringa (prog. sorgente) è corretta rispetto alle regole della grammatica. N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 86 / 91 Forme Normali Predicati Decidibili Parsing: Algoritmo CYK I Data G = (Σ, V , S, P) libera in CNF, algoritmo di COCKE-YOUNGER-KASAMI per decidere se z = a1 · · · an ∈ L(G) Passi Consideriamo le vi,j = ai · · · aj , con |vi,j | = j − i + 1: 1. Per ogni vi,i : |vi,i | = 1 (quindi vi,i = ai ∈ Σ) si trova l’insieme Xi,i ∈ ℘(V ) dei NT A tali che A −→ ai ∈ P 2. Per ogni vi,i+1 : |vi,i+1 | = 2 si trova Xi,i+1 ∈ ℘(V ) degli A tali che A .. .. . . ∗ =⇒ vi,i+1 .. . .. . n-1. Per le 2 sottostringhe v1,n−1 e v2,n , |v1,n−1 | = |v2,n | = n − 1 si trova X1,n−1 ∈ ℘(V) 8risp. X2,n ∈ ℘(V)) degli A tali che ∗ ∗ A =⇒ v1,n−1 (risp. A =⇒ v2,n ) n. Per z = v1,n : |v1,n | = n ∗ si trova X1,n ∈ ℘(V) degli A tali che A =⇒ v1,n N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 87 / 91 Forme Normali Predicati Decidibili Parsing: Algoritmo CYK II z ∈ L(G) se S ∈ X1,n ... n−1 n 1 X1,1 X1,2 X1,3 ... X1,n−1 X1,n 2 X2,2 X2,3 ... X2,n−1 X2,n 3 X3,3 ... X3,n−1 X3,n .. .. . .. . 1 n−1 2 3 . Xn−1,n−1 Xn−1,n n N. Fanizzi Linguaggi di prog.+Lab Xn,n Linguaggi Liberi da Contesto 1 maggio 2014 88 / 91 Forme Normali Predicati Decidibili Parsing: Algoritmo CYK III G = (Σ, V , S, P): grammatica z = x1 · · · xn : stringa Output d: boolean Var Σ: matrice n × n triangolare a valori in ℘(V ) Input for each (i, j) ∈ {1, . . . , n} × {1, . . . , n} do Xi,j ← ∅ for i ← 1 to n do for each A ∈ V do if ∃(A −→ xi ) ∈ P then Xi,j ← Xi,j ∪ {A} for s ← 2 to n do for i ← 1 to n − s + 1 do for k ← i to i + s − 2 do if ∃B ∈ Xi,k ∧ ∃C ∈ Xk+1,i+s−1 ∧ ∃(A −→ BC) ∈ P then Xi,i+s−1 ← Xi,i+s−1 ∪ {A} return d ← (S ∈ X1,n ) N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 89 / 91 Forme Normali Predicati Decidibili Parsing: Algoritmo CYK IV Esempio Controllare se G = (Σ, V , S, P) con produzioni CNF: P = {S −→ AT | AB, T −→ XB, X −→ AT | AB, A −→ a, B −→ b} possa generare aaabbb 1 2 3 4 5 6 1 {A} ∅ ∅ ∅ ∅ {S, X} 2 {A} ∅ ∅ {S, X} {T} 3 {A} {S, X} {T} ∅ 4 {B} ∅ ∅ 5 {B} ∅ 6 {B} N. Fanizzi Linguaggi di prog.+Lab Linguaggi Liberi da Contesto 1 maggio 2014 90 / 91 Riferimenti Ausiello G.; D’Amore F.; Gambosi G. 2003. Linguaggi, Modelli, Complessità. FrancoAngeli. Cohen D. I. 1996. Introduction to Computer Theory. Wiley. Hopcroft J. E.; Motwani R.; Ullman J. D. 2009. Automi, Linguaggi e Calcolabilità. Pearson Italia, 3a edizione. Linz P. 2012. An Introduction to Formal Languages and Automata. Jones & Bartlett, 5a edizione. Moll R. N.; Arbib M. A.; Kfoury A. J. 1988. An introduction to formal language theory. Springer. Sipser 2005. Introduction to the theory of computation. Thomson, 2a edizione. Sudkamp 2006. Languages and Machines. Addison-Wesley, 3a edizione.
© Copyright 2024 Paperzz