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



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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

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

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

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον προγραμματισμό

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

6. Εισαγωγή στον προγραµµατισµό

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

Εισαγωγή στον Προγραμματισμό

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

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

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

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια.

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος.

Α. Ερωτήσεις Ανάπτυξης

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

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1

Προγραμματισμός Υπολογιστών

Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων. 1. Εισαγωγή. Ιωάννης Κατάκης. ΕΠΛ 032: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

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

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Δεδομένα & Αναπαράσταση Πληροφορίας

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

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

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

Εισαγωγή στον Προγραμματισμό

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Κεφάλαιο 1 Προγραμματισμός Υπολογιστή. Εφαρμογές Πληροφορικής Κεφ. 7 Καραμαούνας Πολύκαρπος 1

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Περί Προγραμματισμού και Γλωσσών Προγραμματισμού

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

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Εγκατάσταση του Arduino IDE

ΚΕΦΑΛΑΙΟ 6: Γλώσσες. 6.1 Ιστορική εξέλιξη 6.4 Υλοποίηση γλώσσας. Κεφάλαιο 6: «Γλώσσες Προγραµµατισµού»

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

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

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

Ενότητα 2 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

III. Πως μετατρέπεται το πηγαίο πρόγραμμα σε εκτελέσιμο πρόγραμμα;

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΠΡΟΓΡΑΜΜΑ ΠΑΙΔΑΓΩΓΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ 2 η ΕΡΓΑΣΙΑ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ ΠΑΡΑΤΗΡΗΣΕΙΣ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Βασικές Αρχές Προγραμματισμού

Εισαγωγή στο περιβάλλον Code::Blocks

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

Μαλούτα Θεανώ Σελίδα 1

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 1

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

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

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

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

ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ

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

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

Λειτουργικά Συστήματα. Εισαγωγή

Εισαγωγή στα Πληροφοριακά Συστήματα. Ενότητα 5: Λογισμικό - Software

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Εισαγωγή. Κεφάλαιο Γλωσσικοί Επεξεργαστές

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

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

ΚΕΦΑΛΑΙΟ 2. Τιμές, τύποι, μεταβλητές, λέξεις-κλειδιά, εντολές. 2.1 Εισαγωγή

ΚΕΦΑΛΑΙΟ VI. Εισαγωγή στον προγραμματισμό

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

Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Εισαγωγή στην Πληροφορική

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

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

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

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

Αναπτύσσοντας developer tools στην Αpple. Αργύριος Κυρτζίδης Προπτυχιακός φοιτητής ΗΜΜΥ

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

Transcript:

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

Βιβλιογραφία Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. 2nd edition. Addison-Wesley, 2007. http://dragonbook.stanford.edu/ Νικόλαος Παπασπύρου και Εμμανουήλ Σκορδαλάκης. Μεταγλωττιστές, Εκδόσεις Συμμετρία. Κ. Λάζος, Π. Κατσαρός, Ζ. Καραΐσκος. Μεταγλωττιστές Γλωσσών Προγραμματισμού: θεωρία και πράξη. Εκδόσεις Θεσαλλονίκη 2004. http://delab.csd.auth.gr/~katsaros/compilersbook.htm Χαροκόπειο Πανεπιστήμιο 2/21

Βιβλιογραφία Andrew W. Appel, Modern Compiler Implementation in Java. Cambridge University Press, 1998. http://www.cs.princeton.edu/~appel/modern Andrew W. Appel, Modern Compiler Implementation in C. Cambridge University Press, 1998. http://www.cs.princeton.edu/~appel/modern Steven S. Muchnick, Compiler Design and Implementation, Morgan Kaufmann Publishers, 1997. Allen I. Hollub, Compiler Design in C, Prentice Hall, 1990. Χαροκόπειο Πανεπιστήμιο 3/21

