a cura di Luca Cabibbo e Walter Didimo

Documenti analoghi
Automi e Linguaggi Formali Automi a stack (Pushdown automata)

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1

LINGUAGGI CONTEXT FREE. Lezione Lezione

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1

Quiz sui linguaggi CF

Esempio stringhe palindrome 1

Automi a Pila e Grammatiche Libere dal Contesto. Automi a Pila e Grammatiche Libere dal Contesto

Automi a pila. Automi a pila

Proprietà dei linguaggi non contestuali

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto

Linguaggi Regolari e Linguaggi Liberi

Informatica Teorica. linguaggi non contestuali

Fondamenti d Informatica: lavoriamo con le grammatiche. Barbara Re, Phd

Informatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza

Forme Normali. Forma normale di Chomsky. E caratterizzata da regole di due tipi. A! BC dove A, B, C $ V N A! a con a $ V T. Forma normale di Greibach

Definizione di Grammatica

Corso di Linguaggi e Traduttori 1 AA GRAMMATICHE

Esercizi di Fondamenti di Informatica per la sicurezza. Stefano Ferrari

Linguaggi Regolari e Linguaggi Liberi

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO

Costruzione di espressioni regolari 4

Fondamenti di Informatica per la Sicurezza a.a. 2008/09. Automi. Stefano Ferrari. Unautomaastatifinitièunmodellomatematico caratterizzato da:

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1

Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis

RICHIAMI E COMPLEMENTI SU LINGUAGGI FORMALI E AUTOMI

Dispense del corso di Linguaggi di programmazione e laboratorio Linguaggi formali(versione non definitiva con diversi refusi) Francesco Sisini

Capitolo 5: Macchine di Turing e calcolabilitá secondo Turing

Capitolo 5: Macchine di Turing e calcolabilitá secondo Turing

controllo stringa a a b a b b c c b a b x y z pila di memoria

Espressioni Regolari

Proprietà dei linguaggi regolari

Parte n.4 Linguaggi: Gerarchia ed Operazioni

Definire tramite una grammatica ad attributi il

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

Le grammatiche formali

Forma Normale di Chomsky

Ma il programma in Fig. 8.2 del libro? Stampa hello, world, dato un input n se e solo se l equazione

Espressività e limitazioni delle grammatiche regolari

Fondamenti di informatica per la sicurezza anno accademico docente: Stefano Ferrari

MODULO 04 ELEMENTI DI TEORIA DEI LINGUAGGI FORMALI

Nozioni Preliminari e Terminologia. Alfabeti Stringhe Linguaggi

AUTOMI A PILA. M.P. Schutzenberger

Parole note, nuovi significati: linguaggio, determinismo e infinito

Corso di Laurea Magistrale in Ingegneria Informatica A.A Linguaggi Formali e Compilatori. Automi. Giacomo PISCITELLI

Proprieta dei Linguaggi regolari

Automa deterministico con prospezione 1. < {q}, Σ, Σ V, δ, q, S, Φ > δ(a, X) = α R. se a Gui(X α) senza spostamento della testina.

Pumping lemma per i linguaggi Context-free

Aniello Murano Automi e Pushdown

Equivalenza e minimizzazione di automi. Equivalenza e minimizzazione di automi

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Fondamenti d Informatica: Le Macchine di Turing. Barbara Re, Phd

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

Grammatiche. Rosario Culmone, Luca Tesei. 20/11/2006 UNICAM - p. 1/49

(2) se A A, allora A c A; (3) se {A n } A, allora +

Linguaggi regolari e automi a stati finiti

Dispense del corso di Linguaggi Formali e Automi

Espressioni regolari descrivono i linguaggi regolari. Un FA (NFA o DFA) è un metodo per costruire una macchina che riconosce linguaggi regolari.

3/10/ Divisibilità e massimo comun divisore

CAPITOLO SECONDO APPLICAZIONI TRA INSIEMI E RELAZIONI DI EQUIVALENZA

LINGUAGGI E GRAMMATICHE FORMALI

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.

I metodi formali dell Analisi Lessicale: Le Espressioni Regolar

