Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 5 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Σχετικά έγγραφα
Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση II

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 4 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Κεφάλαιο 4: Συντακτική ανάλυση

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση VIΙ. Εαρινό Εξάμηνο Lec 15 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Μεταγλωττιστές. Ενότητα 8: Συντακτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Κεφάλαιο 2: Τυπικές γλώσσες

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών

Top Down Bottom Up. Συντακτική Ανάλυση. Συντακτική Ανάλυση για Γραµµατικές χωρίς Συµφραζόµενα (top-down - Earley)

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

Απάντηση: (func endfunc)-([a-za-z])+

Τεχνητή Νοημοσύνη. 21η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 7: Ασυμφραστικές Γλώσσες (Γλώσσες Ελεύθερες Συμφραζομένων)

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Μεταγλωττιστές. Ενότητα 7: Συντακτική ανάλυση (Μέρος 1 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 11: Μη Ασυμφραστικές Γλώσσες

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (1)

Συντακτική ανάλυση. Μεταγλωττιστές. (μέρος 3ον) Νίκος Παπασπύου, Κωστής Σαγώνας

ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Συντακτική Ανάλυση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (3)

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Περιεχόμενα Τι περιγράφει ένα ΣΔ ΣΔ και παραγωγές Θεωρία Υπολογισμού Ενότητα 15: Συντακτικά Δέντρα Επ. Καθ. Π. Κατσαρός Τμήμα Πληροφορικής Επ. Καθ. Π.

Εργαστήριο 08 Εισαγωγή στo Yacc

Μεταγλωττιστές. Ενότητα 2: Τυπικές γλώσσες (Μέρος 1 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

Στοιχεία Θεωρίας Υπολογισµού (2): Πεπερασµένα Αυτόµατα, Κανονικές Εκφράσεις

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση ΙII. Εαρινό Εξάμηνο Lec 11 26/03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Σειρά Προβλημάτων 3 Λύσεις

Δομές Δεδομένων και Αλγόριθμοι

Στοιχεία Θεωρίας Υπολογισµού (1): Τυπικές Γλώσσες, Γραµµατικές

Ποιές οι θεµελιώδεις δυνατότητες και ποιοί οι εγγενείς περιορισµοί των υπολογιστών ; Τί µπορούµε και τί δε µπορούµε να υπολογίσουµε (και γιατί);

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (2)

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Υλοποίηση ΣΑ με το bison

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Παρουσίαση του εργαλείου BISON

Σειρά Προβλημάτων 4 Λύσεις

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

Ορισµοί. Τυπικές Γλώσσες Γραµµατικές και Μεταφραστές. Αλφάβητο: ένα οποιδήποτε µη κενό και πεπερασµένο σύνολο Σ αποτελούµενο από σύµβολα

Παρουσίαση του εργαλείου BISON

Υλοποίηση ΣΑ με το bison

Σειρά Προβλημάτων 4 Λύσεις

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Λογισμικό Συστήματος. Κλειώ Σγουροπούλου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ.

Σειρά Προβλημάτων 4 Λύσεις

Δομές Δεδομένων & Αλγόριθμοι

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Ασκήσεις μελέτης της 6 ης διάλεξης

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση Ι. Εαρινό Εξάμηνο Lec /03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Γλώσσες Χωρίς Συμφραζόμενα

Syntax Analysis Part V

Σειρά Προβλημάτων 3 Λύσεις

Σειρά Προβλημάτων 4 Λύσεις

Τι είναι το yacc. Δομή ενός αρχείου yacc. Πρόλογος. ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο. Ο yacc είναι ένας γενικού σκοπού parser generator.

Τεχνολογία Πολυμέσων. Ενότητα # 9: Κωδικοποίηση εντροπίας Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Εφαρμοσμένα Μαθηματικά

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση IV. Εαρινό Εξάμηνο Lec 12 01/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Ο Αλγόριθμος FP-Growth

(Γραμμικές) Αναδρομικές Σχέσεις

(Γραμμικές) Αναδρομικές Σχέσεις

Γενικές Παρατηρήσεις. Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα (1) Το Λήµµα της Αντλησης. Χρήση του Λήµµατος Αντλησης.

Ανάλυση Συσχέτισης IΙ

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Εισαγωγή στην Επιστήμη των Υπολογιστών

. visual basic. int sum(int a, int b){ return a+b;} : : :

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 5: Κανονικές Εκφράσεις

(Γραμμικές) Αναδρομικές Σχέσεις

Σειρά Προβλημάτων 4 Λύσεις

Θεωρία Υπολογισμού και Πολυπλοκότητα

Matrix Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι Αλγόριθμοι» Γ. Καούρη Β. Μήτσου

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Αυτόματα. Παράδειγμα: πωλητής καφέ (iii) Παράδειγμα: πωλητής καφέ (iv) Εισαγωγή στην Επιστήμη των Υπολογιστών. Προδιαγραφές

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Αυτόματα. Παράδειγμα: πωλητής καφέ (iii) Παράδειγμα: πωλητής καφέ (iv) Εισαγωγή στην Επιστήμη των Υπολογιστών 6

Λεκτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

Transcript:

Γιώργος Δημητρίου Μάθημα 5 ο

ΣΑ από Κάτω προς τα Πάνω Ξεκίνημα με την πρώτη λεκτική μονάδα Διάβασε διαδοχικές λεκτικές μονάδες αντικαθιστώντας το δεξί μέλος κάποιου κανόνα που έχει σχηματιστεί με το αριστερό του Κατασκεύασε ένα δέντρο με φύλλα τα σύμβολα του δεξιού μέλους του κανόνα και ρίζα το σύμβολο του αριστερού μέλους Επανάλαβε μέχρι να βρεθεί το αρχικό σύμβολο της γραμματικής

Παράδειγμα Για τη γραμματική: C ABC x A xy B y Μια ανάλυση από κάτω προς τα επάνω για α- ναγνώριση της εισόδου xyyxyyx είναι: A 1 x y y x y y x B 2 C 7 3 A 6 C B 4 5 C

ΣΑ LR(k) Σειρά σχηματισμού των μη τερματικών συμβόλων στο δεξιό μέλος Από αριστερά προς τα δεξιά (αντίστροφη της δεξιότερης παραγωγής) Επιλογή κανόνα και κίνησης Με βάση τις επόμενες k λεκτικές μονάδες Ανάγνωση εισόδου από αριστερά προς τα δεξιά

Κινήσεις ΣΑ LR(k) Οι κινήσεις γίνονται με τη βοήθεια στοίβας Ολίσθηση Ανάγνωση επόμενης λεκτικής μονάδας από την είσοδο και εισαγωγή αυτής στη στοίβα Ελάττωση Αντικατάσταση στη στοίβα των συμβόλων του πλήρους δεξιού μέλους κάποιου κανόνα με το μη τερματικό σύμβολο στο αριστερό μέλος

Γραμματικές LR(0) Για να είναι μια γραμματική LR(0) πρέπει να μην έχει συγκρούσεις ολίσθησης/ελάττωσης και ελάττωσης/ελάττωσης: Να μην υπάρχει επιλογή μεταξύ ολίσθησης και ελάττωσης για την ίδια κίνηση Να μην υπάρχουν δύο ή περισσότεροι κανόνες που να μπορούν να χρησιμοποιηθούν στην ίδια κίνηση ελάττωσης

ΣΑ LR(0) Κατάσταση ΣΑ LR(0): Το σύνολο των προθεμάτων δεξιών μελών κανόνων που έχουν αναγνωριστεί σε κάποιο βήμα της ΣΑ Με την επόμενη κίνηση πρέπει να σχηματίζεται τουλάχιστον ένα νέο αποδεκτό πρόθεμα (viable prefix) δεξιού μέλους κανόνα Η ολίσθηση καταναλώνει μια λεκτική μονάδα Η ελάττωση είναι ε-μετάβαση και άρα δεν καταναλώνει λεκτική μονάδα

Η Έννοια του Στοιχείου Αναπαράσταση του προθέματος του δεξιού μέλους κάποιου κανόνα που έχει μέχρι τώρα αναγνωριστεί: Ο κανόνας A xab δίνει τα στοιχεία Α xab A x AB A xa B A xab

Άλλες Βοηθητικές Έννοιες Αν Ι είναι σύνολο στοιχείων μιας γραμματικής Συνάρτηση CLOSURE: 1. I CLOSURE(I) 2. Αν A α Ββ CLOSURE(I), τότε για κάθε κανόνα Β γ : Β γ CLOSURE(I) Συνάρτηση GOTO: Για κάθε σύμβολο x T N της γραμματικής GOTO(I,x) = CLOSURE({A αx β: A α xβ I})

Κατασκευή Καταστάσεων LR(0) Διεύρυνση γραμματικής (αν χρειάζεται): S S Αρχική κατάσταση I 0 = CLOSURE({S S}) Οι καταστάσεις του ΣΑ LR(0) βρίσκονται από τις τιμές της συνάρτησης GOTO για κάθε νέα κατάσταση και κάθε σύμβολο της γραμματικής

Παράδειγμα Διευρύνουμε την προηγούμενη γραμματική: S C 0 C ABC 1 x 2 A xy 3 B y 4 οπότε οι καταστάσεις LR(0) θα είναι: x y 0 S C C ABC C x A xy C x A x y A xy 4 5 C A A x 3 S C 1 C A BC B y C AB C C ABC C x A xy 2 y B C B y 7 C ABC 6

Πίνακες ΣΑ LR(0) Πίνακας ενέργειας ACTION Ολίσθηση / Ελάττωση / Αποδοχή Αν A α aβ I i τότε ACTION(i) = ολίσθηση Αν A α I i και Α S τότε ACTION(i) = ελάττωση με τον κανόνα A α Αν S α I i τότε ACTION(i) = αποδοχή Πίνακας επόμενης κατάστασης NEXT Για κάθε σύμβολο x της γραμματικής: Αν GOTO(I i,x) = I j τότε NEXT(i,x) = j

Παράδειγμα Για την προηγούμενη διευρυμένη γραμματική: ACTION 0 ολίσθηση 1 αποδοχή 2 ολίσθηση 3 ολίσθηση 4 ολίσθηση / ελάττωση 2 5 ελάττωση 3 6 ελάττωση 1 7 ελάττωση 4 Η γραμματική δεν είναι LR(0)! NEXT x y A B C 0 4 2 1 1 2 7 3 3 4 2 6 4 5 5 6 7

Λειτουργία ΣΑ LR(0) συμβολοσειρά εισόδου a 1 a 2... a n EOF s m x m... Πίνακες ΣΑ LR(0) s 1 x 1 s 0 στοίβα Συντακτικός Αναλυτής LR(0)

Αλγόριθμος ΣΑ LR(0) Βάλε στη στοίβα την αρχική κατάσταση Επανέλαβε μέχρι αποδοχή ή απόρριψη: Εκτέλεσε την ενέργεια για την κατάσταση στην κορυφή της στοίβας (τρέχουσα κατάσταση): Ολίσθηση: βάλε στη στοίβα την επόμενη λεκτική μονάδα Ελάττωση: βγάλε από τη στοίβα 2 τον αριθμό συμβόλων του δεξιού μέλους, θέσε ως τρέχουσα κατάσταση το σύμβολο στην κορυφή της στοίβας και βάλε σε αυτήν το αριστερό μέλος του κανόνα ελάττωσης Βάλε στη στοίβα την επόμενη της τρέχουσας κατάστασης για το σύμβολο στην κορυφή της

Γραμματικές LR(k) Για να είναι μια γραμματική LR(k) πρέπει κατά τη ΣΑ αυτής να αρκεί η ανάγνωση μέχρι k προπορευόμενων συμβόλων (λεκτικών μονάδων) από την είσοδο για τον ακριβή καθορισμό κάθε κίνησης και κανόνα ελάττωσης Υπενθύμιση: Η ανάγνωση των προπορευόμενων λεκτικών μονάδων δεν τις καταναλώνει Συνήθως k=1

Λειτουργία Ακριβούς ΣΑ LR(1) Κατάσταση ΣΑ LR(1): Μία κατάσταση του ΣΑ LR(0), με την προσθήκη για κάθε στοιχείο του συνόλου των λεκτικών μονάδων που επιτρέπεται να ακολουθούν το αριστερό μέλος του στη συγκεκριμένη κατάσταση Η λειτουργία είναι παρόμοια με τη λειτουργία του ΣΑ LR(0), με τη διαφορά ότι ο πίνακας ACTION είναι δισδιάστατος, με τις στήλες να αντιστοιχούν στα προπορευόμενα σύμβολα

Προπορευόμενα Σύμβολα στον LR(1) Ξεκινώντας με το στοιχείο S S {EOF} Βρες τις καταστάσεις LR(1) όπως νωρίτερα, με τη διαφορά ότι: Για ένα στοιχείο Σ A α Bγ Χ (όπου Χ σύνολο προπορευόμενων συμβόλων) και κάθε κανόνα B β της γραμματικής: CLOSURE(Σ) = {Σ} {B β Y} όπου: Y = FIRST(γ) αν ε FIRST(γ), ή Y = (FIRST(γ)-{ε}) X αν ε FIRST(γ)

Παράδειγμα Για την προηγούμενη διευρυμένη γραμματική: x y 0 S C {$} C ABC {$} C x {$} A xy {y} C x {$} A x y {y} A xy {y} 4 5 C A A x 2 3 S C {$} C A BC {$} B y {x} C AB C {$} C ABC {$} C x {$} A xy {y} 1 y C B B y {x} C ABC {$} 7 6

Πίνακες ΣΑ LR(1) Πίνακας ενέργειας ACTION Αν A α aβ X I i τότε ACTION(i,a) = ολίσθηση Αν A α X I i και Α S τότε ACTION(i,x) = ελάττωση με τον κανόνα A α, για κάθε x X Αν S α {EOF} I i τότε ACTION(i,EOF) = αποδοχή Πίνακας επόμενης κατάστασης NEXT Για κάθε σύμβολο x της γραμματικής: Αν GOTO(I i,x) = I j τότε NEXT(i,x) = j

Παράδειγμα Οι πίνακες LR(1) διαμορφώνονται ως εξής: ACTION / NEXT x y EOF A B C 0 ολίσθηση 4 2 1 1 αποδοχή 2 ολίσθηση 7 3 3 ολίσθηση 4 2 6 4 ολίσθηση 5 ελάττωση 2 5 ελάττωση 3 6 ελάττωση 1 7 ελάττωση 4 Δεν υπάρχει σύγκρουση!

Παράδειγμα Με είσοδο xyyxyyx ο ΣΑ λειτουργεί ως εξής: βήμα στοίβα είσοδος κίνηση 0 0 xyyxyyx$ ολίσθηση 4 1 0x4 yyxyyx$ ολίσθηση 5 2 0x4y5 yxyyx$ ελάττωση με τον κανόνα 3 (κόμβος 1) 3 0A2 yxyyx$ ολίσθηση 7 4 0A2y7 xyyx$ ελάττωση με τον κανόνα 4 (κόμβος 2) 5 0A2B3 xyyx$ ολίσθηση 4 6 0A2B3x4 yyx$ ολίσθηση 5 7 0A2B3x4y5 yx$ ελάττωση με τον κανόνα 3 (κόμβος 3) 8 0A2B3A2 yx$ ολίσθηση 7 9 0A2B3A2y7 x$ ελάττωση με τον κανόνα 4 (κόμβος 4) 10 0A2B3A2B3 x$ ολίσθηση 4 11 0A2B3A2B3x4 $ ελάττωση με τον κανόνα 2 (κόμβος 5) 12 0A2B3A2B3C6 $ ελάττωση με τον κανόνα 1 (κόμβος 6) 13 0A2B3C6 $ ελάττωση με τον κανόνα 1 (κόμβος 7) 14 0C1 $ αποδοχή

Προσέγγιση ΣΑ LR(1) Ο ΣΑ LR(1) έχει μεγάλο πλήθος καταστάσεων Εκθετική αύξηση με τον αριθμό διαφορετικών προπορευόμενων του ίδιου συμβόλου Υπερβολικά μεγάλοι πίνακες για ρεαλιστικές γλώσσες Υλοποίηση προσεγγίσεων του LR(1) SLR(1) LALR(1)

ΣΑ SLR(1) Στον SLR(1) προσεγγίζουμε τα σύνολα των λεκτικών μονάδων που μπορούν να ακολουθούν το αριστερό μέλος κάποιου στοιχείου με το αντίστοιχο σύνολο FOLLOW Με τον τρόπο αυτό δεν προκύπτουν πολλαπλές καταστάσεις που να διαφέρουν μεταξύ τους μόνο στα προπορευόμενα σύμβολα Η ανάλυση ανάγεται σε LR(0), όπου όμως τα σύνολα FOLLOW θέτουν περιορισμό για τις ελαττώσεις, μειώνοντας τις συγκρούσεις του LR(0)

ΣΑ LALR(1) Στον LALR(1) απλά δεν δημιουργούμε καταστάσεις που να διαφέρουν μόνο στα προπορευόμενα σύμβολα Είτε προσθέτουμε προπορευόμενα σύμβολα σε ήδη υπάρχουσες καταστάσεις και επαναλαμβάνουμε μέρος της ανάλυσης Είτε κατασκευάζουμε αρχικά τις καταστάσεις LR(1) και μετά ενοποιούμε όσες διαφέρουν μόνο στα προπορευόμενα σύμβολα, ενώνοντας τα αντίστοιχα σύνολα προπορευόμενων συμβόλων

Σχέση μεταξύ ΣΑ LR LR(0) SLR(1) LALR(1) LR(1) Αν μια γραμματική ανήκει σε κάποια κατηγορία, θα ανήκει και στις μεγαλύτερες πχ μια γραμματική SLR(1) είναι και LR(1) Αν μια γραμματική δεν ανήκει σε κάποια κατηγορία, δεν θα ανήκει ούτε στις μικρότερες πχ μια γραμματική που δεν είναι LR(1) δε μπορεί να είναι ούτε LALR(1) ούτε SLR(1) ούτε LR(0)

ΣΑ LALR(1) με το Yacc / Bison Πρώτο μέρος: Κώδικας (πχ δηλώσεις C) Δηλώσεις λεκτικών μονάδων, τελεστών και σημασιολογικών τύπων Δεύτερο μέρος: Κανόνες παραγωγής Κώδικας σημασιολογικής ανάλυσης που εκτελείται σε στοιχεία της γραμματικής Τρίτο μέρος: Συμπληρωματικός κώδικας (πχ ορισμός main())

Γραμματικές LR και LL Οι ΣΑ γραμματικών LR είναι ισχυρότεροι των ΣΑ γραμματικών LL: Χειρίζονται εύκολα γραμματικές που προκαλούν τις πιο συνηθισμένες συγκρούσεις FIRST/FIRST και FIRST/ FOLLOW στους δεύτερους! Επιτρέπουν αριστερή αναδρομή Επιτρέπουν κοινό αριστερό παράγοντα

Επίλυση Συγκρούσεων στη ΣΑ Σε κάθε περίπτωση σύγκρουσης, μπορούμε να προγραμματίσουμε το ΣΑ να προεπιλέγει κίνηση ΣΑ γραμματικών που δεν είναι LL(1) ή LR(1) Αλλάζει η γλώσσα της γραμματικής; Στο Yacc/Bison Σε κάθε σύγκρουση ολίσθησης/ελάττωσης προτιμάται η ολίσθηση Σε κάθε σύγκρουση ελάττωσης/ελάττωσης επιλέγεται ο πρώτος κανόνας

ΣΑ Γραμματικών Τελεστών Γραμματικές τελεστών είναι αυτές στις οποίες μεταξύ δύο μη τερματικών συμβόλων υπάρχει πάντα κάποιο τερματικό σύμβολο (τελεστής) Στη ΣΑ γραμματικών τελεστών, μπορούμε να προεπιλέγουμε κίνηση, ώστε να δίνουμε προτεραιότητα σε κάποιους τελεστές έναντι άλλων προσεταιριστικότητα (δεξιά, αριστερή ή καμία) σε τελεστές ίδιας προτεραιότητας

ΣΑ Γραμματικών Τελεστών Με την προεπιλογή: Ενσωματώνουμε σημασιολογικές ιδιότητες της γλώσσας στη σύνταξή της Απαλείφουμε τη γραμματική από ανεπιθύμητες ιδιότητες, όπως το διφορούμενο!

Παράδειγμα Αν τ1, τ2 είναι τελεστές, τότε σε σύγκρουση Ε Ε τ1 Ε Ε Ε τ2 Ε επιλέγουμε: ολίσθηση, αν ο τ2 έχει υψηλότερη προτεραιότητα ή αν οι τ1 και τ2 έχουν ίση προτεραιότητα και δεξιά προσεταιριστικότητα, ελάττωση, αν ο τ1 έχει υψηλότερη προτεραιότητα ή αν οι τ1 και τ2 έχουν ίση προτεραιότητα και αριστερή προσεταιριστικότητα, σφάλμα, σε κάθε άλλη περίπτωση