Κεφάλαιο 2: Τυπικές γλώσσες (μέρος 2ο) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 47 / 216
Γλώσσες χωρίς συμφραζόμενα (i) Γραμματικές χωρίς συμφραζόμενα: Σε κάθε παραγωγή ένα μη τερματικό σύμβολο αντικαθίσταται, βάσει ενός κανόνα Πολλές διαφορετικές παραγωγές διαφέρουν μόνο στη σειρά των αντικαταστάσεων Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 48 / 216
Γλώσσες χωρίς συμφραζόμενα (i) Γραμματικές χωρίς συμφραζόμενα: Σε κάθε παραγωγή ένα μη τερματικό σύμβολο αντικαθίσταται, βάσει ενός κανόνα Πολλές διαφορετικές παραγωγές διαφέρουν μόνο στη σειρά των αντικαταστάσεων Αριστερότερη / δεξιότερη παραγωγή (leftmost / rightmost derivation) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 48 / 216
Γλώσσες χωρίς συμφραζόμενα (i) Γραμματικές χωρίς συμφραζόμενα: Σε κάθε παραγωγή ένα μη τερματικό σύμβολο αντικαθίσταται, βάσει ενός κανόνα Πολλές διαφορετικές παραγωγές διαφέρουν μόνο στη σειρά των αντικαταστάσεων Αριστερότερη / δεξιότερη παραγωγή (leftmost / rightmost derivation) Συντακτικά δέντρα (parse trees) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 48 / 216
Γλώσσες χωρίς συμφραζόμενα (ii) a c c b b a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 49 / 216
Γλώσσες χωρίς συμφραζόμενα (ii) Μία παραγωγή a c a b c ac b c ac ab c acab c acabac a c c b b a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 49 / 216
Γλώσσες χωρίς συμφραζόμενα (ii) Μία παραγωγή a c a b c ac b c ac ab c acab c acabac Αριστερότερη παραγωγή a a b c ac b c ac b c acab c acabac a c c b b a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 49 / 216
Γλώσσες χωρίς συμφραζόμενα (ii) Μία παραγωγή a c a b c ac b c ac ab c acab c acabac Αριστερότερη παραγωγή a a b c ac b c ac b c acab c acabac Δεξιότερη παραγωγή a c a ac a bac ac bac ac abac acabac a c c b b a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 49 / 216
Γλώσσες χωρίς συμφραζόμενα (ii) Μία παραγωγή a c a b c ac b c ac ab c acab c acabac Αριστερότερη παραγωγή a a b c ac b c ac b c acab c acabac Δεξιότερη παραγωγή a c a ac a bac ac bac ac abac acabac a c c b b a S a A B c c A S B b a ε a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 49 / 216
Διφορούμενες γραμματικές (i) Δύο γραμματικές είναι ισοδύναμες όταν παράγουν την ίδια γλώσσα. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 50 / 216
Διφορούμενες γραμματικές (i) Δύο γραμματικές είναι ισοδύναμες όταν παράγουν την ίδια γλώσσα. Μια γραμματική είναι διφορούμενη (ambiguous) αν υπάρχουν δύο ή περισσότερα συντακτικά δέντρα για την ίδια παραγόμενη συμβολοσειρά Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 50 / 216
Διφορούμενες γραμματικές (i) Δύο γραμματικές είναι ισοδύναμες όταν παράγουν την ίδια γλώσσα. Μια γραμματική είναι διφορούμενη (ambiguous) αν υπάρχουν δύο ή περισσότερα συντακτικά δέντρα για την ίδια παραγόμενη συμβολοσειρά Γραμματικές και γλώσσες εγγενώς διφορούμενες (inherently ambiguous) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 50 / 216
Διφορούμενες γραμματικές (i) Δύο γραμματικές είναι ισοδύναμες όταν παράγουν την ίδια γλώσσα. Μια γραμματική είναι διφορούμενη (ambiguous) αν υπάρχουν δύο ή περισσότερα συντακτικά δέντρα για την ίδια παραγόμενη συμβολοσειρά Γραμματικές και γλώσσες εγγενώς διφορούμενες (inherently ambiguous) Χρήση διφορούμενων γραμματικών στην περιγραφή της σύνταξης γλωσσών προγραμματισμού Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 50 / 216
Διφορούμενες γραμματικές Παράδειγμα: ξεκρέμαστο if (dangling if) (ii) stmt if cond stmt else stmt if cond stmt s1 s2 cond c1 c2 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 51 / 216
Διφορούμενες γραμματικές Παράδειγμα: ξεκρέμαστο if (dangling if) (ii) stmt if cond stmt else stmt if cond stmt s1 s2 cond c1 c2 Διφορούμενο: σε ποιο if αντιστοιχεί το else; if c1 if c2 s1 else s2 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 51 / 216
Διφορούμενες γραμματικές Παράδειγμα: ξεκρέμαστο if (dangling if) (ii) stmt if cond stmt else stmt if cond stmt s1 s2 cond c1 c2 Διφορούμενο: σε ποιο if αντιστοιχεί το else; if c1 if c2 s1 else s2 stmt if cond stmt c1 if cond stmt else stmt c2 s1 s2 if c1 if c2 s1 else s2 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 51 / 216
Διφορούμενες γραμματικές Παράδειγμα: ξεκρέμαστο if (dangling if) (ii) stmt if cond stmt else stmt if cond stmt s1 s2 cond c1 c2 Διφορούμενο: σε ποιο if αντιστοιχεί το else; if c1 if c2 s1 else s2 stmt stmt if cond stmt if cond stmt else stmt c1 if cond stmt else stmt c1 if cond stmt s2 c2 s1 s2 c2 s1 if c1 if c2 s1 else s2 if c1 if c2 s1 else s2 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 51 / 216
Τρόποι παράστασης γραμματικών (i) Backus-Naur Form (BNF) Σύμβολο στους κανόνες Μη τερματικά σύμβολα σε γωνιακές παρενθέσεις, π.χ. expr Σύμβολο για διάζευξη Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 52 / 216
Τρόποι παράστασης γραμματικών (i) Backus-Naur Form (BNF) Σύμβολο στους κανόνες Μη τερματικά σύμβολα σε γωνιακές παρενθέσεις, π.χ. expr Σύμβολο για διάζευξη unsigned-number integer-part dec-fraction exp-part integer-part dec-fraction exp-part sign digit integer-part digit integer-part E sign integer-part e sign integer-part digit 0 1 2 3 4 5 6 7 8 9 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 52 / 216
Τρόποι παράστασης γραμματικών (ii) Extended Backus-Naur Form Τερματικά σύμβολα σε εισαγωγικά Παρενθέσεις για ομαδοποίηση Αγκύλες για προαιρετικά τμήματα Σύμβολα και για επανάληψη (EBNF) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 53 / 216
Τρόποι παράστασης γραμματικών (ii) Extended Backus-Naur Form Τερματικά σύμβολα σε εισαγωγικά Παρενθέσεις για ομαδοποίηση Αγκύλες για προαιρετικά τμήματα Σύμβολα και για επανάληψη (EBNF) unsigned-number digit digit E e digit digit 0 1 2 3 4 5 6 7 8 9 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 53 / 216
Τρόποι παράστασης γραμματικών (iii) Συντακτικά διαγράμματα Τερματικά σύμβολα σε οβάλ Μη τερματικά σύμβολα σε ορθογώνια Διαδοχή συμβόλων (παράθεση) με βέλη Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 54 / 216
Τρόποι παράστασης γραμματικών (iii) Συντακτικά διαγράμματα Τερματικά σύμβολα σε οβάλ Μη τερματικά σύμβολα σε ορθογώνια Διαδοχή συμβόλων (παράθεση) με βέλη unsigned-number E + digit. digit digit e Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 54 / 216
Κεφάλαιο 4: Συντακτική ανάλυση Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 55 / 216
Συντακτική ανάλυση Συντακτικό δέντρο (parse tree) Κατασκευάζεται με δύο τρόπους: Καθοδικά Από πάνω προς τα κάτω (top-down) δηλαδή ξεκινώντας από τη ρίζα και προχωρώντας προς τα φύλλα Ανοδικά Από κάτω προς τα πάνω (bottom-up) δηλαδή ξεκινώντας από τα φύλλα και προχωρώντας προς τη ρίζα Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 56 / 216
Top-down και bottom-up από πάνω προς τα κάτω (top-down) 1 S 2 3 11 a A B c 13 4 A b 10 12 a 5 6 c S 8 B 7 ε 9 a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 57 / 216
Top-down και bottom-up από πάνω προς τα κάτω (top-down) 1 S από κάτω προς τα πάνω (bottom-up) 12 S 2 3 11 a A B c 13 10 a A B c 1 8 11 4 A b 10 12 a 6 A b 7 9 a 5 6 c S 8 B 2 c 5 S B 4 7 ε 9 a ε a 3 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 57 / 216
ΣΑ bottom-up (i) Η συντακτική ανάλυση ξεκινά από τα φύλλα Κάθε φορά, αναζητά: τον αριστερότερο κόμβο του δέντρου που δεν έχει ακόμα κατασκευαστεί ενώ όλα τα παιδιά του έχουν κατασκευαστεί Επαναλαμβάνει μέχρι να κατασκευαστεί η ρίζα Ελάττωση (reducing): η επιλογή των κόμβων που θα αποτελέσουν τα παιδιά ενός νέου κόμβου Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 64 / 216
ΣΑ bottom-up (ii) B B D D D D r a. b r a. b r a. b S r B B D B, D D a b B B S B B D D D D r a. b r a. b Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 65 / 216
ΣΑ bottom-up (iii) ΣΑ ολίσθησης-ελάττωσης (shift-reduce) Χρησιμοποιούν μια (αρχικά κενή) στοίβα όπου τοποθετούν σύμβολα της γραμματικής Ολίσθηση (shift): μεταφορά ενός συμβόλου από την είσοδο στην κορυφή της στοίβας Ελάττωση (reduce): αφαίρεση από την κορυφή της στοίβας του δεξιού μέλους ενός κανόνα και πρόσθεση του αριστερού μέλους Επιτυχία: η στοίβα περιέχει μόνο το και τα σύμβολα της εισόδου έχουν εξαντληθεί Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 66 / 216
ΣΑ bottom-up (iv) S r B βήμα στοίβα είσοδος κίνηση B D B, D D a b r a, b ολίσθηση r a, b ολίσθηση ra, b ελάττωση με D a r D, b ελάττωση με B D r B, b ολίσθηση (όχι ελάττωση με S r B) r B, b ολίσθηση r B,b ελάττωση με D b r B, D ελάττωση με B B, D (όχι ελάττωση με B D) r B ελάττωση με S r B S αναγνώριση Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 67 / 216
ΣΑ bottom-up (v) συµβολοσειρά εισόδου a 1 a 2... a n EOF LR( ) επόµενο σύµβολο LR(0) SLR(1) LALR(1) LR(1) s m x m... κορυφή Πίνακες ελέγχου συντακτικής ανάλυσης LR(1) s 1 ACTION NEXT x 1 Συντακτικός Αναλυτής LR(1) s 0 στοίβα Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 68 / 216