PPPPPP - LACAM

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 ]