Grammatiche e Linguaggi Liberi da Contesto

cli.di.unipi.it

Grammatiche libere da contesto Grammatiche e Linguaggi Liberi da ...

Grammatiche libere da contestoGrammatiche libere da contestoGrammatiche e Linguaggi Liberi da ContestoAbbiamo visto che molti linguaggi non sono regolari.Consideriamo allora classi piu’ grandi di linguaggi.I Linguaggi Liberi da Contesto (CFL) sono stati usati nellostudio dei linguaggi naturali dal 1950, e nello studio deicompilatori dal 1960.Le grammatiche libere da contesto (CFG) sono la basedella sintassi BNF (Backus-Naur-Form).Oggi i CFL sono importanti per XML.Studieremo: CFG, i linguaggi che generano, gli alberisintattici, gli automi a pila, e le proprieta’ di chiusura dei CFL.Grammatiche libere da contesto


Esempio informale di CFGConsideriamo L pal = {w ∈ Σ ∗ : w = w R }Per esempio: otto ∈ L pal , madamimadam ∈ L pal .Sia Σ = {0, 1} e supponiamo che L pal sia regolare.Sia n dato dal pumping lemma. Allora 0 n 10 n ∈ L pal . Nelleggere 0 n il FA deve passare per un loop. Se omettiamo illoop, contraddizione.Definiamo L pal induttivamente:Base: ɛ, 0, e 1 sono palindromi.Induzione: Se w e’ una palindrome, anche 0w0 e 1w1 lo sono.Nessun altra stringa e’ una palindrome.Grammatiche libere da contestoLe CFG sono un modo formale per definire linguaggi come L pal .1. P → ɛ2. P → 03. P → 14. P → 0P05. P → 1P10 e 1 sono terminaliP e’ una variabile (o nonterminale, ocategoria sintattica)P e’ in questa gramatica anche il simbolo iniziale.1–5 sono produzioni (o regole)Grammatiche libere da contesto


Definizione formale di CFGUna grammatica libera da contesto e’ una quadrupladoveG =(V , T , P, S)V e’ un insieme finito di variabili.T e’ un insieme finito di terminali.P e’ un insieme finito di produzioni della forma A → α, doveA e’ una variabile e α ∈ (V ∪ T ) ∗S e’ una variabile distinta chiamata il simbolo iniziale.Grammatiche libere da contestoEsempiG pal =({P}, {0, 1}, A, P), dove A ={P → ɛ, P → 0, P → 1, P → 0P0, P → 1P1}.A volte raggruppiamo le produzioni con la stessa testa:A = {P → ɛ|0|1|0P0|1P1}.Le espressioni regolari su {0, 1} possono essere definite dallagrammaticaG regex =({E}, {0, 1}, A, E)dove A ={E → 0, E → 1, E → E.E, E → E + E, E → E ⋆ , E → (E)}Grammatiche libere da contesto


EsempioEspressioni (semplici) in un tipico linguaggio di programmazione.Gli operatori sono + e *, e gli operandi sono identificatori, cioe’stringhe in L((a + b)(a + b + 0 + 1) ∗ )Usiamo la grammatica G =({E, I }, T , P, E) doveT = {+, ∗, (, ), a, b, 0, 1} e P e’ il seguente insieme di produzioni:1. E → I2. E → E + E3. E → E ∗ E4. E → (E)5. I → a6. I → b7. I → Ia8. I → Ib9. I → I 010. I → I 1Grammatiche libere da contestoDerivazioni usando le grammatiche• Inferenza ricorsiva, usando le produzioni dal corpo alla testa• Derivazioni, usando le produzioni dalla testa al corpoEsempio di inferenza ricorsiva:Stringa Ling. Prod. Stringhe usate(i) a I 5 -(ii) b I 6 -(iii) b0 I 9 (ii)(iv) b00 I 9 (iii)(v) a E 1 (i)(vi) b00 E 1 (iv)(vii) a + b00 E 2 (v), (vi)(viii) (a + b00) E 4 (vii)(ix) a ∗ (a + b00) E 3 (v), (viii)Grammatiche libere da contesto