Μεταγλωττιστής Είναι ένα πρόγραμμα που διαβάζει ένα πρόγραμμα γραμμένο σε μία γλώσσα και το μετατρέπει σε ένα πρόγραμμα γραμμένο σε άλλη γλώσσα. source program compiler target program error messages Ο μεταγλωττιστής ενημερώνει τον χρήστη σχετικά με λάθη στο πρόγραμμα εισόδου. Χαροκόπειο Πανεπιστήμιο 4/21

Αριθμός Γλωσσών Προγραμματισμού Πολύ μεγάλος αριθμός γλωσσών εισόδου C/C++ Java Python Ruby Scala... Αντίστοιχα και ο αριθμός των δυνατών γλωσσών εξόδου είναι πολύ μεγάλος άλλη γλώσσα προγραμματισμού γλώσσα μηχανής ενός μικροεπεξεργαστή μέχρι και ενός υπερ-υπολογιστή Έχοντας κατηγοριοποιήσει αντίστοιχα τις τεχνικές μπορούμε αυτή την στιγμή να υποστηρίξουμε όλες αυτές τις γλώσσες. Χαροκόπειο Πανεπιστήμιο 5/21

Χρόνος Ανάπτυξης Μεταγλωττιστή Το 1950 η συγγραφή ενός μεταγλωττιστή θεωρούταν ένα πολύ δύσκολο εγχείρημα. Ο πρώτος μεταγλωττιστής Fortran χρειάστηκε 18 ανθρωπο-έτη για να υλοποιηθεί. Πλέον έχοντας συστηματοποιήσει αυτή την διαδικασία και τις τεχνικές υλοποίησης ενός μεταγλωττιστή έχουμε μειώσει αυτόν τον χρόνο. Έχοντας τα απαραίτητα εργαλεία, ένας απλός μεταγλωττιστής μπορεί να υλοποιηθεί ως μία φοιτητική εργασία στην διάρκεια ενός προπτυχιακού μαθήματος. Χαροκόπειο Πανεπιστήμιο 6/21

Εφαρμογές binary translation: μετατροπή εκτελέσιμου μεταξύ αρχιτεκτονικών hardware synthesis: περιγραφή υλικού με την χρήση γλωσσών περιγραφής υλικού, π.χ VHDL (Very high-speed integrated circuit Hardware Description Language) Databases: Ερωτήματα σε γλώσσα Structured Query Language (SQL) μεταγλωττίζονται σε χαμηλού επιπέδου εντολές για αναζήτηση σε βάσεις δεδομένων Προγραμματιστικά εργαλεία για έλεγχο λαθών Χαροκόπειο Πανεπιστήμιο 7/21

Μοντέλο Ανάλυσης-Σύνθεσης Μεταγλώττισης Υπάρχουν δύο μέρη στην μεταγλώττιση 1 Ανάλυση Χωρίζει το πηγαίο πρόγραμμα σε μέρη και παρέχει μια ενδιάμεση αναπαράσταση του. 2 Σύνθεση Κατά την σύνθεση παράγεται το αποτέλεσμα από την ενδιάμεση αναπαράσταση. Χαροκόπειο Πανεπιστήμιο 8/21

Οι φάσεις ενός μεταγλωττιστή Ένας μεταγλωττιστής λειτουργεί σε φάσεις, κάθε μια από τις οποίες μετασχηματίζει το αρχικό πρόγραμμα από μία αναπαράσταση σε μια άλλη. source program lexical analyzer syntax analyzer symbol-table manager semantic analyzer intermediate code generator error handler code optimizer code generator target program Χαροκόπειο Πανεπιστήμιο 9/21

Οι φάσεις ενός μεταγλωττιστή Οι πρώτες 3 φάσεις αποτελούν την ανάλυση. source program lexical analyzer syntax analyzer symbol-table manager semantic analyzer intermediate code generator error handler code optimizer code generator target program Χαροκόπειο Πανεπιστήμιο 9/21

Οι φάσεις ενός μεταγλωττιστή Οι υπόλοιπες 3 φάσεις αποτελούν την σύνθεση. source program lexical analyzer syntax analyzer symbol-table manager semantic analyzer intermediate code generator error handler code optimizer code generator target program Χαροκόπειο Πανεπιστήμιο 9/21

