Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 1 η : Parsers Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Συντακτική Ανάλυση για ΓΧΣ Οι τεχνικές συντακτικής ανάλυσης κατηγοριοποιούνται με βάση διάφορα κριτήρια: Κατεύθυνση ανάλυσης μη τερματικών συμβόλων Σειρά επιλογής μη τερματικών συμβόλων Ντετερμινισμός Κατεύθυνση εισόδου Κανονικές και μη κανονικές Γραμμικές και μη γραμμικές
Ανάλυση Συμβόλων Απόπάνωπροςτακάτω(top-down) Ξεκινά με το αρχικό σύμβολο προβλέποντας διαδοχικά νέες ακολουθίες συμβόλων. Απόκάτωπροςταπάνω(bottom-up) Αναγνωρίζει σταδιακά συμβολοσειρές και ελαττώνει μέχρι το αρχικό σύμβολο.
Επιλογή Μη Τερματικών Συμβόλων Κατάβάθος Δημιουργούμε το συντακτικό δέντρο καθ ύψος Κατά πλάτος Δημιουργούμε το συντακτικό δέντρο κατά πλάτος
Ντετερμινισμός Ντετερμινιστική ανάλυση Πιο γρήγορη, αλλά πολύ περιοριστική Μη ντετερμινιστική ανάλυση Γενικευμένη συντακτική ανάλυση Καλύπτει διφορούμενες γραμματικές, αλλά πιο αργή
Κατεύθυνση Εισόδου Κατευθυνόμενη ανάλυση Συνήθωςαπόαριστεράπροςταδεξιά Μη κατευθυνόμενη ανάλυση Ιδανική για διαίρεση και παράλληλη υλοποίηση
Κανονική ανάλυση Κανονική ονομάζουμε την ανάλυση που ακολουθεί συγκεκριμένο αλγόριθμο Μη κανονική ονομάζουμε την ανάλυση που μπορεί να τροποποιείται ανάλογα μετηνείσοδοκαιτιςεπιλογέςπουέχει Αναβολή αναγνώρισης συμβόλου Έξυπνοι συντακτικοί αναλυτές
Κατηγοριοποίηση ΣΑ Springer 2008 Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Πολυπλοκότητα ΣΑ Γραμμικοί είναι οι αναλυτές με γραμμική πολυπλοκότητα ως προς το μήκος n της εισόδου Απλά γραμμικοί έναντι πραγματικού χρόνου Μη γραμμικοί αναλυτές είναι αυτοί με εκθετική πολυπλοκότητα Γενικευμένοι: γραμμικοί με κάποια στοιχεία μη γραμμικής ανάλυσης κάθε φορά που η είσοδος προκαλεί μη ντετερμινισμό
ΣυντακτικήΑνάλυσηκαιΠολλαπλασιασμόςΔυαδικώνΠινάκων Αποδεικνύεται ότι η γενική μη κατευθυνόμενη ΣΑ των ΓΧΣ ανάγεται σε πολλαπλασιασμό δυαδικών πινάκων (Boolean Matrix Multiplication) Πολυπλοκότητα 0(n 2,376 ) Όμως η αναγωγή είναι πολύπλοκη και χρονοβόρα, αξίζει για τεράστια είσοδο πουπρέπειναείναιστημνήμη
ΑλγόριθμοςUnger Απόεπάνωπροςτακάτω Δημιουργεί όλες τις δυνατές κατανομές των συμβόλων της πρότασης σε τόσες υποσυμβολοσειρές όσα είναι τα σύμβολα του δεξιού μέλους που αναλύεται Επαναλαμβάνει αναδρομικά όσο υπάρχει κατανομή και ταιριάζουν τα τερματικά σύμβολα Επιτυχία αν ταιριάξουν όλα τα σύμβολα Βελτιστοποίηση κατανομών
Παράδειγμα Έστω η γραμματική εκφράσεων: Expr Expr + Term Term Term Term Factor Factor Factor ( Expr ) i Για την πρόταση (i+i) i δημιουργούμε τους πίνακες: ή, μετά, μετά κοκ
Δυσκολίες Κανένας περιορισμός στις ΓΧΣ: Αν υπάρχει ε-παραγωγή, επιτρέπουμε στις κατανομές και μηδέν τερματικά σύμβολα ανά σύμβολο ανάλυσης Αν υπάρχει κύκλος στους κανόνες παραγωγής, τότε θέτουμε έλεγχο επανεμφάνισης της ίδιας συμβολοσειράς για το ίδιο μη τερματικό σύμβολο απορρίπτουμε τη συγκεκριμένη κατανομή
Αλγόριθμος Cocke-Younger-Kasami (CYK ή λιγότερο συχνά CKY) Απόκάτωπροςταεπάνω Δημιουργεί όλους τους συνδυασμούς συμβόλων δεξιού μέλους που δημιουργούνται πηγαίνοντας από συμβολοσειρές μήκους 1 έως συμβολοσειρές μήκους n Επιτυχία αν φτάσουμε σε μήκος n με το αρχικό σύμβολο της γραμματικής
Περιορισμοί Για να επιτυγχάνεται η επιθυμητή πολυπλοκότητα 0(n 3 ): Η γραμματική δεν πρέπει να έχει ε-παραγωγές Τα δεξιά μέλη των κανόνων δεν μπορούν να έχουν μόνο ένα μη τερματικό σύμβολο (unit rules) Εν τέλει η γραμματική πρέπει να είναι σε κανονική μορφή Chomsky(CNF) Αλλιώςηπολυπλοκότηταγίνεται 0(n 4 )
Παράδειγμα Γενικής ΓΧΣ 1 ο βήμα 2 ο βήμα 3 ο βήμα 4 ο βήμα Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
ΓΧΣ σε CNF Μια ΓΧΣ είναι σε κανονική μορφή Chomsky αν οι κανόνες της έχουν τη μορφή A a, A BC, a T B,C N δηλαδή να παράγουν είτε απλό τερματικό είτε διπλό μη τερματικό σύμβολο.
Μετατροπή σε CNF ΓιαναμετατρέψουμεγενικήΓΧΣσεCNF, πρέπει να: Απαλείψουμε τις ε-παραγωγές Απαλείψουμε τις παραγωγές απλού μη τερματικού συμβόλου Απαλείψουμε τις παραγωγές τερματικών δίπλα σε μη τερματικά σύμβολα Χωρίσουμε τις παραγωγές πολλαπλών μη τερματικών συμβόλων σε πολλές παραγωγές ακριβώς δύο συμβόλων Τιδέντροθαπάρουμετελικά;Τικάνουμε για να επανέλθουμε στην αρχική ΓΧΣ;
Παράδειγμα Γραμματικής CNF Ισοδύναμη της προηγούμενης ΓΧΣ Εφαρμογή αλγόριθμου CYK σε μορφή πίνακα Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Αλγόριθμος CYK function CYKparse (in buf[ ], out table[ ]) for j = 1 to n table[1, j] = {A A buf[j] G} for i = 2 to j J = j - i + 1 for k = 1 to i table[i, J] = table[i, J] {A A BC G, B table[k, J], C table[i - k, J + k]}
Αλγόριθμος Earley Από κάτω προς τα επάνω, αλλά και από επάνω προς τα κάτω, με επιλογή συμβόλων κατά πλάτος ΜοιάζειμεΣΑτύπουLR,αλλάορίζεικαιτην κίνηση συμπλήρωσης(completion) Η ελάττωση δεν επιστρέφει σε προηγούμενη κατάσταση, ώστε να μεταβεί σε άλλη, αλλά άμεσα συμπληρώνει την αναγνώριση του συμβόλου με άλλες πιθανές κινήσεις Δεν κατασκευάζονται εξ αρχής καταστάσεις, αλλά δουλεύει απ ευθείας στην είσοδο
Λειτουργία Αλγορίθμου Earley Με κάθε στοιχείο σημειώνουμε προπορευόμεναπουβρίσκουμεόπωςστοσαlr Επίσης σημειώνουμε ένα δείκτη στην είσοδο για το σύμβολο από το οποίο ξεκίνησε η παραγωγή Μεταβάσεις γίνονται μόνο με την είσοδο Σε μια ελάττωση κοιτάζουμε την κατάσταση που υποδεικνύεται και προσθέτουμε στοιχεία με αναγνωρισμένο το σύμβολο του αριστερού μέλους της ελάττωσης
Παράδειγμα ΈστωηΓΧΣΑΕ Μεείσοδο a+a*a έχουμε: Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Απόδοση Αλγόριθμου Earley Πολυπλοκότητα 0(n 3 )γιαγενικέςγχσ Πολυπλοκότητα 0(n 2 ) για μη διφορούμενες ΓΧΣ Πολυπλοκότητα 0(n) για τις περισσότερες μη διφορούμενες ΓΧΣ
Γενικευμένος ΣΑ τύπου LR (GLR) Κατασκευή πίνακα τύπου LR και εκτέλεση ΣΑ Σε κάθε σύγκρουση δημιουργούμε αντίγραφα της στοίβας και εξετάζουμε όλους τους νέους συνδυασμούς Σε περίπτωση αδυναμίας κίνησης, διαγράφουμε την τρέχουσα στοίβα και εξετάζουμε την επόμενη εναλλακτική Αν δεν υπάρχει άλλη στοίβα, έχουμε απόρριψη
Παράδειγμα Διφορούμενη ΓΧΣ: Καταστάσεις LR(0): Λειτουργία αλγορίθμου: GSS: Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Δυσκολίες Κύκλοι μεταβάσεων χωρίς κατανάλωση εισόδου Συνεχή αντίγραφα στοίβας, αλλιώς σταματάμε την αντιγραφή μόλις δούμε την ίδια κατάσταση χωρίς να έχουμε κατάνάλωση εισόδου, δημιουργώντας κύκλο στο GSS
Παράδειγμα με κύκλο Διφορούμενη ΓΧΣ: GSS: Καταστάσεις LR(0): Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράλληλος Αλγόριθμος Fischer Πολλαπλοί επιμέρους ΣΑ Χωρίζουμε αυθαίρετα την είσοδο σε τμήματα. Το πρώτο τμήμα ξεκινάει κανονικά με την αρχική κατάσταση Τα υπόλοιπα τμήματα ξεκινάνε με όλες τις καταστάσεις που δέχονται ολίσθηση με το πρώτο σύμβολο του τμήματος Οι ολισθήσεις γίνονται κανονικά Οι ελαττώσεις που μπορούν να γίνουν στην τοπική στοίβα γίνονται κανονικά Διαφορετικά περιμένουμε τον προηγούμενο ΣΑ
Παράδειγμα ΓΧΣ: Πίνακας ΣΑ LR(0): Λειτουργία για είσοδο n-n-(n-n) : Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Άλλοι Παράλληλοι ΣΑ για ΓΧΣ GLR: Σε κάθε αντιγραφή στοίβας κάνε διακλάδωση σε άλλο επεξεργαστή Agent parsers: Ένας επεξεργαστής για κάθε σύμβολο εισόδου ή για κάθε κανόνα Parallel Earley: Όμοια λειτουργία με τον Fischer ΣΑ για Γραμματικές με Συμφραζόμενα?