Γλώσσες Προγραμματισμού Μεταγλωττιστές Λεκτική Ανάλυση II Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου
Δομή ▪Πεπερασμένα Αυτόματα Ντετερμινιστικά Πεπερασμένα Αυτόματα Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα με Μηδενικές Μεταβάσεις Αναγωγές Αυτομάτων και Γραμματικών. ▪Υλοποίηση Λεκτικών Αναλυτών Προβλήματα Προσομοίωση ΠΑ Διαγράμματα Μετάβασης Σφάλματα
Πεπερασμένα Αυτόματα ▪Αφηρημένες μηχανές που μπορούν να χρησιμοποιηθούν σαν “αναγνωριστές” σε κανονικές γλώσσες. Ντετερμινιστικά Πεπερασμένα Αυτόματα (ΝΠΑ) Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα (ΜΠΑ) Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα με μηδενικές Μεταβάσεις (ΜΠΑ-ε) ▪Όλα τα παραπάνω είναι ισοδύναμα από πλευράς υπολογιστικής ικανότητας.
Ντετερμινιστικά Πεπερασμένα Αυτόματα ▪Αποτελούνται από Πεπερασμένο σύνολο καταστάσεων Q Σύνολο συμβόλων εισόδου (αλφάβητο) Σ Συνάρτηση μετάβασης δ η οποία ορίζει για κάθε κατάσταση q i και σύμβολο a Σ μια νέα κατάσταση q j Q Αρχική κατάσταση q 0 Τελικές καταστάσεις F Q
Λειτουργία του ΝΠΑ ▪Αρχικά το αυτόματο "βρίσκεται" στην αρχική κατάσταση. ▪Το αυτόματο δέχεται σύμβολα από την συμβολοσειρά εισόδου και ανάλογα με το σύμβολο μεταβαίνει στην κατάσταση που ορίζεται από την συνάρτηση μετάβασης. ▪Αφού "καταναλωθεί" η συμβολοσειρά αν το αυτόματο βρίσκεται σε μια από τις τελικές καταστάσεις τότε αναγνωρίζει τη συμβολοσειρά. Διαφορετικά τη απορρίπτει.
Παράδειγμα ▪Αλφάβητο Σ = {a,b} ▪Καταστάσεις Q = {0,1,2,3} ▪Συνάρτηση Μετάβασης δ(0,a)=1δ(0,b)=2 δ(1,a)=1δ(1,b)=3 δ(2,a)=2 δ(2,b)=2 δ(3,a)=2 δ(3,b)=3 ▪Τελικές Καταστάσεις F = {3}
Διαγραμματική Αναπαράσταση (Γράφος Μετάβασης) 01 2 a b b a a b 3 b a ab
Διαγραμματική Αναπαράσταση (Γράφος Μετάβασης) 01 2 a b b a a b 3 b a ▪'Αλλες Συμβολοσειρές που αναγνωρίζει; abb, aabb aaaabbbbb ▪Κανονική Έκφραση a+b+ aa*bb*
Αυστηρός Ορισμός της Λειτουργίας του ΝΠΑ ▪Συνάρτηση δ*(q,σ), όπου σ μια συμβολοσειρά. δ*(q,ε)=q δ*(q,σ'a)= δ(δ*(q,σ'),a)
Κατάσταση Παγίδευσης 01 2 a b b a a b 3 b a ▪Κατάσταση στην οποία καμιά συμβολοσειρά δεν οδηγεί σε τελική κατάσταση.
Αναγνώριση μιας Συμβολοσειράς από ένα ΝΠΑ t h e n ▪Έτσι για παράδειγμα η συμβολοσειρά "then" μπορεί να αναγνωριστεί από το αυτόματο:
Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα ▪Είναι δυνατό από μια κατάσταση να υπάρχουν περισσότερες από μια μεταβάσεις για το ίδιο σύμβολο εισόδου. ▪Σε ποια κατάσταση θα βρεθεί το αυτόματο; ▪Μη-Ντετερμινισμός! δ(0,a) = {0,1} 01 a a
Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα ▪Αποτελούνται από: Πεπερασμένο σύνολο καταστάσεων Q Σύνολο συμβόλων εισόδου (αλφάβητο) Σ Συνάρτηση μετάβασης δ η οποία ορίζει για κάθε κατάσταση q i και σύμβολο a Σ ένα σύνολο καταστάσεων Q j P(Q). Αρχική κατάσταση q 0 Τελικές καταστάσεις F Q ▪Στην περίπτωση αυτή το αυτόματο αναγνωρίζει τη συμβολοσειρά αν υπάρχει τουλάχιστον ένα μονοπάτι εκτέλεσης που να οδηγεί σε μια τελική κατάσταση.
Παράδειγμα ΜΠΑ (i) ▪Τι αναγνωρίζει το ακόλουθο αυτόματο; abb abababb ababbaabbabaabb 012 a b b a 3 b
Παράδειγμα ΜΠΑ (ii) ▪Κανονική Έκφραση (a|b)*abb 012 a b b a 3 b
Αυστηρός Ορισμός της Λειτουργίας του ΜΠΑ ▪Συνάρτηση δ*(q,σ), όπου σ μια συμβολοσειρά. ▪Ορίζεται η συνάρτηση δ‾ για σύνολα καταστάσεων: δ‾(R,a) = q R δ(q,a) ▪Η λειτουργία του αυτομάτου ορίζεται ως δ*(q,ε)={q} δ*(q,σ'a)=δ‾(δ*(q,σ'),a)
Μη-Ντετερμινιστικά ΠΑ με Μηδενικές Μεταβάσεις ▪Μη-ντετερμινιστικά αυτόματα με "αυθόρμητες" μεταβάσεις Κενή συμβολοσειρά μέρος του αλφάβητου που δέχεται το αυτόματο. "Αυθόρμητη μετάβαση": Μετάβαση σε μια κατάσταση με βάση την κενή συμβολοσειρά [δ(q,ε)] 01 a a 2 ε
Μη-Ντετερμινιστικά ΠΑ με Μηδενικές Μεταβάσεις ▪Αποτελούνται από: Πεπερασμένο σύνολο καταστάσεων Q Σύνολο συμβόλων εισόδου (αλφάβητο) Σ Συνάρτηση μετάβασης δ η οποία ορίζει για κάθε κατάσταση q i και σύμβολο a Σ {ε} ένα σύνολο καταστάσεων Q j P(Q). Αρχική κατάσταση q 0 Τελικές καταστάσεις F Q ▪Οι μεταβάσεις μπορούν να γίνουν με 2 τρόπους: Σαν "κανονικό" ΜΠΑ Αυθόρμητα από μια μετάβαση που ορίζεται από δ(q i,ε)
Παράδειγμα ΜΠΑ-ε 12 a b b a 0 56 a ε b 8 b ε ε ε ▪(aa|bb)(a|b)*b
ε-Κλείσιμο ▪Ορίζεται ως ε-κλείσιμο(q i ) το σύνολο των καταστάσεων οι οποίες είναι προσβάσιμες από την κατάσταση q i μόνο με ε- μεταβάσεις. ▪Αναδρομικά ορίζεται ως ε-κλείσιμο 0 (R) = R ε-κλείσιμο n+1 (R) = {δ(q,ε) | q ε-κλείσιμο n (R)} ε-κλείσιμο(R) = {ε-κλείσιμο n (R)} ▪όπου R ένα σύνολο καταστάσεων του αυτομάτου.
Παράδειγμα ε-κλείσιμο(0) 12 a b b a 0 56 a ε b 8 b ε ε ε ▪ε-κλείσιμο(0) = {1,5,7,4} ε
Αυστηρός Ορισμός της Λειτουργίας του ΜΠΑ-ε ▪Συνάρτηση δ*(q,σ), όπου σ μια συμβολοσειρά. ▪Δεδομένου ότι η συνάρτηση δ‾ είναι: δ‾(R,a) = q R δ(q,a) ▪Η λειτουργία του αυτομάτου ορίζεται ως δ*(q,ε) = ε-κλείσιμο({q}) δ*(q,σ'a) = ε-κλεισιμο(δ‾(δ*(q,σ'),a))
Γλώσσες Προγραμματισμού Μεταγλωττιστές Αναγωγές Πεπερασμένων Αυτομάτων, Κανονικών Γραμματικών και Κανονικών Εκφράσεων
Αναγωγές ▪Είναι δυνατό να γίνουν οι ακόλουθες αναγωγές Από μια κανονική γραμματική σε ένα ΜΠΑ-ε Από ένα ΜΠΑ-ε σε κανονική γραμματική Από μια κανονική έκφραση σε ΜΠΑ-ε Από ΜΠΑ-ε σε κανονική έκφραση ▪Ενδιαφέρον στην κατασκευή μεταγλωττιστών έχουν οι αναγωγές σε ΜΠΑ-ε από κανονικές εκφράσεις και κανονικές γραμματικές.
Αναγωγή Κανονικής Γραμματικής σε ΜΠΑ-ε ▪Έστω μια γραμματική G=(T,N,P,S). Το αντίστοιχο ΜΠΑ-ε (Σ,Q,δ,F) θα έχει: Σ = Τ, το αλφάβητο του ΜΠΑ-ε είναι το αλφάβητο της γραμματικής Q = Ν {q f }, οι καταστάσεις του ΜΠΑ-ε είναι τα μη-τερματικά σύμβολα της γραμματικής, επαυξημένα με μια ακόμη κατάσταση που είναι η τελική. Για κάθε κανόνα Α aΒ δ(Α,a)=B Α a δ(Α,a)=q f A ε δ(Α,ε)=q f F = {q f }, τελική κατάσταση του αυτομάτου.
Παράδειγμα Αναγωγής σε ΜΠΑ-ε ▪Έστω η γραμματική Τ = {a,b} N = {I,S,U} P = {I aS,S bU U ε S aS, S bS U b} S = I ΙS a a b b U b ε qfqf
Αναγωγή ΚΕ σε ΜΠΑ-ε ▪Η αναγωγή γίνεται αναδρομικά με κατάλληλη σύνθεση των ΜΠΑ-ε που αντιστοιχούν σε υπο-εκφράσεις της αρχικής. ▪Στα επόμενα το Μ(r) είναι το ΜΠΑ-ε που αντιστοιχεί στην έκφραση r.
Αναγωγές (i) ▪Κενή συμβολοσειρά ε παράγεται από το αυτόματο Μ(ε): ▪Κανονική έκφραση που περιέχει ένα σύμβολο a του αλφαβήτου, από το αυτόματο Μ(a): a tqfqf ε qfqf
Αναγωγές (ii) ▪Συμβολοσειρά rs, όπου κάθε υποέκφραση παράγεται από τα αυτόματα Μ(r) και Μ(s) αντίστοιχα, παράγεται από το αυτόματο Μ(rs): t2t2 q f2 ε M(r) t1t1 q f1 M(s) t2t2 q f2 M(r) t1t1 M(s)
Αναγωγές (iii) ▪Συμβολοσειρά r|s, όπου κάθε υποέκφραση παράγεται από τα αυτόματα Μ(r) και Μ(s) αντίστοιχα, παράγεται από το αυτόματο Μ(r|s): t2t2 q f2 ε M(r) t1t1 q f1 M(s) qfqf t ε ε ε
Αναγωγές (iv) ▪Συμβολοσειρά r*, όπου κάθε υποέκφραση παράγεται από τα αυτόματα Μ(r) και Μ(s) αντίστοιχα, παράγεται από το αυτόματο Μ(r*): M(r) t1t1 q f1 qfqf t ε ε ε
Παράδειγμα Αναγωγής ΚΕ σε ΜΠΑ-ε ▪Κανονική Έκφραση α(α|β)*β a b a ε b ε ε ε ε ε ε ε
Υλοποίηση ΝΠΑ; ▪Πρόγραμμα το οποίο υλοποιεί το πεπερασμένο αυτόματο. s=s0; c = nextChar(); while (c!=EOF){ s = move(s,c); c = nextChar();} if (s is in F) return "yes"; else return "no";
Μη-Ντετερμινιστικά ΠΑ ▪Υπάρχει πρόγραμμα που υλοποιεί MΠΑ, όμως η πολυπλοκότητα του είναι μεγάλη. ▪Άρα Μετατροπή των ΜΠΑ και ΜΠΑ-ε σε ΝΠΑ. ▪Βασική ιδέα Εφόσον σε κάθε μετάβαση ένα ΜΠΑ μπορεί να είναι σε ένα σύνολο καταστάσεων, το αντίστοιχο ΝΠΑ έχει σαν καταστάσεις σύνολα καταστάσεων του ΜΠΑ. Ομαδοποίηση καταστάσεων ΜΠΑ σε μια νέα Κατάσταση.
Ορισμός Μετατροπής ▪Έστω ΜΠΑ-ε και (Σ,Q,δ,q 0,F). ▪Το αντίστοιχο ΝΠΑ (Σ',Q',δ',q' 0,F') έχει: Σ' = Σ Q' = P(Q), το δυναμοσύνολο των καταστάσεων Q δ'(q',a) = ε-κλείσιμο(δ‾(q',a)), q' P(Q) q' 0 = ε-κλείσιμο(q 0 ) F' = {q' P(Q) | q' F }
Βήματα Μετατροπής (i) ▪Παραγωγή όλων των νέων καταστάσεων P(Q). ▪Δημιουργία της συνάρτησης μετάβασης, σύμφωνα με την συνάρτηση δ‾. ▪Αρχική κατάσταση είναι το ε-κλείσιμο της αρχικής κατάστασης. ▪Τελικές καταστάσεις όλες εκείνες που περιέχουν μια τελική κατάσταση του αρχικού ΜΠΑ.
Βήματα Μετατροπής (ii) ▪Μπορεί να γίνει η κατασκευή αυτόματα. ▪Πρόβλημα: Πολλές μη-προσβάσιμες (απρόσιτες) καταστάσεις, δηλαδή καταστάσεις για τις οποίες δεν υπάρχει συμβολοσειρά που να οδηγεί το αυτόματα από την αρχική σε αυτή τη συμβολοσειρά. ▪Διαγραφή από το αυτόματο. Απλός αλγόριθμος που επισκέπτεται όλες τις προσιτές καταστάσεις και διαγράφει τις υπόλοιπες.
Αλγόριθμος Μετατροπής (λιγότερες απρόσιτες καταστάσεις) ▪ΜΠΑ-ε (Σ,Q,δ,q 0,F) σε ΝΠΑ (Σ',Q',δ',q' 0,F'). q' 0 := e-closure({q 0 }) Q' := {q' 0 } S := {} while ( q' Q'-S) forall a Σ q'' := e-closure(δ ‾ (q',a)) δ'(q',a) := q'' Q' := Q' {q''} S := S {q'} F' := {q' Q' | q' F }
Ελαχιστοποίηση ΝΠΑ ▪Όμως, οι λιγότερες δυνατές καταστάσεις του ΝΠΑ, οδηγούν σε αποδοτικότερο κώδικα. Διαγραφή ισοδύναμων καταστάσεων. ▪Δύο καταστάσεις q 1 και q 2 διακρίνονται από μια συμβολοσειρά σ, όταν δ*(q 1,σ) είναι τελική κατάσταση ενώ δ*(q 2,σ) δεν είναι τελική. ▪Όταν δύο καταστάσεις δεν διακρίνονται, τότε είναι ισοδύναμες. Οι ισοδύναμες καταστάσεις μπορούν να συγχωνευτούν σε μια.
Αλγόριθμος Ελαχιστοποίησης ΝΠΑ (Σ,Q,δ,q 0,F) Τ:= {(q i,q j )| i<j, όπου μόνο ένα των q i,q j είναι τελική κατάσταση} S:={ (q i,q j )| i<j, όπου ταυτόχρονα τα q i,q j είναι τελικές ή μη τελικές κατάστασεις (ισοδύναμες)} repeat forall (q i,q j ) of S forall a in Σ q' i = δ(q i,a) q' j = δ(q j,a) if (q' i,q' j ) T ( or (q' j,q' i ) T ) Τ:= T {(q i,q j )} S:=S – {(q i,q j )} until δεν γίνονται αλλαγές στα S και T
Υλοποίηση Λεκτικών Αναλυτών
Υλοποίηση ΛΑ (Ι) ▪Άρα η υλοποίηση του λεκτικού αναλυτή αφορά την σχεδίαση των ΜΠΑ-ε που αντιστοιχούν σε κάθε λεκτική μονάδα. ▪Συνδυασμός των ΜΠΑ-ε σε ένα, Τα ΜΠΑ-ε ενώνονται σε ένα ΜΠΑ-ε με μηδενικές μεταβάσεις από μια νέα αρχική κατάσταση στις αρχικές καταστάσεις των ΜΠΑ-ε για κάθε λεκτική μονάδα. e n i ε t ε h f
Υλοποίηση ΛΑ (ΙΙ) ▪Πρόβλημα: Οι λεκτικές μονάδες είναι μέρος μιας μεγάλης συμβολοσειράς εισόδου. Αναγνώριση προθέματος χωρίς να είναι γνωστό το τέλος της. Παράδειγμα: Αναγνώριση των λεκτικών ">" "=" ">=" ▪Επισκόπηση επιπλέον χαρακτήρων και κατάλληλη οπισθοδρόμηση. Ορισμένοι χαρακτήρες "διαβάζονται" περισσότερες από μια φορές. ▪Αναγνώριση της συμβολοσειράς με το μεγαλύτερο μήκος.
Παράδειγμα > > = = ε 0 ε ε
Λειτουργία ▪Σύνολο S που περιλαμβάνει αρχικά τις καταστάσεις ε- κλείσιμο(q 0 ). ▪Ανάγνωση συμβόλου σ από την είσοδο και δημιουργία συνόλου S' από τις καταστάσεις για τις οποίες υπάρχει μετάβαση για το σ από τις καταστάσεις του S. ▪Παραπάνω διαδικασία γίνεται έως ότου να μην υπάρχουν άλλες μεταβάσεις, δηλαδή S' = {}. ▪Το πλέον πρόσφατο σύνολο με μια τελική κατάσταση ονομάζεται επιτυχημένο σύνολο. Η λεκτική μονάδα αυτής της κατάστασης επιστρέφεται. ▪Το αυτόματο οπισθοδρομεί τόσους χαρακτήρες όσους έπονται από το επιτυχημένο σύνολο.
Παράδειγμα ▪Αναγνώριση της >=8 > > = 3 5 = ε 0 ε ε > =8
Υλοποίηση με ΝΠΑ ▪Δημιουργούμε το συνολικό ΜΠΑ-ε. ▪Μετατροπή σε ΝΠΑ, διαγραφή απρόσιτων καταστάσεων και ελαχιστοποίηση. ▪Προσομοιώνουμε το αυτόματο μέχρι να έλθει σε ένα σημείο για το οποίο δεν υπάρχει μετάβαση. ▪Οπισθοδρομούμε μέχρι να φτάσουμε σε μια απο τις τελικές καταστάσεις του ΝΠΑ, όπου γίνονται οι ενέργειες που σχετίζονται με αυτή.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Διαγράμματα Μετάβασης
▪Τροποποιημένα ΝΠΑ που απεικονίζουν εύγλωττα τις λειτουργίες του Λεκτικού Αναλυτή. ▪Διαφορές ΔΜ και ΝΠΑ Από τις τελικές καταστάσεις δεν υπάρχουν μεταβάσεις. Σε κάθε τελική κατάσταση αντιστοιχεί κωδικός εξόδου, μοναδικός για κάθε λεκτική μονάδα. Στις τελικές καταστάσεις σημειώνονται ο αριθμός των συμβόλων (n) που πρέπει να οπισθοδρομήσει το αυτόματο, με το συμβολισμό *n. ▪Κατασκευή με εμπειρικό τρόπο (συνήθως)
Κατασκευή ΔΜ ▪Για κάθε ομάδα λεκτικών κατασκευάζεται το ΝΠΑ και τον αντίστοιχο γράφο μετάβασης. ▪Συμπληρώνεται ο γράφος μετάβασης ώστε να προκύψει το ΔΜ. ▪Συνδυάζονται τα ΔΜ ώστε να προκύψει το συνολικό ΔΜ του λεκτικού αναλυτή.
Παράδειγμα (1) L 1 2 Γράφοι Μετάβασης Αναγνωριστικών όχι L/D Διάγραμμα Μετάβασης (Τ_ID) * L D L 1 3 L D 2
Παράδειγμα (2) > > 12 4 = 3 5 Γράφοι Μετάβασης όχι = > 0 1 = 2 3 Διάγραμμα Μετάβασης (Τ_GE) (Τ_GT) *
Ανάνηψη από Σφάλματα ▪Εντοπισμός σχετικά μικρού αριθμού σφαλμάτων λόγω της περιορισμένης οπτικής. ▪Έστω το ακόλουθο: whille (x>0) {..} ▪Στρατηγικές ανάνηψης: Μέθοδος πανικού (panic mode): Διαγραφή συμβόλων μέχρι να βρεθεί κατάλληλο πρόθεμα. Διαγραφή/εισαγωγή/αντικατάσταση χαρακτήρα. Αντιμετάθεση δύο χαρακτήρων.
Σύνοψη ▪Πεπερασμένα Αυτόματα Ντετερμινιστικά Πεπερασμένα Αυτόματα Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα με Μηδενικές Μεταβάσεις Αναγωγές Αυτομάτων και Γραμματικών. ▪Υλοποίηση Λεκτικών Αναλυτών Προβλήματα Προσομοίωση ΠΑ Διαγράμματα Μετάβασης Σφάλματα