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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Syntax Analysis Part V

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

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

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

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

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

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

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

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

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

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

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

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

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

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

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

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

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

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

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

Κεφάλαιο 3 : Σύνταξη Γλωσσών Προγραμματισμού

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

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

ΜΑΘΗΜΑ: Μεταγλωττιστές

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

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

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

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

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

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

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 10: Αυτόματα Στοίβας II

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

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

Κεφάλαιο 2: Τυπικές γλώσσες. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος / 216

Λύσεις 4ης Σειράς Ασκήσεων

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

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

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

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

ΚΕΦΑΛΑΙΟ 4 ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΥΝΤΑΚΤΙΚΗΣ ΑΝΑΛΥΣΗΣ

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

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

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

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

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

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

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

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

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

Κατηγορικές Γραµµατικές

Εισαγωγή στον Προγραμματισμό

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

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

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

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

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

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

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

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 9: Αυτόματα Στοίβας (Pushdown Automata - PDA)

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Μοντελοποίηση Υπολογισμού. Γραμματικές Πεπερασμένα Αυτόματα Κανονικές Εκφράσεις

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

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

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

Σε αυτό το µάθηµα. Εισαγωγή στις Μηχανές Turing. Μηχανή Turing (Turing Machine - TM) Μηχανές Turing. Παραδείγµατα Μηχανών Turing

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Κανονικές Γλώσσες. Κανονικές Γλώσσες. Κανονικές Γλώσσες και Αυτόματα. Κανονικές Γλώσσες και Αυτόματα

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ 2016 Α.Ε.Π.Π. Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ. Θέματα και Απαντήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Transcript:

Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση II Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου

Δομή Εισαγωγή στην ανάλυση από κάτω προς τα πάνω. Οι έννοιες της ελάττωσης και ολίσθησης Συγκρούσεις Πλεονεκτήματα της LR ανάλυσης Συντακτική ανάλυση LR Στοιχεία Συναρτήσεις CLOSURE και GOTO Κατασκευή Πίνακα SLR(1) Ανάνηψη από σφάλματα

Συντακτική Ανάλυση από Κάτω προς τα Πάνω Bottom-up Syntax Analysis Δημιουργία δένδρου: Κατασκευή αριστερότερου κόμβου, του οποίου όλοι οι κόμβοι παιδιά (απόγονοι) έχουν ήδη κατασκευαστεί. Η κατασκευή του δένδρου τερματίζει όταν κατασκευαστεί το τερματικό σύμβολο της γραμματικής (ρίζα). Πρόβλημα: Ποιοι ήδη δημιουργημένοι κόμβοι θα χρησιμοποιηθούν ως παιδιά για την κατασκευή του νέου κόμβου;

Παράδειγμα Έστω η ακόλουθη γραμματική και η συμβολοσειρά id * id. Ε ::= Ε "+" Τ Τ T ::= Τ "*" F F F ::= "id" "(" E ")" Η δημιουργία του δένδρου περιλαμβάνει T E T id * id F * id T * id T * F T * F T * F id F F id F id F id id id id id

Δεξιότερη Παραγωγή Σε κάθε βήμα, ανάγουμε/ελαττώνουμε (reduce) μια υπο-συμβολοσειρά της εισόδου που ταιριάζει με το δεξιό μέλος ενός κανόνα παραγωγής με αντίστοιχο μη-τερματικό του σύμβολο (αριστερό μέλος). Η προηγούμενη κατασκευή του δένδρου αντιστοιχεί με ανάστροφη σειρά στην παραγωγή: Ε => Τ => Τ * F => T * id => F * id => id*id είναι δηλαδή η δεξιότερη παραγωγή για την συγκεκριμένη συμβολοσειρά.