DerivazioniSia G =(V , T , P, S) una CFG, A ∈ V , {α, β} ⊂ (V ∪ T ) ∗ ,eA → γ ∈ P.Allora scriviamoαAβ ⇒Gαγβo, se e’ ovvia la G,αAβ ⇒ αγβe diciamo che da αAβ si deriva αγβ.Definiamo ∗ ⇒ la chiusura riflessiva e transitiva di ⇒, cioe’:Base: Sia α ∈ (V ∪ T ) ∗ . Allora α ∗ ⇒ α.Induzione: Se α ∗ ⇒ β, eβ ⇒ γ, allora α ∗ ⇒ γ.Grammatiche libere da contestoEsempioDerivazione di a ∗ (a + b00) da E nella grammatica delleespressioni:E ⇒ E ∗ E ⇒ I ∗ E ⇒ a ∗ E ⇒ a ∗ (E) ⇒a ∗ (E + E) ⇒ a ∗ (I + E) ⇒ a ∗ (a + E) ⇒ a ∗ (a + I ) ⇒a ∗ (a + I 0) ⇒ a ∗ (a + I 00) ⇒ a ∗ (a + b00)Ad ogni passo potremmo avere varie regole tra cui scegliere,ad esempioI ∗ E ⇒ a ∗ E ⇒ a ∗ (E), oppureI ∗ E ⇒ I ∗ (E) ⇒ a ∗ (E).Non tutte le scelte portano a derivazioni di una particolarestringa, per esempioE ⇒ E + Enon ci fa derivare a ∗ (a + b00).Grammatiche libere da contesto


Derivazioni a sinistra e a destraDerivazione a sinistra ⇒lm: rimpiazza sempre la variabile piu’a sinistra con il corpo di una delle sue regole.Derivazione a destra ⇒ rm: rimpiazza sempre la variabile piu’a destra con il corpo di una delle sue regole.Der. a sinistra: quella del lucido precedente.A destra:E ⇒ rmE ∗ E ⇒ rmE ∗ (E) ⇒ rmE ∗ (E + E) ⇒ rmE ∗ (E + I ) ⇒ rmE ∗ (E + I 0)⇒rm⇒rmE ∗ (E + I 00) ⇒rmE ∗ (a + b00) ⇒rmE ∗ (E + b00) ⇒rmI ∗ (a + b00) ⇒rmE ∗ (I + b00)a ∗ (a + b00)Possiamo concludere che E∗ ⇒ rma ∗ (a + b00)Grammatiche libere da contestoIl linguaggio di una grammaticaSe G(V , T , P, S) e’ una CFG, allora il linguaggio di G e’L(G) ={w ∈ T ∗ : S ∗ ⇒Gw}cioe’ l’insieme delle stringhe su T ∗ derivabili dal simboloiniziale.Se G e’ una CFG, chiameremo L(G) un linguaggio libero dacontesto.Esempio: L(G pal ) e’ un linguaggio libero da contesto.Grammatiche libere da contesto


Teorema 5.7:L(G pal )={w ∈ {0, 1} ∗ : w = w R }Prova: (direzione ⊇) Supponiamo w = w R . Mostriamo perinduzione su |w| che w ∈ L(G pal ).Base: |w| = 0, or |w| = 1. Allora w e’ ɛ, 0, or 1. Dato cheP → ɛ, P → 0, and P → 1 sono produzioni, concludiamo cheP ∗ ⇒Gw in tutti i casi base.Induzione: Supponiamo |w| ≥ 2. Dato che w = w R ,abbiamo w =0x0, o w =1x1, e x = x R .Se w =0x0 sappiamo che per l’ipotesi induttiva P ∗ ⇒ x.AlloraP ⇒ 0P0 ∗ ⇒ 0x0 =wQuindi w ∈ L(G pal ).Il caso di w =1x1 e’ simile.Grammatiche libere da contesto(direzione ⊆) Assumiamo che w ∈ L(G pal ) e dobbiamo mostrareche w = w R .Dato che w ∈ L(G pal ), abbiamo P ⇒ ∗ w.∗Faremo un’induzione sulla lunghezza di ⇒.Base: La derivazione P ∗ ⇒ w ha 1 passo.Allora w deve essere ɛ, 0, o 1, tutte palindromi.Induzione: Sia n ≥ 1, e supponiamo che la derivazione han + 1 steps. Allora dobbiamo avereow =0x0 ∗ ⇐ 0P0 ⇐ Pw =1x1 ∗ ⇐ 1P1 ⇐ Pdove la seconda derivazione ha n passi.Per l’ipotesi induttiva, x e’ una palindrome.Grammatiche libere da contesto