Reti Sequenziali. Reti Sequenziali. Corso di Architetture degli Elaboratori

Presentazioni di gruppi: generatori e relazioni

Macchine di TURING. Alan Mathison Turing ( )

Università degli Studi di Udine. 1 Automi e Linguaggi. Prova Scritta di Fondamenti dell Informatica II Alcune Soluzioni

Progamma sintetico. Nozioni preliminari Automi Finiti Macchine di Turing Limiti delle macchine di Turing La tesi di Church-Turing Le classi P e NP

PARALLELISMO TRA RETTA E PIANO SVILUPPATO SUL PARALLELISMO TRA PIANI

GRAMMATICHE LIBERE DAL CONTESTO

Linguaggi formali e compilazione

Espressioni regolari

ESERCIZI SULLE DISEQUAZIONI I

Grammatiche e Linguaggi Context-Free

Appunti sulla teoria degli automi, dei linguaggi e della calcolabilità

Linguaggi formali e compilazione

Corso di Laurea Magistrale in Ingegneria Informatica A.A Linguaggi Formali e Compilatori. I linguaggi formali. Giacomo PISCITELLI

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Fondamenti di informatica Esercizi Svolti Macchine di Turing. Realizzati da: Roberto Quaranta Matr

10.2 EQUIVALENZA TRA ESPRESSIONI REGOLARI, GRAMMATICHE REGOLARI E AUTOMI

Macchine di Turing. Francesco Paoli. Istituzioni di logica, Francesco Paoli (Istituzioni di logica, ) Macchine di Turing 1 / 29

Giovanna Carnovale. October 18, Divisibilità e massimo comun divisore

Elaborazione di File di Dati. Uso di semplici comandi Espressioni regolari AWK

STRUMENTI FORMALI PER L ANALISI LESSICALE SINTATTICA

Fondamenti di Informatica. Algoritmo. Algoritmo funzionale. Prof.ssa Enrica Gentile Informatica e Comunicazione Digitale a.a.

Algoritmi e Principi dell Informatica

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI

ANALISI MATEMATICA PER IL CdL IN INFORMATICA ESERCIZI SULLE DISEQUAZIONI

Sipser, Capitolo 0. Alfabeti, Stringhe, Linguaggi

Automi per il riconoscimento di linguaggi.

AUTOMA A STATI FINITI

Linguaggi e Grammatiche Liberi da Contesto

1 Relazione di congruenza in Z

ALGEBRE DI BOOLE. (d) x, y X x y oppure y x.

Macchina di Turing ... !!... !!! a b b! b a! Nastro di Input. testina. s t q i. s r. Unità di Controllo q j S / D / F

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

Corso di ALGEBRA (M-Z) INSIEMI PARZIALMENTE ORDINATI E RETICOLI

Precorsi di matematica

Intorno al Lemma d Iterazione per Linguaggi Liberi dal Contesto

Transcript:

a cura di Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1 automi a pila automi a pila e grammatiche non contestuali notazioni sul livello degli esercizi: (*) facile, (**) non difficile (***) media complessità, (****) difficile, (*****) quasi impossibile Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 2

automa a pila non deterministico (PDA) : A = <, Γ, Z 0, Q, q 0, F, δ > dove èl alfabeto (finito) di input Γ èl alfabeto (finito) dei simboli della pila Z 0 èil simbolo di pila iniziale Q è un insieme (finito e non vuoto) di stati q 0 Q è lo stato iniziale F Q è l insieme degli stati finali δ : Q ( {ε}) Γ P(Q Γ*) è la funzione di transizione; la transizione δ(q, a, A) <q,γ> indica che: dallo stato q, leggendo a (che può anche essere ε) dalla stringa di input e A come elemento affiorante dalla pila, si passa allo stato q e si inserisce γ al posto di A in pila Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 3 un automa a pila è deterministico se per ogni stato q, simbolo di input a e simbolo di pila A, riesce: δ(q, a, A) + δ(q, ε, A) 1 configurazione (istantanea): <q, x, γ>, dove q è lo stato corrente x è la stringa di input ancora da leggere γ è la stringa ancora presente in pila (il primo simbolo di γ è quello affiorante dalla pila) transizione tra configurazioni: <q, x, γ> <q, x, γ > x = ax, γ = Aα, γ = βα, <q, β> δ(q, a, A) oppure x = x, γ = Aα, γ = βα, <q, β> δ(q, ε, A) computazione: chiusura transitiva e riflessiva * di Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 4