ΣΑ Ολίσθησης Ελάττωσης (shift-reduce) Γενική κατηγορία ΣΑ από κάτω προς τα πάνω Χρησιμοποιούν στοίβα για να αποθηκεύουν τερματικά και μη-τερματικά σύμβολα. Ενέργειες ενός ΣΑ: Ολίσθηση (shift), όπου ένα σύμβολο εισόδου τοποθετείται στη στοίβα Ελάττωση (reduce), όπου ένα ή περισσότερα σύμβολα από την κορυφή της στοίβας αντικαθίστανται από ένα μη-τερματικό σύμβολο. Αποδοχή (accept), όταν η στοίβα περιέχει το αρχικό σύμβολο της γραμματικής Σφάλμα (error), όταν εμφανιστεί συντακτικό σφάλμα.

Παράδειγμα Ανάλυσης Ολίσθησης Ελάττωσης Στοίβα Είσοδος Ενέργεια $ id * id EOF shift $id *id EOF reduce F::=id $F *id EOF reduce T::=F $T *id EOF shift $T* id EOF shift $T*id EOF reduce F::=id $T*F EOF reduce T::=T*F $T EOF reduce E::=T $E EOF accept

Αποφάσεις κατά την διάρκεια της Συντακτικής Ανάλυσης Ε ::= Ε "+" Τ Τ T ::= Τ "*" F F F ::= "id" "(" E ")" Στοίβα Είσοδος Ενέργεια $ id * id EOF shift $id *id EOF reduce F::=id $F *id EOF reduce T::=F $T *id EOF shift $T* id EOF shift $T*id EOF reduce F::=id $T*F EOF reduce T::=T*F $T EOF reduce E::=T $E EOF accept Ελάττωση με κανόνα Ε::=Τ ή ολίσθηση? Ελάττωση με τον κανόνα Τ::=Τ*F ή T::=F?

Συγκρούσεις Ολίσθησης Ελάττωσης (shift-reduce) Έστω η γραμματική: S ::= "if" E "then" S "if" E "then" S "else" S O και η ακόλουθη είσοδος: if E1 then if E2 then S1 else S2 Ένας συντακτικός αναλυτής ολίσθησης ελάττωσης σε κάποια στιγμή θα περιέχει: Στοίβα Είσοδος $if E then if E then S1 else S2 Τι θα πρέπει να γίνει ολίσθηση ή ελάττωση? Σύγκρουση ολίσθησης-ελάττωσης.

Συγκρούσεις Ελάττωσης Ελάττωσης (reduce-reduce) Έστω η γραμματική που προσφέρει δύο ειδών εντολές: Κλήσης διαδικασιών και ανάθεσης τιμών. (1) stmt ::= "id" "(" parameter list ")" (2) stmt ::= expr "=" expr (3) parameter list ::= parameter list "," parameter (4) parameter list ::= parameter (5) parameter ::= "id" (6) expr ::= "id" "(" expr list ")" (7) expr ::= "id" (8) expr list ::= expr list "," expr (9) expr list ::= expr

Συγκρούσεις Ελάττωσης Ελάττωσης (ii) Έστω η συμβολοσειρά id(id,id) οπότε σε μια δεδομένη στιγμή θα περιέχεται στην στοίβα Στοίβα Είσοδος $id(id,id) είναι δεδομένο ότι θα πρέπει να ελαττωθεί το id αλλά με ποίον από τους δύο κανόνες; (5) parameter ::= "id" (7) expr ::= "id" Αν το πρώτο id είναι διαδικασία τότε ο κανόνας (5) είναι σωστός, αν το id είναι πίνακας, τότε ο κανόνας (7) είναι σωστός. Σύγκρουση ελάττωσης-ελάττωσης

LR(k) Συντακτικοί Αναλυτές Αποφεύγουμε ΣΑ με συγκρούσεις, ώστε να έχουμε ντετερμινιστικούς συντακτικούς αναλυτές. LR(k) (Left-to-right, Rightmost derivation, k lookahead symbols): Διαβάζουν συμβολοσειρά εισόδου από αριστερά προς τα δεξιά, κατασκευάζουν το συντακτικό δένδρο χρησιμοποιώντας την αριστερότερη παραγωγή, διαβάζοντας k προπορευόμενα σύμβολα. Υλοποίηση με αυτόματα στοίβας ειδικής μορφής. Υλοποίηση LR(k) για k μεγαλύτερο του 1 είναι ιδιαίτερα πολύπλοκη. LR(1), SLR(1), LALR(1)

