Espressioni regolari e automi

Transcript

Espressioni regolari e automi
Espressioni regolari
Un FA (NFA o DFA) e’ un metodo per costruire una macchina che riconosce linguaggi regolari.
Una espressione regolare e’ un modo dichiarativo per descrivere un linguaggio regolare.
Esempio: 01∗ + 10∗
Le espressioni regolari sono usate, ad esempio,
in
1. comandi UNIX (grep)
2. strumenti per l’analisi lessicale di UNIX (Lex
(Lexical analyzer generator) e Flex (Fast
Lex)).
1
Operazioni sui linguaggi
Unione:
L ∪ M = {w : w ∈ L o w ∈ M }
Concatenazione:
L.M = {w : w = xy, x ∈ L, y ∈ M }
Potenze:
L0 = {ǫ}, L1 = L, Lk+1 = L.Lk
Chiusura di Kleene:
L∗ =
∞
[
Li
i=0
Domanda: Cosa sono ∅0, ∅i, e ∅∗?
2
Costruire le espressioni regolari
Definizione induttiva di espressioni regolari:
Base: ǫ e ∅ sono espressioni regolari.
L(ǫ) = {ǫ}, e L(∅) = ∅.
Se a ∈ Σ, allora a e’ un’espressione regolare.
L(a) = {a}.
Induzione:
Se E e’ un’espressione regolare, allora (E) e’
un’espressione regolare.
L((E)) = L(E).
Se E e F sono espressioni regolari, allora E + F
e’ un’espressione regolare.
L(E + F ) = L(E) ∪ L(F ).
3
Se E e F sono espressioni regolari, allora E.F
e’ un’espressione regolare.
L(E.F ) = L(E).L(F ).
Se E e’ un’espressione regolare, allora E ⋆ e’
un’espressione regolare.
L(E ⋆) = (L(E))∗ .
Esempio: Espressioni regolari per
L = {w ∈ {0, 1}∗ : 0 e 1 alternati in w}
(01)∗ + (10)∗ + 0(10)∗ + 1(01)∗
o, equivalentemente,
(ǫ + 1)(01)∗(ǫ + 0)
Ordine di precedenza per gli operatori:
1. Chiusura
2. Concatenazione (punto)
3. Piu’ (+)
Esempio: 01∗ + 1 e’ raggruppato in (0(1)∗ ) + 1
4
Equivalenza di FA e espr. regolari
Abbiamo gia’ mostrato che DFA, NFA, e ǫNFA sono tutti equivalenti.
ε-NFA
NFA
RE
DFA
Per mostrare che gli FA sono equivalenti alle
espressioni regolari, mostreremo che
1. Per ogni DFA A possiamo trovare (costruire, in questo caso) un’espressione regolare
R, tale che L(R) = L(A).
2. Per ogni espressione regolare R esiste un
ǫ-NFA A, tale che L(A) = L(R).
5
La tecnica di eliminazione di stati
Etichettiamo gli archi con espressioni regolari
di simboli
R 1m
R 11
q1
p1
Q1
S
P1
s
Pm
Qk
qk
pm
R km
R k1
6
Ora eliminiamo lo stato s.
q1
R 11 + Q 1 S* P1
p1
R 1m + Q 1 S* Pm
R k1 + Q k S* P1
qk
pm
R km + Q k S* Pm
Per lo stato accettante q eliminiamo dall’automa
originale tutti gli stati eccetto q0 e q.
7
Per ogni q ∈ F saremo rimasti con Aq della
forma
U
R
S
Start
T
e che corrisponde all’espressione regolare Eq =
(R + SU ∗T )∗SU ∗
o con Aq della forma
R
Start
che corrisponde all’espressione regolare Eq =
R∗
8
• L’espressione finale e’
M
q∈F
Eq
Esempio: A, dove L(A) = {W : w = x1b, o w =
x1bc, x ∈ {0, 1}∗, {b, c} ⊆ {0, 1}}
0,1
Start
1
A
0,1
B
0,1
C
D
La trasformiamo in un automa con espressioni
regolari come etichette
0+1
Start
1
A
0+1
B
0+1
C
D
9
0+1
Start
1
0+1
A
B
0+1
C
D
Eliminiamo lo stato B
0+1
Start
1( 0 + 1)
A
0+1
C
D
Poi eliminiamo lo stato C e otteniamo AD
0+1
Start
1( 0 + 1) ( 0 + 1)
A
D
con espressione regolare (0 + 1)∗1(0 + 1)(0 + 1)
10
Da
0+1
Start
1( 0 + 1)
A
0+1
C
D
possiamo eliminare D e ottenere AC
0+1
Start
1( 0 + 1)
A
C
con espressione regolare (0 + 1)∗1(0 + 1)
• L’espressione finale e’ la somma delle due
espressioni regolari precedenti:
(0 + 1)∗1(0 + 1)(0 + 1) + (0 + 1)∗1(0 + 1)
11
Da espressioni regolari a ǫ-NFA
Teorema 3.7: Per ogni espressione regolare
R possiamo costruire un ǫ-NFA A, tale che
L(A) = L(R).
Prova: Per induzione strutturale:
Base: Automa per ǫ, ∅, e a.
ε
(a)
(b)
a
(c)
12
Induzione: Automa per R + S, RS, e R∗
R
ε
ε
ε
ε
S
(a)
ε
R
S
(b)
ε
ε
R
ε
ε
(c)
13
Esempio: Trasformiamo (0 + 1)∗1(0 + 1)
ε
ε
0
1
ε
ε
(a)
ε
ε
ε
ε
ε
0
1
ε
ε
ε
(b)
ε
Start
ε
ε
ε
ε
1
0
1
ε
ε
ε
ε
ε
ε
ε
0
1
ε
ε
(c)
14
Leggi algebriche per i linguaggi
• L ∪ M = M ∪ L.
L’unione e’ commutativa.
• (L ∪ M ) ∪ N = L ∪ (M ∪ N ).
L’unione e’ associativa.
• (LM )N = L(M N ).
La concatenazione e’ associativa.
Nota: La concatenazione non e’ commutativa,
cioe’, esistono L e M tali che LM 6= M L.
15
• ∅ ∪ L = L ∪ ∅ = L.
∅ e’ l’identita’ per l’unione.
• {ǫ}L = L{ǫ} = L.
{ǫ} e’ l’identita’ sinistra e destra per la concatenazione.
• ∅L = L∅ = ∅.
∅ e’ l’annichilatore sinistro e destro per la concatenazione.
16
• L(M ∪ N ) = LM ∪ LN .
La concatenazione e’ distributiva a sinistra sull’unione.
• (M ∪ N )L = M L ∪ N L.
La concatenazione e’ distributiva a destra sull’unione.
• L ∪ L = L.
L’unione e’ idempotente.
• ∅∗ = {ǫ}, {ǫ}∗ = {ǫ}.
• L+ = LL∗ = L∗L, L∗ = L+ ∪ {ǫ}
17
• (L∗)∗ = L∗. La chiusura e’ idempotente.
Prova:
w ∈ (L∗)∗ ⇐⇒ w ∈
∞
[
∞
[
Lj
i=0 j=0
!i
⇐⇒ ∃k, m ∈ N : w ∈ (Lm )k
⇐⇒ ∃p ∈ N : w ∈ Lp
⇐⇒ w ∈
∞
[
Li
i=0
⇐⇒ w ∈ L∗
18