Μεταγλωττιστές

Κωδικός Μαθήματος: Ν2-5020
Εβδομαδιαίες ώρες διδασκαλίας: 4 (2Θ + 2Ε)
Πιστωτικές μονάδες: 5
Τυπικό εξάμηνο διδασκαλίας: 5ο
Κατηγορία μαθήματος: Μάθημα Ειδικής Υποδομής
Προαπαιτούμενα: Προγραμματισμός Υπολογιστών

Μαθησιακά αποτελέσματα

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

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

Πιο συγκεκριμένα, οι μαθησιακοί στόχοι του μαθήματος είναι οι φοιτητές, μετά την ολοκλήρωση του μαθήματος, να είναι σε θέση να:

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

Περιεχόμενο μαθήματος

Στο πλαίσιο του μαθήματος διδάσκονται τα παρακάτω:

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

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

  1. Δημιουργία στοιχειώδους περιβάλλοντος εκτέλεσης ενός μεταγλωττιστή.
  2. Σχεδιασμό και υλοποίηση λεκτικού αναλυτή και αυτομάτων αναγνώρισης μέσω πίνακα μετάβασης και της γεννήτριας λεκτικών αναλυτών flex
  3. Σχεδιασμό και υλοποίηση συντακτικού αναλυτή και συντακτικών δένδρων μέσω της γεννήτριας συντακτικών αναλυτών bison

Βιβλιογραφία
  1. Aho V. Alfred, Sethi Ravi and Jeffrey D. Ullman, Μεταγλωττιστές: Αρχές, Τεχνικές & εργαλεία, Επιμέλεια Ελληνικής Έκδοσης: Παναγιώτης Σπ. Αλεφραγκής – Αγγελος Σπ. Βώρος – Νικόλαος Σπ. Βώρος – Κων/νος Ν. Μασσέλος, Εκδόσεις Νέων Τεχνολογιών, 2012.
  2. Παπασπύρου Ν.και Σκορδαλάκης Ε. Μταγλωττιστές, Εκδόσεις Συμμετρία, 2002. http://www.softlab.ntua.gr/~nickie/Books/Compilers/preface.html
  3. Κ. Λάζος, Π. Κατσαρός, Ζ. Καραΐσκος. Μεταγλωττιστές Γλωσσών Προγραμματισμού: θεωρία και πράξη. Εκδόσεις Θεσαλλονίκη 2004. http://delab.csd.auth.gr/~katsaros/CompilersBook.htm
  4. Γεωργούλη Κ. και Ξανθάκης Σ., Επεξεργαστές Γλωσσών Προγραμματισμού, Εκδόσεις Νέων Τεχνολογιών, 1992
  5. Grune D., Bal H., Jacobs C. and Langendoen K., Modern Compiler Design, Wiley, 2000.
  6. Andrew W. Appel, Modern Compiler Implementation in Java. Cambridge University Press, 1998. http://www.cs.princeton.edu/~appel/modern
  7. Alblas H and Nymeyer A., Practice and Principles of Compiler Building with C, Prentice Hall, 1996.

Internationalisation I18n