Θέματα Μεταγλωττιστών

Σχετικά έγγραφα
Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 12 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 4 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 5 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

Θέματα Μεταγλωττιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Θέματα Μεταγλωττιστών

Κεφάλαιο 2: Τυπικές γλώσσες

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Σημασιολογική Ανάλυση

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση II

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Μεταγλωττιστές. Ενότητα 8: Συντακτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

ΑΕΠΠ Ερωτήσεις θεωρίας

Μεταγλωττιστές Βελτιστοποίηση

Μεταγλωττιστές Βελτιστοποίηση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

Προγραμματισμός Ι (HY120)

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Θέματα Μεταγλωττιστών

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Πρόβλημα 37 / σελίδα 207

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ ΚΕΦΑΛΑΙΟ 2 ο ΚΕΦΑΛΑΙΟ 7 ο ΕΡΩΤΗΣΕΙΣ ΓΕΝΙΚΑ ΠΕΡΙ ΑΛΓΟΡΙΘΜΩΝ

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Απάντηση: (func endfunc)-([a-za-z])+

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Μεταγλωττιστές. Ενότητα 7: Συντακτική ανάλυση (Μέρος 1 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Κεφάλαιο 4: Συντακτική ανάλυση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ.

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (1)

Θέματα Μεταγλωττιστών

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 7: Ασυμφραστικές Γλώσσες (Γλώσσες Ελεύθερες Συμφραζομένων)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ

Περιεχόμενα. Περιεχόμενα

Ενδεικτικές Ερωτήσεις Θεωρίας

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Η γλώσσα προγραμματισμού Strange

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Πληροφορική 2. Αλγόριθμοι

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

FORT320. Γενική Περιγραφή. Ειδική Περιγραφή. Α. Λεκτικές Μονάδες

Περιεχόμενα. Εισαγωγή του επιμελητή, Γιάννης Σταματίου 15 Πρόλογος 17 Εισαγωγή 23. Μέρος I. ΕΠΑΝΑΛΗΠΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΑΝΑΛΛΟΙΩΤΕΣ ΣΥΝΘΗΚΕΣ

Τεχνητή Νοημοσύνη. 21η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Κεφάλαιο 2: Τυπικές γλώσσες. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος / 216

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση Ι. Εαρινό Εξάμηνο Lec /03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Συντακτική Ανάλυση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (2)

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΜΑΘΗΜΑ: Μεταγλωττιστές

ΤΟΜΟΣ Α : Συμβολικός Προγραμματισμός

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Λογισμικό Συστήματος. Κλειώ Σγουροπούλου

8 FORTRAN 77/90/95/2003

Προγραμματισμός Ι (ΗΥ120)

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

Εισαγωγή. Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα και ιστορική αναδρομή

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

{ int a = 5; { int b = 7; a = b + 3;

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Transcript:

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Μια ανασκόπηση στους Μεταγλωττιστές Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Α. Γλώσσα -Μετάφραση Γλώσσα προγραμματισμού = Αναπαράσταση αλγορίθμων Ευκολία χρήσης Ακρίβεια και πληρότητα περιγραφής, όχι διφορούμενη! Μία περιγραφή για όλες τις μηχανές Μετάφραση από την αλγοριθμική περιγραφή Αρχική γλώσσα Τελική γλώσσα Μεταγλωττιστές& Διερμηνείς

Φάσεις Μετάφρασης ιαχείριση Πίνακα Συµβόλων αρχικό πρόγραµµα Λεκτική Ανάλυση Συντακτική Ανάλυση Σηµασιολογική Ανάλυση Παραγωγή Ενδιάµεσου Κώδικα Βελτιστοποίηση Κώδικα Παραγωγή Τελικού Κώδικα τελικό πρόγραµµα ιαχείριση Λαθών

Λεκτική Ανάλυση (X(I=)A(K/2)++M Αναγνώριση λεκτικών μονάδων Με χειρόγραφο επαναληπτικό πρόγραμμα Με μηχανή καταστάσεων Με τη βοήθεια μετα-μεταγλωττιστή Επιστροφή λεκτικών μονάδων και αρχικών σημασιολογικών τιμών (ονόματα, τελεστές, τιμές σταθερών)

Συντακτική Ανάλυση Διαδικασία συντακτικής ανάλυσης της α- κολουθίας λεκτικών μονάδων(parsing) Απόπάνωπροςτακάτω Ξεκινά με το αρχικό σύμβολο προβλέποντας διαδοχικά νέες ακολουθίες συμβόλων. Απόκάτωπροςταπάνω Αναγνωρίζει σταδιακά συμβολοσειρές και ελαττώνει μέχρι το αρχικό σύμβολο. Αποδοχή ή απόρριψη προγράμματος

Δέντρο Συντακτικής Ανάλυσης και Συντακτικό Δέντρο ID = ID ADDOP ID Δέντρο Συντακτικής Ανάλυσης Συντακτικό Δέντρο assignment = ID paren = expression ID ADDOP ε expression ADDOP term ID ID term ID paren ID paren ε ε

Σημασιολογική Ανάλυση Συλλογή πληροφοριών σημασιολογίας Κατηγορικές γραμματικές Κατηγορήματα και αποτίμησή τους Έλεγχος σημασιολογικής ορθότητας Σημασιολογικές ρουτίνες Υλοποίηση μέσα από το συντακτικό αναλυτή

Ενδιάμεσος Κώδικας Αφηρημένα συντακτικά δέντρα Επαυξημένα συντακτικά δέντρα όπου φαίνεται η ροή ελέγχου και η ροή δεδομένων του αρχικού προγράμματος Τετράδες /,K,2,t1 deref,a,t1,t2 store,t2,-,x

Βελτιστοποίηση Κώδικα Σταθερές και υπολογισμός σταθερών εκφράσεων Αναγνώριση άχρηστου κώδικα και κώδικα που ξαναχρησιμοποιείται (κοινές υποεκφράσεις) Βελτιστοποιήσεις σε βρόχους Διαχείριση δεικτών επανάληψης Μετακίνηση κώδικα εκτός βρόχου Παραλληλοποίηση κώδικα

Παραγωγή Τελικού Κώδικα Επιλογή εντολών Δρομολόγηση εντολών Εντολές φόρτωσης Θέσεις καθυστέρησης διακλαδώσεων Δέσμευση καταχωρητών Τελευταίες βελτιστοποιήσεις Μείωση αριθμού ακριβών εντολών Δρομολόγηση βρόχων

Πίνακας Συμβόλων Περιέχει όλα τα αναγνωριστικά που βρίσκονται στο αρχικό πρόγραμμα Τα αναγνωριστικά εισάγονται κατά τη λεκτική ή συντακτική ανάλυση Πληροφορίες συμπληρώνονται κατά τη συντακτική και τη σημασιολογική ανάλυση

Διαχείριση Λαθών Από τις πιο βασικές λειτουργίες των μεταγλωττιστών Ανίχνευση λαθών Συνήθως στη σύνταξη Ανάνηψηαπόλάθη Συνέχιση μετάφρασης για ανίχνευση περισσότερων λαθών Πόσο εύκολο είναι;

Υλοποίηση Μεταγλωττιστή Παραγωγή σωστού κώδικα Παραγωγή γρήγορου κώδικα Γρήγορη μετάφραση Μικρές απαιτήσεις σε μνήμη Καλά διαγνωστικά μηνύματα Δυνατότητα ανάνηψης από λάθη Αξιοπιστία για κάθε αρχικό κώδικα Φορητότητα

Β. Γραμματικές (Ιεραρχία Chomsky) Τύπου 0: Ελεύθερες γραμματικές α β, όπου α V +, β V * Τύπου 1: Γραμματικές με συμφραζόμενα µαν µβν,όπουµ,ν V *,A V N,β V + Τύπου 2: Γραμματικές χωρίς συμφραζόμενα Α β,όπουa V N,β V * Τύπου 3: Κανονικές γραμματικές A b,όπουa V N,b V T {ε} A bc,όπουa,c V N,b V T

Κανονικές Γραμματικές (ΚΓ) Οι λιγότερο ισχυρές γραμματικές Οι γλώσσες τους αναγνωρίζονται από τα πεπερασμένα αυτόματα Μικρότερη πολυπλοκότητα συντακτικής ανάλυσης Εφαρμογή στη λεκτική ανάλυση των μεταγλωττιστών

Γραμματικές χωρίς Συμφραζόμενα (ΓΧΣ) ΠιοισχυρέςαπότιςΚΓ Οι γλώσσες τους αναγνωρίζονται από τα αυτόματα στοίβας Μεγαλύτερη πολυπλοκότητα συντακτικής ανάλυσης Εφαρμογή στη συντακτική ανάλυση των μεταγλωττιστών

Αριστερότερη/Δεξιότερη Παραγωγή Αν κατά τη διαδικασία παραγωγής από μια ΓΧΣ αντικαθιστούμε το αριστερότερο μη τερματικό σύμβολο, παίρνουμε μια αριστερότερη παραγωγή Παράδειγμα: assignment IDparen=expression L ID=expression ID=term ID=IDparen ID=ID Αντίστοιχα για δεξιότερη παραγωγή

Διφορούμενες Γραμματικές Μια ΓΧΣ ονομάζεται διφορούμενη, όταν υ- πάρχει πρότασή της που έχει περισσότερα απόέναδσα,ήισοδύναμαπουπαράγεταιμε περισσότερες από μία αριστερότερες (ή περισσότερες από μία δεξιότερες) παραγωγές Μια ΓΧΣ ονομάζεται εγγενώς διφορούμενη όταν δεν υπάρχει ισοδύναμή της μη διφορούμενη γραμματική

Παράδειγμα: Ξεκρέμαστο else Διφορούμενη γραμματική: stmt IFcondstmtELSEstmt IFcondstmt S1 S2 cond C1 C2 Ισοδύναμη μη διφορούμενη γραμματική: stmt matched unmatched matched IFcondmatchedELSEmatched S1 S2 unmatched IFcondstmt IF cond matched ELSE unmatched cond C1 C2 Συμβολοσειρά:IFC1IFC2S1ELSES2

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

Διάγραμμα Μετάβασης (ΔΜ) Αναγνώριση με πεπερασμένο αυτόματο Επαυξημένος γράφος μετάβασης Δυνατότητα οπισθοδρόμησης Περισσότερη πληροφορία > 0 1 όχι = = *1 2 3 T_GT T_GE

Λειτουργία ΛΑ από το ΔΜ Για κάθε λεκτική μονάδα ξεκινάμε από την αρχική κατάσταση του ΔΜ Απορρίπτουμε όταν δε βρίσκουμε ορισμένη μετάβαση Σε κάθε τελική κατάσταση: Αναγνωρίζουμε την αντίστοιχη λεκτική μονάδα Πιθανά οπισθοδρομούμε στην είσοδο Επιστρέφουμε την πληροφορία που χρειάζεται ο Συντακτικός Αναλυτής(ΣΑ)

Κατασκευή ΔΜ Εμπειρική κατασκευή: Κατασκευάζουμε ένα ΝΠΑ για κάθε κανονική έκφραση Μετατροπή κάθε ΝΠΑ σε ΔΜ με προσαύξηση για οπισθοδρόμηση και επιστροφή πληροφορίαςστοσα ΕνοποίησηόλωντωνΔΜσεένα Το τελικό ΔΜ πρέπει να είναι ντετερμινιστικό

Διαχείριση Λαθών (ΔΛ) Εκτύπωση μηνυμάτων Ανάνηψη από σφάλματα Μέθοδος πανικού Διαγραφή μη επιτρεπτού χαρακτήρα Εισαγωγή χαρακτήρα Αντικατάσταση χαρακτήρα Αντιμετάθεση χαρακτήρων Πολυπλοκότητα / Κόστος / Επιτυχία μεθόδου

Δ. Συντακτική Ανάλυση Επαλήθευση της σύνταξης του προγράμματος Κατασκευή συντακτικού δέντρου Η κεντρική φάση της Μετάφρασης Οδηγούμενης από τη Σύνταξη Μηνύματα ελέγχου λαθών Εισαγωγή/Προσθήκη πληροφορίας στον ΠΣ

ΣΑ από Πάνω προς τα Κάτω Ξεκίνημα με το αρχικό σύμβολο της γραμματικής Επίλεξε έναν κανόνα με αριστερό μέλος το τρέχον σύμβολο ανάλογα με την είσοδο Κατασκεύασε ένα δέντρο με ρίζα το σύμβολο αυτό και παιδιά τα σύμβολα του δεξιού μέλους του κανόνα Επανάλαβε για κάθε μη τερματικό από τα σύμβολα αυτά

ΣΑ LL(k) Σειρά επεξεργασίας των μη τερματικών συμβόλων από το δεξιό μέλος Απόαριστεράπροςταδεξιά Επιλογή κανόνα Μεβάσητιςεπόμενεςkλεκτικέςμονάδες Ανάγνωση εισόδου από αριστερά προς τα δεξιά

Γραμματικές LL(1) Για να είναι μια γραμματική LL(1), πρέπει να μην έχει συγκρούσεις FIRST/FIRST και FIRST/FOLLOW: Για δύο κανόνες Α ακαι Α β,α β: FIRST(α) FIRST(β)= Για ένα μη τερματικό σύμβολο Α * ε : FIRST(A) FOLLOW(A)=

ΣΑ από Κάτω προς τα Πάνω Ξεκίνημα με την πρώτη λεκτική μονάδα Διάβασε διαδοχικές λεκτικές μονάδες αντικαθιστώντας το δεξί μέλος κάποιου κανόνα που έχει σχηματιστεί με το αριστερό του, επιλέγοντας κίνηση ανάλογα με την είσοδο Κατασκεύασε ένα δέντρο με φύλλα τα σύμβολα του δεξιού μέλους του κανόνα και ρίζα το σύμβολο του αριστερού μέλους Επανέλαβε μέχρι να βρεθεί το αρχικό σύμβολο της γραμματικής

ΣΑ LR(k) Σειρά σχηματισμού των μη τερματικών συμβόλων στο δεξιό μέλος Από αριστερά προς τα δεξιά (αντίστροφη της δεξιότερης παραγωγής) Επιλογή κανόνα και κίνησης Μεβάσητιςεπόμενεςkλεκτικέςμονάδες Ανάγνωση εισόδου από αριστερά προς τα δεξιά

Κινήσεις ΣΑ LR(k) Οι κινήσεις γίνονται με τη βοήθεια στοίβας Ολίσθηση Ανάγνωση επόμενης λεκτικής μονάδας από την είσοδο και εισαγωγή αυτής στη στοίβα Ελάττωση Αντικατάσταση στη στοίβα των συμβόλων του πλήρους δεξιού μέλους κάποιου κανόνα με το μη τερματικό σύμβολο στο αριστερό μέλος

ΣΑ LR(0) ΚατάστασηΣΑLR(0):Τοσύνολοτωνπροθεμάτων δεξιών μελών κανόνων που έχουν αναγνωριστεί σε κάποιο βήμα της ΣΑ Στοιχεία(items) Με την επόμενη κίνηση πρέπει να σχηματίζεται τουλάχιστον ένα νέο αποδεκτό πρόθεμα(viable prefix) δεξιού μέλους κανόνα Η ολίσθηση καταναλώνει μια λεκτική μονάδα Η ελάττωση είναι ε-μετάβαση και άρα δεν καταναλώνει λεκτική μονάδα

Γραμματικές LR(0) Για να είναι μια γραμματική LR(0) πρέπει να μην έχει συγκρούσεις ολίσθησης/ελάττωσης και ελάττωσης/ελάττωσης: Να μην υπάρχει επιλογή μεταξύ ολίσθησης και ελάττωσης για την ίδια κίνηση Να μην υπάρχουν δύο ή περισσότεροι κανόνες που να μπορούν να χρησιμοποιηθούν στην ίδια κίνηση ελάττωσης

Αλγόριθμος ΣΑ LR(0) Βάλε στη στοίβα την αρχική κατάσταση Επανέλαβε μέχρι αποδοχή ή απόρριψη: Εκτέλεσε την ενέργεια για την κατάσταση στην κορυφή της στοίβας(τρέχουσα κατάσταση): Ολίσθηση: βάλε στη στοίβα την επόμενη λεκτική μονάδα Ελάττωση: βγάλε από τη στοίβα 2 τον αριθμό συμβόλων του δεξιού μέλους, θέσε ως τρέχουσα κατάσταση το σύμβολο στην κορυφή της στοίβας και βάλε σε αυτήν το αριστερό μέλος του κανόνα ελάττωσης Βάλε στη στοίβα την επόμενη της τρέχουσας κατάστασης για το σύμβολο στην κορυφή της

Λειτουργία Ακριβούς ΣΑ LR(1) ΚατάστασηΣΑLR(1):ΜίακατάστασητουΣΑ LR(0), με την προσθήκη για κάθε στοιχείο του συνόλου των λεκτικών μονάδων που επιτρέπεται να ακολουθούν το αριστερό μέλος του στη συγκεκριμένη κατάσταση Η λειτουργία είναι παρόμοια με τη λειτουργία του ΣΑ LR(0), με τη διαφορά ότι ο πίνακας κίνησης ACTION είναι δισδιάστατος, με τις στήλες να αντιστοιχούν στα προπορευόμενα σύμβολα

Προσεγγιστικοί ΣΑ LR(1) LALR(1) LR(1) Ενοποιούμε τις καταστάσεις του ΣΑ LR(1) που αντιστοιχούν στην ίδια κατάσταση του ΣΑ LR(0), ενώνοντας και τα αντίστοιχα σύνολα προπορευόμενων λεκτικών μονάδων SLR(1) LALR(1) Προσεγγίζουμε τα σύνολα των λεκτικών μονάδων που μπορούν να ακολουθούν το αριστερό μέλος κάποιου στοιχείου με το αντίστοιχο σύνολο FOLLOW (το οποίο δεν διαχωρίζει καταστάσεις)

Διαχειριστής Λαθών στη ΣΑ ΟΔΛτηςΣΑπρέπει: Να αναφέρει τα σφάλματα με ακρίβεια και σαφήνεια Λάθος σε προηγούμενη θέση Να μπορεί να συνεχίζει τη ΣΑ μετά από κάποιο σφάλμα Ώστε να μπορεί να βρίσκει περισσότερα σφάλματα Αλλάχωρίςναμπαίνεισεατέρμονακύκλο

Ε. Πίνακας Συμβόλων (ΠΣ) Χαρακτηριστικά ενός ονόματος: Κατηγορία αποθήκευσης Εμβέλεια Ορατότητα προσοχή στις φωλιασμένες εμβέλειες για επισκιάσεις Διάρκεια ζωής στη C++ επιτρέπονται δηλώσεις στο μέσο εμβέλειας

Περιεχόμενα ΠΣ Στον ΠΣ αποθηκεύονται πληροφορίες για: Τύπους Θέσεις στη μνήμη, ανάλογα με την κατηγορία α- ποθήκευσης Παραμέτρους Αριθμό παραμέτρων Τύπους παραμέτρων Τρόπους περάσματος Η αποθήκευση ακολουθεί τις εμβέλειες

Οργάνωση ΠΣ Γραμμικές λίστες Απλή, αλλά αργή δομή: Ο(n(n+m)) Δέντρα δυαδικής αναζήτησης Λιγότερο απλή, πιο γρήγορη δομή: O((n+m)logn) Πίνακες κατακερματισμού Πολύπλοκη, αλλά γρήγορη δομή: O(n(n+m)/k)

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

Στατική Σημασιολογία Σημασιολογία που αναλύεται κατά τη μετάφραση Τύποι μεταβλητών Εμβέλειες μεταβλητών Δηλώσεις συναρτήσεων Κλήσεις συναρτήσεων Τύποι παραστάσεων και αναθέσεων Άλματαεντόςκαιεκτόςμπλοκ

Είδη Σημασιολογικών Ελέγχων Έλεγχοι τύπων Έλεγχοι ροής για άλματα (goto, break) Έλεγχοι ύπαρξης ονομάτων Έλεγχοι μοναδικότητας για μεταβλητές ή ετικέτες Έλεγχοι συνέπειας

Έλεγχος Τύπων Έλεγχος τύπων σε παραστάσεις Μετατροπές τύπων Υπερφόρτωση τελεστών Πολυμορφικοί τελεστές και συστήματα τύπων Ονόματα και συνώνυμα τύπων Ισοδυναμία τύπων Υποτύποι Εξαγωγή τύπων

Έλεγχος Ροής Έλεγχος ετικετών σε εντολές goto αριθμοί ή ονόματα Έλεγχος χρήσης ειδικών εντολών: break continue return Χρειάζεται έλεγχος δομής εντολών ελέγχου;

Έλεγχος Ονομάτων Έλεγχος ύπαρξης σε χρήση ονόματος Απαίτηση προηγούμενης δήλωσης Προαιρετική σε κάποιες γλώσσες (κυρίως συναρτησιακού) προγραμματισμού Έλεγχος μοναδικότητας σε δήλωση ονόματος Απαγόρευση πολλαπλών δηλώσεων στην ίδια εμβέλεια Πολλαπλές δηλώσεις επιτρέπονται σε διαφορετικές εμβέλειες

Έλεγχος Συνέπειας Κάποιες δομές εντολών δεν ελέγχονται από το συντακτικό αναλυτή κλασική FORTRAN: do 100 i=1,100 if (x.gt. 0) then a(i) = x * b(i) else a(i) = 0.0 endif 100 continue

Ζ. Ενδιάμεσος Κώδικας Απεικόνιση ανάμεσα στον αρχικό και στον τελικό κώδικα Γραμμικές αναπαραστάσεις: Ενδιάμεσος κώδικας πλησιέστερα στον τελικό ευκολότερη παραγωγή τελικού κώδικα Αναπαραστάσεις γραφημάτων: Ενδιάμεσος κώδικας πλησιέστερα στον αρχικό περισσότερη πληροφορία, καλή βελτιστοποίηση

Γραμμικές Αναπαραστάσεις Κώδικες τριών διευθύνσεων Κώδικας τετράδων (quadruples): τελεστής, δύο τελούμενα εισόδου και ένα τελούμενο εξόδου b*b-4*a*c 1:*,b,b,$1 2:*,4,a,$2 3:*,$2,c,$3 4:-,$1,$3,$4 Κώδικας τριάδων (triples): ο αριθμός τριάδας χρησιμοποιείται ως τελούμενο εξόδου

Αναπαραστάσεις Γραφημάτων Αφηρημένα συντακτικά δέντρα(ασδ) x = a+5 ID G:8 κατευθυνόμενα ακυκλικά γραφήματα Ιεραρχικά γραφήματα ακολουθούν φωλιάσματα δομημένων εντολών καλά για βελτιστοποιήσεις = ID L:7 + ICONST 5

Τι Πρέπει να Περιέχει ο Ενδιάμεσος Κώδικας Πληροφορίες για προσπέλαση δεδομένων τύποι δεδομένων οργάνωση χώρου δεδομένων(χδ) Πληροφορίες αποτίμησης εκφράσεων τελεστές και τελούμενα Πληροφορίες εκτέλεσης εντολών σημασιολογία εντολών Πληροφορίες ελέγχου ροής σειρά εκτέλεσης εντολών

Σχεδίαση ΧΔ Διαφορετικός χώρος για κάθε κατηγορία αποθήκευσης Υλοποίηση με τη βοήθεια Πίνακα Δεσμευσης Για κάθε βαθμωτή μεταβλητή δεσμεύεται μίαθέσηκαιαναγράφεταιοτύποςτης απλοί/σύνθετοι τύποι Ενημερώνεται ο ΠΣ Κάθε αναφορά στη μεταβλητή αναφέρεται σεαυτήτηθέση

Αριστερή / Δεξιά Προσπέλαση Τιμή αριστερής προσπέλασης (l-value): Διεύθυνση στην οποία μπορεί να γίνει ανάθεση, όπως καθορίζει η σημασιολογία της γλώσσας Βαθμωτές μεταβλητές ή μεταβλητές πίνακα/εγγραφής Παράμετροι κατ αναφορά Τιμή δεξιάς προσπέλασης (r-value): Τιμή έκφρασης ή αποτίμηση αριστερής προσπέλασης Τιμές που ανατίθενται Παράμετροι κατ αξία

Απεικόνιση Εντολών Δέντρα εντολών ή γραμμικές αναπαραστάσεις ID L1:4!= ICONST 0 if ID G:2 if(i!= 0) y = x -1; = ID L2:5 - ICONST 1 ==,i,0,3 -,x,1,$1 = $1,-,y

Απεικόνιση Ροής Ελέγχου Γράφημα Ροής: Απεικόνιση της διαδοχής των εντολών σε μορφή γραφήματος Συνδέσεις μεταξύ κόμβων του συντακτικού δέντρου, των οποίων η εκτέλεση μπορεί να είναι διαδοχική Κυκλικές δομές για απεικόνιση βρόχων Χρήσιμο για μετάφραση εντολών ροής ελέγχου, βελτιστοποίηση κώδικα και διερμηνεία

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

Η. Τελικός Κώδικας Οργάνωση χώρου εκτέλεσης προγράμματος Τύποι και τελικός κώδικας Χώροι αποθήκευσης δεδομένων Κλήσεις υποπρογραμμάτων Παραγωγή κώδικα Σταδιακή μετάβαση από τον ενδιάμεσο κώδικα Σχήματα μετάφρασης για κάθε τύπο εντολής Δέσμευση καταχωρητών Επιλογή εντολών

Τύποι και Χώροι Δεδομένων Τύποι δεδομένων και υλοποίησή τους Απλοί βαθμωτοί τύποι Σύνθετοι τύποι Χώροι δεδομένων και προσπέλασή τους Στατικά δεδομένα Δεδομένα στοίβας Συναρτήσεις Μη τοπικά δεδόμενα

Τύποι Δεδομένων Βαθμωτοί Πίνακες Τύπος στοιχείων Εγγραφές/Κλάσεις Τύποι πεδίων Δείκτες Τύπος αναφοράς Κυκλικές δομές τύπων! Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Υλοποίηση Τύπων Αν κάποιο δεδομένο έχει αρχική διεύθυνση Α, πώς ξέρουμε πού να βρούμε τη ζητούμενη πληροφορία; Υλοποίηση πινάκων Υλοποίηση πλειάδων/συνόλων Υλοποίηση εγγραφών Δείκτες και κυκλικές δομές Μεταβλητό μέγεθος δομών

Συνολικός Χώρος Δεδομένων Κώδικας Στατικές Μεταβλητές Στοίβα Σωρός Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

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

Δεδομένα Στοίβας Μεταβλητή θέση μνήμης για κάθε δεδομένο με πολλαπλά ταυτόχρονα ενεργά αντίγραφα Τοποθέτηση στα εγγραφήματα δραστηριοποίησης της στοίβας με στατικά καθορισμένη μετατόπιση από την αρχή τους Διάρκεια ζωής η διάρκεια ενεργοποίησης της αντίστοιχης εμβέλειας του προγράμματος

Εγγράφημα Δραστηριοποίησης Τοπικές μεταβλητές Τυπικές παράμετροι Θέση αποτελέσματος συνάρτησης Άλλες βοηθητικές θέσεις Διεύθυνση επανόδου στο καλούν περιβάλλον Σύνδεσμοι προσπέλασης Άλλες προσωρινές μεταβλητές Διαχυμένες τιμές καταχωρητών Στατικά καθορισμένο μέγεθος

Παράμετροι Συναρτήσεων και Μέθοδοι Περάσματος Κατ αξία πέρασμα τιμής Κατ αναφορά πέρασμα διεύθυνσης Κατ όνομα πέρασμα κώδικα - πολλαπλές αποτιμήσεις Κατ ανάγκη πέρασμα κώδικα - μία αποτίμηση Κατ αξία και αποτέλεσμα

Στατικό / Δυναμικό Δέσιμο Procedure A; var b: real; Procedure X; var a: real; Procedure Y; var b: integer; X; = a + b; a = b + Y; X; Πού αναζητoύνται οι μεταβλητές a και b;

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

Γεννήτορας Τελικού Κώδικα Ο γεννήτορας τελικού κώδικα είναι το πιο κρίσιμο τμήμα του μεταγλωττιστή και αντιμετωπίζει πολύπλοκα προβλήματα Βέλτιστη χρήση της αρχιτεκτονικής Κακός γεννήτορας τελικού κώδικα δίνει κακό τελικό κώδικα, ανεξάρτητα από τον υπόλοιπο μεταγλωττιστή Κακός κώδικας = αργός κώδικας

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

Σχήματα Παραγωγής Τελικού Κώδικα Οι διαδικασίες μετάφρασης κάθε τύπου κόμβου ενδιάμεσου κώδικα σε συγκεκριμένες ακολουθίες εντολών τελικής γλώσσας Η μετάφραση γίνεται σε βήματα πηγαίνοντας από το επίπεδο ενδιάμεσης γλώσσας προς τα κάτω στο επίπεδο τελικής γλώσσας Αρχικός ενδιάμεσος κώδικας τελικός ενδιάμεσος κώδικας Τελικός ενδιάμεσος κώδικας τελικός κώδικας

Μετάφραση Εκφράσεων Τιμές αριστερής και δεξιάς προσπέλασης Κλήσεις υποπρογραμμάτων Τελεστές Προσωρινές μεταβλητές και δέσμευση καταχωρητών Επιλογή εντολών τελικού κώδικα

Τιμές Αριστερής Προσπέλασης Ανάπτυξη κόμβων ενδιάμεσου κώδικα για ακριβή υπολογισμό διευθύνσεων Υπολογισμός διεύθυνσης στοιχείου πίνακα: address=base_address+[(i 1 -L 1 ) N 2 N m + (i 2 -L 2 ) N 3 N m + + (i m -L m )] elem_size Προσθήκη κόμβων αποδεικτοδότησης για μετατροπή σε τιμές δεξιάς προσπέλασης Ψευδοτελεστής LOAD

Τιμές Δεξιάς Προσπέλασης Οι τιμές βαθμωτών μεταβλητών μπορούν να φορτωθούν από τη μνήμη με δύο τρόπους: μετηβοήθειατουτελεστήload απ ευθείας, αν η διεύθυνση μπορεί να υπολογιστεί στην ίδια εντολή με τη φόρτωση Οι τιμές σταθερών παράγονται επίσης με δύο τρόπους: με ενσωμάτωση στον εκτελέσιμο κώδικα με τοποθέτηση στο χώρο στατικών δεδομένων καιφόρτωσηαπότημνήμη

Κλήσεις Υποπρογραμμάτων Αποτίμηση πραγματικών παραμέτρων και τοποθέτηση των τιμών τους στη στοίβα Ενημέρωση συνδέσμου προσπέλασης και δείκτη στοίβας, ανάλογα με την υλοποίηση Εκτέλεση άλματος με σύνδεση στον κώδικα του υποπρογράμματος Ανάγνωση της τιμής του αποτελέσματος από τη στοίβα

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

Προσωρινές Μεταβλητές Όταν δεν πρόκειται να προσθέσουμε άλλους κόμβους στον ενδιάμεσο κώδικα, αντιστοιχίζουμε μια προσωρινή μεταβλητή σε κάθε κόμβο: x*y+5*(i+2) temp1: x, temp2: y, temp3: x*y, temp4: 5, temp5: i, temp6: i+2, temp7: 5*(i+2), temp8: x*y+5*(i+2)

Δέσμευση Καταχωρητών Έχοντας βρει με ανάλυση ροής ελέγχου τη σειρά εκτέλεσης των εντολών και αποτίμησης των κόμβων σε εκφράσεις: Υπολογίζουμε τους χρόνους ζωής των προσωρινών μεταβλητών και κατασκευάζουμε το γράφημα αλληλεπιδράσεων Δεσμεύουμε καταχωρητές χρωματίζοντας το γράφημα

Επιλογή Εντολών Τελικού Κώδικα Στην απλούστερη περίπτωση αποδίδουμε σε κάθε κόμβο μια εντολή ή μια συγκεκριμένη ακολουθία εντολών, για παράδειγμα: $2... + $5... $4 addu $5,$2,$4 Υπάρχουν κι άλλες μέθοδοι βέλτιστης επιλογής εντολών, όπως με ταίριασμα προτύπων και δυναμικό προγραμματισμό

Μετάφραση Εντολών Για εντολές ελέγχου ροής (διακλαδώσεις, βρόχοι): Σχήμα παραγωγής κώδικα για κάθε τύπο κόμβου εντολής, με μετατροπή σε απλούς κόμβους ελέγχου ροής που διαθέτει η τελική γλώσσα Στοιχειώδης ανάλυση ροής ελέγχου στον αρχικό ενδιάμεσο κώδικα βοηθάει στη σύνδεση ροής (προορισμοί αλμάτων) στον τελικό κώδικα Κατάλληλα σχήματα παραγωγής τελικού κώδικα για όλες τις εντολές

Θ. Βελτιστοποίηση Μετασχηματισμός κώδικα σε άλλον πιο αποδοτικό Ασφάλεια βελτιστοποίησης Ορθότητα μετασχηματισμών! Πολυπλοκότητα μετασχηματισμών Εντοπισμός πιθανά προβληματικού κώδικα Στατιστικοί αναλυτές μπορούν να δείξουν ποια μέρη ενός προγράμματος το καθυστερούν Επιλογή εσωτερικών βρόχων

Φάσεις Βελτιστοποίησης Πάνω στον ενδιάμεσο κώδικα Βελτιστοποίηση εκφράσεων Βελτιστοποίηση βασικών ενοτήτων Μετασχηματισμοί βρόχων Μετασχηματισμοί κλήσεων υποπρογραμμάτων Κατά την παραγωγή τελικού κώδικα Βέλτιστη δέσμευση καταχωρητών και επιλογή εντολών Πάνω στον τελικό κώδικα Τοπικοί μετασχηματισμοί

Βελτιστοποιήσεις Δομής Μετακίνηση κώδικα Απαλοιφή άχρηστου κώδικα Βελτιστοποιήσεις βρόχων Μετακίνηση αναλλοίωτου κώδικα Απαλοιφή επαγωγικών μεταβλητών Αναδιοργάνωση: ξετύλιγμα, αντιστροφή, α- ποδιακλάδωση Απαλοιφή ελέγχου ορίων πίνακα Βελτιστοποιήσεις κλήσεων υποπρογραμμάτων

Βελτιστοποιήσεις Αποτίμησης Αποτίμηση σταθερών εκφράσεων Εύρεση κοινών υποεκφράσεων a[i-1] = b[i-1] + x*a[i-1] Διάδοση αντιγράφων Υποβιβασμός ισχύος x*5 x<<2 + x Αλγεβρικοί μετασχηματισμοί Αλλαγή σειράς αποτίμησης υποεκφράσεων

Μετασχηματισμοί Χαμηλού Επιπέδου Τοπικοί μετασχηματισμοί(peephole): Αφαίρεση εντολών Απλοποιήσεις αλμάτων Μαθηματικές απλοποιήσεις Βελτιστοποιήσεις σε ειδικές εντολές Βελτιστοποιήσεις δρομολόγησης εντολών Ξεδίπλωμα βρόχων Μετακίνηση εντολών