definizioni di accettazione: accettazione per pila vuota: una stringa x è accettata da un PDA al termine della computazione su x la pila è vuota accettazione per stato finale: una stringa x è accettata da un PDA al termine della computazione su x il PDA è su uno stato finale linguaggio riconosciuto da un PDA: insieme delle stringhe accettate dal PDA teorema: i linguaggi riconosciuti dai PDA che accettano per pila vuota sono tutti e soli i linguaggi riconosciuti dai PDA che accettano per stato finale (equivalenza dei linguaggi nelle due definizioni) Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 5 Esercizio 1(**) definire un automa a pila per il linguaggio non contestuale L = {a n b n : n 1}. accettazione per pila vuota = {a,b}, Γ={Z, A}, Z 0 = Z, Q ={q 0, q 1 } δ(q 0, a, Z) = {<q 0, A>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, A) = {<q 1, ε >} δ(q 1, b, A) = {<q 1, ε >} az A, aa AA q 0 q 1 Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 6

computazione sulla stringa aaabbb <q 0, aaabbb, Z> <q 0, aabbb, A> <q 0, abbb, AA> <q 0, bbb, AAA> <q 1, bb, AA> <q 1, b, A> <q 1, ε, ε> accettazione per stato finale = {a,b}, Γ={Z, A}, Z 0 = Z, Q ={q 0, q 1, q F }, F = {q F } δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, A) = {<q 1, ε >} δ(q 1, b, A) = {<q 1, ε >} δ(q 1, ε, Z) = {<q F, Z>} domanda: come si può modificare l automa affinché accetti contemporaneamente per pila vuota e per stato finale? Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 7 Esercizio 2(***) definire un automa a pila per il linguaggio non contestuale L = {a n b 2n : n 1}. accettazione per pila vuota δ(q 0, a, Z) = {<q 0, AA>} δ(q 0, a, A) = {<q 0, AAA>} δ(q 0, b, A) = {<q 1, ε >} δ(q 1, b, A) = {<q 1, ε >} az AA, aa AAA q 0 q 1 Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 8

soluzione alternativa con accettazione per pila vuota δ(q 0, a, Z) = {<q 0, A>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, A) = {<q 1, A>} δ(q 1, b, A) = {<q 2, ε>} δ(q 2, b, A) = {<q 1, A>} az A, aa AA ba A q 0 q 1 ba A q 2 Esercizio 3(***) definire un automa a pila per il linguaggio non contestuale L = {a n b m : m n 1}. Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 9 accettazione per pila vuota (e stato finale) δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, A) = {<q 1, ε>} δ(q 1, b, A) = {<q 1, ε>} δ(q 1, b, Z) = {<q 1, Z>} δ(q 1, ε, Z) = {<q F, ε>} az AZ, aa AA q 0 q 1, bz Z εz ε q F Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 10

albero di computazione per la stringa abb <q 0, abb, Z> <q 0, bb, AZ> <q 1, b, Z> δ(q 1, b, Z) δ(q 1, ε, Z) <q 1, ε, Z> <q F, b, ε> non accettante <q F, ε, ε> accettata sia per stato finale che per pila vuota Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 11 Esercizio 4(***) definire un automa a pila per il linguaggio non contestuale L = {a n b m : n m 1}. accettazione per stato finale δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, A) = {<q 1, ε >} δ(q 1, b, A) = {<q 1, ε >} δ(q 1, ε, A) = {<q F, ε >} δ(q 1, ε, Z) = {<q F, ε>} az AZ, aa AA q 0 q 1 εz ε εa ε q F Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 12

