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⏐ ε