Analisi Lessicale:
Linguaggi Regolari
Nicola Fanizzi
Corso di Linguaggi di Programmazione - 010194
Dipartimento di Informatica
Università degli Studi di Bari
18 marzo 2015
Sommario
1
Introduzione
Token
2
Espressioni Regolari
Linguaggi Formali e Operazioni
3
Automi a Stati Finiti
Automi Non-Deterministici
Automi Deterministici
-chiusura
4
Corrispondenze
Corrispondenza Automi-ER
Grammatiche Regolari
5
Minimizzazione
Indistinguibilità
Tabella a Scala
6
Pumping Lemma – linguaggi regolari
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
2 / 70
Introduzione
trasformazione stringa di caratteri in lista di token
Come si implementa?
Teoria del ling. formali
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
3 / 70
Introduzione [. . . cont.]
Scopo:
riconoscere nella stringa in ingresso
gruppi di caratteri che corrispondono a categorie
sintattiche
trasformare la stringa di caratteri in sequenze di simboli astratti
– token – da passare all’analisi sintattica
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
4 / 70
Introduzione [. . . cont.]
separazione tra analisi lessicale e sintattica
motivi teorici?
motivi pratici?
tecnologie più efficienti
maggiore semplificazione della specifica e struttura del
compilatore
semplicità nella descrizione del linguaggio
(prog. macchina astratta / programmazione)
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
5 / 70
Token
Token rappresentazione astratta di una sottostringa in ingresso
hnome, valorei
nome simbolo astratto che rappresenta una categoria sintattica
es.: identificatore, operatore, parola chiave, . . .
valore la stringa letta in ingresso
Osservazione il valore può essere sottinteso quando la
relazione nome-valore è 1-a-1 (es. parole chiave)
Esempio
token hIDE, x1i
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
6 / 70
Token [. . . cont.]
La specifica lessicale di un linguaggio è la descrizione dei suoi
token attraverso pattern che identificano la forma dei suoi
lessemi:
pattern descrizione generale della forma dei valori del token
(cfr. espressioni regolari)
lessema la stringa istanza del pattern
Esempio
N. Fanizzi ( LdP)
pattern: (x|y)(x|y|0|1)∗
Analisi Lessicale: Linguaggi Regolari
lessema: x1
18 marzo 2015
7 / 70
Token [. . . cont.]
Esempio
Nella stringa in C:
if (x > 0) printf("positivo");
potrebbero essere riconosciuti i token:
hIFi,
hIDE, printi,
h(i,
h(i,
hIDE, xi,
hCONSTSTR, positivoi,
hOPREL, >i,
h)i,
hCONSTNUM, 0i,
h;i.
h)i,
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
8 / 70
Stringhe e Operazioni
Un alfabeto è un insieme di simboli finito e non vuoto di
simboli
Esempi
Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
alfabeto delle cifre decimali
0
Σ = {a, b, c, . . . , z}
alfabeto delle lettere (minuscole)
Una stringa (o parola, word) w su un alfabeto Σ
è una sequenza finita di simboli s1 s2 · · · sn tale che
∀i ∈ {1, . . . , n} : si ∈ Σ.
La lunghezza di w è pari ad n e si denota con |w|
Esempi Alcune stringhe su Σ0 sono aaba, aca, cbaa, b, . . .
Dato Σ = {0, 1} sia w = 0010110 con |w| = 7
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
9 / 70
Stringhe e Operazioni [. . . cont.]
La stringa vuota, denotata con ,
è la parola priva di simboli (|| = 0)
Si denota con Σ∗ l’insieme di tutte le stringhe su Σ.
Osservazione ∀Σ : ∈ Σ∗
Esempio Dato Σ = {0, 1} risulta
Σ∗ = {, 0, 1, 00, 01, 10, 11, 000, 001, . . .}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
10 / 70
Stringhe e Operazioni [. . . cont.]
Date w, z ∈ Σ∗ ,
si definisce l’operazione di concatenazione:
w·z
Osservazioni
· non commutativa
elemento neutro: w · = · w = w
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
11 / 70
Stringhe e Operazioni [. . . cont.]
Iterando, si ottiene una forma esponenziale
Data w ∈ Σ∗ , potenza k-esima di w:
k
w =
N. Fanizzi ( LdP)
k=0
k−1
ww
k>0
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
12 / 70
Linguaggi Formali
Definizione
Un linguaggio L su un alfabeto Σ è un sottoinsieme di Σ∗ :
L ⊆ Σ∗
Osservazioni
∅, {} e Σ sono linguaggi su Σ
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
(|∅| = 0 6= 1 = |{}|)
18 marzo 2015
13 / 70
Linguaggi Formali [. . . cont.]
Esempi
Linguaggio finito L = {, aab, aaaabb}.
Linguaggio infinito L = {ai b2i | i ≥ 0}.
Linguaggio delle parentesi bilanciate L ⊆ {(, )}∗ :
(())() ∈ L e ()(()()) ∈ L
mentre
(()() 6∈ L e ())(() 6∈ L
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
14 / 70
Linguaggi Formali [. . . cont.]
Dati due linguaggi L e L0 definiti sullo stesso alfabeto Σ:
prodotto L · L0 = {w = w1 · w2 ∈ Σ∗ | w1 ∈ L ∧ w2 ∈ L0 }
unione L ∪ L0 = {w ∈ Σ∗ | w ∈ L ∨ w ∈ L0 }
{}
se k = 0
k
chiusura L =
k−1
L
· L se k > 0
[
L+ =
Lk
potenza
chiusura positiva
k>0
(o transitiva)
L∗ = L0 ∪ L+ = {} ∪ L+
chiusura di Kleene
(transitiva e riflessiva)
L∗ = {w1 . . . wn ∈ Σ∗ | n ∈ N ∀i ∈ {1, . . . , n} : wi ∈ L}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
15 / 70
Linguaggi Formali [. . . cont.]
Altre operazioni
complemento L = {w ∈ Σ∗ | w 6∈ L}
intersezione L ∩ L0 = {w ∈ Σ∗ | w ∈ L ∧ w ∈ L0 }
riflessione LR = {wR | w ∈ L}
dove la stringa riflessa wR di una stringa w inverte
l’ordine dei simboli
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
16 / 70
Espressioni Regolari
Espressioni e linguaggi regolari:
1
è una ER
L() = {}
2
a è una ER per ogni a ∈ Σ
L(a) = {a}
3
(r) è una ER, per ogni ER r
L((r)) = L(r)
4
(r)|(s) è una ER, per ogni coppia di ER r, s
L((r)|(s)) = L(r) ∪ L(s)
5
(r) · (s) è una ER, per ogni coppia di ER r, s
L((r) · (s)) = L(r) · L(s)
6
7
(r)∗ è una ER, per ogni r
L((r)∗ ) = L(r)∗
nient’altro è una ER
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
17 / 70
Espressioni Regolari [. . . cont.]
Osservazioni
il simbolo di concatenazione “·” può essere omesso
le parentesi possono essere omesse essendo le op. associative
a sinistra e imponendo la precedenza: ∗ > · > |
Esempio
(((a)|(b))∗ ((a)|(b)))|(a)
si può scrivere in modo compatto come:
(a|b)∗ (a|b)|a
(((1)∗ )(0))|(2) si può scrivere 1∗ 0|2
Per ogni linguaggio possono esistere diverse ER che lo
denotano
Esempio L[(ab)∗ a] = L[a(ba)∗ ]
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
18 / 70
Espressioni Regolari [. . . cont.]
Esempi
i) ab|b definisce il linguaggio {ab, b}
ii) a(a|b)b definisce {aab, abb}
iii) a∗ sta per {an | n ≥ 0} = {, a, aa, aaa, aaaa, . . .}
iv) b∗ a|c denota per {bn a | n ≥ 0} ∪ {c}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
19 / 70
Espressioni Regolari [. . . cont.]
Identità: si definisce una rel. d’equivalenza tra ER in base ai
linguaggi definiti:
r = s se e solo se L[r] = L[s]
Proprietà
r|r0 = r0 |r
commutatività di |
associatività di |
r|(r0 |r00 ) = (r|r0 )|r00
associatività di ·
r(r0 r00 ) = (rr0 )r00
elem. neutro per ·
idempotenza di
∗
r = r = r
r∗∗
= r∗
distributività a sinistra di · su |
r(r0 |r00 ) = rr0 |rr00
distributività a destra di · su |
(r|r0 )r00 = rr00 |r0 r00
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
20 / 70
Espressioni Regolari [. . . cont.]
Estensioni
rip. positiva r+ = rr∗ = r∗ r
possibilità r? = r|
elenco [a1 , . . . , an ] = a1 | · · · |an
dove ai ∈ Σ
se sussiste una rel. d’ordine tra i simboli:
[a1 -an ] = a1 | · · · |an
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
21 / 70
Linguaggi Regolari
Un linguaggio L è regolare se
L=∅
oppure
L = L(r)
per qualche espressione regolare r
Esempio Dato Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, .}
l’ER:
[0-9]+ (|.[0-9]+ )
denota il linguaggio dei numeri decimali (senza segno)
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
22 / 70
Linguaggi Regolari [. . . cont.]
Definizioni Regolari
dato Σ
d1
d2
..
.
:= r1
:= r2
.. ..
. .
dn := rn
dove di sono nuovi simboli e
ogni ri è una ER sull’alfabeto Σ ∪ {rj | 1 ≤ j ≤ i − 1}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
23 / 70
Esercizi
1
ER per identificatori C
2
ER per numeri in notazione scientifica
es. 123.456E-7
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
24 / 70
Automi a Stati Finiti
Problema: riconoscere i lessemi ed associarli ai token
Automi Modelli astratti di macchine
in input su un nastro, fatto da celle contenenti un simbolo
ciascuna, stringhe su un dato alfabeto d’ingresso Σ
lettura L-to-R (con/senza terminatore)
un simbolo alla volta
una unità di controllo a stati finiti determina il
funzionamento della macchina
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
25 / 70
Automi a Stati Finiti [. . . cont.]
···
b
..
q3
q2
a
a
a
···
.
qn
δ
q1
N. Fanizzi ( LdP)
a
b
q0
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
26 / 70
Automi a Stati Finiti [. . . cont.]
Diagrammi di transizione per descrivere automi
Esempio
[0-9]
[0-9]
A
B
[0-9]
.
[0-9]
C
D
riconosce [0-9]+ (|.[0-9]+ )
accetta 23
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
27 / 70
Automi a Stati Finiti [. . . cont.]
Esempio
[0-9]
E
F
[0-9]
.
riconosce [0-9]+ (|.[0-9]+ ) ma anche altre stringhe
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
28 / 70
Automi a Stati Finiti [. . . cont.]
Esempio
riconoscere (a|b)∗ ba
a
0
b
1
a
2
b
non determinismo: nello stato 0 si legge b
per accettare deve esistere almeno un percorso che porti ad
uno stato finale
accetta bba e abba, rifiuta aabb
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
29 / 70
Automi Non-Deterministici
Un automa finito non deterministico (NFA) è una quintupla
hΣ, Q, δ, q0 , Fi dove
Σ è un alfabeto finito di simboli di input;
Q è un insieme finito di stati;
δ è la funzione di transizione
δ : Q × (Σ ∪ {}) → P(Q)
q0 ∈ Q stato iniziale;
F ⊆ Q stati finali
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
30 / 70
Automi Non-Deterministici [. . . cont.]
matrice di transizione:
δ
→ q0
∗q1
..
.
qm
Esempio
a1 a2 · · · an ···
···
..
.. . .
. .
. .. ..
.
.
···
automa precedente
δ
→0
1
∗2
N. Fanizzi ( LdP)
a
b
{0} {0, 1}
{2}
∅
∅
∅
∅
∅
∅
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
31 / 70
Automi Non-Deterministici [. . . cont.]
Un NFA N = hΣ, Q, δ, q0 , Fi accetta w = a1 · · · an sse
nel diagramma di transizione esiste un cammino da q0 a uno
stato di F nel quale w è esattamente la stringa che si ottiene
concatenando le etichette degli archi percorsi
Il linguaggio accettato da un NFA N è l’insieme
L[N] = {w ∈ Σ∗ | N accetta w}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
32 / 70
Automi Non-Deterministici [. . . cont.]
formalmente:
δ ∗ : P(Q) × Σ∗ → P(Q)
δ ∗ (Qi , za) =
[
δ(q0 , a)
q0 ∈δ ∗ (Qi ,z)
δ ∗ (Qi , ) =
S
a∈Σ
w accettata sse:
δ(Qi , a)
∃q ∈ F : q ∈ δ ∗ ({q0 }, w)
L[N] = {w ∈ Σ∗ | δ ∗ ({q0 }, w) ∩ F 6= ∅}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
33 / 70
Automi Non-Deterministici [. . . cont.]
2
a
4
0
6
1
7
b
8
a
9
3
b
5
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
34 / 70
Automi Deterministici
Un automa finito deterministico (DFA) è una quintupla
hΣ, Q, δ, q0 , Fi dove
Σ è un alfabeto finito di simboli di input;
Q è un insieme finito di stati;
δ è la funzione di transizione
δ :Q×Σ→Q
q0 ∈ Q (lo stato iniziale);
F ⊆ Q (gli stati finali).
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
35 / 70
Automi Deterministici [. . . cont.]
a
B
a
a
A
D
b
b
b
a
b
N. Fanizzi ( LdP)
C
DFA per (a|b)∗ ba
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
36 / 70
Equivalenza
Dato un linguaggio accettato da un NFA è sempre possibile
costruire un DFA per lo stesso linguaggio?
Dato un NFA, sia q ∈ Q: la -chiusura di q (-clos(q)) è il più
piccolo insieme di stati raggiungibili via -transizioni:
q ∈ -clos(q) e se p ∈ -clos(q) allora δ(p, ) ⊆ -clos(q)
Per estensione, sia P ⊆ Q
-clos(P) =
[
-clos(p)
p∈P
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
37 / 70
Equivalenza [. . . cont.]
Calcolo -clos(P)
1
2
T ← P; // iniz.
-clos(P) ← P; // iniz.
3
4
5
6
7
8
9
10
11
12
while T 6= ∅ {
scegli r ∈ T;
T ← T \ {r};
foreach s ∈ δ(r, )
if (s ∈
/ -clos(P)) {
-clos(P) ← -clos(P) ∪ {s};
T ← T ∪ {s};
}
}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
38 / 70
Equivalenza [. . . cont.]
Mossa (non deterministica)
mossa : P(Q) × Σ → P(Q)
mossa(P, a) =
[
δ(p, a)
p∈P
Dallo stato q, consumando a,
un NFA potrà transitare in uno degli stati in
-clos(mossa(-clos({q}), a))
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
39 / 70
Equivalenza [. . . cont.]
Costruzione Sottinsiemi
sia N = hΣ, Q, δ, q0 , Fi
1
2
S ← -clos(q0 ); // insieme di stati
T ← {S}; // insieme di insiemi non ancora marcati
3
4
5
6
7
8
9
10
11
while ∃P ∈ T non marcato {
marca P;
for each a ∈ Σ {
R ← -clos(mossa(P, a));
if R ∈
/ T { T ← T ∪ {R}; } // aggiunto non marcato
definisci ∆(P, a) = R;
}
}
Si definisce il DFA MN = hΣ, T , ∆, -clos(q0 ), F i
dove F = {R ∈ T | R ∩ F 6= ∅}
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
40 / 70
Equivalenza [. . . cont.]
Esempio
2
0
4
6
1
3
N. Fanizzi ( LdP)
a
b
7
b
8
a
9
5
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
41 / 70
Equivalenza [. . . cont.]
a
B
stati NFA
{0, 1, 2, 3, 7}
{1, 2, 3, 4, 6, 7}
{1, 2, 3, 5, 6, 7, 8}
{1, 2, 3, 4, 6, 7, 9}
stato DFA
A
B
C
D
a
a
A
D
b
b
b
a
b
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
C
18 marzo 2015
42 / 70
Equivalenza [. . . cont.]
Teorema
Sia N = hΣ, Q, δ, q0 , Fi un NFA e sia MN il DFA ottenuto con la
costruzione per sottinsiemi. Risulta che
L[N] = L[MN ]
Teorema
La classe dei linguaggi riconosciuti dagli NFA coincide con la classe
dei linguaggi riconosciuti dai DFA.
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
43 / 70
Corrispondenza Automi-ER
Teorema
Data un’espressione regolare r, si può costruire un NFA Nr tale che
L[r] = L[Nr ]
Dim. per induzione
r≡
r≡a
N. Fanizzi ( LdP)
a
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
44 / 70
Corrispondenza Automi-ER [. . . cont.]
is
r ≡ s|t
fs
f
i
it
r ≡ st
N[s]
is
N. Fanizzi ( LdP)
N[s]
N[t]
fs /it
ft
N[t]
Analisi Lessicale: Linguaggi Regolari
ft
18 marzo 2015
45 / 70
Corrispondenza Automi-ER [. . . cont.]
r ≡ s∗
i
N. Fanizzi ( LdP)
is
N[s]
fs
Analisi Lessicale: Linguaggi Regolari
f
18 marzo 2015
46 / 70
Grammatiche Regolari
Una grammatica libera è regolare sse ogni produzione ha la
forma
V −→ aW
oppure
V −→ a
con V, W ∈ NT e A ∈ T.
Per S è ammessa anche S −→ N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
47 / 70
Grammatiche Regolari [. . . cont.]
Esempio Sia G = h{A, B, C}, {a, b}, A, Ri
con R dato da
A −→ aA|bB,
B −→ bB|aC|a,
C −→ aA|bB
Grammatica regolare tale che L[G] = (a|b)∗ ba
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
48 / 70
Grammatiche Regolari [. . . cont.]
Teorema
Da un DFA M si può definire una grammatica regolare GM tale che
L[M] = L[GM ]
Dim. Sia M = hΣ, Q, δ, q0 , Fi il DFA.
La grammatica GM = hQ, Σ, R, q0 i ha:
non terminali, gli stati di M;
terminali: l’alfabeto di M;
simbolo iniziale: lo stato iniziale q0 ;
produzioni R:
per ogni δ(qi , a) = qj :
qi −→ aqj ∈ R e
qi −→ a ∈ R se qj ∈ F
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
49 / 70
Grammatiche Regolari [. . . cont.]
Esempio
dato
a
B
a
a
A
D
b
b
b
a
b
C
la grammatica corrispondente G = h{A, B, C, D}, {a, b}, A, Ri
con R dato da
A −→ aB | bC,
B −→ aB | bC,
C −→ aD | a | bC,
D −→ aB | bC
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
50 / 70
Grammatiche Regolari [. . . cont.]
Teorema
Il linguaggio definito da una grammatica regolare G è un
linguaggio regolare: è vuoto, oppure è possibile costruire
un’espressione regolare rG tale che
L[G] = L[rG ]
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
51 / 70
Grammatiche Regolari [. . . cont.]
N. Fanizzi ( LdP)
ESPRESSIONI
REGOLARI
NFA
GRAMMATICHE
REGOLARI
DFA
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
52 / 70
Indistinguibilità
Siano q1 e q2 due stati di un DFA e x ∈ Σ∗ .
La stringa x distingue q1 e q2 sse
i) il cammino che parte in q1 e consuma x arriva in uno stato
finale, mentre il cammino che parte in q2 e consuma x arriva
in uno stato non finale;
ii) oppure, viceversa, il cammino che parte in q1 e consuma x
arriva in uno stato non finale, mentre il cammino che parte
in q2 e consuma x arriva in uno stato finale.
Due stati sono indistinguibili se nessuna x ∈ Σ∗ li distingue
La rel. di indistinguibilità è una relazione d’equivalenza
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
53 / 70
Indistinguibilità [. . . cont.]
distingue ogni stato in F da
ogni stato in Q \ F,
quindi sono distinguibili:
{A, D}, {B, D} e {C, D}
Esempio
a
B
a
a
A
a distingue B da C
D
b
b
b
a
b
C
essendo δ(B, a) = B
mentre δ(C, a) = D,
e {B, D} già distinguibili
e anche {A, C} e {C, D}
b non distingue alcuna coppia
Osservazione
A e B indistinguibili: da entrambi gli stati
le stringhe che iniziano con a portano a B
le stringhe che iniziano con b portano a C
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
54 / 70
Tabella a Scala
Sia M = hΣ, Q, δ, q0 , Fi un DFA.
Un elemento (p, q) della tabella può contenere:
nulla: p e q non sono ancora distinti;
X : p e q sono distinguibili;
alcune coppie (p0 , q0 ):
se p e q sono distinguibili, allora tutte le (p0 , q0 ) saranno
distinguibili
Esempio
q1
q2
q3
q0 q1 q2
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
55 / 70
Tabella a Scala [. . . cont.]
Algoritmo di riempimento
1
marca X ogni (p, q) tale che p ∈ F e q ∈ Q \ F o viceversa;
2
per ogni altra (p, q):
se esiste un a ∈ Σ con (δ(p, a), δ(q, a)) già marcata X:
i. marca (p, q) con X;
ii. marca con X tutte le coppie elencate in (p, q),
e procedi ricorsivamente la marcatura su tutte le coppie
marcate in questo modo;
altrimenti, per ogni a ∈ Σ tale che δ(p, a) 6= δ(q, a),
metti (p, q) nella lista di (δ(p, a), δ(q, a)).
3
sia J l’insieme delle coppie che non contengono X
4
la relazione di indistinguibilità è
I = J ∪ {(q, q) | q ∈ Q} ∪ {(q, p) | (p, q) ∈ J}
chiusura riflessiva e simmetrica di J
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
56 / 70
Tabella a Scala [. . . cont.]
B
C
D
A B C
(a)
B
C
D X X X
A B C
(b)
B
C X X
D X X X
A B C
(c)
(a) inizio
(b) marca (D, A), (D, B), (D, C) distinti da (c) marca (C, A) e (C, B) distinti da a
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
57 / 70
Tabella a Scala [. . . cont.]
Teorema
Dato un DFA M = hΣ, Q, δ, q0 , Fi, l’algoritmo di riempimento della
tabella a scala termina. Due stati p e q sono distinguibili se e solo
se la casella (p, q) (o (q, p)) è marcata con X.
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
58 / 70
Automa Minimo
Dato il DFA M = hΣ, Q, δ, q0 , Fi,
l’automa minimo equivalente Mmin = hΣ, Qmin , δmin , [q0 ], Fmin i
è dato da:
Qmin = Q/I insieme delle classi di equivalenza [q] della
relazione di indistinguibilità I
δmin ([q], a) = [δ(q, a)]
Fmin = {[q] | q ∈ F}
Teorema
Dato un DFA M = hΣ, Q, δ, q0 , Fi, l’automa Mmin riconosce lo
stesso linguaggio di M, ed ha il minimo numero di stati tra tutti gli
automi per questo linguaggio
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
59 / 70
Automa Minimo [. . . cont.]
Esempio
dato il DFA
→A
B
C
∗D
E
F
G
H
0
B
A
D
D
D
G
F
G
da cui si ricava:
N. Fanizzi ( LdP)
la tabella a scala risultante è:
B X
C X X
D X X X
E X X
X
F X
X X X
G
X X X X X
H X X X X X X X
A B C D E F G
1
A
C
B
A
F
E
G
D
→ A, G
B, F
C, E
∗D
0
1
B, F A, G
A, G C, E
D
B, F
D
A, G
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
60 / 70
Automa Minimo [. . . cont.]
Esempio
DFA:
[Ausiello et al.]
→∗0
∗1
2
3
4
5
6
a
1
0
4
0
2
2
1
b
2
5
3
5
6
6
5
tabelle a scala risultanti
(iniziale/finale)
N. Fanizzi ( LdP)
1
2
3
4
5
6
1
2
3
4
5
6
X
X
X
X
X
0
X
X
X
X
X
1
2
3
4
5
X
4
X
5
(3,6)
X
X
X
X
X
0
X
X
X
X
X
1
Analisi Lessicale: Linguaggi Regolari
X
(2,5)
(0,1)
X
2
X
X
(2,4)
(2,5)
3
18 marzo 2015
61 / 70
Automa Minimo [. . . cont.]
Indistinguibili
I = {(0, 1), (2, 4), (2, 5), (4, 5), (3, 6)}
quindi
Q/I = {{0, 1}, {2, 4, 5}, {3, 6}}
da cui si ricava:
N. Fanizzi ( LdP)
→ ∗[0]
[2]
[3]
a
b
[0] [2]
[2] [3]
[0] [2]
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
62 / 70
Pumping Lemma per Linguaggi Regolari
Teorema (Pumping Lemma – linguaggi regolari)
Sia L un linguaggio regolare. Esiste una costante N > 0 tale che,
ogni z ∈ L con |z| ≥ N può essere suddivisa in tre sottostringhe
z = uvw tali che
(i) |uv| ≤ N;
(ii) v 6= ;
(iii) per ogni k ≥ 0, uvk w ∈ L
Inoltre N è minore o uguale del numero di stati del DFA minimo che
accetta L
Osservazioni
condizione necessaria ma non sufficiente
può essere usata per dimostrare che un linguaggio non è
regolare
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
63 / 70
Pumping Lemma per Linguaggi Regolari [. . . cont.]
Dim. (cenni) Si considera un DFA tale che L(M) = L con
N = |Q| e z ∈ L, z = a1 a2 · · · al con l ≥ N
Percorso d’accettazione di z (sequenza di stati q(0) , q(1) , . . . , q(l) ):
q(0)
a1
q(1)
a2
···
ai
q(i)
ai+1
···
al
q(l)
con q0 = q(0) e q(l) ∈ F
Sono l + 1 stati ma |z| = l ≥ N = |Q|
quindi c’è (almeno) uno stato ripetuto nella sequenza:
∃i, j ∈ {0, . . . , l} : q(i) = q(j) con i < j e (i + j) ≤ N
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
64 / 70
Pumping Lemma per Linguaggi Regolari [. . . cont.]
q(0)
u
a1 · · · ai
q(i)
q(j)
w
aj+1 · · · al
q(l)
v
ai+1 · · · aj
z = uvw e q(l) ∈ F costituisce uno stato di accettazione per uvvw,
uvvvw, ecc., . . . dunque ∀k ≥ 0 uvk w ∈ L(M)
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
65 / 70
Pumping Lemma per Linguaggi Regolari [. . . cont.]
Esempio L = {an bn | n ≥ 0}
Supponiamo che sia regolare
Deve valere il P.L. quindi si considera N ≥ 0 non noto, ma fissato
Scegliamo uno specifico z tale che
|z| ≥ N :
z = aN bN
Per ogni scomposizione u, v, w si ha che
(i) |uv| ≤ N
(ii) |v| ≥ 1
Quindi v = ah con 1 ≤ h ≤ N
Scegliendo uno specifico numero di ripetizioni di v,
k = 2, risulta:
uvvw = aN+h bN ∈
/L
che contraddice la tesi (iii) del P.L.
Quindi L non può essere regolare
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
66 / 70
Pumping Lemma per Linguaggi Regolari [. . . cont.]
Esempio [Linz] Dimostrare che
L = {w ∈ {a, b}∗ | na (w) 6= nb (w)} non è regolare.
Si assuma, per assurdo, che L sia regolare.
Allora, per un certo n, si consideri
z = an! b(n+1)! ∈ L
in modo che |z| > n.
In base al P.Lemma, ∃u, v, w tali che z = uvw e
|uv| ≤ n,
|v| ≥ 1
∀i ≥ 0 : uvi w ∈ L
Poiché dev’essere k = |v| ≤ |uv| ≤ n, sarà v = ak .
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
67 / 70
Pumping Lemma per Linguaggi Regolari [. . . cont.]
Quindi le stringhe gonfiate avranno la forma:
an!−k (ak )i b(n+1)!
i = 0, 1, . . .
Esse rientrano nel tipo am bm 6∈ L (con m = (n + 1)!)
se n! − k + ki = (n + 1)!, ossia se
i=
(n + 1)! − n! + k
k
=
((n + 1) − 1)n!
k
+
k
k
=
n · n!
k
+1∈Z
ma ciò è sempre valido, essendo k ≤ n.
Quindi L non può essere regolare.
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
68 / 70
Esercizi
1
es.3 cap.3
2
es.2 cap.3
3
es.1 cap.3
4
5
Dato L = {aaa} ∪ {a2k | k ≥ 0}, scrivere un NFA N tale che
L(N) = L, ricavare un DFA M equivalente minimale e fornire
la grammatica G tale che L[M] = L[G] = L
Dimostrare che non sono regolari i segg. linguaggi:
a.
b.
c.
d.
{w ∈ {a, b}∗ | na (w) = nb (w)}
k
{an b | n > k}
m
{an b ck | n > k, n, m, k > 0}
m
{an b ck | m > k, n, m, k > 0}
Si vedano anche i testi consigliati sui ling. formali
N. Fanizzi ( LdP)
Analisi Lessicale: Linguaggi Regolari
18 marzo 2015
69 / 70
Riferimenti
M. Gabbrielli, S. Martini: Linguaggi di programmazione.
Principi e paradigmi, 2/e. McGraw-Hill. 2011
Hopcroft, Motwani, Ullman: Automi, Linguaggi e
Calcolabilità, Pearson Italia, 3/a Ed. (sito) [capp. 1-7]
Ausiello, d’Amore, Gambosi: Linguaggi, Modelli, Complessità,
FrancoAngeli
Linz: An Introduction to Formal Languages and Automata, 5th
Ed. Jones & Bartlett
Scarica

Analisi Lessicale: Linguaggi Regolari - LACAM