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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τι είναι ο προγραμματισμός
Advertisements

Προγραμματισμοσ υπολογιστη
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Λογισμικό Συστήματος Κλειώ Σγουροπούλου.
Κεφάλαιο 3 ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
Τι είναι ο υπολογιστής; Τι είναι ο προγραμματισμός
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
Ενότητα 1: Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
ΜΑΘ-3122/106 Προγραμματισμός
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΗ
Εισαγωγικές Έννοιες Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
ΕΚΠΑΙΔΕΥΤΙΚΗ ΠΡΟΣΕΓΓΙΣΗ ΤΗΣ ΕΥΡΥΤΕΡΗΣ ΕΝΝΟΙΑΣ ΤΟΥ ΑΛΓΟΡΙΘΜΟΥ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΔΙΑΦΟΡΕΤΙΚΟ ΛΟΓΙΣΜΙΚΟ ΓΙΑ ΚΑΘΕ ΠΤΥΧΗ ΤΟΥ Κάππας Κων/νος Επιμορφωτής ΤΠΕ -
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
ΕΙΣΑΓΩΓΗ ΜΑΘΗΜΑ 1.
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Εαρινό Εξάμηνο 2002 Κ. Μουρλάς, Λέκτορας Σημείωση: Οι διαφάνειες αυτές βασίζονται κατά το μεγαλύτερο μέρος τους.
Γεωργαλλίδης Δημήτρης Καθηγητής Πληροφορικής
Ίδιες αρχές λειτουργίας
Εισαγωγή στον προγραμματισμό
Κεφάλαιο 3 ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
1 Οργάνωση και Αρχιτεκτονική Υπολογιστών Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Οργάνωση και Αρχιτεκτονική.
Κεφάλαιο 6 -Περιβάλλοντα Ανάπτυξης Εφαρμογών
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό Φυσικές και τεχνητές γλώσσες.
Λογισμικό (Software).
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Π. ΚΑΤΣΑΡΟΣ Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τμ. Πληροφορικής,
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής,
Καθηγητής: Σπύρος Ξουργιάς1 Η Έννοια του Προγράμματος Ακριβής προσδιορισμός προβλήματος Ακριβής προσδιορισμός προβλήματος Ανάπτυξη αντίστοιχου αλγορίθμου.
Για τη διεκπεραίωση ενός προβλήματος πρέπει να ακολουθηθεί η εξής διαδικασία:  να γραφεί ο αλγόριθμος να συνταχθεί το πρόγραμμα σε γλώσσα υψηλού επιπέδου.
1.5 Γλώσσες Προγραμματισμού
Διδακτική της Πληροφορικής ΗΥ302 Εργασία :Παρουσίαση σχολικού βιβλίου Γ’ Λυκείου Τεχνολογικής Κατεύθυνσης «Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον»
ΛΑΔΑΚΑΚΟΣ ΘΑΛΗΣ Α.Μ ΔΙΑΧΕΙΡΗΣΗ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού Προπτυχιακό.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 9: Παραγωγή Ενδιάμεσου Κώδικα (Ενδιάμεσες Γλώσσες) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά.
Περιεχόμενα Μαθήματος
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Κ. ΛΑΖΟΣ - Π. ΚΑΤΣΑΡΟΣ Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τμ.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 13: Επαναληπτικό μάθημα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Το περιεχόμενο του μαθήματος διατίθεται.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
Προγραμματισμός Γιατι γραφουμε προγραμματα (προηγ. διαλεξη)
Από την ιδέα μέχρι το λογισμικό. Ξεκινώντας από το πρόβλημα...
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 11: Βελτιστοποίηση Ενδιάμεσου Κώδικα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
1 Οργάνωση και Αρχιτεκτονική Υπολογιστών Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Οργάνωση και Αρχιτεκτονική.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ -150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό
1 Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Κεφάλαιο 6 Παπαγιάννη Νάσια Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών ΕΜΠ.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Εισαγωγή στον προγραμματισμό Μέρος 3 ο Προγραμματιστικά περιβάλλοντα § 6.7.
Πληροφορική 2 Γλώσσες Προγραμματισμού 1. Γλώσσες προγραμματσιμού  Επιτρέπουν την κωδικοποίηση των αλγορίθμων  Η εκτέλεση ενός προγράμματος θα πρέπει.
Εισαγωγή στη C# Μαρίνος Θεμιστοκλέους Ανδρούτσου 150 Γραφείο 206 Τηλ Ώρες Γραφείου: Τετάρτη 5-6 μμ.
ΕΙΔΗ, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 7 © Βελώνης Γεώργιος.
ΕΝΟΤΗΤΑ 1. ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΚΕΦΑΛΑΙΟ 1.1 ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 1.
Η προγραμματιστική δραστηριότητα ως αντικείμενο εκπαίδευσης
Ενότητα 3 : Γλώσσες προγραμματισμού Δρ. Γκόγκος Χρήστος
Πρόγραμμα Προπτυχιακών Σπουδών Ροή Λ: Λογισμικό
Κεφάλαιο 4 :: Σημασιολογική Ανάλυση
Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Χειμερινό Εξάμηνο (Ε') - Κωδ. Μαθήματος:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ Ανάπτυξη Εφαρμογών για Φορητές Συσκευές
2ο ΓΥΜΝΑΣΙΟ ΣΗΤΕΙΑΣ - ΤΑΞΗ Γ'
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΗ
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Κεφάλαιο 3 ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΥΠΟΔΕΙΓΜΑΤΑ  Προγραμματιστικό Υπόδειγμα: Είναι ένα πρότυπο ανάπτυξης προγραμμάτων, δηλ. μια καθορισμένη μεθοδολογία με βάση την οποία.
ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ Γυμνασίου Α΄ Τρίμηνο
ΣΥΓΧΡΟΝΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Τρίτη Έκδοση ANDREW S
Μεταγράφημα παρουσίασης:

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

Δομή ▪Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου ▪Μεταγλωττιστές Δομή Φάσεις ενός μεταγλωττιστή Απαιτήσεις Οργάνωση σε περάσματα

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

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

Η Υπολογιστική Μηχανή ▪Σύγχρονοι υπολογιστές βασίζονται στην αρχιτεκτονική von Neumann. ▪Η προσέγγιση στους υπολογισμούς βασίζεται στην έννοια των μεταβλητών που μεταφέρονται από την μνήμη στην μονάδα.

Γλώσσα Μηχανής ▪H Γλώσσα Μηχανής (machine language) είναι άμεσα εκτελέσιμη από την υπολογιστική μηχανή. Αλλά είναι πλήρως μη-αναγνώσιμη από (συνηθισμένους) ανθρώπους. ▪Πχ ▪Τι κάνει ο παραπάνω κώδικας?

Γλώσσα Assembly ▪Ουσιαστικά αποτελεί αντικατάσταση των κωδικών με συμβολικά ονόματα (συμβολομεταφραστές-assemblers). Σημαντική βελτίωση της αναγνωσιμότητας. ▪Όμως Περίπλοκος “κώδικας” “Δεμένος” με την συγκεκριμένη υπολογιστική μηχανή

Παράδειγμα 1Μ[0]:=0 2read(M[1]) 3if M[1] >= 0 then goto 5 4goto 7 5M[3]:=M[0] – M[1] 6if M[3] >= 0 goto 16 7writeln(M[1]) 8read(M[2]) 9M[3]:=M[2]-M[1] 10if M[3]>=0 goto 12 11goto 14 12M[3]:=M[1]-M[2] 13if M[3]>=0 goto 8 14M[1]:=M[2]-M[0] 15goto 3 16halt inpu t output memory

Εξέλιξη Γλωσσών Προγραμματισμού ▪Ανάγκη για υποστήριξη όλο και πολυπλοκότερων υπολογισμών. ▪Βασική “εργαλείο” χειρισμού πολυπλοκότητας είναι η αφαίρεση: “Ικανότητα ορισμού και χρήσης πολύπλοκων δομών και εργασιών ώστε να αποκρύπτεται πλήθος λεπτομερειών (Sebesta 2002).”

Γλώσσα Προγραμματισμού ▪Μια γλώσσα προγραμματισμού είναι ένας μηχανισμός αφαίρεσης. Επιτρέπει σε ένα προγραμματιστή να προδιαγράψει έναν υπολογισμό (computation) σε ένα επίπεδο αφαίρεσης, και να αφήσει σε ένα πρόγραμμα (μεταγλωττιστή, διερμηνευτή, κλπ) να υλοποιήσει τις συγκεκριμένες προδιαγραφές στην λεπτομερή μορφή που απαιτείται για την εκτέλεση από ένα υπολογιστή'' (Ben-Ari).

Επίπεδα Αφαίρεσης (1/3) ▪Αφαίρεση διαδικασιών (procedural abstraction) Η χρήση υπο-προγραμμάτων(sub-programs) για την “κατασκευή” μεγαλύτερων προγραμμάτων Γλώσσες προστακτικού (imperative) ή δομημένου/διαδικαστικού (structured/procedural) ▪Αφαίρεση δεδομένων (data abstraction) “Νεώτερες” αντικειμενοστραφείς γλώσσες προγραμματισμού. ▪Στενή Σύνδεση με το μοντέλο von Neuman. Αυστηρή ακολουθία εντολών για τον εκάστοτε υπολογισμό.

Επίπεδα Αφαίρεσης (2/3) ▪Μη-προστακτικές (non-imperative) γλώσσες ▪Μαθηματική έκφραση προδιαγραφών υπολογισμού ▪Λογική (logic) Λογικός Προγραμματισμός (Logic Programming), πχ Prolog ▪Μαθηματικές συναρτήσεις (functions). Συναρτησιακός Προγραμματισμός (Functional programming) πχ LISP

Επίπεδα Αφαίρεσης (3/3) ▪Εκτέλεση ενός μη-προστακτικού προγράμματος είναι η επίλυση του μαθηματικού προβλήματος που περιγράφεται από το αυτό. ▪Η διαδικασία επίλυσης όμως δεν ορίζεται από τον χρήστη αλλά αποτελεί μέρος του μηχανισμού εκτέλεσης της γλώσσας. ▪Δηλωτικός προγραμματισμός: ”Ο προγραμματιστής δεν περιγράφει το πώς θα επιλυθεί, αλλά το ποιο είναι το προς επίλυση πρόβλημα.”

Γλώσσες Προγραμματισμού ▪Πρώτης Γενιάς - Γλώσσα Μηχανής ▪Δεύτερης Γενιάς - Γλώσσες assembly (χρήση συμβόλων, μετατροπή σε κώδικα από ειδικά εργαλεία ) ▪Τρίτης Γενιάς - Διαδικαστικές και Αντικειμενοστραφείς Γλώσσες C, Pascal, C++, JAVA ▪Τέταρτης Γενιάς - Γλώσσες κοντά στη φυσική γλώσσα, προσπέλαση δεδομένων πχ. SQL, ▪Πέμπτης Γενιάς - Κυρίως γλώσσες δηλωτικές που αφορούν την Τεχνητή Νοημοσύνη, πχ.Prolog, Lisp

Εκτέλεση υπολογισμών προδιαγεγραμμένων σε ΓΠΥΕ ▪Οι γλώσσες προγραμματισμού υψηλού επιπέδου (ΓΠΥΕ) δεν είναι άμεσα εκτελέσιμες στις σημερινές μηχανές. Προσπάθειες για εξειδικευμένο υλικό δεν απέδωσαν (LISP machines, Prolog Machines) ▪Τρεις προσεγγίσεις στην εκτέλεση: Μεταγλωττιστές (Compilers), Διερμηνευτές (Interpreters). Μεταγλώττιση σε εικονικές Μηχανές (Virtual Machines)

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

Διερμηνευτές ▪Διευρμηνευτής είναι το λογισμικό, που φαίνεται να μπορεί να εκτελέσει απευθείας τη γλώσσα υψηλού επιπέδου. Διερμηνευτής (Interpreter) Αρχικό Πρόγραμμα Δεδομέν α Αποτέλεσμ α Σφάλματ α

Εικονικές Μηχανές ▪Συνδυάζουν τις τεχνικές των μεταγλωττιστών και των διερμηνευτών. Μεταφραστής (Translator) Αρχικό Πρόγραμμα Ενδιάμεσο Πρόγραμμα Δεδομέν α Αποτέλεσμ α Σφάλματ α Εικονική Μηχανή (Virtual Machine)

Μεταγλωττιστές

▪Τα τρία ακόλουθα χαρακτηρίζουν πλήρως ένα μεταγλωττιστή: Αρχική Γλώσσα L A (source language) Τελική Γλώσσα L T (target language) Γλώσσα Υλοποίησης L Y (implementation language) Μεταγλωττιστής (Compiler) Αρχικό Πρόγραμμα Τελικό Πρόγραμμα AT Y

Είδη Μεταγλωττιστών ▪Απλοί Αρχική Γλώσσα μια γλώσσα υψηλού επιπέδου και τελική (συνήθως) μια γλώσσα μηχανής. ▪Αντίστροφοι (decompilers) Γλώσσα μηχανής σε μια γλώσσα υψηλού επιπέδου. ▪Μετα-μεταγλωττιστές (meta-compilers) Υλοποίηση μεταγλωττιστών. Προσαρμοζόμενοι μεταγλωττιστές Μετα-μεταγλωττιστές γεννήτορες

Ειδικές Περιπτώσεις ▪Προεπεξεργαστές Υψηλού επιπέδου αρχική και τελική γλώσσα ▪Συμβολομεταφραστές Αρχική γλώσσα assembly τελική γλώσσα γλώσσα μηχανής ▪Γεννήτορες Προγραμμάτων Προδιαγραφές σε μια τυποκρατική γλώσσα και τελική γλώσσα μια γλώσσα υψηλού επιπέδου.

Πλήρης Υλοποίηση μιας Γλώσσας Υψηλού Επιπέδου ▪Συνήθως υπάρχει ένα πλήθος εργαλείων τα οποία συνεργάζονται με τον μεταγλωττιστή για την ΠΛΗΡΗ υλοποίηση μιας γλώσσας υψηλού επιπέδου. Προπεξεργαστής, συμβολομεταφραστής Βιβλιοθήκες χρόνου εκτέλεσης (run-time libraries) Συνδετές (linkers) Φορτωτές (loaders) Εκδότες Προγραμμάτων (program editors) Εντοπιστές σφαλμάτων (debuggers) Στατιστικοί Αναλυτές (profilers)

Λειτουργία Μεταγλωττιστή ΓΠΥΕ Πηγαίο Πρόγραμμα Μεταγλωττιστής (Compiler) Προεπεξεργαστής (Preprocessor) Συμβολομεταφραστή ς (Assembler) Συνδετής (Linker) Τροποποιημένο Πηγαίο Πρόγραμμα Πρόγραμμα σε Συμβολική Μορφή Ασύνδετο Πρόγραμμα σε γλώσσα Μηχανής Συνδεδεμένο Εκτελέσιμο Πρόγραμμα

Δομή ενός μεταγλωττιστή ▪Εμπρόσθιο Μέρος (front-end) Ανάλυση. Εξάγονται τα στοιχεία του αρχικού προγράμματος. Συντακτικός και σημασιολογικός έλεγχος. Παραγωγή ενδιάμεσου κώδικα. ▪Οπίσθιο Μέρος (back-end) Σύνθεση. Εξαγωγή τελικού κώδικα από τον ενδιάμεσο κώδικα. ▪Διευκόλυνση κατασκευής μεταγλωττιστών για πολλές αρχικές και πολλές τελικές γλώσσες.

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

Λεκτική Ανάλυση ▪Εύρεση λεκτικών μονάδων (lexemes) από την ακολουθία χαρακτήρων του προγράμματος. Για κάθε λεκτική μονάδα παράγεται (συνήθως) μια δυάδα της μορφής Ενημέρωση πίνακα συμβόλων (όχι πάντα) ▪Παράδειγμα position = initial + rate * 60

Συντακτική Ανάλυση ▪Ομαδοποίηση λεκτικών μονάδων βάση σύνταξης της γλώσσας. Εισαγωγή λεκτικών στον πίνακα συμβόλων ▪Παραγωγή δένδρου σύνταξης (syntax tree) Μετέπειτα παραγωγή ενδιάμεσου κώδικα.

Σημασιολογική Ανάλυση ▪Έλεγχος σημασιολογικών σφαλμάτων. Έλεγχος τύπων (type checking) Μετατροπή τύπων ▪Παραγωγή τροποποιημένου δένδρου ▪Αποθήκευση πληροφορίας στον Πίνακα Συμβόλων. inttofloat

Παραγωγή Ενδιάμεσου Κώδικα ▪Ενδιάμεσος κώδικας Χαμηλού επιπέδου “Καθαρός” διαχωρισμός μεταξύ εμπρόσθιου και οπίσθιου μέρους Βελτιστοποίηση ▪ Ενδιάμεσες Γλώσσες Τετράδες της μορφής op arg1, arg2, arg3 ▫ z Επιθεματικός Κώδικας (postfix code) ▫ z23+= Αφηρημένα συντακτικά δένδρα

Παραγωγή Ενδιάμεσου Κώδικα ▪inttofloat,60,_,t1 ▪*,id3,t1,t2 ▪+,id2, t2,t3 ▪=,t3,_,id1 inttofloat

Βελτιστοποίηση ▪Εφαρμογή μετασχηματισμών για παραγωγή περισσότερο αποδοτικού κώδικα. ▪Ανεξάρτητες από την υπολογιστική μηχανή ▪Εξαρτώμενες από την υπολογιστική μηχανή. ▪Δύο φάσεις βελτιστοποίησης Ενδιάμεσου Κώδικα Τελικού Κώδικα

Παράδειγμα inttofloat,60,_,t1 *,id3,t1,t2 +,id2, t2,t3 =,t3,_,id1 *,id3, 60.0, t2 +,id2, t2,t3 =,t3,_,id1 *,id3, 60.0, t2 +,id2, t2,id1

Παραγωγή Τελικού Κώδικα ▪Παραγωγή Τελικού Κώδικα από τον Ενδιάμεσο. Επιλογή θέσεων μνήμης ή καταχωρητών για τις μεταβλητές. Επιλογή καταχωρητών για τις πράξεις Μετάφραση εντολών στην τελική γλώσσα *,id3, 60.0, t2 +,id2, t2,id1 LDF R2, id3 MUL R2,R2,#60 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1

Σφάλματα ▪Λεκτικά Σφάλματα ▪Συντακτικά Σφάλματα ▪Σημασιολογικά Σφάλματα ▪Σφάλματα Εκτέλεσης ▪Λογικά Σφάλματα

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

Οργάνωση σε Περάσματα ▪Πέρασμα = ομαδοποίηση μιας ή περισσότερων φάσεων. ▪Μεταγλωττιστές ανάλογα με την αρχική ή τελική γλώσσα υλοποιούνται σε ένα ή περισσότερα περάσματα.

Υλοποίηση Μεταγλωττιστών ▪Αρχικοί μεταγλωττιστές υλοποιήθηκαν σε γλώσσα μηχανής. ▪Γλώσσες υλοποίησης οποιαδήποτε γλώσσα υψηλού επιπέδου (Pascal, C, C++, JAVA) ▪Προγράμματα γεννήτορες για μεταγλωττιστές, λεκτικούς αναλυτές, συντακτικούς αναλυτές. ▪Συνήθως χρησιμοποιείται συνδυασμός μεθόδων. Λεκτική-Συντακτική ανάλυση με την χρήση προγραμμάτων γεννητόρων. Παραγωγή κώδικα με πρόγραμμα σε γλώσσα υψηλού επιπέδου.

Δομή ▪Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου ▪Μεταγλωττιστές Δομή Φάσεις ενός μεταγλωττιστή Απαιτήσεις Οργάνωση σε περάσματα