Modulo 3
Transcript
Modulo 3
Espressioni Regolari Le espressioni regolari sono costituite dalle stringhe sull’alfabeto Σ’ = Σ ∪ {+, · ,*,(,),φ} ottenute secondo le seguenti regole: 1. φ e ciascun membro di Σ sono Epressioni Regolari 2. Se a,b sono Espressioni regolari anche (a + b) è un’espressione regolare 3. 4. 5. Se a,b sono Espressioni regolari anche (a· b) è un’espressione regolare Se a è un’espressione regolare anche a* è un’espressione regolare Niente altro è un’espressione regolare Un’espressione regolare E denota un linguaggio L(E), dove L rappresenta una funzione da stringhe a linguaggi, pertanto: Es: data l’espressione (a + b)*a si ha: L (φ ) = φ L((a + b)*a) = L((a + b)*) ·L(a) L( a ) = { a } = (L(a + b))* ·L(a)= (L(a) ∪ L(b))* ·{a} L ( s + t) = L( s ) ∪ L( t ) = ({a} ∪ {b})* ·{a} = {a, b}* ·{a} L (s ·t) = L( s ) · L( t ) {x | x∈ {a, b}*, x termina con a} L ( s*) = ( L( s ) )* Espressioni Regolari Le espressioni regolari sono costituite dalle stringhe sull’alfabeto Σ’ = Σ ∪ {+, · ,*,(,),φ} ottenute secondo le seguenti regole: 1. φ e ciascun membro di Σ sono Epressioni Regolari 2. Se a,b sono Espressioni regolari anche (a + b) è un’espressione regolare 3. 4. 5. Se a,b sono Espressioni regolari anche (a· b) è un’espressione regolare Se a è un’espressione regolare anche a* è un’espressione regolare Niente altro è un’espressione regolare SINTASSI Un’espressione regolare E denota un linguaggio L(E), dove L rappresenta una funzione da stringhe a linguaggi, pertanto: L (φ ) = φ L( a ) = { a } SEMANTICA (data per induzione strutturale) L ( s + t) = L( s ) ∪ L( t ) L (s ·t) = L( s ) · L( t ) L ( s*) = ( L( s ) )* Linguaggio delle espressioni regolari su Σ’: è un Metalinguaggio per descrivere linguaggi su Σ Costruzione di espressioni regolari 1 Ex: Espressione regolare per stringhe che constano di 0 e 1 alternati 0e1 rappresentano i linguaggi L( 0 ) = { 0 }, L( 1)= { 1} 0· 1 rappresenta il linguaggio L(0 1) = { 0 1} (0 · 1 )* rappresenta il linguaggio L((0 1)*) = {0 1 0 1 0 1………} · 0)* rappresenta il linguaggio L((1 0)*) = {1 0 1 0 1 0………} (1 (0 1)* + (1 0)* ? La soluzione è: (0 1)* + (1 0)* + 0(1 0)* + 1(0 1)* Oppure, considerato che: L(ε + 1) = L( ε ) ∪ L( 1) = {ε } ∪ {1} = {ε, 1} Si ha ( ε + 1) (0 1)* (ε + 0) Es Istanze 0101 1010 01010 10101 Costruzione di espressioni regolari 2 Regole di precedenza tra gli operatori: Ex: a + b* c * precede è equivalente a · precede + a + (( b )*) (c )) Ex: (hot + cold)(apple + blueberry + cherry)(pie + tart) rappresenta le dodici possibili stringhe date da: hot apple pie hot apple tart …………….. cold cherry pie cold cherry tart Costruzione di espressioni regolari 3 (a + b)* Stringhe di a e di b Stringhe con almeno due a Stringhe con almeno due b Stringhe contenente le sottostringhe aa bb (a + b)* a a (a + b)* (a + b)* b b (a + b)* (a + b)* a a (a + b)* + (a + b)* b b (a + b)* Stringhe in cui coesistono un numero pari di a e di b ( aa + bb )*((ab + ba)(aa + bb)*(ab + ba)(aa + bb)*)* Costruzione di espressioni regolari 4 Indicando con d uno dei possibili digits {0, 1, 2,…,9} --possiamo esprimere il sotto linguaggio dei digits come d = (0 + 1 + 2 + .. + 9) Quale linguaggio produce l’espressione: (+ + - + ε) d d* ? Ricordando che d+ = dd* il linguaggio prodotto è + d+ + - d+ + d+ Ovvero il linguaggio degli interi con o senza segno (ad es. +124, -45, 78) Esercizio: rappresentare con un’espressione regolare il linguaggio delle costanti in virgola mobile con segno. (+ + - + ε) (d+ . d* + . d+) (ε + E (+ + - + ε) d+ ) Notare la differenza tra +, simbolo dell’alfabeto del linguaggio definito dall’espressione regoalre, e +, simbolo del metalinguaggio delle espressioni regolari Linguaggi Formali Poiché un linguaggio non può essere individuato mediante enumerazione vengono seguite strategie alternative per la loro caratterizzazione. Definizione -Consiste nella determinazione di un insieme di regole sì da individuare un particolare sottoinsieme di Σ*, tale regole costituiscono la grammatica del linguaggio. Riconoscimento - Consiste nel determinare una procedura che riconosca se una data stringa appartiene al linguaggio. [Non sempre questa procedura esiste] Grammatica Una grammatica viene definita dalla quadrupla G = < VN,VT,P,S> Dove: VN - Insieme finito (non vuoto) di simboli detti Non Terminali (o variabili) VT - Insieme finito (non vuoto) di simboli detti Terminali V = VN ∪ VT, VN ≠φ, VT ≠φ, VN ∩ VT =φ S - Simbolo distinto o Assioma del Linguaggio S ∈ VN P - Insieme di Produzioni o Regole di Riscrittura Una produzione è una coppia <u,v> con u ∈ V+ e v ∈ V* e si indica u→v Le produzioni P possono essere viste anche come una relazione binaria su V* VN V* × V* Processo di generazione Generazione Diretta (o derivazione diretta) Dati x, y ∈ V* si dirà x produce direttamente y, e si indica con x⇒y, se ∃ u, v ∈ V* t.c. x = r u w, y = r v w ed una produzione (u→v) ∈ P ⇒ Rappresenta una relazione binaria su V* VN V* × V* Generazione (derivazione) Dati x, y ∈ V* si dirà che x genera y e si indica con x ⇒*y se esiste una sequenza di generazioni dirette x = x1 ⇒ x2 ⇒ x3 ⇒…… ⇒ xn= y per n ≥ 0 Ovvero x ⇒+y se la sequenza è valida per n > 0 ⇒* Rappresenta la chiusura riflessiva e transitiva di ⇒ Linguaggio Formale 1 Data una Grammatica G= < VN, VT,P,S> si definisce Linguaggio Formale generato da G l’insieme delle stringhe w così definito L(G) = {w ∈ VT* : S ⇒+ w} [si confronti questa definizione con quella precedentemente indicata con (**)] Ex: linguaggio L(G0) per generare stringhe palindrome G0 = < {S}, {a,b}, {P}, {S} > Con regole di produzione P: Esempi di stringhe palindrome 1. 2. 3. 4. 5. S→ aSa S → bSb S→a S→b S→ε ε , a, b,aa,bb,aba,bab, aaa, bbb, ….. Esprimibile anche S→ aSa ⏐bSb ⏐ a ⏐b⏐ ε