Μεταγλωττιστές (Θ)

Πληροφορίες

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

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

1. Εισαγωγή

2. Γλώσσες και Γραμματικές

3α. Αυτόματα αναγνώρισης

3β. Προσδιοριστικά πεπερασμένα αυτόματα

4. Λεκτική ανάλυση

5. Συντακτική ανάλυση Ι

6. Συντακτική ανάλυση ΙΙ

7. Σημασιολογική ανάλυση

8. Πίνακας συμβόλων

9. Παραγωγή ενδιάμεσου κώδικα Ι

10. Παραγωγή ενδιάμεσου κώδικα ΙΙ

11. Βελτιστοποίηση ενδιάμεσου κώδικα

12. Παραγωγή ενδιάμεσου κώδικα ΙΙΙ

13. Επαναληπτικό μάθημα

Μαθησιακοί στόχοι

Μαθησιακοί στόχοι

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

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

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

Προτεινόμενα συγγράμματα

Προτεινόμενα συγγράμματα

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

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

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

Oι σπουδαστές θα πρέπει να έχουν:

  • μελετήσει δομές δεδομένων (πίνακες, δυναμικές λίστες κτλ) και κερματισμό (hashing) πινάκων και αρχείων
  • καλή γνώση γλωσσών προγραμματισμού και χρήσης μεταγλωττιστών και διερμηνευτών
  • γνώσεις λειτουργικών συστημάτων και ειδικότερα διαχείρισης μνήμης
  • γνώσεις assembly.

Διδάσκοντες

Διδάσκοντες

Κατερίνα Γεωργούλη

Επιπλέον συνιστώμενη βιβλιογραφία και υλικό προς μελέτη

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

Πηγές στο Διαδίκτυο

http://www.softlab.ntua.gr/~nickie/Books/Compilers/

Η ιστοσελίδα του βιβλίου που διανέμεται στο μάθημα

http://www.compilers.net/

Μηχανή αναζήτησης ιστοσελίδων σχετικών με μεταγλωττιστές

http://en.wikipedia.org/wiki/Compiler

Η σελίδα των compilers στην Wikipedia

http://www.jflap.org/

Ενδιαφέροντα γραφικά εργαλεία για υποστήριξη εκμάθησης Τυπικώς Γλωσσών και Θεωρίας Αυτομάτων

http://flex.sourceforge.net/

Η γεννήτρια λεκτικών αναλυτών Flex

http://www.gnu.org/software/bison/

Η γεννήτρια συντακτικών αναλυτών Bison