Minimizzazione di automi

Transcript

Minimizzazione di automi
Minimizzazione di automi
Teorema Se per ogni stato q di un DFA si crea un blocco tra q e tutti gli stati equivalenti a q,
allora l’insieme dei blocchi distinti rappresenta una partizione dell’insieme degli stati.
Ne deriva che ogni stato appartiene ad un blocco e che ogni blocco contiene stati tra di
loro equivalenti, mentre due stati scelti da blocchi distinti non lo sono.
Ad esempio il grafo visto in precedenza produce la partizione:
{A,E} {B,H} {D,F} {C} {G}
In quanto {A,E} {B,H} {D,F} sono elementi della partizione calcolati con l’algoritmo
marca-stati, mentre C e G non essendo allocati in blocchi esistenti danno origine a
blocchi distinti.
Minimizzazione di Automi
Dato un DFA A= < !,K, ", Z,S> l’algoritmo opera nel seguente modo:
1. Togliere gli stati irraggiungibili a partire dallo stato iniziale
2. Con l’algoritmo marca-stati calcolare le coppie di stati tra di loro equivalenti
3. Costruire la partizione degli stati in blocchi ciascuno dei quali contiene stati equivalenti.
4. Costruire il DFA equivalente B=< !,K’,!,Z’,S’> considerando per l’automa B:
a) come stati K’ i blocchi prima calcolati.
b) come stato iniziale S’ il blocco contenente lo stato iniziale di A
c) come stati Finali Z’ l’insieme dei blocchi che contengono gli stati finali di A
[si fissano gli
stati di B]
[si fissano gli
archi di B]
d) Siano Q1, Q2,…Qn i blocchi prima calcolati, ciascun blocco corrisponderà ad
uno stato nell’automa B, e ciascun blocco contiene stati equivalenti dell’automa A.
Sia a un simbolo di input e Qi un blocco. Allora deve esistere un blocco Qj
tale
per cui per ogni stato q # Qi , "(q,a) è un elemento di Qj si ha pertanto
! (Qi,a) = Qj
Esempio di Minimizzazione
Q1
1
0
A
0
1
E
1
1
B
0
0
F
1
Q2
Q4
Q5
Qi = {A,E} {B,H} {D,F} {C} {G}
0
C
D
1
1
Q3
0
G
0
1
H
1
Q5
1
0
Q3
1
0
Q1
"(A,0) = B
"(E,0) = H
!(Q1,0) = Q2
0
0
Q2
"(A,1) = F
"(E,1) = F
0
0
1
Q4
!(Q1,1) = Q3
1
Riassunto
Linguaggi regolari
Teorema di equivalenza tra i vari descrittori di linguaggi regolari
Determinismo e non determinismo
Equivalenza tra Automi Determinisstici e non deterministici
Proprietà di chiusura dei linguaggi regolari
Minimizzazione di automi
Grammatiche libere dal contesto
G = < VN,VT,P,S >
VN - Insieme finito di simboli detti Non terminali
VT - Insieme finito 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
!
!!
P & VN x V*
Processo di generazione
La Grammatica G con produzioni
E
10
1. E ! E + T | E - T | T
2. T ! T * F | T / F | F
3. F ! ( E ) | i
E
Genera stringhe aritmetiche
!
Esempio: la stringa a + b * c è derivata da E
T
T
T
F
nel seguente modo:
E "E + T !!
"T +T ! !
" T + T * F!
"F+T*F!
" i +T * F!
" i + T * i!
" i +F * i!
" i +i * i!
pertanto:
E "* a + b*c
(regola 1)
(regola 1)
(regola 2)
(regola 2)
(regola 3)
(regola 3)
(regola 2)
(regola 3)
F
F
a
+
b
*
c
- E’ conveniente avere un ordine di applicazione delle regole?
- L’albero di generazione può essere costruito in modi diversi?
- E’ possibile costruire per la medesima stringa alberi di
!derivazione diversi?
Alberi di derivazione
E
E
1. E # E + T | E - T | T
2. T # T * F | T / F | F
3. F # ( E ) | i
T
T
T
F
F
F
a
+
Data una grammatica non contestuale G tutte le stringhe s da essa
generabili possono essere rappresentate tramite un albero aventi le seguenti proprietà:
b
*
c
1. La radice è etichettata con il simbolo iniziale S
2. Ogni nodo interno è etichettato con un simbolo non terminale ! VN
3. Ogni foglia è etichettata da un simbolo terminale o dalla stringa vuota "
4. Se il nodo K è etichettato con un simbolo non terminale A ed ha k figli etichettati con i simboli
!1 ,......., !k allora esiste una produzione della forma A # !1 ,......., !k
5. Se S $* w e w è una stringa di caratteri terminali allora w è rappresentata dalle foglie dell’albero.
Parentesi bilanciate
La Grammatica G11 genera stringhe di parentesi bilanciate
S ! " | SS | (S)
due possibili derivazioni sono:
S # SS # S (S) # (S) (S) # (S) ( ) # ( ) ( )
S # SS # ( S ) S # ( ) S # ( ) ( S ) # ( ) ( )
S
S
(
S
!
S
)
(
S
!
)
La Derivazione come classe di equivalenza
Data una grammatica G è possibile pervenire alla generazione di una stringa con processi di
generazione diverse. Date due generazioni D e D’:
D = x1 ! x2 ! ...... ! xn
D’ = x’ ! x’ ! ...... ! x’
1
2
n
se si verifica che :
1. " i ! k xi = x’i
2. xk-1 = x’ k-1 = u A v B w con u,v,w # V* e A, B # VN
3. xk = u y v B w, con A $ y # P
4. x’ k = u Av z w, con B$ z # P
5. xk+1 = x’ k+1= u y v z w
"
si dirà che D precede D’ e si scriverà
""
D prec D’
u y v B w !u y v z w . . . .
xk-1 = x’ k-1 = u A v B w
"
"
"
uAvzw!uyvzw....
Esempio
D1 = S ! SS ! (S) S ! ((S)) S ! (( )) S ! (( ))( S) ! (( )) ( )
D2 = S ! SS ! (S) S ! ((S)) S ! ((S )) (S) ! (( ))( S) ! (( )) ( )
!
Pertanto D1 prec D2
D2 = S ! SS ! (S) S ! ((S)) S ! ((S )) (S) ! (( ))( S) ! (( )) ( )
D3 = S ! SS ! (S) S ! ((S)) S! ((S )) (S)! (( S))( ) ! (( )) ( )
pertanto D2 prec D3
Esempio cont.
D
4
D
5
D
6
D
7
D
8
= S ! SS ! (S) S ! (S) (S) ! (S)( ) ! (( S))( ) ! (( )) ( )
= S ! SS ! S (S) ! (S) (S) ! ((S)) (S) ! (( ))( S) ! (( )) ( )
= S ! SS ! S (S) ! (S) (S) ! ((S)) (S) ! (( S))( ) ! (( )) ( )
= S ! SS ! S (S) ! (S) (S) ! (S )( ) ! ((S))( ) ! (( )) ( )
= S ! SS ! S (S) ! S ( ) ! (S )( ) ! ((S))( ) ! (( )) ( )
prec
D
1
prec D2
prec
D
3
prec
D
5
prec D6
leftmost derivation
prec
prec
D
4
D
prec
prec
D
8
7
rightmost derivation
Ambiguità
S
S
S
D11 = SS ! S S S ! S (S ) S ! S ((S )) S !
S
"
S (( )) S !S (( )) (S) !S (( )) ( ) ! (( )) ( )
(
S
!
Una Grammatica si dice ambigua se medesime stringhe
sono generate da alberi sintattici di differente struttura
ovvero
con due distinte derivazioni left most
(
S
(
S
S
)
!
)
)
!
albero alternativo
ovvero
con due distinte derivazioni right most
Per cui si può concludere che la grammatica G11 è
una grammatica ambigua
S
S
S
(
S
)
(
S
)
!
(
S
!
)
Esempio di Grammatica Ambigua
La Grammatica G12 con produzioni
!!
!!
E ! E+E | E- E | E *E | E/E | id
id ! a | b | c!
è una grammatica ambigua
E
E
E
+
E
E
E
*
E
E
+
I
I
a
*
E
I
I
b
c
E
I
I
a
b
c
Alberi semantici e notazioni polacche
un Albero semantico è un albero in cui i nodi interni rappresentano operazioni da effettuarsi sui suoi
sottoalberi, mentre i nodi foglia rappresentano operandi
Esempio di costruzione
E
E
E
+
E
E
E
a
*
+
E
+
b *
*
c
a
I
a
I
I
b
c
Primo passo - togliere tutti i simboli intermedi aventi un unico discendente
Secondo passo - Sostituire ad ogni simbolo non terminale l’operatore corrispondente
b
c
Alberi semantici e notazioni polacche
Esempio di costruzione
E
E
E
E
*
E
+
I
E
*
+
E
c
a + b *
I
a
b
c
I
b
a
c
Questo albero è stato costruito a partire dalla seconda versione dell’albero
sintattico visto in precedenza. Il procedimento è corretto, ma il risultato è,
come deve essere diverso in virtù dell’ambiguità della grammatica.
Data un’espressione costruita a partire da una grammatica non ambigua è possibile costruire l’albero
semantico direttamente tramite opportuni algoritmi. Un tale albero è ovviamente unico.
sqrt
!
a*b
c+d
/
+
*
a
b
c
d
Alberi semantici e notazioni polacche
Attraversando in modo opportuno un albero semantico si può avere una sequenzializzazione delle operazioni
scandendo la stringa da sinistra verso destra e collocando gli elementi dentro uno stack.
+
*
a
b
notazione polacca postfissa o inversa - RPN (Reverse Polish Notation)
(visita dell’albero in ordine posticipato, o postordine)
+ a *b c
notazione polacca prefissa
(visita dell’albero in ordine anticipato, o preordine)
c
*
ab+* c
+
a
abc*+
*+abc
[Se si è a conoscenza dell’arietà delle operazioni coinvolte la
notazione polacca ha la caratteristica di rappresentare
un’espressione in forma linearizzata senza parentesi.]
c
b
sqrt
a b*c d + / sqrt
/
*
a
sqrt / * a b + c d
+
b
c
d
Si leggono i simboli della stringa memorizzando gli operandi nello stack, appena si trova un simbolo di
operazione la si effettua e si pone nello stack il risultato.
Togliere l’ambiguità
Nel caso di grammatica ambigua, se si generano due alberi sintattici diversi, si hanno due
alberi semantici diversi, che quindi inducono una semantica diversa per la parola
riconosciuta (nel nostro caso un’espressione)
Le fonti di ambiguità della Grammatica G dipendono dai seguenti motivi:
12
1. Non viene rispettata la precedenza degli operatori
2. Una sequenza di operatori identici si può raggruppare sia da sinistra che da destra
Una versione non ambigua della grammatica G è la seguente grammatica G
12
E !
T!
F !
id !
13
E+T | E- T | T
T *F | T/F | F
(E) | id
a | b | c |.....
• Un fattore F rappresenta un’espressione che non si può scomporre rispetto ad un operatore
adiacente. Un identificatore o un’espressione parentesizzata è un fattore.
• Un termine T rappresenta un’espressione che non si può scomporre rispetto ad un operatore
additivo (+, -) adiacente. In sostanza un termine è un prodotto (divisione) di più fattori
• Un’ espressione è una qualsiasi composizione di termini tramite operatori additivi (+,-).