Μεταγλωττιστές
Κατ' επιλογήν υποχρεωτικό μάθημα ροής Λ, 8ου εξαμήνου, κωδικός 3.4.3186.8
Εξάμηνο:
Εαρινό 2023
Διδάσκων:
Κωστής Σαγώνας
(kostis (AT) cs (DOT) ntua.gr )
γρ. 1.1.21
τηλ: 210-772-2487
Ανακοινώσεις
| Υλικό:
Γενικά ,
Helios ,
Videos (2021) ,
Εργασία ,
Παλαιότερα έτη
Διαλέξεις:
2/3 |
3/3 |
10/3 |
24/3 |
24/3 |
31/3 |
31/3 |
7/4 |
7/4 |
28/4 |
28/4 |
5/5 |
12/5 |
12/5 |
19/5 |
26/5 |
26/5 |
2/6 |
2/6 |
7/6 |
9/6 |
9/6 |
9/6
Ανακοινώσεις
10/3/2023
Όπως συμφωνήθηκε σήμερα στο αμφιθέατρο, λόγω επικάλυψης με άλλο μάθημα την Πέμπτη, οι εβδομαδιαίες διαλέξεις και τα εργαστήρια του μαθήματος θα γίνονται μαζί κάθε Παρασκευή 15:15-17:00 και 17:15-19:00 .
22/2/2023
Οι διαλέξεις του μαθήματος της Πέμπτης 23/2 και της Παρασκευής 24/2 ΔΕΝ θα πραγματοποιηθούν . Θα υπάρξει ανακοίνωση στο helios για τα διαδικαστικά και την έναρξη του μαθήματος.
Υλικό
Γενικά
Τα βίντεο των διαλέξεων του τρέχοντος έτους και περασμένων βρίσκονται συγκεντρωμένα στα παρακάτω αποθετήρια. Σε κάποια από αυτά, είναι πιθανό να πρέπει να συνδεθείτε με τους κωδικούς σας του ΕΜΠ.
Εργασία
Εκφώνηση: Η γλώσσα προγραμματισμού Grace ( PDF)
Για να εξοικειωθείτε με τη γλώσσα, προσπαθήστε να γράψετε μικρά και μεγαλύτερα προγράμματα σε Grace, είτε απευθείας είτε μεταφράζοντας υπάρχοντα προγράμματά σας από άλλες γλώσσες. Αν στερείστε από ιδέες, δείτε τις εκφωνήσεις των ασκήσεων των εισαγωγικών προγραμματιστικών μαθημάτων εδώ και εδώ (για κάποιες από αυτές, υπάρχουν και υποδειγματικές λύσεις).
Δημοσιεύστε τα προγράμματά σας με κατάλληλα pull requests στο GitHub repository του μαθήματος , ώστε να είναι διαθέσιμα και στους υπόλοιπους. Έτσι θα δημιουργηθεί ένα σύνολο προγραμμάτων που αργότερα θα χρησιμεύσουν ως test suite για τους μεταγλωττιστές σας.
Εγχειρίδια χρήσης εργαλείων που θα σας είναι χρήσιμα στην υλοποίηση:
Για υλοποίηση με C/C++:
Για υλοποίηση με OCaml:
Για υλοποίηση με SML/NJ ή MLton:
Για υλοποίηση με Java:
Παλαιότερα έτη
Σελίδα του μαθήματος για τα ακαδημαϊκά έτη: 2021-22 , 2020-21 , 2019-20 , 2018-19 , 2017-18 , 2016-17 , 2015-16 , 2014-15 , 2013-14 , 2012-13 , 2011-12 , 2010-11 , 2009-10 , 2008-09 , 2007-08 , 2006-07 , 2005-06 , 2004-05 , 2003-04 , 2002-03 .
Διαλέξεις
Διάλεξη "Αντεστραμμένου Αμφιθέατρου" (Flipped classroom) 2/3/2023
Θέματα διεξαγωγής του μαθήματος
Εισαγωγή
Τρόποι υλοποίησης γλωσσών προγραμματισμού
Ιστορική αναδρομή
Δομή και φάσεις ενός μεταγλωττιστή
Διαδικασία μεταγλώττισης και ενδιάμεσες αναπαραστάσεις
Τρέχουσες τάσεις της υλοποίησης γλωσσών προγραμματισμού
Διαφάνειες εισαγωγής στους μεταγλωττιστές
Διάλεξη "Αντεστραμμένου Αμφιθέατρου" (Flipped Classroom) 3/3/2023
Εισαγωγή στη λεκτική ανάλυση
Λεκτικές μονάδες (tokens)
Θέματα σχεδιασμού λεκτικής ανάλυσης στις γλώσσες προγραμματισμού
Κανονικές εκφράσεις και κανονικές γλώσσες
Από κανονικές εκφράσεις σε προδιαγραφές λεκτικών αναλυτών
Αμφισημίες και χειρισμός λαθών
Υλοποίηση λεκτικών αναλυτών
Διαφάνειες διάλεξης
Εργαστήριο 10/3/2023
Παράδοση 24/3/2023
Εισαγωγή στην συντακτική ανάλυση
Ο ρόλος του συντακτικού αναλυτή
Γλώσσες χωρίς συμφραζόμενα
Παραγωγές
Ισοδύναμες και διφορούμενες γραμματικές
Παράδειγμα: dangling if
Τρόποι εξάλειψης της αμφισημίας
Συντακτικά σφάλματα και τρόποι χειρισμού τους
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο (στο helios) 24/3/2023
Παράδοση (πρώτο δίωρο) 31/3/2023
Συντακτικός αναλυτής
Αφηρημένα συντακτικά δένδρα
Σημασιολογικές ενέργειες
Μετάφραση βασισμένη στη σύνταξη
Συντακτική ανάλυση top-down
Recursive Descent Parsing
Γραμματικές LL(1)
Μετασχηματισμός σε LL(1)
Αλγόριθμος συντακτικής ανάλυσης γραμματικών LL(1)
Πίνακας LL(1) και ένα παράδειγμα χρήσης του
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Παράδοση (δεύτερο δίωρο) 31/3/2023
Συντακτική ανάλυση top-down, ξανά
Ανασκόπηση LL συντακτικής ανάλυσης
Κατασκευή πίνακα LL(1)
Υπολογισμός συνόλων First και Follow
Συντακτική ανάλυση bottom-up
Εισαγωγή στην ανοδική συντακτική ανάλυση (bottom-up parsing)
Ολίσθηση (shift) και αναγωγή (reduce)
Ένα παράδειγμα shift-reduce parsing
Ο αλγόριθμος συντακτικής ανάλυσης LR
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Παράδοση 7/4/2023
LR και LALR συντακτικοί αναλυτές
Ανασκόπηση ανοδικής συντακτικής ανάλυσης
Ο αλγόριθμος συντακτικής ανάλυσης LR
Στοιχεία LR(0) και LR(1)
Κατασκευή του DFA ενός συντακτικού αναλυτή LR(1)
Συγκρούσεις ολισθήσεων και αναγωγών (shift/reduce conflicts) και τρόποι επίλυσής τους
Χρήση συντακτικών αναλυτών
Συντακτικοί αναλυτές LALR(1)
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο 7/4/2023
Παρουσίαση του αρχείου parser.output που bison ο κατασκευάζει όταν χρησιμοποιηθεί το option -v
Σημασιολογικές τιμές στο αρχείο του bison και η σύνδεσή τους με τις τιμές των tokens του lexer
Παρουσίαση της γεννήτριας συντακτικά ορθών προγραμμάτων Grace με χρήση του εργαλείου PropEr
Εργαστήριο (στο helios - πρώτο μέρος) 28/4/2023
Εργαστήριο (στο helios - δεύτερο μέρος) 28/4/2023
Παράδοση 5/5/2023
Σημασιολογική ανάλυση
Ο ρόλος της σημασιολογικής ανάλυσης στους μεταγλωττιστές
Εμβέλεια ονομάτων
Στατική εμβέλεια ονομάτων
Δυναμική εμβέλεια ονομάτων
Εμβέλεια και πίνακες συμβόλων
Τύποι και συστήματα τύπων
Ρόλοι των τύπων στις γλώσσες προγραμματισμού
Γλώσσες με στατικά και δυναμικά συστήματα τύπων
Διαφάνειες διάλεξης
Έλεγχος τύπων
Στατικός έλεγχος προγραμμάτων
Συστήματα τύπων και ιδιότητές τους
Τύποι στις γλώσσες προγραμματισμού
Αναπαράσταση των τύπων σε ένα μεταγλωττιστή
Έλεγχος και συμπερασμός των τύπων
Κανόνες συμπερασμού και ελέγχου τύπων
Υλοποίηση ελέγχου τύπων με χρήση σημασιολογικών κανόνων του συντακτικού αναλυτή
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο 12/5/2023
Επέκταση της γλώσσας minibasic
Προσθήκη δήλωσης μεταβλητών
Προσθήκη τύπων int και bool
Προσθήκη δομών block
Επέκταση του συντακτικού αναλυτή για την παραπάνω γλώσσα
Απαραίτητες τροποποιήσεις για τη δημιουργία και την εκτύπωση του AST σε C++
Από προηγούμενα έτη: σε C++ και σε C
Μαγνητοσκοπημένο εργαστήριο (του 2021)
Παράδοση 12/5/2023
Εργαστήριο (στο helios) 19/5/2023
Παράδοση 26/5/2023
Παραγωγή κώδικα
Μηχανές στοίβας
Η γλώσσα της αρχιτεκτονικής MIPS
Μηχανές στοίβας με συσσωρευτή
Μετατροπή κώδικα μηχανής στοίβας σε MIPS
Παραγωγή κώδικα με χρήση αναδρομής (για τη γλώσσα “Mini Bar”)
Παραγωγή κώδικα για μεταβλητές και παραμέτρους
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο 26/5/2023
Εργαστήριο 2/6/2023
Παράδοση 2/6/2023
Ενδιάμεσος κώδικας και τοπική βελτιστοποίηση
Ενδιάμεσος κώδικας: λόγοι ύπαρξης, τρόποι παραγωγής και χρήσης
Ενδιάμεσος κώδικας τριών διευθύνσεων (3-address code)
Βασικά μπλοκ (basic blocks)
Γράφοι ελέγχου ροής (control-flow graphs)
Εισαγωγή στη βελτιστοποίηση κώδικα
Τοπικές βελτιστοποήσεις
Αλγεβρική απλοποίηση
Αντικατάσταση σταθερών (constant folding)
Βελτιστοποιήσεις ελέγχου ροής
Εξάλειψη κοινών υποεκφράσεων (common subexpression elimination)
Διάδοση αντιγράφων (copy propagation)
Εξάλειψη νεκρού κώδικα (dead code elimination)
Βελτιστοποιήσεις κλειδαρότρυπας (peephole optimizations)
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (από το 2021)
Εργαστήριο 7/6/2023
Εργαστήριο 9/6/2023
Παράδοση 9/6/2023
Παράδοση 9/6/2023
Καθολική παραχώρηση καταχωρητών
Διαχείριση ιεραρχίας μνήμης
Παραχώρηση καταχωρητών μέσω χρωματισμού γράφου (graph coloring)
Ο γράφος παρεμβολής των καταχωρητών (register interference graph)
Ευρεστικές τεχνικές
Spilling
Πρoχρωματισμένοι κόμβοι (precolored nodes)
Διαχείριση κρυφής μνήμης (cache management)
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (από το 2021)
Τελευταία αλλαγή: 22/02/2023, 22:50 UTC.
webmaster (AT) courses (DOT) softlab.ntua.gr