accettazione per pila vuota δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, b, A) = {<q 1, ε>} δ(q 1, b, A) = {<q 1, ε>} δ(q 0, a, A) = {<q 0, AA>, <q 0, A>} δ(q 1, ε, Z) = {<q 1, ε>} az A, aa AA aa A q 0 q 1 εz ε Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 13 albero di computazione per la stringa aab <q 0, aab, Z> <q 0, ab, AZ> <q 0, b, AAZ> <q 0, b, AZ> non accettata <q 1, ε, AZ> <q 1, ε, AZ> <q 1, ε, Z> <q 1, ε, ε> accettata per pila vuota Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 14

Esercizio 5(***) definire un automa a pila per il linguaggio non contestuale L = {a n b m c k : n,m,k 1 ed n=m o n=k}. accettazione per pila vuota e stato finale δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, a, A) = {<q 0, AA>} conta le a δ(q 0, b, A) = {<q 1, ε>, <q 2, A>} crea due rami: (n=m) o (n=k) δ(q 1, b, A) = {<q 1, ε >} δ(q 1, c, Z) = {<q 3, Z>} δ(q 3, c, Z) = {<q 3, Z>} δ(q 3, ε, Z) = {<q F, ε>} ramo n=m δ(q 2, b, A) = {<q 2, A>} δ(q 2, c, A) = {<q 4, ε>} ramo n=k δ(q 4, c, A) = {<q 4, ε>} δ(q 4, ε, Z) = {<q F, ε>} Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 15 cz Z cz Z q 1 q 3 εz ε az AZ, aa AA q 0 ba A q 2 ca ε q 4 εz ε q F ba A ca ε Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 16

Esercizio 6(***) definire un automa a pila per il linguaggio non contestuale L = {a n b m a m b n : n,m 1}. accettazione per pila vuota e stato finale δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, A) = {<q 1, BA>} δ(q 1, b, B) = {<q 1, BB>} δ(q 1, a, B) = {<q 2, ε>} δ(q 2, a, B) = {<q 2, ε>} δ(q 2, b, A) = {<q 3, ε>} δ(q 3, b, A) = {<q 3, ε>} δ(q 3, ε, Z) = {<q F, ε>} Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 17 bb BB ab ε svuota le B ba BA q 1 ab ε q 2 svuota le A εz ε az AZ, aa AA q 0 inserisce le B q 3 q F inserisce le A Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 18

Esercizio 7(***) definire un automa a pila per il linguaggio delle stringhe su {a,b} tali che #a = #b. accettazione per pila vuota e stato finale δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, b, Z) = {<q 0, BZ>} δ(q 0, a, A) = {<q 0, AA>} δ(q 0, b, B) = {<q 0, BB>} δ(q 0, a, B) = {<q 0, ε>} δ(q 0, b, A) = {<q 0, ε>} δ(q 0, ε, Z) = {<q F, ε>} osservazione nella pila non ci possono essere contemporaneamente delle A e delle B Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 19 Esercizio 8(***) definire un automa a pila per il linguaggio delle stringhe su {a,b,c} tali che #a = #b + #c. accettazione per pila vuota e stato finale δ(q 0, a, Z)={<q 0, AZ>}, δ(q 0, b, Z)={<q 0, BZ>}, δ(q 0, c, Z)={<q 0, BZ>} δ(q 0, a, A)={<q 0, AA>}, δ(q 0, b, B)={<q 0, BB>}, δ(q 0, c, B)={<q 0, BB>} δ(q 0, a, B)={<q 0, ε>}, δ(q 0, b, A)={<q 0, ε>}, δ(q 0, c, A)={<q 0, ε>} δ(q 0, ε, Z) = {<q F, ε>} Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 20

Esercizio 9(***) definire un automa a pila per ciascuno dei seguenti linguaggi non contestuali: L = {a n c m b n : n,m 1} L = {(ab) n (cd) n : n 1} L = stringhe su {a,b,c,d} tali che #a + #b = #c + #d Esercizio 10(**) mostrare l albero di computazione per la stringa aaabb nell automa dell Esercizio 4 Esercizio 11(**) mostrare l albero di computazione per la stringa aabcc nell automa dell Esercizio 5 Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 21 input : una grammatica non contestuale (CFG) G = < V T,V N, P, S > ouput : un PDA A = <, Γ, Z 0, Q, q 0, δ > che accetta per pila vuota ricavare una G = < V T,V N, P, S > in GNF equivalente a G ma che non genera ε = V T Γ = V N Z 0 = S Q = {q} e q 0 = q per ogni produzione A aγ introdurre δ(q, a, A) <q, γ> se G genera ε allora aggiungere lo stato q a Q, porre q 0 = q ed aggiungere le seguenti transizioni: δ(q, ε, Z 0 ) <q, ε> (per riconoscere ε) δ(q, ε, Z 0 ) <q, Z 0 > (per ricondursi alle transizioni su q) Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 22

