Κεφάλαιο 2: Τυπικές γλώσσες Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 13 / 216
Τυπικές γλώσσες (i) Βασικές έννοιες Αλφάβητο Σύμβολο Συμβολοσειρά Μήκος συμβολοσειράς Σύνολο συμβολοσειρών μήκους Σύνολο όλων των συμβολοσειρών a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 14 / 216
Τυπικές γλώσσες (ii) Βασικές έννοιες (συνέχεια) Κενή συμβολοσειρά Παράθεση συμβολοσειρών Παράθεση συμβολοσειράς με τον εαυτό της Πρόθεμα, επίθεμα, υποσυμβολοσειρά Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 15 / 216
Τυπικές γλώσσες (iii) Βασικές έννοιες (συνέχεια) Γλώσσα Ένωση γλωσσών Παράθεση γλωσσών Παράθεση γλώσσας με τον εαυτό της Κλείσιμο ή άστρο του Kleene Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 16 / 216
Τυπικές γλώσσες (iv) Γεννητικά μοντέλα Γραμματική : τερματικά σύμβολα a : μη τερματικά σύμβολα : κανόνες παραγωγής : αρχικό σύμβολο Παραγωγές: αν και τότε Γλώσσα: Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 17 / 216
Τυπικές γλώσσες (v) Ιεραρχία Chomsky Τύπου 0: όλες οι γραμματικές, Τύπου 1: γραμματικές με συμφραζόμενα (context-sensitive), με Τύπου 2: γραμματικές χωρίς συμφραζόμενα (context-free) Τύπου 3: κανονικές γραμματικές (regular) a ή a Ειδική περίπτωση: γλώσσες που παράγουν την κενή συμβολοσειρά Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 18 / 216
Τυπικές γλώσσες (vi) Αναγνωριστές Τύπου 0: μηχανή Turing Τύπου 1: γραμμικά περιορισμένη μηχανή Turing Τύπου 2: αυτόματα στοίβας (push-down automata) Χρήσιμα στη συντακτική ανάλυση Τύπου 3: πεπερασμένα αυτόματα (finite automata) Χρήσιμα στη λεκτική ανάλυση Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 19 / 216
Κανονικές γλώσσες (i) Κανονικές γραμματικές Μόνο κανόνες a ή a ισοδύναμα a ή a Κανονικές εκφράσεις (regular expressions) Κενή συμβολοσειρά: Κάθε σύμβολο του : a Παράθεση δύο κανονικών εκφράσεων: Διάζευξη δύο κανονικών εκφράσεων: Κλείσιμο (ή άστρο) Kleene: Συντομογραφίες: απαλοιφή περιττών παρενθέσεων a a a a a Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 20 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C ακέραιο μέρος που δεν αρχίζει με μηδέν, εκτός αν είναι μηδενικό (γιατί;) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C ακέραιο μέρος που δεν αρχίζει με μηδέν, εκτός αν είναι μηδενικό (γιατί;) 1-9 0-9 0 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C ακέραιο μέρος που δεν αρχίζει με μηδέν, εκτός αν είναι μηδενικό προαιρετικά: υποδιαστολή και κλασματικό μέρος (γιατί;) 1-9 0-9 0 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C ακέραιο μέρος που δεν αρχίζει με μηδέν, εκτός αν είναι μηδενικό προαιρετικά: υποδιαστολή και κλασματικό μέρος (γιατί;) 1-9 0-9 0. 0-9 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C ακέραιο μέρος που δεν αρχίζει με μηδέν, εκτός αν είναι μηδενικό προαιρετικά: υποδιαστολή και κλασματικό μέρος προαιρετικά: εκθέτης με ή χωρίς πρόσημο 1-9 0-9 0. 0-9 (γιατί;) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Κανονικές γλώσσες (ii) Παραδείγματα κανονικών εκφράσεων Ακέραιες σταθερές χωρίς πρόσημο στην Pascal ένα ή περισσότερα δεκαδικά ψηφία 0-9 Αριθμητικές σταθερές χωρίς πρόσημο στη C ακέραιο μέρος που δεν αρχίζει με μηδέν, εκτός αν είναι μηδενικό (γιατί;) προαιρετικά: υποδιαστολή και κλασματικό μέρος προαιρετικά: εκθέτης με ή χωρίς πρόσημο 1-9 0-9 0. 0-9 E e 0-9 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 21 / 216
Πεπερασμένα αυτόματα (i) 0 0 A 1 1 B Καταστάσεις και μεταβάσεις Ντετερμινιστικά (ΝΠΑ), μη ντετερμινιστικά (ΜΠΑ) και ΜΠΑ με κενές μεταβάσεις (ΜΠΑ- ) Αρχική κατάσταση, τελικές καταστάσεις Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 22 / 216
Πεπερασμένα αυτόματα (ii) 0 0 A 1 1 B Ποια γλώσσα αναγνωρίζει; Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 23 / 216
Πεπερασμένα αυτόματα (ii) 0 0 A 1 1 B Ποια γλώσσα αναγνωρίζει; Τη γλώσσα των συμβολοσειρών που αποτελούνται από 0 και 1 και περιέχουν άρτιο αριθμό 1 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 23 / 216
Κανονικές γλώσσες, ανασκόπηση Αναγωγές και ισοδυναμίες κανονική γραμματική ΜΠΑ- κανονική έκφραση ΜΠΑ- ΜΠΑ- Ελαχιστοποίηση ΝΠΑ ΜΠΑ- κανονική γραμματική ΜΠΑ- κανονική έκφραση ΝΠΑ Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 24 / 216
Κεφάλαιο 3: Λεκτική ανάλυση Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 25 / 216
Λεκτική ανάλυση Λεκτικές μονάδες (tokens) Αναγνωρίζονται με πεπερασμένα αυτόματα που: διαβάζουν ενδεχομένως περισσότερους χαρακτήρες οπισθοδρομούν αν χρειαστεί διαθέτουν έξοδο που χρησιμοποιείται στη συντακτική ανάλυση Ειδικός συμβολισμός: διαγράμματα μετάβασης Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 26 / 216
Διαγράμματα μετάβασης (i) Αναγνωριστικά της Pascal L 0 L 1 D Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 27 / 216
Διαγράμματα μετάβασης (i) Αναγνωριστικά της Pascal L 0 L 1 D L L * όχι L/D 0 1 2 (T_id) D Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 27 / 216
Διαγράμματα μετάβασης (ii) Τελεστές και 0 > 1 = 2 Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 28 / 216
Διαγράμματα μετάβασης (ii) Τελεστές και 0 > 1 = 2 * όχι = 2 (T_gt) 0 > 1 = 3 (T_ge) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 28 / 216
Κατασκευή του ΛΑ (i) Καταγραφή και ταξινόμηση χαρακτήρων mapping ASCII EOF Καταγραφή και ταξινόμηση λεκτικών μονάδων Κωδικοποίηση λεκτικών μονάδων Ακολουθία χαρακτήρων (lexeme) Σχεδίαση του διαγράμματος μετάβασης Υλοποίηση του λεκτικού αναλυτή Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 29 / 216
Κατασκευή του ΛΑ (ii) Επιμέρους θέματα Τρόπος διαχωρισμού λεκτικών μονάδων Σχόλια Διάκριση πεζών / κεφαλαίων γραμμάτων Ενδιάμεση μνήμη (buffer) Ανάνηψη από σφάλματα Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 30 / 216
Κατασκευή του ΛΑ (iii) W 0. ; ( ) = + - EOF * 20 21 22 23 26 30 31 45 (T_dot) (T_smcolon) (T_lparen) (T_rparen) (T_eq) (T_plus) (T_minus) (T_eof) : < > / * Σχεδίαση συνολικού διαγράμματος μετάβασης = 24 (T_assign) L E 1 6 40 όχι = * (T_colon) = όχι = = όχι = = όχι = * όχι * 25 (T_le) όχι L E D _ 2 3 4 5 45 41 (T_lt) * * 27 (T_ge) 42 (T_gt) * 28 (T_ne) 43 (T_div) * 29 (T_power) 44 (T_times) * L E D _ (T_id) όχι D. Ε όχι D Ε D * D 7. 8 E + - 9 10 D 11 όχι D 46 D Ε D D (T_const) { 12 } 0 όχι } Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 31 / 216
Κατασκευή του ΛΑ (iv) Εναλλακτικοί τρόποι υλοποίησης: Χειρωνακτικά Με πίνακα μεταβάσεων Με το μεταεργαλείο flex Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 32 / 216