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

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

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

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

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

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

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

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

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

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

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

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Αρχές Γλωσσών Προγραμματισμου Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2015 Χρήστος Νομικός ( Τμήμα Μηχανικών Αρχές

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονική Υπολογιστών

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

Συναρτήσεις-Διαδικασίες

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

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

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

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

Ανάπτυξη και Σχεδίαση Λογισμικού

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Εντολές γλώσσας μηχανής

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Διαλέξεις 6: Κάλεσμα Διαδικασιών, Χρήση και Σώσιμο Καταχωρητών. Μανόλης Γ.Η.

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

Εγγραφές Δραστηριοποίησης. Jackson Pollock, The Key, 1946 (action painting)

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

Μεταγλωττιστές Ενότητα 1: Εισαγωγή

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

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ. A. Μετατροπή αριθμών 1. Μετατροπή αριθμών από δεκαδικό σε δυαδικό σύστημα αρίθμησης

Εγγραφές Δραστηριοποίησης

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

Διαδικασιακός Προγραμματισμός

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

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

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

Αρχιτεκτονική Υπολογιστών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

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

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Κεφάλαιο 2: Μεταφραστές

Δομημένος Προγραμματισμός

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

Αρχιτεκτονική x86(-64) 32-bit και 64-bit λειτουργία. Αρχιτεκτονική x86(-64) Αρχιτεκτονική επεξεργαστών x86(-64) Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Εγγραφές Δραστηριοποίησης

Αρχιτεκτονική Υπολογιστών

Pascal. 15 Νοεμβρίου 2011

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Αρχιτεκτονικές Συνόλου Εντολών

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Αρχιτεκτονική Υπολογιστών

; Τι περιέχεται στη συσκευασία ενός μικροεπεξεργαστή σήμερα;

Υποπρογράμματα (Subroutines)

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

Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 8 ο Μερική Επικάλυψη. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Οργάνωση Η/Υ. Γλώσσα Assembly. Τμήμα Εφαρμσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Λειτουργικά Συστήματα (Λ/Σ)

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Οργάνωση Υπολογιστών (Ι)

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

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

Οργάνωση Η/Υ. Ο Επεξεργαστής TRN. Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

Λειτουργικά Συστήματα (Λ/Σ)

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

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

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

Αρχιτεκτονική Υπολογιστών

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

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

Transcript:

Γλώσσες Προγραμματισμού Μεταγλωττιστές Παραγωγή Τελικού Κώδικα Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου

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

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

Παραγωγή Ενδιάμεσου Κώδικα Παραγωγή Τελικού Κώδικα αφορά το τελικό στάδιο μετάφρασης του αρχικού προγράμματος. Είσοδος είναι ο ενδιάμεσος κώδικας και ο πίνακας συμβόλων από όπου ο γεννήτορας αντλεί πληροφορία. Έξοδος είναι ένα εκτελέσιμο ισοδύναμο πρόγραμμα. Κατασκευή του βέλτιστου τελικού κώδικα είναι εξαιρετικά πολύπλοκο πρόβλημα (NP-hard). Βέλτιστη επιλογή καταχωρητών. Βέλτιστη επιλογή εντολών. Ευριστικές τεχνικές επίλυσης (heuristics), οδηγούν σε παραγωγή ικανοποιητικής ποιότητας κώδικα.

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

Θέματα που αφορούν την παραγωγή του τελικού κώδικα Οργάνωση της μνήμης Επιλογή και δέσμευση καταχωρητών Επιλογή εντολών

Οργάνωση της μνήμης Περιοχή Κώδικα: περιέχει το μεταφρασμένο πρόγραμμα του οποίου το μέγεθος είναι γνωστό. Στατική περιοχή: μπορεί να περιέχει είτε σταθερές ή δεδομένα που παράγονται από τον μεταγλωττιστή (γνωστού μεγέθους). Σωρός: περιέχει δεδομένα των οποίων η διάρκεια ζωής δεν είναι γνωστή ή διαγράφονται και δημιουργούνται ρητά. Στοίβα εκτέλεσης: περιέχει τα εγγραφήματα δραστηριοποίησης (activation records). Στοίβα (stack) Ελεύθερη Μνήμη Σωρός (heap) Στατική Περιοχή Κώδικας

Σωρός (heap area) Περιέχει δεδομένα των οποίων η διάρκεια ζωής ξεπερνά την εκείνη της δομικής μονάδας που τα δημιούργησε. πχ. τα αντικείμενα που δημιουργούνται στις C++ και JAVA αποθηκεύονται στο σωρό. Την δέσμευση και αποδέσμευση μνήμης αναλαμβάνει ο διαχειριστής μνήμης (memory manager) Χειροκίνητη διαχείριση μνήμης (manual) Αυτόματη διαχείριση μνήμης γίνεται μέσω του λεγόμενου garbage collection, που αποδεσμεύει μνήμη όταν πλέον δεν αναφέρεται σε αυτή κανένα μέρος του προγράμματος.

Στοίβα (stack area) Η περιοχή μνήμης της στοίβας περιέχει πληροφορίες για την εκτέλεση των δομικών μονάδων και μεταβλητές οι οποίες είναι "τοπικές" (local) στις δομικές μονάδες. Μετά το πέρας της εκτέλεσης της δομικής μονάδας η μνήμη που δεσμεύτηκε απελευθερώνεται αυτόματα. Η πληροφορία στην στοίβα οργανώνεται σε εγγραφήματα δραστηριοποίησης. Activation records / frames Η οργάνωση αυτή επιτρέπει το φώλιασμα δομικών μονάδων.

Εγγραφήματα Δραστηριοποίησης Αποθήκευση πληροφορίας σχετικής με κλήση υποπρογραμμάτων. Παράμετροι Αποτελέσματα Σύνδεσμος προσπέλασης Διεύθυνση επιστροφής Προηγούμενη τιμή δείκτη πλαισίου Τοπικά δεδομένα/μεταβλητές Προσωρινές μεταβλητές Παράμετρος 1 Παράμετρος 2 Παράμετρος n Διεύθυνση Αποτελέσματος Σύνδεσμος Προσπέλασης Διεύθυνση Επιστροφής και Κατάσταση Μηχανής Προηγούμενος Δείκτης Πλαισίου Τοπική Μεταβλητή 1 Τοπική Μεταβλητή 2 Τοπική Μεταβλητή n Προσωρινή Μεταβλητή 1 Προσωρινή Μεταβλητή 2 Προσωρινή Μεταβλητή n

Οργάνωση Μνήμης Στοίβα (stack) Ελεύθερη Μνήμη Σωρός (heap) Στατική Περιοχή Κώδικας Παράμετροι q Διεύθυνση Αποτελέσματος Σύνδεσμος Προσπέλασης Διεύθυνση Επιστροφής Προηγούμενος Δείκτης Πλαισίου Τοπικές Μεταβλητές Προσωρινές Μεταβλητές Παράμετροι r Διεύθυνση Αποτελέσματος Σύνδεσμος Προσπέλασης Διεύθυνση Επιστροφής Προηγούμενος Δείκτης Πλαισίου Τοπικές Μεταβλητές Προσωρινές Μεταβλητές

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

Προσπέλαση τοπικών δεδομένων Οι παράμετροι και οι μεταβλητές για την συνάρτηση γίνονται προσπελάσιμες μέσω του δείκτη bp. bp+8 bp+6 bp+4 bp+2 bp bp-2 bp-4... Παράμετρος 1 Παράμετρος 2 Παράμετρος n Διεύθυνση Αποτελέσματος Σύνδεσμος Προσπέλασης Διεύθυνση Επιστροφής και Κατάσταση Μηχανής Προηγούμενος Δείκτης Πλαισίου Τοπική Μεταβλητή 1 Τοπική Μεταβλητή 2 Τοπική Μεταβλητή n Προσωρινή Μεταβλητή 1 Προσωρινή Μεταβλητή 2 Προσωρινή Μεταβλητή n

Παράδειγμα προσπέλασης τοπικών μεταβλητών Αρχικός Κώδικας int f (n:int); var s,i: int; begin s:=0; i:=1;... s:=n+i; Γλώσσα Τετράδων unit,f,-,- :=,0,-,s :=,1,-,1... +,n,i,$1 Κώδικας Μηχανής mov ax,0 mov word prt [bp-2],ax mov ax,1 mov word prt [bp-4],ax mov word prt [bp+8],ax mov word prt [bp-4],dx add ax,dx mov word prt [bp-6],ax bp + 8 bp + 6 bp + 4 bp + 2 bp bp - 2 bp - 4 n Διεύθυνση Αποτελέσματος Σύνδεσμος Προσπέλασης Διεύθυνση Επιστροφής Προηγούμενος Δείκτης Πλαισίου s i :=,$1,-,s... endu,f,-,- mov ax, word prt [bp-6] mov word prt [bp-2],ax bp - 6... $1...

Προσπέλαση μη-τοπικών μεταβλητών Ανάγκη για προσπέλαση μη-τοπικών μεταβλητών. Καθολικές μεταβλητές βρίσκονται σε "γνωστές" διευθύνσεις. Μεταβλητές "δηλωμένες" σε άλλες διαδικασίες βάσει των κανόνων εμβέλειας. Γενική μέθοδος: Εύρεση διεύθυνσης του αντίστοιχου εγγραφήματος δραστηριοποίησης το οποίο περιέχει την μεταβλητή. Υπολογισμός της σχετικής διεύθυνσης της μεταβλητής βάσει αυτής διεύθυνσης εγγραφήματος που την περιέχει. Τρόποι:Σύνδεσμοι προσπέλασης και πίνακες δεικτών.

Εμβέλειες και Φωλιασμένες Διαδικασίες Μη τοπικές μεταβλητές οι οποίες είναι ορατές σε μια διαδικασία q, ανήκουν σε μια διαδικασία s, στην οποία είναι φωλιασμένη η q. Βάθος φωλιάσματος (nesting depth) είναι ένας αριθμός ο οποίος αντιστοιχίζεται σε κάθε δομική μονάδα κατά την συντακτική ανάλυση που δηλώνει το βάθος της δομικής μονάδας στην ιεραρχία. Το κύριο πρόγραμμα έχει βάθος 1. Μια δομική μονάδα έχει το βάθος της δομικής μονάδας στην οποία είναι φωλιασμένη αυξημένο κατά ένα.

Παράδειγμα program s; βάθος 1 begin procedure e(); βάθος 2 begin... end procedure q(); βάθος 2 begin... function p(); βάθος 3 begin... call e(); end end end

Σύνδεσμοι Προσπέλασης Ένας σύνδεσμος προσπέλασης στο ΕΔ μιας διαδικασίας q, είναι ένας δείκτης στο πλέον πρόσφατο εγγράφημα δραστηριοποίησης της διαδικασίας r, στην οποία είναι άμεσα φωλιασμένη η q. Αν μια μεταβλητή ανήκει σε μια δομική μονάδα Α με βάθος n Α και η προσπέλαση της γίνεται από την B με βάθος n B, τότε ακολουθούνται n B -n A σύνδεσμοι προσπέλασης και βρίσκεται το ΕΔ όπου "ανήκει" η μεταβλητή, και γίνεται η προσπέλαση της μεταβλητής "τοπικά".

Παράδειγμα Έστω ότι το πρόγραμμα s κάλεσε την δομική μονάδα q. Στην περίπτωση αυτή η q ήταν άμεσα φωλιασμένη στο πρόγραμμα s και ο σύνδεσμος προσπέλασης έδειχνε στο ΕΔ της s. Παράμετροι s... Σύνδεσμος Προσπέλασης.. Προηγούμενος Δείκτης Πλαισίου Τοπικές Μεταβλητές... Παράμετροι q... Σύνδεσμος Προσπέλασης... Προηγούμενος Δείκτης Πλαισίου Τοπικές Μεταβλητές Προσωρινές Μεταβλητές

Δημιουργία Συνδέσμων Προσπέλασης (ΣΠ) Έστω μια δομική μονάδα q με βάθος n q η οποία καλεί ρητά την μονάδα p με βάθος n p. Διακρίνονται τρεις περιπτώσεις: n q < n p δηλαδή η p είναι άμεσα φωλιασμένη στην q, οπότε ο ΣΠ της δείχνει στο ΕΔ της q. n q = n p δηλαδή η κλήση είναι αναδρομική ή οι μονάδες έχουν το ίδιο βάθος, οπότε οι ΣΠ των δύο δείχνουν στο ίδιο ΕΔ. n q > n p δηλαδή η καλούμενη δομική μονάδα έχει μικρότερο βάθος, οπότε ο ΣΠ της πρέπει να δείχνει στο πλέον πρόσφατο ΕΔ στο οποίο είναι φωλιασμένη η p, δηλαδή το ΕΔ που βρίσκεται με n p -n q +1 άλματα.

Παράδειγμα program s; procedure e(); begin... end procedure q(); function p(); begin... call e(); end begin... call q();... end begin... call q(); end Ακολουθία εκτέλεσης: s καλεί την q() η q() καλεί αναδρομικά τον εαυτό της, η q() καλεί την p() η p() καλεί την e(). Σημείωση: το βάθος της e() είναι 2, ενώ το βάθος της p() που την καλεί είναι 3, άρα ο ΣΠ πρέπει να δείχνει 3-2+1=2 άλματα "πάνω". s ΣΠ... q ΣΠ... q ΣΠ... p ΣΠ... e ΣΠ...

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

Επιλογή Εντολών

Σύνολο Εντολών Μηχανής Το ρεπερτόριο των διαθέσιμων εντολών της μηχανής παίζει σημαντικό ρόλο. Μηχανές CISC (Complex Instruction Set Computers): τυπικά έχουν ένα μεγάλο ρεπερτόριο εντολών και λίγους καταχωρητές. Μηχανές RISC (Reduced Instruction Set Computer): έχουν περιορισμένο ρεπερτόριο εντολών και μεγάλο πλήθος καταχωρητών.

Μια μηχανή Καταχωρητών Για απλότητα υποθέτουμε ότι έχουμε 7 διαθέσιμους καταχωρητές (1,2...7) και απλές εντολές Εντολές Μεταφοράς LOAD(R,A): στο καταχωρητή R της διεύθυνσης Α LOAD_IMMEDIATE(R,A): στον R της σταθεράς Α Εντολή Αποθήκευσης STORE(R,A): αποθήκευση στην Α της R Εντολή Υπολογισμών ADD(R1,R2,R3) SUBTRACT(R1,R2,R3) MULTIPLY(R1,R2,R3) DIVIDE(R1,R2,R3) R3 = R1 + R2 R3 = R1 - R2 R3 = R1 * R2 R3 = R1 / R2

Μια μηχανή Καταχωρητών Εντολές Άλματος NOP: JUMP(L): άλμα στην ετικέτα L JUMP_ZERO(R,L) JUMP_POSITIVE(R,L) JUMP_NEGATIVE(R,L): άλμα στην ετικέτα L, αν ο καταχωρητής R είναι αντίστοιχα μηδέν, θετικός ή αρνητικός. Εντολές εισόδου/εξόδου READ(R) WRITE(R) Εντολές Αρχής/Τέλους BEGIN και END

Παραγωγή Κώδικα Μπορεί να γραφεί για κάθε εντολή της ενδιάμεσης αναπαράστασης το αντίστοιχο κομμάτι κώδικα. Πχ. η τετράδα +,x,y,$1 μπορεί να μεταφραστεί στις ακόλουθες εντολές: LOAD(R1,x) LOAD(R2,y) ADD(R1,R2,R3) STORE(R3,$1) (Παραπάνω αν και χρησιμοποιήθηκαν συμβολικά ονόματα, ανάλογα με την μηχανή, μπορεί να χρησιμοποιηθούν διευθύνσεις).

Παράδειγμα Μετάφρασης Άλματος Yπό συνθήκη Τετράδα <, x, y, z LOAD(R1,x) LOAD(R2,y) SUBTRACT(R1,R2,R3) JUMP_NEGATIVE(R3,z) Τετράδα =,x,y,z LOAD(R1,x) LOAD(R2,y) SUBTRACT(R1,R2,R3) JUMP_ZERO(R3,z)

Προβλήματα Η προσέγγιση μπορεί να οδηγήσει σε κώδικα ο οποίος είναι μη-αποδοτικός. Πχ. ή +,x,y,z -,z,w,r LOAD(R1,x) LOAD(R2,y) ADD(R1,R2,R3) STORE(R3,z) LOAD(R1,z) LOAD(R2,w) SUBTRACT(R1,R2,R3) STORE(R3,r) LOAD(R1,x) LOAD(R2,y) ADD(R1,R2,R3) STORE(R3,z) LOAD(R1,z) LOAD(R2,w) SUBTRACT(R3,R2,R1) STORE(R4,r)

Τεχνικές Επίλυσης Παραγωγή απλοϊκού κώδικα και έπειτα βελτιστοποίηση (peephole optimization). Ανάλυση του κώδικα εξετάζοντας κάθε φορά ένα μικρό μέρος του (peephole) και εφαρμόζοντας Χρήση τεχνικών ταιριάσματος προτύπων (pattern matching) με την τεχνική tiling. Δημιουργία τελικού κώδικα με μετασχηματισμό του δένδρου ενδιάμεσης αναπαράστασης. Καθολικά βέλτιστες λύσει όπως δυναμικός προγραμματισμός.

Δέσμευση Καταχωρητών Δεδομένου του μικρού αριθμού καταχωρητών και του κόστους μεταφοράς και αποθήκευσης δεδομένων από και προς την μνήμη, σημαντικό θέμα αποτελούν: η επιλογή των μεταβλητών που θα είναι αποθηκευμένοι σε καταχωρήτες κάθε "στιγμή" η επιλογή του καταχωρητή στον οποίο θα αποθηκευτεί η συγκεκριμένη μεταβλητή Πρόβλημα ανήκει στην κατηγορία NP-complete. Κατά την παραγωγή ενδιάμεσου κώδικα, υποθέτουμε άπειρο αριθμό προσωρινών μεταβλητών. Πρέπει να αποθηκευτούν σε πεπερασμένο σύνολο καταχωρητών.

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

Ανάλυση Liveness Έστω ότι η εντολή i αναθέτει τιμή σε μια μεταβλητή x και η εντολή j χρησιμοποιεί σαν τελούμενο την μεταβλητή, χωρίς να μεσολαβήσουν άλλες αναθέσεις στην x. Η μεταβλητή είναι "ζωντανή" (live) ανάμεσα στις δύο εντολές. Η μεταβλητή χρησιμοποιείται από την εντολή j. Η πληροφορία που αφορά την ιδιότητα liveness της μεταβλητής αποθηκεύεται στον πίνακα συμβόλων και χρησιμοποιείται στη ανάθεση καταχωρητών. Δύο ζωντανές μεταβλητές δεν μπορούν να ανατεθούν στον ίδιο καταχωρητή.

Παράδειγμα Έστω οι ακόλουθες εντολές σε ενδιάμεσο κώδικα και δύο διαθέσιμοι καταχωρητές. Εφόσον ο γράφος μπορεί να χρωματιστεί με δύο χρώματα δεν είναι απαραίτητη η διάχυση (spill). 1:, b, b, $1 2:, 4, a, $2 $1 $2 3:, $2, c, $3 4:, $1, $3, $4 5: :=, $4,, d $3 $4

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