Esercizio 12(***) definire un automa a pila non deterministico che riconosce il linguaggio generato dalla seguente grammatica non contestuale: S a S + S S * S (S) portiamo la grammatica in GNF portiamo in quasi CNF: S SPS SMS ASZ a P +, M *, A (, Z ) scegliamo l ordinamento S < P < M < A < Z Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 23 eliminiamo la ricursione sinistra su S: S ASZR ar ASZ a R PSR MSR PS MS P +, M *, A (, Z ) sostituiamo a ritroso e semplifichiamo S (SZR ar (SZ a R +SR *SR +S *S Z ) poniamo: = {a, +, *, (, )}, Γ = {S, R, Z}, Q = {q}, q 0 = q, Z 0 = S costruiamo l insieme delle transizioni: Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 24

δ(q, (, S) = {<q, SZR>, <q, SZ>} δ(q, a, S) = {<q, R>, <q, ε>} δ(q, +, R) = {<q, SR>, <q, S>} δ(q, *, R) = {<q, SR>, <q, S>} δ(q, ), Z) = {<q, ε>} Esercizio 13(***) definire un automa a pila non deterministico per la seguente grammatica G non contestuale: S ε [S] SS (L(G) è anche detto linguaggio delle parentesi bilanciate o Dyck 1 ) Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 25 consideriamo la grammatica equivalente a G ma che non genera la stringa vuota: S [S] SS [] scriviamo la grammatica in GNF: S [Z [SZ [ZR [SZR R [Z [SZ [ZR [SZR [ZRR [SZRR Z ] poniamo: = {[, ]}, Γ = {S, R, Z}, Q = {q, q }, q 0 = q, Z 0 = S costruiamo l insieme delle transizioni: δ(q, [, S) = {<q, Z>, <q, SZ>, <q, ZR>, <q, SZR>} δ(q, [, R) = {<q, Z>, <q, SZ>, <q, ZR>, <q, SZR>, <q, ZRR>, <q, SZRR>} δ(q, ], Z) = {<q, ε>} δ(q, ε, S) = {<q, ε>, <q, S>} Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 26

osservazione: esiste un PDA molto più semplice per il linguaggio definito dalla grammatica delle parentesi bilanciate S = simbolo di pila iniziale δ(q, ε, S) = {<q, ε>} δ(q, [, S) = {<q, AS>} δ(q, [, A) = {<q, AA>} δ(q, ], A) = {<q, ε>} la situazione nella pila all istante generico è così riassunta: - se l elemento affiorante è S allora c è un bilanciamento di parentesi - se l elemento affiorante è A allora ci sono più parentesi aperte Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 27 input : un PDA A = <, Γ, Z 0, Q, q 0, δ > che accetta per pila vuota ouput : una grammatica non contestuale (CFG) G = < V T,V N, P, S > V T = V N = {[paq] : p, q Q, A Γ} {S} l insieme P delle produzioni è il seguente: S [q 0 Z 0 q] q Q [paq] a <q, ε> δ(p, a, A) [paq m+1 ] a[q 1 B 1 q 2 ] [q 2 B 2 q 3 ]... [q m B m q m+1 ] su ogni possibile scelta di q 2,..., q m+1 Q <q 1, γ> δ(p, a, A) con γ = B 1... B m Esercizio 14(***) definire una grammatica non contestuale che genera il linguaggio riconosciuto dal seguente automa a pila non deterministico: Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 28

= {[, ]}, Γ = {T, A}, Q = {q 0 }, Z 0 = T δ(q 0, ε, T) = {<q 0, ε>} δ(q 0, [, T) = {<q 0, AT>} δ(q 0, [, A) = {<q 0, AA>} δ(q 0, ], A) = {<q 0, ε>} produzioni per l assioma: S [q 0 Tq 0 ] produzioni per δ(q 0, ε, T) = {<q 0, ε>}: [q 0 Tq 0 ] ε Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 29 produzioni per δ(q 0, ], A) = {<q 0, ε>}: [q 0 ] ] produzioni per δ(q 0, [, T) = {<q 0, AT>} [q 0 Tq 0 ] [ [q 0 ] [q 0 Tq 0 ] produzioni per δ(q 0, [, A) = {<q 0, AA>} [q 0 ] [ [q 0 ] [q 0 ] poiché q 0 è il solo stato dell automa, possiamo rinominare i non terminali al modo: [q 0 Tq 0 ] = T, [q 0 ] = A, e riscrivere dunque la grammatica come segue: S T (S = assioma) T ε [AT A ] [AA Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 30

Esercizio 15(***) definire una grammatica non contestuale corrispondente al seguente automa a pila non deterministico: = {a,b}, Γ = {Z, A}, Q = {q 0, q 1, q F }, Z 0 = Z δ(q 0, a, Z) = {<q 0, AZ>} δ(q 0, a, A) = {<q 0, A>, <q 0, AA>} δ(q 0, b, A) = {<q 1, ε>} δ(q 1, b, A) = {<q 1, ε>} δ(q 1, ε, Z) = {<q F, ε>} Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 31 produzioni per l assioma: S [q 0 Zq 0 ] [q 0 Zq 1 ] [q 0 Zq F ] produzioni per <q 0, AZ> δ(q 0, a, Z): [q 0 Zq 0 ] a[q 0 ] [q 0 Zq 0 ] [q 1 Zq 0 ] [q F Zq 0 ] [q 0 Zq 1 ] a[q 0 ] [q 0 Zq 1 ] [q 1 Zq 1 ] [q F Zq 1 ] [q 0 Zq F ] a[q 0 ] [q 0 Zq F ] [q 1 Zq F ] [q F Zq F ] produzioni per <q 0, A> δ(q 0, a, A): [q 0 ] a[q 0 ] [q 0 ] a[q 0 ] [q 0 ] a[q 0 ] produzioni per <q 0, AA> δ(q 0, a, A): [q 0 ] a[q 0 ] [q 0 ] [q 1 ] [q F ] [q 0 ] a[q 0 ] [q 0 ] [q 1 ] [q F ] [q 0 ] a[q 0 ] [q 0 ] [q 1 ] [q F ] Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 32

produzioni per <q 1, ε> δ(q 0, b, A): [q 0 ] b produzioni per <q 1, ε> δ(q 1, b, A): [q 1 ] b produzioni per <q F, ε> δ(q 1, ε, Z): [q 1 Zq F ] ε proviamo a semplificare: - rinominiamo ciascun non terminale al modo: [q i Aq j ] = A ij - l intera grammatica si riscrive dunque come segue: Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 33 S Z 00 Z 01 Z 0F Z 00 aa 00 Z 00 aa 01 Z 10 aa 0F Z F0 Z 01 aa 00 Z 01 aa 01 Z 11 aa 0F Z F1 Z 0F aa 00 Z 0F aa 01 Z 1F aa 0F Z FF A 00 aa 00 A 00 aa 01 A 10 aa 0F A F0 aa 00 A 01 aa 00 A 01 aa 01 A 11 aa 0F A F1 aa 01 b A 0F aa 00 A 0F aa 01 A 1F aa 0F A FF aa 0F A 11 b Z 1F ε i simboli fecondi sono: A 01,A 11,Z 1F,Z 0F,S eliminando dunque i simboli: Z 00, Z 01,A 00,A 0F la grammatica diventa Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 34

S Z 0F Z 0F aa 01 Z 1F A 01 aa 01 A 11 aa 01 b A 11 b Z 1F ε eliminando le ε-produzioni e poi le produzioni unitarie si ha: S aa 01 A 01 aa 01 A 11 aa 01 b A 11 b rinominiamo i non terminali al modo: A 01 =A, A 11 = B S aa A aab aa b B b Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 35