ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ
Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών

Μεταγλωττιστές
http://www.softlab.ntua.gr/~nickie/Courses/compilers/

Ενημερωτικό φυλλάδιο

Γενικές πληροφορίες | Αντικείμενο, σκοπός και στόχοι | Προαπαιτούμενα | Εργασία | Τρόπος βαθμολογίας | Βιβλιογραφία | Διδακτέα ύλη


Γενικές πληροφορίες

Μάθημα: Μεταγλωττιστές (3.4.40.8)
Εξάμηνο: 8ο, ροή Λ (Λογισμικό Η/Υ), προαιρετικό
Κατανομή ωρών: 2 ώρες θεωρία, 2 ώρες εργαστήριο
Ακαδημαϊκό έτος: 2002-2003
Διδάσκοντες:
Μανόλης Σκορδαλάκης    (skordala@softlab.ntua.gr)
Νίκος Παπασπύρου    (nickie@softlab.ntua.gr)

Κτίριο Ηλεκτρολόγων, 1.1.21, τηλ. 210-772-2487

Βοηθοί:
Δημήτρης Βυτινιώτης    (dvitin@softlab.ntua.gr)
Βασίλης Κουταβάς    (vkoutav@softlab.ntua.gr)
Άγγελος Μανουσαρίδης    (amanous@softlab.ntua.gr)
Κώστας Ταβερναράκης    (taver@softlab.ntua.gr)

Εργαστήριο Τεχνολογίας Λογισμικού
Κτίριο Ηλεκτρολόγων, 1.1.25 και 1.1.27, τηλ. 210-772-2486

Διαλέξεις:

Τετάρτη 11:45-13:30, Αίθουσα 0.1.10, Κτίριο Ηλεκτρολόγων, Πολυτεχνειούπολη Ζωγράφου

Εργαστήριο:

Τρίτη 18:00-20:00, Εργαστήριο Τεχνολογίας Λογισμικού, Πολυτεχνειούπολη Ζωγράφου

Ώρες γραφείου:

Τετάρτη και Παρασκευή 14:00-15:00.

Ιστοσελίδα:

http://www.softlab.ntua.gr/~nickie/Courses/compilers/


Αντικείμενο, σκοπός και στόχοι

Οι μεταγλωττιστές (compilers) είναι εργαλεία που μεταφράζουν προγράμματα μιας αρχικής γλώσσας προγραμματισμού σε εκτελέσιμο κώδικα μηχανής. Στο μάθημα αυτό παρουσιάζονται οι γενικές θεωρητικές αρχές αλλά και πολλές από τις πρακτικές τεχνικές που επιτρέπουν την κατασκευή μεταγλωττιστών για ένα μεγάλο αριθμό αρχικών γλωσσών.

Σκοπός του μαθήματος είναι η ισοβαρής μετάδοση γνώσεων και δεξιοτήτων που σχετίζονται με την κατασκευή μεταγλωττιστών. Μετά το πέρας του, οι σπουδαστές θα είναι σε θέση να κατασκευάζουν μόνοι τους μεταγλωττιστές για απλές γλώσσες προγραμματισμού αλλά και να ενταχθούν ομαλά σε επαγγελματικές ομάδες που κατασκευάζουν εμπορικούς μεταγλωττιστές.


Προαπαιτούμενα

Το μάθημα απευθύνεται σε σπουδαστές που διαθέτουν βασικές γνώσεις αλγορίθμων, δομών δεδομένων, γλωσσών προγραμματισμού και αρχιτεκτονικής υπολογιστών. Απαραίτητο επίσης είναι να διαθέτουν εμπειρία στον προγραμματισμό ηλεκτρονικών υπολογιστών και να είναι εξοικειωμένοι με μια γλώσσα προγραμματισμού, όπως π.χ. η C, η C++ και η Java.


Εργασία

Στο πλαίσιο της εργαστηριακής εξάσκησης αυτού του μαθήματος, οι σπουδαστές (ατομικά ή ομαδικά) καλούνται να κατασκευάσουν έναν πειραματικό μεταγλωττιστή για κάποια γλώσσα προγραμματισμού. Λεπτομέρειες σχετικές με την εργασία δίνονται σε ξεχωριστό φυλλάδιο.