Forme sentenzialiSia G =(V , T , P, S) una CFG, e α ∈ (V ∪ T ) ∗ .Se S ∗ ⇒ α diciamo che α e’ una forma sentenziale.Se S ⇒lmα diciamo che α e’ una forma sentenziale sinistra,Se S ⇒ rmα diciamo che α e’ una forma sentenziale destraNota: L(G) contiene le forme sentenziali che sono in T ∗ .Grammatiche libere da contestoEsempiPrendiamo la G delle espressioni. Allora E ∗ (I + E) e’ unaforma sentenziale perche’E ⇒ E ∗ E ⇒ E ∗ (E) ⇒ E ∗ (E + E) ⇒ E ∗ (I + E)Questa derivazione non e’ ne’ a sinistra ne’ a destraa ∗ E e’ una forma sentenziale sinistra, perche’E ⇒lmE ∗ E ⇒lmI ∗ E ⇒lma ∗ EE ∗ (E + E) e’ una forma sentenziale destra, perche’E ⇒ rmE ∗ E ⇒ rmE ∗ (E) ⇒ rmE ∗ (E + E)Grammatiche libere da contesto


Alberi sintatticiSe w ∈ L(G), per una CFG, allora w ha un albero sintattico,che ci dice la struttura (sintattica) di ww potrebbe essere un programma, una query SQL, undocumento XML, ...Gli alberi sintattici sono una rappresentazione alternativa allederivazioni e alle inferenze ricorsive.Ci possono essere diversi alberi sintattici per la stessa stringaIdealmente ci dovrebbe essere solo un albero sintattico (la”vera” struttura), cioe’ il linguaggio dovrebbe essere nonambiguo.Sfortunatamente, non sempre possiamo rimuoverel’ambiguita’.Grammatiche libere da contestoCostruzione di un albero sintatticoSia G =(V , T , P, S) una CFG. Un albero e’ un albero sintatticoper G se:1 Ogni nodo interno e’ etichettato con una variabile in V .2 Ogni foglia e’ etichettata con un simbolo in V ∪ T ∪ {ɛ}.Ogni foglia etichettata con ɛ e’ l’unico figlio del suo genitore.3 Se un nodo interno e’ etichettato A, e i suoi figli (da sinistra adestra) sono etichettatiallora A → X 1 X 2 ...X k ∈ P.X 1 , X 2 , . . . , X k ,Grammatiche libere da contesto


EsempioNella grammnatica1. E → I2. E → E + E3. E → E ∗ E4. E → · (E)·il seguente e’ un albero sintattico:EE + EIQuesto albero sintattico mostra la derivazione E ∗ ⇒ I + EGrammatiche libere da contestoEsempioNella grammatica1. P → ɛ2. P → 03. P → 14. P → 0P05. P → 1P1il seguente e’ un albero sintattico:P0 P 01 P 1!Mostra la derivazione P ∗ ⇒ 0110.Grammatiche libere da contesto


Il prodotto di un albero sintatticoIl prodotto di un albero sintattico e’ la stringa di foglie dasinistra a destra.Sono importanti quegli alberi sintattici dove:1 Il prodotto e’ una stringa terminale.2 La radice e’ etichettata dal simbolo iniziale.L’insieme dei prodotti di questi alberi sintattici e’ il linguaggiodella grammatica.Grammatiche libere da contestoEsempioEE*EI( E )aE+EIIaI0I0bIl prodotto e’ a ∗ (a + b00).Grammatiche libere da contesto


Sia G =(V , T , P, S) una CFG, e A ∈ V . I seguenti sonoequivalenti:1 Possiamo determinare per inferenza ricorsiva che w e’ nellinguaggio di A2 A ∗ ⇒ w3 A ∗ ⇒lmw,eA∗ ⇒ rmw4 C’e’ un albero sintattico di G con radice A e’ prodotto w.Grammatiche libere da contestoPer provare l’equivalenza, usiamo il seguente piano.LeftmostderivationParsetreeDerivationRightmostderivationRecursiveinferenceGrammatiche libere da contesto


Dalle inferenze ricorsive agli alberi: partiamo dall’ultimo passoe costruiamo sottoalberi, poi passiamo ai passi precedenti finoal primo.Dagli alberi alle derivazioni a sinistra: seguo l’albero dasinistra a destra.Dalle derivazioni alle inferenze ricorsive: vado all’indietro nelladerivazione.Grammatiche libere da contestoEsempioCostruiamo la derivazione a sinistra per l’alberoEE*EI( E )aE+EIIaI0I0bGrammatiche libere da contesto


