Μεταφραστές Εισαγωγή (source program) Τελικό πρόγραµµα (object program) Γιώργος Μανής Γλώσσες Είδη Μεταγλωττιστών Αρχική γλώσσα Γλώσσα υλοποίησης Τελική γλώσσα Απλοί µεταγλωττιστές Αντίστροφοι µεταγλωττιστές Μέτα-µεταγλωττιστές προσαρµοζόµενοι µεταγλωττιστές µέτα-µεταγλωττιστές γεννήτορες Προσαρµοζόµενοι Μεταγλωττιστές αρχικής γλώσσας Μέτα- γεννήτορας αρχικής γλώσσας Προσαρµοζόµενος Τελικό πρόγραµµα (object program) Μέτα- γεννήτορας 1
ιαµεταγλωττιστές Συγγενή Εργαλεία ο υπολογιστής στον οποίο γίνεται η µετάφραση είναι διαφορετική αρχιτεκτονική από τον υπολογιστή στον οποίο θα εκτελεστεί το τελικό πρόγραµµα Προεπεξεργαστές (preprocerssors) από αρχική γλώσσα πάλι σε αρχική γλώσσα αφού έχει κάνει κάποιες τροποποιήσεις, π.χ. αντικατάσταση συµβολικών ονοµάτων των σταθερών µε τις πραγµατικές τιµές τους Συµβολοµεταφραστές (assemblers) από συµβολική γλώσσα µηχανής σε γλώσσα µηχανής µία προς µία αντιστοίχιση εντολών Συγγενή Εργαλεία Γεννήτορες προγραµµάτων (program generators) flex: παίρνει έως είσοδο την περιγραφή κάποιων λεκτικών µονάδων και επιστρέφει ένα λεκτικό αναλυτή. Με την αναγνώριση µίας λεκτικής µονάδας δίνει τη δυνατότητα εκτέλεσης κώδικα ή επιστροφή τιµής στον bison bison: παίρνει έως είσοδο την περιγραφή των κανόνων µίας γλώσσας και επιστρέφει έναν συντακτικό αναλυτή για τη γλώσσα αυτή. Με την αναγνώριση µίας δοµής της γλώσσας δίνει τη δυνατότητα εκτέλεσης κώδικα ιερµηνείς (interpreters) µετάφραση και εκτέλεση εντολή προς εντολή ευκολότερη κατασκευή από τους µεταγλωττιστές σηµαντικά πιο αργοί από τους µεταγλωττιστές ασφάλεια εκτέλεσης σε σχέση µε τουςµεταγλωττιστές Βιβλιοθήκες χρόνου εκτέλεσης (run time libraries) υποπρογράµµατα και συναρτήσεις σε µεταγλωττισµένη µορφή διαχειρίζονται από ειδικά προγράµµατα (διαχειριστές βιβλιοθηκών πραγµατικού χρόνου) που προσφέρουν υπηρεσίεςόπωςπροσθήκη, διαγραφή κλπ. Συνδέτες (linkers) δέχονται σαν είσοδο µεταγλωττισµένα αρχεία και βιβλιοθήκες χρόνου εκτέλεσης και παράγουν ως έξοδο ένα εκτελέσιµο πρόγραµµα αναλύουν τις σχετικές διευθύνσεις των µεταγλωττισµένων αρχείων και των προγραµµάτων βιβλιοθήκης και τα ενοποιούν ώστε να είναι όλες µε βάση µία σχετική διεύθυνση 2
Φορτωτές (loaders) δέχονται σαν είσοδο ένα εκτελέσιµο πρόγραµµα και το τοποθετούν στη µνήµη για να είναι έτοιµο προς εκτέλεση µετατρέπουν τις σχετικές διευθύνσεις σε απόλυτες διευθύνσεις αποτελεί µέρος του λειτουργικού συστήµατος Εκδότες προγραµµάτων (program editors) χρησιµοποιούνται στη συγγραφή, διόρθωση προγραµµάτων και αποθήκευσή τους στη περιφερειακή µονάδα του υπολογιστή Εντοπιστές σφαλµάτων (debuggers) βηµατική εκτέλεση προγραµµάτων παρακολούθηση τιµών µεταβλητών τοποθέτηση σηµείων διακοπής εκτέλεσης Στατιστικοί αναλυτές (profiles) Απαιτήσεις Απαιτήσεις Σωστή λειτουργία Να συµµορφώνεται µε τις προδιαγραφές αρχικής και Να µεταφράζει προγράµµατα αυθαίρετου µεγάλου µήκους Να παράγει αποδοτικό κώδικα Να έχει µικρό χρόνο εκτέλεσης Να έχει µικρές απαιτήσεις µνήµης κατά τη µεταγλώττιση Να δίνει καλά διαγνωστικά Να έχει τη δυνατότητα συνέχισης ύστερα από τον εντοπισµό σφαλµάτων Να είναι µεταφέρσιµος Οι Φάσεις της Μεταγλώττισης Λεκτική Ανάλυση λεκτική ανάλυση συντακτική ανάλυση Πίνακας Συµβόλων σηµασιολογική ανάλυση παραγωγή ενδιάµεσου κώδικα ιαχείριση λαθών Λεκτική Ανάλυση χαρακτήρας-χαρακτήρας Λεκτικές µονάδες βελτιστοποίηση ενδιάµεσου κώδικα παραγωγή τελικού κώδικα βελτιστοποίηση τελικού κώδικα 3
Συντακτική Ανάλυση Σηµασιολογική Ανάλυση Συντακτική Ανάλυση Λεκτικές µονάδες Γραµµατική της γλώσσας Σηµασιολογική Ανάλυση Παραγωγή Ενδιάµεσου Κώδικα Παραγωγή ενδιάµεσου κώδικα κώδικα Πίνακας Συµβόλων Παραγωγή Τελικού Κώδικα Λεκτικές Μονάδες Πίνακας Συµβόλων Πληροφορίες για µεταβλητές, συναρτήσεις, παραµέτρους κλπ Πληροφορίες από πίνακα συµβόλων Παραγωγή τελικού κώδικα 4
Τελικού Κώδικα Οργάνωση Μεταγλωττιστή Εµπρόσθιο τµήµα συντακτική ανάλυση χειριστής τελικού κώδικα λεκτική ανάλυση σηµασιολογική ανάλυση παραγωγή ενδιάµεσου κώδικα βελτιστοποίηση ενδιάµεσου κώδικα σφαλµάτων παραγωγή τελικού κώδικα βελτιστοποίηση τελικού κώδικα πίνακας συµβόλων Οπίσθιο τµήµα Σφάλµατα Λεκτικά σφάλµατα, π.χ. λάθη πληκτρολόγησης Συντακτικά σφάλµατα, π.χ. λείπει παρένθεση Σηµασιολογικά σφάλµατα, π.χ. αριθµητική πρόσθεση ακεραίου και διαδικασίας Σφάλµατα εκτέλεσης, π.χ. εξάντληση µνήµης Λογικά σφάλµατα, π.χ. ατέρµονη διαδικασία 5