Το Εργαστήριο Τεχνολογίας Λογισμικού θα είναι διαθέσιμο κατά προτεραιότητα στους σπουδαστές του μαθήματος τις ώρες που αναφέρονται στο ωρολόγιο πρόγραμμα, καθώς και όλες τις υπόλοιπες ώρες λειτουργίας του (χωρίς προτεραιότητα). Η φυσική παρουσία των σπουδαστών στο εργαστήριο δεν είναι υποχρεωτική. Πέραν των ωρών γραφείου, οι διδάσκοντες και οι βοηθοί του μαθήματος θα είναι διαθέσιμοι κατόπιν επικοινωνίας (κατά προτίμηση ηλεκτρονικής).


Τρόπος βαθμολογίας

Ο τελικός βαθμός (τ) είναι συνάρτηση των βαθμών ενός σπουδαστή στις γραπτές εξετάσεις (γ) και στην εργασία (c) και υπολογίζεται ως εξής:

τ = if γ >= 2 and c >= 2 then min {γ+c, 10}else min{γ+c, 4}

Το άριστα στις γραπτές εξετάσεις είναι πέντε (5). Tο άριστα στην εργασία είναι μεταξύ δύο (2) και οκτώ (8), ανάλογα με το βαθμό δυσκολίας της. Ο τρόπος βαθμολόγησης της εργασίας περιγράφεται λεπτομερώς στο αντίστοιχο φυλλάδιο.


Βιβλιογραφία

Το βασικό σύγγραμμα που θα χρησιμοποιηθεί σε αυτό το μάθημα είναι το ακόλουθο.

  1. Ν. Σ. Παπασπύρου και Ε. Σ. Σκορδαλάκης, Μεταγλωττιστές, Εκδόσεις Συμμετρία, 2002.

Συμπληρωματικά προτείνονται τα ακόλουθα βιβλία. Τα δύο τελευταία καλύπτουν ύλη αρκετά υψηλότερου επιπέδου από το παρόν μάθημα.

  1. A. V. Aho, R. Sethi and J. D. Ullman, Compilers: Principles, Techniques and Tools, Addison-Wesley, 1986.
  2. A. W. Appel and M. Ginsburg, Modern Compiler Implementation in C, Cabridge University Press, 1998. Άλλες εκδόσεις του βιβλίου χρησιμοποιούν τις γλώσσες Java και ML.
  3. D. Grune, H. E. Bal, C. J. H. Jacobs and K. G. Langendoen, Modern Compiler Design, John Wiley and Sons, 2000.
  4. S. S. Muchnick, Advanced Compiler Design and Implementation, Morgan Kaufmann Publishers, 1997.


Διδακτέα ύλη

Εισαγωγή: μεταγλωττιστές και συναφή εργαλεία, φάσεις μεταγλώττισης, οργάνωση μεταγλωττιστή. Τυπικές γλώσσες: ορισμοί, γλώσσες, γραμματικές, αυτόματα. Λεκτική ανάλυση: λεκτικές μονάδες, σχεδίαση λεκτικού αναλυτή, υλοποίηση με το flex. Συντακτική ανάλυση: σχεδίαση συντακτικού αναλυτή από πάνω προς τα κάτω ή από κάτω προς τα πάνω, υλοποίηση με το bison. Πίνακες συμβόλων. Σημασιολογική ανάλυση: συστήματα τύπων και σημασιολογικός έλεγχος. Παραγωγή ενδιαμέσου κώδικα: μορφές ενδιάμεσου κώδικα, μετάφραση οδηγούμενη από τη σύνταξη. Βελτιστοποίηση κώδικα. Παραγωγή τελικού κώδικα: τελικός υπολογιστής, περιβάλλον εκτέλεσης, παραγωγή αποδοτικού κώδικα, παραγωγή εντολή προς εντολή. Αντικειμενοστρεφείς γλώσσες.


Τελευταία αλλαγή: 19/05/03 0:55.