Supponiamo di aver induttivamente costruito la derivazione asinistraE ⇒ I ⇒ alm lmcorrispondente al sottoalbero piu’ a sinistra, e la derivazione asinistraE ⇒ (E) ⇒ (E + E) ⇒ (I + E) ⇒ (a + E) ⇒lm lm lm lm lm(a + I ) ⇒lm(a + I 0) ⇒lm(a + I 00) ⇒lm(a + b00)corrispondente al sottoalbero piu’ a destra.Grammatiche libere da contestoPer la derivazione corrispondente all’intero albero, iniziamo conE ⇒lmE ∗ E e espandiamo la prima E con la prima derivazione e laseconda E con la seconda derivazione:E ⇒ E ∗ E ⇒lm lmI ∗ E ⇒ a ∗ E ⇒lm lma ∗ (E) ⇒ a ∗ (E + E) ⇒lm lma ∗ (I + E) ⇒ a ∗ (a + E) ⇒lm lma ∗ (a + I ) ⇒ a ∗ (a + I 0) ⇒lm lma ∗ (a + I 00) ⇒ a ∗ (a + b00)lmGrammatiche libere da contesto


Ambiguita’ in Grammatiche e LinguaggiNella grammatica1. E → I2. E → E + E3. E → E ∗ E4. E → (E)···la forma sentenziale E + E ∗ E ha due derivazioni:E ⇒ E + E ⇒ E + E ∗ EeE ⇒ E ∗ E ⇒ E + E ∗ EQuesto ci da’ due alberi sintattici:EEE+EE*EE*EE+E(a)Grammatiche libere (b) da contestoL’esistenza di varie derivazioni di per se non e’ pericolosa, e’l’esistenza di vari alberi sintattici che rovina la grammatica.Esempio: Nella stessa grammatica5. I → a6. I → b7. I → Ia8. I → Ib9. I → I 010. I → I 1la stringa a + b ha varie derivazioni:E ⇒ E + E ⇒ I + E ⇒ a + E ⇒ a + I ⇒ a + beE ⇒ E + E ⇒ E + I ⇒ I + I ⇒ I + b ⇒ a + bPero’ il loro albero sintattico e’ lo stesso, e la struttura di a + b e’quindi non ambigua.Grammatiche libere da contesto


Definizione: Sia G =(V , T , P, S) una CFG. Diciamo che G e’ambigua se esiste una stringa in T ∗ che ha piu’ di un alberosintattico.Se ogni stringa in L(G) ha al piu’ un albero sintattico, G e’ dettanon ambigua.Esempio: La stringa terminale a + a ∗ a ha due alberi sintattici:EEE+EE*EIE*EE+EIaIIIIaaaaa(a)(b)Grammatiche libere da contestoRimuovere l’ambiguita’ dalle grammaticheBuone notizie: a volte possiamo rimuovere l’ambiguita’Cattive notizie: non c’e’ nessun algoritmo per farlo in modosistematicoAncora cattive notizie: alcuni CFL hanno solo CFG ambigueStudiamo la grammaticaE → I | E + E | E ∗ E | (E)I → a | b | Ia | Ib | I 0 | I 1Non c’e’ precedenza tra * e +Non c’e’ raggruppamento di sequenze di operatori: E + E + Ee’ inteso come E +(E + E ) o come (E + E )+E ?Grammatiche libere da contesto


Soluzione: Introduciamo piu’ variabili, ognuna che rappresentaespressioni con lo stesso grado di ”forza di legamento”1 Un fattore e’ un’espressione che non puo’ essere spezzata daun * o un + adiacente. I nostri fattori sono:1 Identificatori2 Un’espressione racchiusa tra parentesi.2 Un termine e’ un’espressione che non puo’ essere spezzata daun +. Ad esempio, a ∗ b puo’ essere spezzata da a1∗ o ∗a1.Non puo’ essere spezzata da +, perche’ ad esempio a1+a ∗ be’ (secondo le regole di precedenza) lo stesso di a1 + (a ∗ b), ea ∗ b + a1 e’ lo stesso di (a ∗ b)+a1.3 Il resto sono espressioni, cioe’ possono essere spezzate con * o+.Grammatiche libere da contestoUsiamo F per i fattori, T per i termini, e E per le espressioni.Consideriamo la seguente grammatica:1. I → a | b | Ia | Ib | I 0 | I 12. F → I | (E)3. T → F | T ∗ F4. E → T | E + TOra l’unico albero sintattico per a + a ∗ a e’:EE+TTT*FFFIIIaaaGrammatiche libere da contesto


Perche’ la nuova grammatica non e’ ambigua?Un fattore e’ o un identificatore o (E), per qualcheespressione E.L’unico albero sintattico per una sequenzaf 1 ∗ f 2 ∗ ···∗ f n−1 ∗ f ndi fattori e’ quello che da’ f 1 ∗ f 2 ∗ ···∗ f n−1 come termine e f ncome fattore, come nell’albero del prossimo lucido.Un’espressione e’ una sequenzat 1 + t 2 + ···+ t n−1 + t ndi termini t i . Puo’ essere solo raggruppata cont 1 + t 2 + ···+ t n−1 come un’espressione e t n come untermine.Grammatiche libere da contestoTT*FT...T*FT*FFGrammatiche libere da contesto


