Μεταγλωττιστές Ενότητα 1: Εισαγωγή Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Εισαγωγή
Σκοποί ενότητας Σκοπός της ενότητας είναι η εισαγωγή στο αντικείμενο των μεταγλωττιστών. 5
Περιεχόμενα ενότητας (1/2) Γλώσσες προγραμματισμού. Μεταγλωττιστές. Δομή ενός μεταγλωττιστή. Κατασκευή ενός μεταγλωττιστή. Φάσεις της μεταγλώττισης. 6
Περιεχόμενα ενότητας (2/2) Λειτουργία μεταγλωττιστών. Ανάπτυξη μεταγλωττιστών. 7
Γλώσσες προγραμματισμού (1/7) Γλώσσα προγραμματισμού. Συμβολισμός που χρησιμοποιείται για την περιγραφή υπολογισμών. Πρόγραμμα. Συμβολική περιγραφή ενός υπολογισμού σε κάποια γλώσσα. 8
Γλώσσες προγραμματισμού (2/7) Στόχοι μίας γλώσσας προγραμματισμού. Εύκολη περιγραφή των υπολογισμών. Αποδοτική εκμετάλλευση της υπολογιστική ισχύς των μηχανών. 9
Γλώσσες προγραμματισμού (3/7) Πρώτη Γενιά. Γλώσσα Μηχανής. Δεύτερη Γενιά. Γλώσσες assembly. Χρήση συμβόλων, μετατροπή σε κώδικα από ειδικά εργαλεία. 10
Γλώσσες προγραμματισμού (4/7) Τρίτη Γενιά. Διαδικαστικές και Αντικειμενοστραφείς Γλώσσες (C, Pascal, C++, JAVA). Τέταρτη Γενιά. Γλώσσες κοντά στη φυσική γλώσσα. Προσπέλαση δεδομένων. SQL- Structured Query Language. 11
Γλώσσες προγραμματισμού (5/7) Πέμπτη Γενιά. Κυρίως γλώσσες δηλωτικές που αφορούν την Τεχνητή Νοημοσύνη. Prolog, Lisp. 12
Γλώσσες προγραμματισμού (6/7) Γλώσσες προγραμματισμού υψηλού επιπέδου. Δεν είναι άμεσα εκτελέσιμες στις σημερινές μηχανές. Προσπάθειες για εξειδικευμένο υλικό δεν απέδωσαν. 13
Γλώσσες προγραμματισμού (7/7) Για κάθε γλώσσα προγραμματισμού υψηλού επιπέδου είναι απαραίτητη η ύπαρξη ενός μεταφραστή. Μεταγλωττιστές (Compilers). Διερμηνευτές (Interpreters). 14
Μεταγλωττιστές (1/2) Μεταγλωττιστής. Λογισμικό που μεταφράζει ένα πρόγραμμα από μία γλώσσα σε μία άλλη. Είδη Μεταγλωττιστών. Απλοί. Αντίστροφοι (decompilers). 15
Μεταγλωττιστές (2/2) Είδη Μεταγλωττιστών (Συνέχεια). Μετα-μεταγλωττιστές (meta-compilers). Υλοποίηση μεταγλωττιστών. Προσαρμοζόμενοι μεταγλωττιστές. Μετα-μεταγλωττιστές γεννήτορες. 16
Δομή ενός μεταγλωττιστή (1/3) Σχήμα 1. Δομή ενός μεταγλωττιστή. 17
Δομή ενός μεταγλωττιστή (2/3) Σχήμα 2. Δομή μεταγλωττιστή με ενδιάμεσο κώδικα, (πηγή: ο διδάσκων, 2014) 18
Δομή ενός μεταγλωττιστή (3/3) Ορισμός Προβλήματος. Ορισμός αρχικής και τελικής γλώσσας. Σύνταξη. Σημασιολογία. 19
Κατασκευή ενός μεταγλωττιστή Απαιτήσεις. Σωστή Λειτουργία. (1/2) Απόλυτη συμμόρφωση με τις προδιαγραφές της αρχικής και της τελικής γλώσσας. Ικανότητα μετάφρασης προγραμμάτων αυθαίρετα μεγάλου μήκους. Μεταφερσιμότητα. Παραγωγή αποδοτικού κώδικα. 20
Κατασκευή ενός μεταγλωττιστή (2/2) Απαιτήσεις (Συνέχεια). Μικρός χρόνος μεταγλώττισης. Μικρές απαιτήσεις σε μνήμη. Ρωμαλεότητα. Παραγωγή Διαγνωστικών Μηνυμάτων. 21
Φάσεις της μεταγλώττισης (1/14) Σχήμα 3. Φάσεις μεταγλώττισης (πηγή διδάσκων, 2014). 22
Φάσεις της μεταγλώττισης (2/14) Λεξική ή Λεκτική ανάλυση. Στόχος. Διαχωρισμός των χαρακτήρων του πηγαίου προγράμματος σε ομάδες. Λεξικές μονάδες - Έχουν συγκεκριμένη σημασία, σύμφωνη με τον ορισμό της πηγαίας γλώσσας. Για κάθε λεξική μονάδα που αναγνωρίζεται. Μεταφέρεται το αντίστοιχο αναγνωριστικό (token) στον συντακτικό αναλυτή. 23
Φάσεις της μεταγλώττισης (3/14) Παράδειγμα. 24
Φάσεις της μεταγλώττισης (4/14) Συντακτική ανάλυση. Δέχεται ως είσοδο τις λεξικές μονάδες. Παράγονται κατά τη λεξική ανάλυση. Προσπαθεί να ανιχνεύσει τη δομή του προγράμματος. 25
Φάσεις της μεταγλώττισης (5/14) Συντακτική ανάλυση (Συνέχεια). Ως αποτέλεσμα παράγεται μία δομή. Ανάλογα με τη μορφή της αποκαλείται. Είτε παράγωγο. Είτε συντακτικό δένδρο. 26
Φάσεις της μεταγλώττισης (6/14) Σχήμα 4. Φάσεις μεταγλώττισης - συντακτική ανάλυση 1 (πηγή: ο διδάσκων, 2014). 27
Φάσεις της μεταγλώττισης (7/14) Σχήμα 5. Φάσεις μεταγλώττισης - συντακτική ανάλυση 2 (πηγή: ο διδάσκων, 2014). 28
Φάσεις της μεταγλώττισης (8/14) Σημασιολογική ανάλυση. Η σημασία ενός προγράμματος καθορίζει τη συμπεριφορά του κατά την εκτέλεση. 29
Φάσεις της μεταγλώττισης (9/14) Σχήμα 6. Φάσεις μεταγλώττισης - σημασιολογική ανάλυση (πηγή: ο διδάσκων, 2014). 30
Φάσεις της μεταγλώττισης (10/14) Βελτιστοποίηση πηγαίου προγράμματος. Πραγματοποιείται μετά από τη σημασιολογική ανάλυση. Μπορεί να ενσωματώσει βελτιστοποιήσεις. Στο παραγόμενο δένδρο. Ή σε μία γραμμική αναπαράσταση αυτού γνωστή με τον όρο κώδικας τριών διευθύνσεων. 31
Φάσεις της μεταγλώττισης (11/14) Βελτιστοποίηση πηγαίου προγράμματος (Συνέχεια). Το παραγόμενο δένδρο και ο κώδικας τριών διευθύνσεων. Είναι εναλλακτικές μορφές ενδιάμεσου κώδικα ή ενδιάμεσης αναπαράστασης. 32
Φάσεις της μεταγλώττισης (12/14) Περιπτώσεις βελτιστοποιήσεων. Σύμπτυξη σταθερών. Διάδοση εντολών εκχώρησης τιμής στο υπόλοιπο πρόγραμμα. Απομάκρυνση των μη προσιτών τμημάτων κώδικα. Μετακίνηση κώδικα έξω από βρόχους επανάληψης κ.α.. 33
Φάσεις της μεταγλώττισης (13/14) Σύνθεση τελικού προγράμματος. Σε αυτή τη φάση χρησιμοποιείται η ενδιάμεση αναπαράσταση του πηγαίου προγράμματος. Για τη δημιουργία κώδικα. Σημασιολογικά ίδιου με τον πηγαίο, στη γλώσσαστόχο. Ο κώδικας αυτός μπορεί να δημιουργηθεί για ένα συγκεκριμένο επεξεργαστή ή για κάποια ιδεατή μηχανή με χαρακτηριστικά συμβατικού επεξεργαστή. 34
Φάσεις της μεταγλώττισης (14/14) Βελτιστοποίηση τελικού προγράμματος. Οι εναλλακτικές δυνατότητες βελτίωσης του παραγόμενου κώδικα. Εξαρτώνται πάντα από τον επεξεργαστή. Για τον οποίο δημιουργείται το πρόγραμμα. Π.χ. από το πλήθος και την εξειδίκευση των καταχωρητών του επεξεργαστή, τις μορφές προσπέλασης στη μνήμη και τις εντολές που διαθέτει. 35
Λειτουργία μεταγλωττιστών (1/3) Άλλα προγράμματα. Διερμηνευτές (interpreters). Συμβολομεταφραστές (assemblers). Διασυνδέτες (linkers). Φορτωτές (Loaders). 36
Λειτουργία μεταγλωττιστών (2/3) Άλλα προγράμματα (Συνέχεια). Προεπεξεργαστές (Preprocessors). Συντάκτες/διορθωτές (Program Editors). Ανιχνευτές λαθών (Debuggers). 37
Λειτουργία μεταγλωττιστών (3/3) Σχήμα 7. Λειτουργία μεταγλωττιστών (πηγή: ο διδάσκων, 2014). 38
Ανάπτυξη μεταγλωττιστών (1/4) Διαγράμματα σχήματος T: Σχήμα 8. Διάγραμμα σχήματος Τ (πηγή: ο διδάσκων, 2014). 39
Ανάπτυξη μεταγλωττιστών (2/4) Σύνθεση διαγραμμάτων σχήματος T: Σχήμα 9. Σύνθεση διαγραμμάτων σχήματος Τα (πηγή: ο διδάσκων, 2014). 40
Ανάπτυξη μεταγλωττιστών (3/4) Αυτοδύναμη ανάπτυξη: Σχήμα 10. Αυτοδύναμη ανάπτυξη bootstrapping (πηγή: ο διδάσκων 2014). 41
Ανάπτυξη μεταγλωττιστών (4/4) Μεταφορά μεταγλωττιστή αυτοδύναμης ανάπτυξης σε νέα γλώσσα στόχο: Σχήμα 11. Μεταφορά μεταγλωττιστή αυτοδύναμης ανάπτυξης σε νέα γλώσσα στόχο (πηγή: ο διδάσκων,2014). 42
Βιβλιογραφία 1. «Μεταγλωττιστές γλωσσών Προγραμματισμού: Θεωρία και Πράξη», Λάζος, Κ.Ε., Κατσαρός και Π.Θ., Καραΐσκος, Ζ.Κ. (2004), Εκδόσεις Θεσσαλονίκη, [ISBN:960-87723-4-6]. 2. «Μεταγλωττιστές», Παπασπύρου, Ν.Σ. και Σκορδαλάκης, Ε.Σ (2002), Εκδόσεις Συμμετρία, 2002, [ISBN: 978-960-266-135-2]. 43
Τέλος Ενότητας 44