Γιατί Συντακτικούς Αναλυτές LR Είναι δυνατό να κατασκευαστούν ΣΑ LR σχεδόν για κάθε προγραμματιστική δομή και καλύπτουν τις ανάγκες της συντριπτικής πλειοψηφίας των γλωσσών προγραμματισμού. Είναι η γενικότερη μέθοδος συντακτικής ανάλυσης ελάττωσης-ολίσθησης και μπορεί να υλοποιηθεί αποδοτικά. Είναι εύκολη η ανίχνευση λαθών. Οι κλάση των γραμματικών LR είναι υπερσύνολο εκείνων των γραμματικών LL.

Συντακτικοί Αναλυτές LR

ΣΑ LR(1) Οι ΣΑ της κατηγορίας υλοποιούνται με αυτόματο στοίβας της μορφής: s n a 1 a 2... a m EOF x n... ΑΛΓΟΡΙΘΜΟΣ LR s 1 x 1 ΠΙΝΑΚΕΣ ΕΛΕΓΧΟΥ ΣΥΝΤΑΚΤΙΚΗΣ ΑΝΑΛΥΣΗΣ s 0 ACTION NEXT

Αυτόματο LR Ενδιάμεση μνήμη για ανάγνωση συμβολοσειράς εισόδου. Πεπερασμένο σύνολο καταστάσεων Κ. Στοίβα όπου τοποθετούνται εναλλάξ σύμβολα της γραμματικής και καταστάσεις του αυτομάτου από το Κ. Πίνακας πράξεων ACTIOΝ, με μια γραμμή για κάθε κατάσταση K και μια στήλη για κάθε τερματικό σύμβολο της γραμματικής και το σύμβολο EOF. Πίνακας επόμενης κατάστασης NEXT, με μια γραμμή για κάθε κατάσταση του Κ και μια στήλη για κάθε σύμβολο της γραμματικής (τερματικό ή μητερματικό).

