Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Μεταγλωττιστές Εισαγωγή Νίκος Παπασπύου, Κωστής Σαγώνας
Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.
ÅéóáãùãÞ (i) Ãëþóóåò ðñïãñáììáôéóìïý ÌåôáãëùôôéóôÝò Áíáãêáéüôçôá êáé éóôïñéêþ áíáäñïìþ 3
ÅéóáãùãÞ (i) Ãëþóóåò ðñïãñáììáôéóìïý ÌåôáãëùôôéóôÝò Áíáãêáéüôçôá êáé éóôïñéêþ áíáäñïìþ αρχικό πρόγραµµα τελικό πρόγραµµα µεταγλωττιστής διαγνωστικά µηνύµατα 4
ÅéóáãùãÞ (ii) Áñ éêþ ãëþóóá L A A ÔåëéêÞ ãëþóóá L Ãëþóóá õëïðïßçóçò L Y Y 5
ÅéóáãùãÞ (ii) Áñ éêþ ãëþóóá L A A ÔåëéêÞ ãëþóóá L Ãëþóóá õëïðïßçóçò L Y Y Óçìáóéïëïãßá ôïõ ðñïãñüììáôïò P óôç ãëþóóá L [[P ]] L : Inp(P ) Out(P ) 6
ÅéóáãùãÞ (ii) Áñ éêþ ãëþóóá L A A ÔåëéêÞ ãëþóóá L Ãëþóóá õëïðïßçóçò L Y Y Óçìáóéïëïãßá ôïõ ðñïãñüììáôïò P óôç ãëþóóá L [[P ]] L : Inp(P ) Out(P ) Óçìáóßá åíüò ìåôáãëùôôéóôþ C [[C ]] LY : L A L 7
ÅéóáãùãÞ (iii) Ïñèüôçôá ôïõ ìåôáãëùôôéóôþ: \ôï ìåôáãëùôôéóìýíï ðñüãñáììá ðñýðåé íá åßíáé éóïäýíáìï ìå ôï áñ éêü" 8
ÅéóáãùãÞ (iii) Ïñèüôçôá ôïõ ìåôáãëùôôéóôþ: \ôï ìåôáãëùôôéóìýíï ðñüãñáììá ðñýðåé íá åßíáé éóïäýíáìï ìå ôï áñ éêü" [[P ]] LA = [[[[C ]] LY (P )]] L 9
ÅéóáãùãÞ (iv) Åßäç ìåôáãëùôôéóôþí: Áðëïß Áíôßóôñïöïé (decompilers) Ìåôá-ìåôáãëùôôéóôÝò (meta-compilers) ÅéäéêÝò ðåñéðôþóåéò ìåôáãëùôôéóôþí: ÐñïåðåîåñãáóôÝò (preprocessors) ÓõìâïëïìåôáöñáóôÝò (assemblers) ÃåííÞôïñåò ðñïãñáììüôùí (program generators) 10
ÅéóáãùãÞ (v) ÓõíáöÞ åñãáëåßá Äéåñìçíåßò (interpreters) Äéá åéñéóôýò âéâëéïèçêþí (library managers) ÓõíäÝôåò (linkers) ÖïñôùôÝò (loaders) Åêäüôåò ðñïãñáììüôùí (program editors) ÅíôïðéóôÝò óöáëìüôùí (debuggers) Óôáôéóôéêïß áíáëõôýò (prolers) 11
ÊáôáóêåõÞ ìåôáãëùôôéóôþ (i) ÂáóéêÝò áðáéôþóåéò: Íá ëåéôïõñãåß óùóôü Íá óõììïñöþíåôáé ìå ôéò ðñïäéáãñáöýò ôçò áñ éêþò êáé ôçò ôåëéêþò ãëþóóáò Íá ìåôáãëùôôßæåé ðñïãñüììáôá êüèå ìåãýèïõò 12
ÊáôáóêåõÞ ìåôáãëùôôéóôþ (ii) Åðéðñüóèåôåò áðáéôþóåéò: Íá ðáñüãåé áðïäïôéêü êþäéêá Íá Ý åé ìéêñü ñüíï ìåôáãëþôôéóçò Íá Ý åé ìéêñýò áðáéôþóåéò ìíþìçò êáôü ôç ìåôáãëþôôéóç Íá äßíåé êáëü äéáãíùóôéêü ìçíýìáôá Íá óõíå ßæåé ýóôåñá áðü ëüèç Íá åßíáé ìåôáöýñóéìïò 13
ÖÜóåéò êáé ðñïúüíôá ôçò ìåôáãëþôôéóçò αρχικό πρόγραµµα ËåêôéêÞ áíüëõóç Λεκτική ανάλυση λεκτικές µονάδες ÓõíôáêôéêÞ áíüëõóç Συντακτική Ανάλυση ÓçìáóéïëïãéêÞ áíüëõóç συντακτικό δέντρο Σηµασιολογική Ανάλυση ÐáñáãùãÞ åíäéüìåóïõ êþäéêá Πίνακας συµβόλων συντακτικό δέντρο Παραγωγή ενδιάµεσου κώδικα Χειριστής σφαλµάτων Âåëôéóôïðïßçóç ενδιάµεσος κώδικας Βελτιστοποίηση ενδιάµεσου κώδικα ÐáñáãùãÞ ôåëéêïý êþäéêá ενδιάµεσος κώδικας Παραγωγή τελικού κώδικα τελικός κώδικας Βελτιστοποίηση τελικού κώδικα τελικό πρόγραµµα 14
ÈÝìáôá õëïðïßçóçò ÏñãÜíùóç óå ðåñüóìáôá ÏñãÜíùóç óå åìðñüóèéï êáé ïðßóèéï ôìþìá (front-end / back-end) ëåã ïò ïñèüôçôáò Åßäç äéáãíùóôéêþí ìçíõìüôùí êáé áíüíçøç ÅóùôåñéêÜ (internal) ÓöÜëìáôá (errors) ÐñïåéäïðïéçôéêÜ ìçíýìáôá (warnings) ÁðëÜ ìçíýìáôá (messages) 15
Åêêßíçóç { bootstrapping A A A A A S S ÂÞìá 1: ÌåôáãëùôôéóôÞò ãéá S A óôçí. ÂÞìá 2: ÌåôáãëùôôéóôÞò ãéá ôçí A óôçí S. ÂÞìá 3: ÌåôáãëùôôéóôÞò ãéá ôçí A óôçí A. 16
ÏñãÜíùóç óå Ýíá ðýñáóìá Εµπρόσθιο τµήµα Συντακτικός αναλυτής Λεκτικός αναλυτής Σηµασιολογικός αναλυτής Γεννήτορας ενδιάµεσου κώδικα Βελτιστοποιητής ενδιάµεσου κώδικα Χειριστής σφαλµάτων Πίνακας συµβόλων Γεννήτορας τελικού κώδικα Βελτιστοποιητής τελικού κώδικα Οπίσθιο τµήµα 17
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 18