Οι φάσεις ενός μεταγλωττιστή Καθόλη την διάρκεια της μεταγλώττισης υπάρχει επικοινωνία με τον πίνακα συμβόλων, ο οποίος αποθηκεύει πληροφορίες σχετικά με τα διάφορα αναγνωριστικά (identifiers) του προγράμματος, κ.τ.λ. source program lexical analyzer syntax analyzer symbol-table manager semantic analyzer intermediate code generator error handler code optimizer code generator target program Χαροκόπειο Πανεπιστήμιο 9/21

Οι φάσεις ενός μεταγλωττιστή Αντίστοιχα η διαχείριση λαθών είναι μια διαδικασία που γίνεται σε όλες τις φάσεις με σκοπό την αναφορά αλλά και την δυνατότητα συνέχισης της μεταγλώττισης. source program lexical analyzer syntax analyzer symbol-table manager semantic analyzer intermediate code generator error handler code optimizer code generator target program Χαροκόπειο Πανεπιστήμιο 9/21

Οι φάσεις ενός μεταγλωττιστή παράδειγμα position := initial + rate * 60 lexical analyzer id1 := id2 + id3 * 60 Χαροκόπειο Πανεπιστήμιο 10/21

Οι φάσεις ενός μεταγλωττιστή παράδειγμα id1 := id2 + id3 * 60 syntax analyzer id1 := + id2 * id3 60 Χαροκόπειο Πανεπιστήμιο 10/21

Οι φάσεις ενός μεταγλωττιστή παράδειγμα id1 := + id2 * id3 60 semantic analyzer id1 := + id2 * id3 inttoreal 60 Χαροκόπειο Πανεπιστήμιο 10/21

Οι φάσεις ενός μεταγλωττιστή παράδειγμα id1 := + id2 * id3 inttoreal 60 intermediate code generator temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 Χαροκόπειο Πανεπιστήμιο 10/21

Οι φάσεις ενός μεταγλωττιστή παράδειγμα temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 code optimizer temp1 := id3 * 60.0 id1 := id2 + temp1 Χαροκόπειο Πανεπιστήμιο 10/21

Οι φάσεις ενός μεταγλωττιστή παράδειγμα temp1 := id3 * 60.0 id1 := id2 + temp1 code generator MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 Χαροκόπειο Πανεπιστήμιο 10/21

Το περιβάλλον ενός μεταγλωττιστή Για την παραγωγή εκτελέσιμου κώδικα, εκτός του μεταγλωττιστή, είναι απαραίτητη η συμβολή και άλλων προγραμμάτων. π.χ ένα πρόγραμμα είναι συνήθως χωρισμένο σε πολλά αρχεία ένα άλλο πρόγραμμα που λέγεται προεπεξεργαστής (preprocessor) είναι υπεύθυνο ώστε να συλλέξει τα διάφορα αρχεία Χαροκόπειο Πανεπιστήμιο 11/21

Το περιβάλλον ενός μεταγλωττιστή skeletal source program preprocessor source program compiler target assembly program assembler relocatable machine code loader/link-editor absolute machine code library, relocatable object files Χαροκόπειο Πανεπιστήμιο 12/21

Προεπεξεργαστής Παράγει είσοδο στον μεταγλωττιστή. Μπορεί να παρέχει τις εξής λειτουργίες: 1 Macro processing. Επιτρέπει στον χρήστη να ορίσει συντομογραφίες για μεγαλύτερες εκφράσεις. 2 File inclusion. Μας επιτρέπει να χρησιμοποιούμε αρχεία επικεφαλίδας. Πολλές φορές μπορούμε να προσθέσουμε χαρακτηριστικά σε μια γλώσσα μέσω του preprocessor. Για παράδειγμα στις αρχικές υλοποιήσεις της γλώσσας C++ η υποστήριξη των templates γινόταν με την χρήση του preprocessor. Χαροκόπειο Πανεπιστήμιο 13/21