Derivazioni a sinistra e ambiguita’I due alberi sintattici per a + a ∗ aEEE+EE*EIE*EE+EIaIIIIaaaaa(a)danno luogo a due derivazioni:E ⇒ E + E ⇒ I + E ⇒ a + E ⇒ a + E ∗ Elm lm lm lm⇒lm a + I ∗ E lm ⇒ a + a ∗ E lm ⇒ a + a ∗ I lm ⇒ a + a ∗ aeE ⇒ E ∗ E ⇒ E + E ∗ E ⇒ I + E ∗ E ⇒ a + E ∗ Elm lm lm lm⇒ a + I ∗ E ⇒ a + a ∗ E ⇒ a + a ∗ I ⇒ a + a ∗ a(b)Grammatiche libere da contestoIn generale:Un albero sintattico, ma molte derivazioniMolte derivazioni a sinistra implica molti alberi sintattici.Molte derivazioni a destra implica molti alberi sintattici.Grammatiche libere da contesto


Teorema 5.29: Data una CFG G, una stringa terminale w ha duedistinti alberi sintattici se e solo se w ha due distinte derivazioni asinistra dal simbolo iniziale.Prova:(Solo se.) Se due alberi sintattici sono diversi, hanno un nododove sono state usate due diverse produzioni:A → X 1 X 2 ···X k e B → Y 1 Y 2 ···Y m . Le corrispondentiderivazioni a sinistra useranno queste diverse produzioni equindi saranno distinte.(Se.) Per come costruiamo un albero da una derivazione, e’chiaro che due derivazioni distinte generano due alberi distinti.Grammatiche libere da contestoAmbiguita’ inerenteUn CFL L e’ inerentemente ambiguo se tutte le grammaticheper L sono ambigue.Esempio: Consideriamo L ={a n b n c m d m : n ≥ 1, m ≥ 1} ∪ {a n b m c m d n : n ≥ 1, m ≥ 1}.Una grammatica per L e’S → AB | CA → aAb | abB → cBd | cdC → aCd | aDdD → bDc | bcGrammatiche libere da contesto


Guardiamo la struttura sintattica della stringa aabbccdd.SABa A bc B daabcdaGrammatiche libere da contestobVediamo che ci sono due derivazioni a sinistra:eS ⇒lmAB ⇒lmaAbB ⇒lmaabbB ⇒lmaabbcBd ⇒lmaabbccddS ⇒lmC ⇒lmaCd ⇒lmaaDdd ⇒lmaabDcdd ⇒lmaabbccddPuo’ essere provato che ogni grammatica per L si comporta comequesta. Il linguaggio L e’ quindi inerentemente ambiguo.Grammatiche libere da contesto


Linguaggi regolari e grammaticheUn linguaggio regolare e’ anche libero da contesto.Da una espressione regolare, o da un automa, si puo’ ottenereuna grammatica che genera lo stesso linguaggio.Grammatiche libere da contestoDa espressione regolare a grammaticaPer induzione sulla struttura della espressione regolare:se E = a, allora produzione S → ase E = ɛ, allora produzione S → ɛse E = F + G, allora produzione S → F | Gse E = FG , allora produzione S → FGse E = F ∗ , allora produzione S → FS | ɛGrammatiche libere da contesto


EsempioEspressione regolare: 0 ∗ 1(0 + 1) ∗Grammatica:S → ABCA → 0A | ɛB → 1C → DC | ɛD → 0 | 1Grammatiche libere da contestoDa automa a grammaticaUn simbolo non-terminale per ogni stato.Simbolo iniziale = stato iniziale.Per ogni transizione da stato s a stato p con simbolo a,produzione S → aP.Se p stato finale, allora produzione P → ɛGrammatiche libere da contesto


EsempioAutoma:Start1 00 1q 0q 2q 1 0, 1Grammatica:Q 0 → 1Q 0 | 0Q 2Q 2 → 0Q 0 | 1Q 1Q 1 → 0Q 1 | 1Q 1 | ɛLa stringa 1101 e’ accettata dall’automa. Nella grammatica, ha laderivazione:Q 0 ⇒ 1Q 0 ⇒ 11Q 0 ⇒ 110Q 2 ⇒ 1101Q 1 ⇒ 1101Grammatiche libere da contesto

More magazines by this user
Similar magazines