Λειτουργία ΣΑ LR Αρχικά, η στοίβα περιέχει μόνο η αρχική κατάσταση. Έστω ότι στην κορυφή της στοίβας βρίσκεται η κατάσταση s και το σύμβολο εισόδου είναι a. Τότε αν το κελί του πίνακα action(s,a) περιέχει: πράξη ολίσθησης, τότε το a τοποθετείται στη στοίβα και μετά από αυτό η κατάσταση next(s,a). πράξη ελάττωσης, με ένα κανόνα της μορφής Α::=β, τότε αφαιρούνται από τη στοίβα β ζεύγη καταστάσεων-συμβόλων. Η επόμενη κατάσταση καθορίζεται από την ενέργεια s''=next(s',α) (πίνακας ΝΕΧΤ), όπου s' το στοιχείο στην κορυφή της στοίβας. Τοποθετείται στη στοίβα το Α και η κατάσταση s''. πράξη αποδοχής, τότε ο ΣΑ σταματά.

Αναπαράσταση Πινάκων ΣΑ Αναπαράσταση στοιχείων του πίνακα ΣΑ: si : Στη θέση Μ(j,x), σημαίνει ότι η επόμενη κατάσταση θα είναι η i, και θα γίνει η πράξη της ολίσθησης. rk : Στην θέση Μ(j,x), σημαίνει ότι γίνεται ελάττωση με τον κανόνα k (υποθέτουμε αρίθμηση των κανόνων), και acc : αποδοχή.

Παράδειγμα Πίνακα ΣΑ LR (1) Ε ::= Ε "+" Τ (2) Ε ::= Τ (3) T ::= Τ "*" F (4) T::=F (5) F::="(" E ")" (6) F ::= "id" STATE Action Goto (Next) id + * ( ) EOF E T F 0 s5 s4 1 2 3 1 s6 acc 2 r2 s7 r2 r2 3 r4 r4 r4 r4 4 s5 s4 8 2 3 5 r6 r6 r6 r6 6 s5 s4 9 3 7 s5 s4 10 8 s6 s11 9 r1 s7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 r5

Παράδειγμα ανάλυσης της id * id + id Στοίβα Είσοδος Ενέργεια 1 0 id*id+id EOF shift (s5) 2 0 id 5 *id+id EOF reduce by F ::= id (r6) 3 0 F 3 *id+id EOF reduce T ::= F (r4) 4 0 T 2 *id+id EOF shift (s7) 5 0 T 2 * 7 id+id EOF shift (s5) 6 0 T 2 * 7 id 5 +id EOF reduce by F ::= id (r6) 7 0 T 2 * 7 F 10 +id EOF reduce by T::=T*F (r3) 8 0 T 2 +id EOF reduce by E ::= T (r2) 9 0 E 1 +id EOF shift (s6) 10 0 E 1 + 6 id EOF shift (s5) 11 0 E 1 + 6 id 5 EOF reduce by F ::= id (r6) 12 0 E 1 + 6 F 3 EOF reduce by T ::=F (r4) 13 0 E 1 + 6 T 9 EOF reduce by E::=E+T (r1) 14 0 E 1 EOF accept

Κατασκευή Πινάκων ACTION & GOTO (NEXT) Αρκετοί αλγόριθμοι κατασκευής πινάκων: LR(0): αν η γραμματική ανήκει στην κατηγορία LR(0). Δεν χρησιμοποιείται πολύ στην πράξη. SLR(1): Μεγαλύτερο εύρος γραμματικών αλλά αρκετά περιοριστικός. LALR(1): Χρησιμοποιείται περισσότερο στην πράξη. LR(1): Πολύ μεγάλο μέγεθος πινάκων. Οι κατηγορίες γλωσσών που αναγνωρίζονται από τους αντίστοιχους ΣΑ είναι: LR(0) SLR(1) LALR(1) LR(1)

Αλγόριθμος SLR(1) Κατασκευή των Πινάκων ACTION GOTO (ΝΕΧΤ)

Κατασκευή Πίνακα SLR(1) Για την κατασκευή του αντίστοιχου πίνακα συντακτικής ανάλυσης απαιτείται ο ορισμός: της έννοιας του στοιχείου (item), της συνάρτησης CLOSURE(I) (κλεισίματος) ενός συνόλου στοιχείων, της συνάρτησης GOTO(I,X) ενός συνόλου στοιχείων και ενός συμβόλου της γραμματικής, η οποία επιστρέφει ένα σύνολο στοιχείων, ορισμός των καταστάσεων του αυτομάτου. Αλγόριθμος κατασκευής του πίνακα βάσει των παραπάνω.

Στοιχεία (Items) Στοιχείο είναι ένας κανόνας παραγωγής, στον οποίο έχει προστεθεί το σύμβολο " ". Για παράδειγμα στον κανόνα Α::= ΧΥΖ αντιστοιχούν τα ακόλουθα στοιχεία Α::= ΧΥΖ, Α::= Χ ΥΖ, Α::= ΧΥ Ζ Α::= ΧΥΖ Το σημείο " " σηματοδοτεί το σημείο της συμβολοσειράς που έχουμε ήδη δει, και το τι περιμένουμε να δούμε στη συνέχεια.

Συνάρτηση CLOSURE(I) Η συνάρτηση CLOSURE (κλείσιμο) ενός συνόλου στοιχείων Ι της γραμματικής δίνεται από: όλα τα στοιχεία του συνόλου Ι, για κάθε στοιχείο του Ι της μορφής Α::=α Ββ το οποίο ανήκει στο σύνολο CLOSURE(I) και για κάθε κανόνα της γραμματικής της μορφής Β::=γ, το στοιχείο Β::= γ ανήκει στο CLOSURE(I). Το παραπάνω βήμα εκτελείται μέχρι να μη ν μεταβάλλεται το CLOSURE(I).

Παράδειγμα Υπολογισμού CLOSURE(I) Έστω η (επαυξημένη) γραμματική: Ε' ::= Ε Ε ::= Ε "+" Τ Τ T ::= Τ "*" F F F ::= "id" "(" E ")" Εάν θεωρήσω το σύνολο I 0 = {E' ::= E} η συνάρτηση CLOSURE(I 0 ) είναι: CLOSURE(I 0 ) = {E'::= E; E::= E+T; E::= T; T ::= T * F; T ::= F; F ::= (E); F ::= id }

Συνάρτηση GOTO(Ι,Χ) Η συνάρτηση GOTO(I,X) απεικονίζει ένα σύνολο στοιχείων Ι και ένα σύμβολο της γραμματικής Χ (τερματικό ή μη) σε ένα σύνολο Ι' στοιχείων τέτοιων ώστε: GOTO(I,X) = CLOSURE(J) J = {A::=αX b A::=α Xb I} Παράδειγμα Υπολογισμού GOTO: I 1 ={E'::=E ; E::=E +T} GOTO(I 1,*) = {} GOTO(I 1,+)={E::=E+ T; T::= T*F;T::= F; F::= id; F::= (E) } Ε' ::= Ε Ε ::= Ε "+" Τ Τ T ::= Τ "*" F F F ::= "id" "(" E ")"

