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 (+,-).