LINGUAGGI FORMALI Esercizi PPPPPP Nicola Fanizzi LINGUAGGI DI PROGRAMMAZIONE Corso di Informatica T.P.S. Dipartimento di Informatica Università di Bari ”Aldo Moro” [2014/01/28-13:30:23] [ 2 / 14 ] Indice 1 Introduzione ai Linguaggi Formali 1.1 Operazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Grammatiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Automi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 7 2 Linguaggi Regolari 2.1 Grammatiche Lineari Destre . . . . . 2.2 Automi . . . . . . . . . . . . . . . . 2.2.1 DFA . . . . . . . . . . . . . . 2.2.2 NFA e trasformazioni . . . . . 2.3 Espressioni Regolari . . . . . . . . . 2.4 Applicazioni del Teorema di Kleene . 2.5 Proprietà di chiusura . . . . . . . . . 2.6 Pumping Lemma – Linguaggi regolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 8 9 9 10 10 11 3 Linguaggi Liberi 3.1 Grammatiche . . . . 3.2 Pumping Lemma . . 3.3 Proprietà di chiusura 3.4 Forme Normali . . . 3.5 Automi a Pila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 12 13 13 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [ 3 / 14 ] [ 4 / 14 ] P1 Introduzione ai Linguaggi Formali 1.1 Operazioni 1.1.1 – Dato L = {an bn | n > 0}, determinare L2 e L3 1.1.2 – Dato L = {00, 01, 100}, stabilire se appartengono a L∗ le stringhe • 000010000 • 100000100001 • 00000100 Quali di queste appartengono a L4 ? Suggerimento: scomporre nelle varie sotto-stringhe ¯ 1.1.3 – Dato L = {0n 1n | n > 0}, determinare L Suggerimento: scomporre in sotto-insiemi (disgiunti) definiti anche ricorsivamente 1.2 Grammatiche 1.2.1 – Data G = (Σ, V, S, P ), con • Σ = {a, b} • V = {S, B} • P = {S −→ aB, B −→ bS|b} indicare 1. il tipo di G 2. L(G) [ 5 / 14 ] [ 6 / 14 ] 1. INTRODUZIONE AI L INGUAGGI F ORMALI 1.2.2 – Data G = (Σ, V, S, P ), con • Σ = {a, b, c, d} • V = {S, E, F } • P = {S −→ ESF |EF, E −→ ab, F −→ cd} indicare 1. il tipo di G 2. L(G) 1.2.3 – Data G = ({a}, {S}, S, P ), con • P = {S −→ aSa|aa|a} indicare 1. il tipo di G 2. L(G) ed il suo tipo 1.2.4 – Dato G = ({a, b, c} , {S, A} , S, P ) dove • P = {S −→ Sc|A, A −→ aAb|ab} indicare L(G) 1.2.5 – Dato G = ({a, b} , {S} , S, P ) dove • P = {S −→ |SS|aSb|bSa} indicare L(G) 1.2.6 – Dato G = ({0} , {S, A, B} , S, P ) dove • P = {S −→ A0, A −→ B, B −→ A0} indicare L(G) ed il suo tipo 1.2.7 – Dato Σ = {0, 1}, definire G tale che L = L(G) nei seguenti casi: i. L delle stringhe con uno ed un solo 1 ii. L delle stringhe con almeno uno 0 iii. L delle stringhe con non più di tre 1 iv. L delle stringhe con almeno tre 0 1.2.8 – Dato Σ = {0, 1}, definire G per i seguenti linguaggi: i. L1 = {0n 1m | m > n ≥ 0} [ 7 / 14 ] 1.3. AUTOMI ii. L2 = 0n 12n | n ≥ 0 iii. L3 = 0n 1n+2 | n ≥ 1 iv. L4 = 0n 1n−3 | n ≥ 3 v. L1 ∪ L2 vi. L1 · L2 vii. L31 viii. L∗1 ¯4 ix. L1 − L 1.2.9 – Dato L = {w ∈ {0, 1} | |w| mod 3 = 1}, definire G tale che L = L(G) 1.2.10 – Dato L = 0n 1k | k = n + 1, n ≥ 0 , definire G tale che L = L(G) 1.3 Automi 1.3.1 – Dato l’automa M definito da: a q0 q0 q2 → q0 ∗q1 q2 b q1 q2 q1 Quali tra a3 b, abaab, a4 bba, a6 b8 ab sono accettate? 1.3.2 – Dato l’automa definito nell’Esercizio 1.3.1, fornire il diagramma di transizione 1.3.3 – Dato l’automa definito dal diagramma di transizione 0 1 q0 0 q1 1 q2 0,1 fornire la sua tabella di transizione 1.3.4 – Dato l’automa definito dal diagramma di transizione b b a q0 a q1 q2 b indicare il linguaggio accettato a P2 Linguaggi Regolari 2.1 Grammatiche Lineari Destre 2.1.1 – Definire grammatiche lineari destre che generino ognuno linguaggi seguenti: i. L delle stringhe binarie con uno ed un solo 1 ii. L delle stringhe binarie con almeno uno 0 iii. L delle stringhe binarie con non più di tre 1 iv. L delle stringhe binarie con almeno tre 0 2.1.2 – Definire una grammatica lineare destra che generi {1n 0 | n > 0} ∪ 0k 1 | k > 0 2.2 2.2.1 Automi DFA 2.2.1 – Trovare un DFA M tale che accetti l’insieme delle stringhe binarie che abbiano 11 come prefisso 2.2.2 – Trovare un DFA tale che accetti (10)k | n > 0 ∗ 2.2.3 – Dato L = w ∈ {a, b} | |w| mod 3 = 1 , definire un DFA M tale che L = L(M ) 2.2.4 – Definire un DFA M che accetta tutte le stringhe binarie tranne quelle che contengono 001 come sottostringa 2.2.5 – Dato L = {awa | w ∈ {a, b}∗ }, definire il DFA M tale che L = L(M ) 2.2.6 – Dato L dell’esercizio 2.2.5, definire il DFA M tale che L2 = L(M ) [ 8 / 14 ] [ 9 / 14 ] 2.3. ESPRESSIONI REGOLARI 2.2.7 – Trovare un DFA per i seguenti linguaggi sull’alfabeto binario: i. {w ∈ {a, b}∗ | |w| mod 3 = 0} ii. {w ∈ {a, b, c}∗ | |w| mod 5 6= 0} iii. w ∈ {0, 1}∗ | n1 (w) mod 3 = 0 iv. w ∈ {0, 1}∗ | [n0 (w) mod 3] > [n1 (w) mod 3] 2.2.2 NFA e trasformazioni 2.2.8 – Trovare un DFA equivalente al NFA q1 a q3 a q4 a q0 a a q2 q5 a {baban | n ≥ 0} ∪ {babm | m ≥ 0} ¯ 2.2.9 – Definire un NFA con massimo 5 stati per 2.2.10 – Trovare un DFA equivalente a: 0 q0 2.3 1 0, 1 q1 0, 1 q2 Espressioni Regolari 2.3.1 – Data R = (00)∗ (11)∗ 1, definire L(R) come insieme 2.3.2 – Definire un’espressione regolare per ognuno linguaggi seguenti: [ 10 / 14 ] 2. LINGUAGGI REGOLARI i. L delle stringhe binarie con uno ed un solo 1 ii. L delle stringhe binarie con almeno uno 0 iii. L delle stringhe binarie con non più di tre 1 iv. L delle stringhe binarie con almeno tre 0 2.3.3 – Definire un’espressione regolare R per il linguaggio {w ∈ {0, 1}∗ | w non contiene zeri consecutivi } 2.3.4 – Definire un’espressione regolare R per il linguaggio ai bj | i + j pari 2.3.5 – Definire un’espressione regolare R per il linguaggio w ∈ {0, 1}∗ | n0 (w) + n1 (w) dispari 2.4 Applicazioni del Teorema di Kleene 2.4.1 – Definire un DFA per ognuna delle espressioni regolari ottenute nell’Es. 2.3.2. 2.4.2 – Definire espressioni regolari per i linguaggi di cui all’Es. 2.2.7 trasformando ognuno dei DFA. 2.4.3 – Data R = (00)∗ (11)∗ 1, definire un DFA M ed una grammatica G tali che L(R) = L(M ) = L(G) 2.4.4 – Dato l’automa M dell’Es. 2.2.8, trovare una R tale che L(R) = L(M ). 2.4.5 – Dato l’automa M dell’Es. 2.2.9, trovare una R tale che L(R) = L(M ). 2.4.6 – Dato l’automa M dell’Es. 2.2.10, trovare una R tale che L(R) = L(M ). 2.4.7 – Definire un NFA che accetti il linguaggio denotato da: ((10 + 1)(11)∗ ) + (01)∗ 2.5 Proprietà di chiusura 2.5.1 – Definire una grammatica lineare destra che generi: w ∈ {a, b}∗ | w = ak n ∨ bk a, k > 0 2.5.2 – Definire un DFA per il complemento dei linguaggi di cui all’Es. 2.2.7. 2.5.3 – Definire una grammatica regolare per ognuno dei DFA ottenuti nell’Es. 2.5.2. 2.5.4 – Sfruttando la chiusura rispetto all’unione, definire una grammatica lineare destra ed un DFA per il linguaggio {. . . | . . .} *da completare* 2.5.5 – Trovare gli NFA che accettino i. L((0 + 1)1∗ ) ∩ L(011∗ ) ii. L(ab∗ a∗ ) ∩ L(a∗ b∗ a) 2.6. PUMPING LEMMA – LINGUAGGI REGOLARI 2.6 [ 11 / 14 ] Pumping Lemma – Linguaggi regolari Esercizi da risolvere attraverso il Pumping Lemma su Lreg . 2.6.1 – Provare che non sono regolari i linguaggi: i. 0i 1j | i, j > 0, i < j ii. ai bj | i, j > 0, i > j iii. 0i 1j | i, j > 0, 2i > j iv. ai bj | i, j > 0, i 6= j v. {w ∈ {0, 1}∗ | i, j > 0, 2i > j} vi. w ∈ {0, 1}∗ | n0 (w) 6= n1 (w) vii. w ∈ {a, b}∗ | na (w) 6= nb (w) 2.6.2 – Provare che non sono regolari i linguaggi: i. ai bai | i > 0 ii. wwR | w ∈ {a, b}∗ iii. {ww | w ∈ {0, 1}∗ } 2.6.3 – Provare che non sono regolari i linguaggi: i. ak bk ck | k ≥ 0 ii. ah bk ck dh | h, k ≥ 0 2.6.4 – Provare che non sono regolari i linguaggi: i. 0k | k = 2i , i ≥ 0 ii. 0h | h = i2 , i ≥ 0 iii. w ∈ {a, b}∗ | |w| = i2 , i ≥ 0 2.6.5 – Stabilire se possa essere regolare {w1 cw2 | w1 , w2 ∈ {a, b}∗ , w1 6= w2 } P3 Linguaggi Liberi 3.1 Grammatiche 3.1.1 – Determinare una grammatica G per i seguenti linguaggi: 1. wwR | w ∈ {a, b, c}∗ 2. w ∈ {a, b}∗ | na (w) = nb (w) 3.2 Pumping Lemma 3.2.1 – Dimostrare che i seguenti linguaggi non sono liberi da contesto: i. {an bn cn | n > 0} ii. {an bm cp | 1 ≤ n ≤ m ≤ p} iii. {ai bj ci dj | i, j ≥ 1} iv. {ww | w ∈ {0, 1}+ } 3.2.2 – Dimostrare che i seguenti linguaggi non sono liberi da contesto: i. {at | t numero primo} 2 ii. {an | n ≥ 0} iii. {ai bj | i = 2j , i, j ≥ 0} iv. {an bm | n > 2m , n, m ≥ 0} v. {ak br | k > 0, r > k2 } n vi. {a2 | n ≥ 1} [ 12 / 14 ] 3.3. PROPRIETÀ DI CHIUSURA 3.3 [ 13 / 14 ] Proprietà di chiusura 3.3.1 – Determinare una grammatica G per i seguenti linguaggi: 1. 0i 1j | i 6= j, i, j > 0 2. w ∈ {a, b}∗ | na (w) 6= nb (w) 3.3.2 – Dimostrare che i seguenti linguaggi sono liberi da contesto: i. {0n 1n | n = 2k + 1, k > 0} ii. {an bn | n > 0, n 6= 7} iii. w ∈ {a, b}∗ | na (w) = nb (w) e w non contiene bbb iv. cn ai bk cm | n, m, i, k > 0, i 6= k ¯ dei seguenti linguaggi: 3.3.3 – Dimostrare che sono liberi da contesto i linguaggi complemento L i. {ww | w ∈ {0, 1}∗ } ii. ai bi ci | i ≥ 0 3.3.4 – Dimostrare che i seguenti linguaggi non sono liberi da contesto: i. {an bn cn | n > 0} ii. w ∈ {a, b, c}∗ | na (w) = nb (w) = nc (w) 3.4 Forme Normali 3.4.1 – Date le grammatiche di cui all’Esercizio 3.1.1, trasformarle in GNF. 3.5 Automi a Pila 3.5.1 – Date le grammatiche di cui all’Esercizio 3.4.1, ricavare i PDA che riconoscano gli stessi linguaggi. Bibliografia [1] Giorgio Ausiello, Fabrizio D’Amore, e Giorgio Gambosi. Linguaggi, Modelli, Complessità. FrancoAngeli, 2003. [2] Daniel I.A. Cohen. Introduction to Computer Theory. Wiley, 1996. [3] John E. Hopcroft, Rajeev Motwani, e Jeffrey D. Ullman. Automi, Linguaggi e Calcolabilità. Pearson Italia, 3a edizione, 2009. [4] Peter Linz. An Introduction to Formal Languages and Automata. Jones & Bartlett, 5a edizione, 2012. [5] Robert N. Moll, Michael A. Arbib, e Assaf J. Kfoury. An introduction to formal language theory. Springer, 1988. [6] Michael Sipser. Introduction to the theory of computation. Thomson, 2a edizione, 2005. [7] Thomas Sudkamp. Languages and Machines. Addison-Wesley, 3a edizione, 2006. [ 14 / 14 ]
© Copyright 2024 Paperzz