Μεταγλωττιστές
Κατ' επιλογήν υποχρεωτικό μάθημα ροής Λ, 8ου εξαμήνου, κωδικός 3.4.3186.8
Εξάμηνο:
Εαρινό 2024
Διδάσκων:
Κωστής Σαγώνας
(kostis (AT) cs (DOT) ntua.gr )
γρ. 1.1.21
τηλ: 210-772-2487
Ανακοινώσεις
| Υλικό:
Γενικά ,
Helios ,
Videos (2021) ,
Εργασία ,
Παλαιότερα έτη
Διαλέξεις:
16/2 |
16/2 |
23/2 |
23/2 |
1/3 |
1/3 |
8/3 |
15/3 |
15/3 |
22/3 |
22/3 |
29/3 |
29/3 |
5/4 |
12/4 |
12/4 |
19/4 |
19/4 |
24/4 |
24/4 |
26/4 |
26/4 |
17/5 |
17/5
Ανακοινώσεις
20/4/2024
Την Τετάρτη 24/4/2024 και ώρα 16:30 θα κάνουμε ένα έξτρα μάθημα έτσι ώστε να μπορέσουμε να καλύψουμε αρκετή ύλη και το μεγαλύτερο μέρος του LLVM πριν από τις διακοπές του Πάσχα.
14/2/2024
Οι διαλέξεις του μαθήματος αρχίζουν την Παρασκευή 16 Φεβρουαρίου 2024 και θα γίνονται ηλεκτρονικά , μέσω του helios, για όσον καιρό η πρόσβαση στα Αμφιθέατρα της Σχολής δεν θα είναι δυνατή.
Υλικό
Γενικά
Τα βίντεο των διαλέξεων πρoηγούμενων ετών βρίσκονται συγκεντρωμένα στα παρακάτω αποθετήρια. Σε κάποια από αυτά, είναι πιθανό να πρέπει να συνδεθείτε με τους κωδικούς σας του ΕΜΠ.
Εργασία
Εκφώνηση: Η γλώσσα προγραμματισμού Alan ( PDF)
Για να εξοικειωθείτε με τη γλώσσα, προσπαθήστε να γράψετε μικρά και μεγαλύτερα προγράμματα σε Alan, είτε απευθείας είτε μεταφράζοντας υπάρχοντα προγράμματά σας από άλλες γλώσσες προγραμματισμού (π.χ. αυτές που έχουν χρησιμοποιηθεί σε προηγούμενα έτη στο ίδιο μάθημα). Μια άλλη ιδέα είναι να δείτε τις εκφωνήσεις των ασκήσεων των εισαγωγικών προγραμματιστικών μαθημάτων εδώ και εδώ (για κάποιες από αυτές, υπάρχουν και υποδειγματικές λύσεις).
Δημοσιεύστε τα προγράμματά σας με κατάλληλα pull requests στο GitHub repository του μαθήματος , ώστε να είναι διαθέσιμα και στους υπόλοιπους. Έτσι θα δημιουργηθεί ένα σύνολο προγραμμάτων που αργότερα θα χρησιμεύσουν ως test suite για τους μεταγλωττιστές σας.
Εγχειρίδια χρήσης εργαλείων που θα σας είναι χρήσιμα στην υλοποίηση:
Για υλοποίηση με C/C++:
Για υλοποίηση με OCaml:
Για υλοποίηση με SML/NJ ή MLton:
Για υλοποίηση με Java:
Παλαιότερα έτη
Σελίδα του μαθήματος για τα ακαδημαϊκά έτη: 2022-23 , 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 .
Διαλέξεις
Διάλεξη από απόσταση (στο helios), πρώτο δίωρο 16/2/2024
Διάλεξη από απόσταση (στο helios), δεύτερο δίωρο 16/2/2024
Διάλεξη από απόσταση (στο helios), πρώτο δίωρο 23/2/2024
Εργαστήριο από απόσταση (στο helios), δεύτερο δίωρο 23/2/2024
Διάλεξη από απόσταση (στο helios), πρώτο δίωρο 1/3/2024
Διάλεξη από απόσταση (στο helios), δεύτερο μέρος 1/3/2024
Συντακτικός αναλυτής
Αφηρημένα συντακτικά δένδρα
Σημασιολογικές ενέργειες
Μετάφραση βασισμένη στη σύνταξη
Συντακτική ανάλυση top-down
Recursive Descent Parsing
Γραμματικές LL(1)
Μετασχηματισμός σε LL(1)
Αλγόριθμος συντακτικής ανάλυσης γραμματικών LL(1)
Πίνακας LL(1) και ένα παράδειγμα χρήσης του
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Διάλεξη από απόσταση (στο helios), slides δεύτερου μέρους και video 8/3/2024
Διάλεξη 15/3/2024
LR και LALR συντακτικοί αναλυτές
Ανασκόπηση ανοδικής συντακτικής ανάλυσης
Ο αλγόριθμος συντακτικής ανάλυσης LR
Στοιχεία LR(0) και LR(1)
Κατασκευή του DFA ενός συντακτικού αναλυτή LR(1)
Συγκρούσεις ολισθήσεων και αναγωγών (shift/reduce conflicts) και τρόποι επίλυσής τους
Χρήση συντακτικών αναλυτών
Συντακτικοί αναλυτές LALR(1)
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο (στο αμφιθέατρο) 15/3/2024
Εργαστήριο (στο αμφιθέατρο), πρώτο δίωρο 22/3/2024
Εργαστήριο (στο αμφιθέατρο), δεύτερο δίωρο 22/3/2024
Διάλεξη 29/3/2024
Σημασιολογική ανάλυση
Ο ρόλος της σημασιολογικής ανάλυσης στους μεταγλωττιστές
Εμβέλεια ονομάτων
Στατική εμβέλεια ονομάτων
Δυναμική εμβέλεια ονομάτων
Εμβέλεια και πίνακες συμβόλων
Τύποι και συστήματα τύπων
Ρόλοι των τύπων στις γλώσσες προγραμματισμού
Γλώσσες με στατικά και δυναμικά συστήματα τύπων
Διαφάνειες διάλεξης
Έλεγχος τύπων
Στατικός έλεγχος προγραμμάτων
Συστήματα τύπων και ιδιότητές τους
Τύποι στις γλώσσες προγραμματισμού
Αναπαράσταση των τύπων σε ένα μεταγλωττιστή
Έλεγχος και συμπερασμός των τύπων
Κανόνες συμπερασμού και ελέγχου τύπων
Υλοποίηση ελέγχου τύπων με χρήση σημασιολογικών κανόνων του συντακτικού αναλυτή
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο (στο αμφιθέατρο) 29/3/2024
Επέκταση της γλώσσας minibasic
Προσθήκη δήλωσης μεταβλητών
Προσθήκη τύπων int και bool
Προσθήκη δομών block
Επέκταση του συντακτικού αναλυτή για την παραπάνω γλώσσα
Απαραίτητες τροποποιήσεις για τη δημιουργία και την εκτύπωση του AST σε C++
Από προηγούμενα έτη: σε C++ και σε C
Μαγνητοσκοπημένο εργαστήριο (του 2021)
Εργαστήριο (στο helios) 5/4/2024
Διάλεξη 12/4/2024
Εργαστήριο (στο αμφιθέατρο) 12/4/2024
Διάλεξη 19/4/2024
Παραγωγή κώδικα
Μηχανές στοίβας
Η γλώσσα της αρχιτεκτονικής MIPS
Μηχανές στοίβας με συσσωρευτή
Μετατροπή κώδικα μηχανής στοίβας σε MIPS
Παραγωγή κώδικα με χρήση αναδρομής (για τη γλώσσα “Mini Bar”)
Παραγωγή κώδικα για μεταβλητές και παραμέτρους
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (του 2021)
Εργαστήριο (στο αμφιθέατρο) 19/4/2024
Εργαστήριο (στο αμφιθέατρο) 24/4/2024
Διάλεξη 24/4/2024
Ενδιάμεσος κώδικας και τοπική βελτιστοποίηση
Ενδιάμεσος κώδικας: λόγοι ύπαρξης, τρόποι παραγωγής και χρήσης
Ενδιάμεσος κώδικας τριών διευθύνσεων (3-address code)
Βασικά μπλοκ (basic blocks)
Γράφοι ελέγχου ροής (control-flow graphs)
Εισαγωγή στη βελτιστοποίηση κώδικα
Τοπικές βελτιστοποήσεις
Αλγεβρική απλοποίηση
Αντικατάσταση σταθερών (constant folding)
Βελτιστοποιήσεις ελέγχου ροής
Εξάλειψη κοινών υποεκφράσεων (common subexpression elimination)
Διάδοση αντιγράφων (copy propagation)
Εξάλειψη νεκρού κώδικα (dead code elimination)
Βελτιστοποιήσεις κλειδαρότρυπας (peephole optimizations)
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (από το 2021)
Εργαστήριο (στο αμφιθέατρο) 26/4/2024
Εργαστήριο (στο αμφιθέατρο) 26/4/2024
Παράδοση 17/5/2024
Παράδοση 17/5/2024
Καθολική παραχώρηση καταχωρητών
Διαχείριση ιεραρχίας μνήμης
Παραχώρηση καταχωρητών μέσω χρωματισμού γράφου (graph coloring)
Ο γράφος παρεμβολής των καταχωρητών (register interference graph)
Ευρεστικές τεχνικές
Spilling
Πρoχρωματισμένοι κόμβοι (precolored nodes)
Διαχείριση κρυφής μνήμης (cache management)
Διαφάνειες διάλεξης
Μαγνητοσκοπημένη διάλεξη (από το 2021)
Τελευταία αλλαγή: 15/02/2024, 10:40 UTC.
webmaster (AT) courses (DOT) softlab.ntua.gr