(i) Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα και ιστορική αναδρομή Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 2 / 216
(i) Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα και ιστορική αναδρομή αρχικό πρόγραµµα τελικό πρόγραµµα µεταγλωττιστής διαγνωστικά µηνύµατα Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 2 / 216
(ii) Αρχική γλώσσα Τελική γλώσσα Γλώσσα υλοποίησης Y Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 3 / 216
(ii) Αρχική γλώσσα Τελική γλώσσα Γλώσσα υλοποίησης Y Σημασιολογία του προγράμματος στη γλώσσα Inp Out Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 3 / 216
(ii) Αρχική γλώσσα Τελική γλώσσα Γλώσσα υλοποίησης Y Σημασιολογία του προγράμματος στη γλώσσα Inp Out Σημασία ενός μεταγλωττιστή Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 3 / 216
(iii) Ορθότητα του μεταγλωττιστή: το μεταγλωττισμένο πρόγραμμα πρέπει να είναι ισοδύναμο με το αρχικό Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 4 / 216
(iii) Ορθότητα του μεταγλωττιστή: το μεταγλωττισμένο πρόγραμμα πρέπει να είναι ισοδύναμο με το αρχικό Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 4 / 216
(iv) Είδη μεταγλωττιστών: Απλοί Αντίστροφοι (decompilers) Μετα-μεταγλωττιστές (meta-compilers) Ειδικές περιπτώσεις μεταγλωττιστών: Προεπεξεργαστές (preprocessors) Συμβολομεταφραστές (assemblers) Γεννήτορες προγραμμάτων (program generators) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 5 / 216
(v) Συναφή εργαλεία Διερμηνείς (interpreters) Διαχειριστές βιβλιοθηκών (library managers) Συνδέτες (linkers) Φορτωτές (loaders) Εκδότες προγραμμάτων (program editors) Εντοπιστές σφαλμάτων (debuggers) Στατιστικοί αναλυτές (profilers) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 6 / 216
Κατασκευή μεταγλωττιστή (i) Βασικές απαιτήσεις: Να λειτουργεί σωστά Να συμμορφώνεται με τις προδιαγραφές της αρχικής και της τελικής γλώσσας Να μεταγλωττίζει προγράμματα κάθε μεγέθους Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 7 / 216
Κατασκευή μεταγλωττιστή (ii) Επιπρόσθετες απαιτήσεις: Να παράγει αποδοτικό κώδικα Να έχει μικρό χρόνο μεταγλώττισης Να έχει μικρές απαιτήσεις μνήμης κατά τη μεταγλώττιση Να δίνει καλά διαγνωστικά μηνύματα Να συνεχίζει ύστερα από λάθη Να είναι μεταφέρσιμος Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 8 / 216
Φάσεις και προϊόντα της μεταγλώττισης αρχικό πρόγραµµα Λεκτική ανάλυση Λεκτική ανάλυση λεκτικές µονάδες Συντακτική ανάλυση Συντακτική Ανάλυση Σημασιολογική ανάλυση συντακτικό δέντρο Σηµασιολογική Ανάλυση Παραγωγή ενδιάμεσου κώδικα Πίνακας συµβόλων συντακτικό δέντρο Παραγωγή ενδιάµεσου κώδικα Χειριστής σφαλµάτων Βελτιστοποίηση ενδιάµεσος κώδικας Βελτιστοποίηση ενδιάµεσου κώδικα Παραγωγή τελικού κώδικα ενδιάµεσος κώδικας Παραγωγή τελικού κώδικα τελικός κώδικας Βελτιστοποίηση τελικού κώδικα τελικό πρόγραµµα Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 9 / 216
Θέματα υλοποίησης Οργάνωση σε περάσματα Οργάνωση σε εμπρόσθιο και οπίσθιο τμήμα (front-end / back-end) Έλεγχος ορθότητας Είδη διαγνωστικών μηνυμάτων και ανάνηψη Εσωτερικά (internal) Σφάλματα (errors) Προειδοποιητικά μηνύματα (warnings) Απλά μηνύματα (messages) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 10 / 216
Εκκίνηση bootstrapping S S Βήμα 1: Μεταγλωττιστής για στην. Βήμα 2: Μεταγλωττιστής για την στην. Βήμα 3: Μεταγλωττιστής για την στην. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 11 / 216
Οργάνωση σε ένα πέρασμα Εµπρόσθιο τµήµα Συντακτικός αναλυτής Λεκτικός αναλυτής Σηµασιολογικός αναλυτής Γεννήτορας ενδιάµεσου κώδικα Βελτιστοποιητής ενδιάµεσου κώδικα Χειριστής σφαλµάτων Πίνακας συµβόλων Γεννήτορας τελικού κώδικα Βελτιστοποιητής τελικού κώδικα Οπίσθιο τµήµα Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 12 / 216