Νικήτας Σγούρος sgouros@unipi.gr Μεταγλωττιστές Νικήτας Σγούρος sgouros@unipi.gr
Λεκτικός Αναλυτής ως Πεπερασμένο Αυτόματο Ξεκινά από μια διακεκριμένη αρχική κατάσταση Μετακινείται από κατάσταση σε κατάσταση βάσει του επόμενου διαθέσιμου χαρακτήρα εισόδου Φτάνοντας σε μια τελική κατάσταση αναγνωρίζει τη τελική κατάσταση που αντιστοιχεί σε αυτήν την κατάσταση Χρησιμοποιεί τον κανόνα της μεγαλύτερης δυνατής λεκτικής μονάδας (επιστρέφει μόνο όταν ο επόμενος χαρακτήρας δεν είναι δυνατόν να συνεχίζει την τρέχουσα λεκτική μονάδα).
Παραγωγή πεπερασμένου αυτόματου Μετατροπή κανονικών εκφράσεων σε ένα Μη Ντετερμινιστικό Πεπερασμένο Αυτόματο (ΜΠΑ) Σε ένα ΜΠΑ μπορεί να υπάρχουν: περισσότερες από μια μεταβάσεις που σημειώνονται με τον ίδιο χαρακτήρα κενές μεταβάσεις Παραγωγή από το ΜΠΑ ενός Ντετερμινιστικού Πεπερασμένου Αυτόματου (ΝΠΑ)
Παράδειγμα - Κατασκευή ΜΠΑ Κανονική Έκφραση: (1*01*0)*1*
Παράδειγμα – Μετατροπή ΜΠΑ σε ΝΠΑ
Ελάχιστο ΝΠΑ Τελικές Καταστάσεις: {Α, Β, Ε } Απλές Καταστάσεις: {C, D}
Υλοποίηση Λεκτικής Ανάλυσης Χρησιμοποιούνται είτε case statements είτε διδιάστατοι πίνακες μεταβάσεων με κατάλληλες συναρτήσεις-οδηγούς Περιπλέκεται όταν λεκτικές μονάδες αποτελούν προθέματα άλλων (ανάγκη για lookahead) Γενικά ο αναλυτής θα πρέπει να επιστρέφει τη λεκτική μονάδα και το είδος της ή μηνύματα λάθους αν δεν είναι εφικτή η αναγνώριση της. Επίσης θα πρέπει να επανέρχεται μετά την ανίχνευση λαθών.
Συντακτική Ανάλυση Μια CFG είναι ένας γεννήτορας για μια CFL η οποία αναγνωρίζεται από ένα συντακτικό αναλυτή Για μια CFL μπορούμε να κατασκευάσουμε ένα συντακτικό αναλυτή πολυπλοκότητας ο (n3) Σε ειδικές περιπτώσεις (LL ή LR) η ανάλυση μπορεί να γίνει σε γραμμικό χρόνο. LL (= Left-to-Right, Left-most Derivation) (top-down) LR (= Left-to-Right, Right-most Derivation) (bottom-up)
Top-down vs Bottom-up
Παράδειγμα LL(1)
Παράδειγμα Συντακτικού Αναλυτή Αναδρομικής Κατάβασης
Παράδειγμα Κανονικής Έκφρασης Ορισμός Αριθμητικών Εκφράσεων στην Pascal
Γραμματικές Στις Γραμματικές χωρίς Συμφραζόμενα οι κανόνες παραγωγής έχουν τη μορφή: L → λ όπου L μη τερματικό σύμβολο και λ μια ακολουθία από τερματικά ή μη τερματικά σύμβολα Στις Γραμματικές με Συμφραζόμενα (context-sensitive grammar) οι κανόνες παραγωγής έχουν τη μορφή: αΑβ → αγβ όπου Α μη τερματικό σύμβολο και όλα τα υπόλοιπα μπορεί να είναι τερματικά ή όχι. Στις Κανονικές Γραμματικές (regular grammar) οι κανόνες παραγωγής έχουν τη μορφή: A → α Α → αΒ ή Α→Βα Α → Є όπου τα κεφαλαία είναι μη τερματικά, τα πεζά είναι τερματικά και το Є είναι η κενή συμβολοσειρά.
Παράδειγμα CFG
Παράδειγμα παραγωγής ακολουθίας τερματικών συμβόλων
Παράδειγμα Παραγωγής Συντακτικού Δέντρου