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