Καταστάσεις του Αυτομάτου Αρχικά το αυτόματο δεν έχει "διαβάσει" κανένα σύμβολο. Άρα η αρχική του κατάσταση είναι: Ε' ::= E Φυσικά, το Ι 0 =CLOSURE(E'::= E) CLOSURE(E'::= E) = {E'::= E; E::= E+T; E::= T; T ::= T * F; T ::= F; F ::= (E); F ::= id } Αν το αυτόματο διαβάσει ένα σύμβολο a τότε η κατάσταση του θα δίνεται από την I 1 =GOTO(I 0,a) Πχ. "ανάγνωση" σύμβολου id, άρα GOTO(I 0,id)={ F ::= id } = I 1

Κατασκευή Καταστάσεων Έστω μια γραμματική G=(T,N,P,S) και η επαυξημένη γραμματική: G'={T,N S',P (S'::=S),S'} Οι καταστάσεις Ι 0, Ι 1,...Ι n προκύπτουν από την ακόλουθη διαδικασία: I 0 = CLOSURE({S'::= S}) C = {I 0 } repeat forall Ι i C forall α (T N) if GOTO(Ι i,α) and GOTO(Ι i,α) C then I j = GOTO(Ι i,α) C = C { I j } until C unchaged

Κατασκευή Πίνακα SLR(1) ΣΑ για μια Γραμματική G 1) Δημιουργία των καταστάσεων των στοιχείων της G. 2) Για μια κατάσταση Ι i, αν υπάρχει στο Ι i κανόνας: i) Α::=α aβ και a είναι τερματικό σύμβολο και υπάρχει GOTO(Ι i,a)= Ι j τότε action(i,a)=shift j ii) Α::=α τότε για κάθε a στο FOLLOW(A) με Α S', τότε action(i,a)= reduce A::=α iii) S'::=S τότε action(i,eof) = accept 3) Για κάθε μη-τερματικό σύμβολο Α αν GOTO(Ι i,a)= Ι j τότε next(i,a)= j 4) Όλες οι άλλες θέσεις του πίνακα παίρνουν την τιμή error. 5) Η αρχική κατάσταση είναι η Ι 0 =CLOSURE({S'::= S})

Παράδειγμα Υπολογισμού SLR(1) Πίνακα Ε' ::= Ε Ε ::= Ε "+" Τ Ε ::= Τ T ::= Τ "*" F T ::=F F ::= "(" E ")" F ::= "id" I 0 ={E'::= E; E::= E+T; E::= T; T ::= T * F;T ::= F; F ::= (E);F ::= id } I 1 =GOTO(I 0,E)={E'::=E ;E::=E +T} I 2 =GOTO(I 0,T)={E::=T ; T ::=T * F} I 3 =GOTO(I 0,F)={T ::= F } I 4 =GOTO(I 0, ( )={F ::=( E);E::= E+T; E::= T; T ::= T * F; T ::= F; F ::= (E); F ::= id } I 5 =GOTO(I 0, id) = { F ::= id } I 6 =GOTO(I 1, +)={E::=E+ T;T ::= T * F; T ::= F; F ::= (E); F ::= id } I 7 =GOTO(I 2, *)={T ::=T * F;F ::= (E);F ::= id }...

Παράδειγμα Κατασκευή Πίνακα I 1 =GOTO(I 0,E) I 6 =GOTO(I 1, +) I 2 =GOTO(I 0,T) και I 1 ={E'::=E ;...} I 3 =GOTO(I 0,F) I 7 =GOTO(I 2, *) I 4 =GOTO(I 0, ( ) I 2 ={E::=T ;...} & I 5 =GOTO(I 0, id) FOLLOW(E)={+,),EOF} id + * ( ) EOF E T F 0 s5 s4 1 2 3 1 s6 acc 2 r2 s7 r2 r2 3

Πλήρης Πίνακας SLR (1) Ε ::= Ε "+" Τ (2) Ε ::= Τ (3) T ::= Τ "*" F (4) T::=F (5) F::="(" E ")" (6) F ::= "id" STATE Action Goto (Next) id + * ( ) EOF E T F 0 s5 s4 1 2 3 1 s6 acc 2 r2 s7 r2 r2 3 r4 r4 r4 r4 4 s5 s4 8 2 3 5 r6 r6 r6 r6 6 s5 s4 9 3 7 s5 s4 10 8 s6 s11 9 r1 s7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 r5

Παρατηρήσεις Προφανώς, αν σε ένα κελί του πίνακα αντιστοιχούν δύο τιμές, όπως αυτές ορίστηκαν παραπάνω, τότε η γραμματική δεν είναι SLR(1). Η υλοποίηση ΣΑ LR γίνεται συνήθως με μεταεργαλεία, όπως είναι το bison (yacc).

Ανάνηψη από σφάλματα στη Συντακτική Ανάλυση LR

Ανάνηψη από σφάλματα σε ΣΑ LR(1) Ο εντοπισμός σφάλματος γίνεται όταν διαπιστωθεί ότι για το συγκεκριμένο συνδυασμό συμβόλου στοίβας και συμβόλου εισόδου, ο πίνακας ACTION είναι κενός. Ανάνηψη από λάθη με την μέθοδο πανικού Ανάνηψη από λάθη σε επίπεδο φάσης.

Μέθοδος Πανικού Ανιχνεύεται η στοίβα μέχρι να βρεθεί μια κατάσταση s, η οποία να έχει μια μετάβαση για ένα συγκεκριμένο σύμβολο Α, δηλ. GOTO(s,A) να μην είναι κενό. Αφαιρούνται από την είσοδο, ένα η περισσότερα σύμβολα μέχρι να βρεθεί ένα, το οποίο να ανήκει στο FOLLOW(A). Τοποθετείται στη στοίβα η κατάσταση GOTO(s,A) και συνεχίζεται η συντακτική ανάλυση. Καθορίζει ότι το σφάλμα βρίσκεται στο Α και αφαιρεί τόσο από την στοίβα όσο και από την είσοδο σύμβολα σχετιζόμενα με το Α.

Ανάνηψη από λάθη σε επίπεδο φάσης. Δημιουργείται μια ρουτίνα λάθους για κάθε κενή θέση του πίνακα συντακτικής ανάλυσης. Η συνάρτηση προσθέτει ή αφαιρεί κατάλληλα σύμβολα τόσο στη στοίβα όσο και στην είσοδο ή ακόμα αλλαγή ή αντιμετάθεση δύο συμβόλων. Προσοχή πρέπει να δοθεί στη αποφυγή βρόγχων.

Σύνοψη Εισαγωγή στην ανάλυση από πάνω προς τα κάτω. Οι έννοιες της ελάττωσης και ολίσθησης Συγκρούσεις Πλεονεκτήματα της LR ανάλυσης Συντακτική ανάλυση LR Στοιχεία Συναρτήσεις CLOSURE και GOTO Κατασκευή Πίνακα SLR(1) Ανάνηψη από σφάλματα