Assembler Μερικοί μεταγλωττιστές παράγουν κώδικα assembly που μέσω ενός assembler μετατρέπεται σε κώδικα μηχανής. Άλλοι μεταγλωττιστές παράγουν απευθείας μετατοπίσιμο (relocatable) κώδικα μηχανής που μπορεί να δωθεί απευθείας στο πρόγραμμα σύνδεσης (loader/link-editor). Χαροκόπειο Πανεπιστήμιο 14/21

Assembly Code Ο κώδικας assembly είναι στην ουσία κώδικας μηχανής όπου δίνουμε ονόματα στις λειτουργίες (αντί για opcodes) ονόματα στις διευθύνσεις μνήμης. π.χ MOV a, R1 ADD #2, R1 MOV R1, b είναι ισοδύναμο με b = a + 2 ; Χαροκόπειο Πανεπιστήμιο 15/21

Two-Pass Assembly Ένας απλός assembler κάνει δύο περάσματα πάνω από τον κώδικα. 1 Στο πρώτο πέρασμα διαβάζει τις εντολές και δημιουργεί έναν πίνακα συμβόλων για κάθε αναγνωριστικό που χρειάζεται στην μνήμη. 2 Στο δεύτερο πέρασμα μετατρέπει όλες τις εντολές σε κώδικα μηχανής. Καθώς γράφει τον κώδικα μηχανής φροντίζει να προσθέσει και την πληροφορία σχετικά με τις εντολές που είναι μετατοπίσιμες στην μνήμη. Μετατοπίσιμες εντολές είναι αυτές που αναφέρονται σε διευθύνσεις μνήμης που είναι σχετικές μετατοπίσεις της διεύθυνσης L που θα φορτωθεί το πρόγραμμα την ώρα της εκτέλεσης του. Χαροκόπειο Πανεπιστήμιο 16/21

Assembly Σύνδεσμοι για περαιτέρω πληροφορίες για προγραμματιστές: http: //www.faqs.org/docs/linux-howto/assembly-howto.html http://asm.sourceforge.net/ http://sources.redhat.com/binutils/ http://www.nasm.us/ Χαροκόπειο Πανεπιστήμιο 17/21

Loader/Linker Η φόρτωση ενός προγράμματος γίνεται αλλάζοντας όλες τις μετατοπίσιμες διευθύνσεις ανάλογα με την διεύθυνση όπου βρίσκεται το πρόγραμμα. Το πρόγραμμα σύνδεσης είναι υπεύθυνο για να μπορούμε να δημιουργήσουμε ένα πρόγραμμα από πολλά αρχεία που περιέχουν μετατοπίσιμο κώδικα μηχανής. Χαροκόπειο Πανεπιστήμιο 18/21

Άλλα Θέματα Front-end & Back-end Συνήθως χωρίζουμε έναν μεταγλωττιστή σε δύο μέρη, ένα που αφορά την γλώσσα και ένα που αφορά την παραγωγή τελικού κώδικα για την μηχανή. Με αυτό τον τρόπο είναι πολύ εύκολο να φτιάξουμε μεταγλωττιστές και για άλλες μηχανές απλά αλλάζοντας μόνο το κομμάτι που αφορά το back-end. Χαροκόπειο Πανεπιστήμιο 19/21

Άλλα Θέματα Αριθμός Περασμάτων Ένας μεταγλωττιστής μπορεί να λειτουργήσει σε ένα ή σε περισσότερα περάσματα της εισόδου. Θα δούμε τι ζητήματα προκύπτουν σε επόμενα μαθήματα. Σε γενικές γραμμές μπορούμε να πούμε πως οι περισσότεροι σύγχρονοι μεταγλωττιστές είναι περισσότερων περασμάτων, αφού οι σύγχρονοι υπολογιστές έχουν άφθονη μνήμη. Χαροκόπειο Πανεπιστήμιο 20/21

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