Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεἌρης Μάγκας Τροποποιήθηκε πριν 8 χρόνια
1
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου
2
Δομή ▪Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου ▪Μεταγλωττιστές Δομή Φάσεις ενός μεταγλωττιστή Απαιτήσεις Οργάνωση σε περάσματα
3
Γλώσσες Προγραμματισμού
4
▪Γλώσσα προγραμματισμού: Συμβολική περιγραφή υπολογισμών (computations). Προδιαγραφή, οργάνωση και συλλογιστική υπολογισμών. ▪Πρόγραμμα = συμβολική περιγραφή ενός υπολογισμού σε κάποια γλώσσα. ▪Μια γλώσσα προγραμματισμού έχει σαν στόχο να επιτρέπει την εύκολη περιγραφή των υπολογισμών, να εκμεταλλεύεται αποδοτικά την υπολογιστική ισχύ των μηχανών. Ευκολία προέχει της απόδοσης!
5
Η Υπολογιστική Μηχανή ▪Σύγχρονοι υπολογιστές βασίζονται στην αρχιτεκτονική von Neumann. ▪Η προσέγγιση στους υπολογισμούς βασίζεται στην έννοια των μεταβλητών που μεταφέρονται από την μνήμη στην μονάδα.
6
Γλώσσα Μηχανής ▪H Γλώσσα Μηχανής (machine language) είναι άμεσα εκτελέσιμη από την υπολογιστική μηχανή. Αλλά είναι πλήρως μη-αναγνώσιμη από (συνηθισμένους) ανθρώπους. ▪Πχ. 00000010101111001010 00000010111111001000 00000011001110101000 ▪Τι κάνει ο παραπάνω κώδικας?
7
Γλώσσα Assembly ▪Ουσιαστικά αποτελεί αντικατάσταση των κωδικών με συμβολικά ονόματα (συμβολομεταφραστές-assemblers). Σημαντική βελτίωση της αναγνωσιμότητας. ▪Όμως Περίπλοκος “κώδικας” “Δεμένος” με την συγκεκριμένη υπολογιστική μηχανή
8
Παράδειγμα 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
9
Εξέλιξη Γλωσσών Προγραμματισμού ▪Ανάγκη για υποστήριξη όλο και πολυπλοκότερων υπολογισμών. ▪Βασική “εργαλείο” χειρισμού πολυπλοκότητας είναι η αφαίρεση: “Ικανότητα ορισμού και χρήσης πολύπλοκων δομών και εργασιών ώστε να αποκρύπτεται πλήθος λεπτομερειών (Sebesta 2002).”
10
Γλώσσα Προγραμματισμού ▪Μια γλώσσα προγραμματισμού είναι ένας μηχανισμός αφαίρεσης. Επιτρέπει σε ένα προγραμματιστή να προδιαγράψει έναν υπολογισμό (computation) σε ένα επίπεδο αφαίρεσης, και να αφήσει σε ένα πρόγραμμα (μεταγλωττιστή, διερμηνευτή, κλπ) να υλοποιήσει τις συγκεκριμένες προδιαγραφές στην λεπτομερή μορφή που απαιτείται για την εκτέλεση από ένα υπολογιστή'' (Ben-Ari).
11
Επίπεδα Αφαίρεσης (1/3) ▪Αφαίρεση διαδικασιών (procedural abstraction) Η χρήση υπο-προγραμμάτων(sub-programs) για την “κατασκευή” μεγαλύτερων προγραμμάτων Γλώσσες προστακτικού (imperative) ή δομημένου/διαδικαστικού (structured/procedural) ▪Αφαίρεση δεδομένων (data abstraction) “Νεώτερες” αντικειμενοστραφείς γλώσσες προγραμματισμού. ▪Στενή Σύνδεση με το μοντέλο von Neuman. Αυστηρή ακολουθία εντολών για τον εκάστοτε υπολογισμό.
12
Επίπεδα Αφαίρεσης (2/3) ▪Μη-προστακτικές (non-imperative) γλώσσες ▪Μαθηματική έκφραση προδιαγραφών υπολογισμού ▪Λογική (logic) Λογικός Προγραμματισμός (Logic Programming), πχ Prolog ▪Μαθηματικές συναρτήσεις (functions). Συναρτησιακός Προγραμματισμός (Functional programming) πχ LISP
13
Επίπεδα Αφαίρεσης (3/3) ▪Εκτέλεση ενός μη-προστακτικού προγράμματος είναι η επίλυση του μαθηματικού προβλήματος που περιγράφεται από το αυτό. ▪Η διαδικασία επίλυσης όμως δεν ορίζεται από τον χρήστη αλλά αποτελεί μέρος του μηχανισμού εκτέλεσης της γλώσσας. ▪Δηλωτικός προγραμματισμός: ”Ο προγραμματιστής δεν περιγράφει το πώς θα επιλυθεί, αλλά το ποιο είναι το προς επίλυση πρόβλημα.”
14
Γλώσσες Προγραμματισμού ▪Πρώτης Γενιάς - Γλώσσα Μηχανής ▪Δεύτερης Γενιάς - Γλώσσες assembly (χρήση συμβόλων, μετατροπή σε κώδικα από ειδικά εργαλεία ) ▪Τρίτης Γενιάς - Διαδικαστικές και Αντικειμενοστραφείς Γλώσσες C, Pascal, C++, JAVA ▪Τέταρτης Γενιάς - Γλώσσες κοντά στη φυσική γλώσσα, προσπέλαση δεδομένων πχ. SQL, ▪Πέμπτης Γενιάς - Κυρίως γλώσσες δηλωτικές που αφορούν την Τεχνητή Νοημοσύνη, πχ.Prolog, Lisp
15
Εκτέλεση υπολογισμών προδιαγεγραμμένων σε ΓΠΥΕ ▪Οι γλώσσες προγραμματισμού υψηλού επιπέδου (ΓΠΥΕ) δεν είναι άμεσα εκτελέσιμες στις σημερινές μηχανές. Προσπάθειες για εξειδικευμένο υλικό δεν απέδωσαν (LISP machines, Prolog Machines) ▪Τρεις προσεγγίσεις στην εκτέλεση: Μεταγλωττιστές (Compilers), Διερμηνευτές (Interpreters). Μεταγλώττιση σε εικονικές Μηχανές (Virtual Machines)
16
Μεταγλωττιστές ▪Μεταγλωττιστής είναι το λογισμικό, που ως σκοπό έχει τη μετάφραση ενός προγράμματος από μία γλώσσα σε μία άλλη. Αν το τελικό πρόγραμμα είναι εκτελέσιμο από την μηχανή τότε ισχύει το ακόλουθο σχήμα: Μεταγλωττιστής (Compiler) Αρχικό Πρόγραμμα Τελικό Πρόγραμμα Δεδομέν α Αποτέλεσμ α Σφάλματ α
17
Διερμηνευτές ▪Διευρμηνευτής είναι το λογισμικό, που φαίνεται να μπορεί να εκτελέσει απευθείας τη γλώσσα υψηλού επιπέδου. Διερμηνευτής (Interpreter) Αρχικό Πρόγραμμα Δεδομέν α Αποτέλεσμ α Σφάλματ α
18
Εικονικές Μηχανές ▪Συνδυάζουν τις τεχνικές των μεταγλωττιστών και των διερμηνευτών. Μεταφραστής (Translator) Αρχικό Πρόγραμμα Ενδιάμεσο Πρόγραμμα Δεδομέν α Αποτέλεσμ α Σφάλματ α Εικονική Μηχανή (Virtual Machine)
19
Μεταγλωττιστές
20
▪Τα τρία ακόλουθα χαρακτηρίζουν πλήρως ένα μεταγλωττιστή: Αρχική Γλώσσα L A (source language) Τελική Γλώσσα L T (target language) Γλώσσα Υλοποίησης L Y (implementation language) Μεταγλωττιστής (Compiler) Αρχικό Πρόγραμμα Τελικό Πρόγραμμα AT Y
21
Είδη Μεταγλωττιστών ▪Απλοί Αρχική Γλώσσα μια γλώσσα υψηλού επιπέδου και τελική (συνήθως) μια γλώσσα μηχανής. ▪Αντίστροφοι (decompilers) Γλώσσα μηχανής σε μια γλώσσα υψηλού επιπέδου. ▪Μετα-μεταγλωττιστές (meta-compilers) Υλοποίηση μεταγλωττιστών. Προσαρμοζόμενοι μεταγλωττιστές Μετα-μεταγλωττιστές γεννήτορες
22
Ειδικές Περιπτώσεις ▪Προεπεξεργαστές Υψηλού επιπέδου αρχική και τελική γλώσσα ▪Συμβολομεταφραστές Αρχική γλώσσα assembly τελική γλώσσα γλώσσα μηχανής ▪Γεννήτορες Προγραμμάτων Προδιαγραφές σε μια τυποκρατική γλώσσα και τελική γλώσσα μια γλώσσα υψηλού επιπέδου.
23
Πλήρης Υλοποίηση μιας Γλώσσας Υψηλού Επιπέδου ▪Συνήθως υπάρχει ένα πλήθος εργαλείων τα οποία συνεργάζονται με τον μεταγλωττιστή για την ΠΛΗΡΗ υλοποίηση μιας γλώσσας υψηλού επιπέδου. Προπεξεργαστής, συμβολομεταφραστής Βιβλιοθήκες χρόνου εκτέλεσης (run-time libraries) Συνδετές (linkers) Φορτωτές (loaders) Εκδότες Προγραμμάτων (program editors) Εντοπιστές σφαλμάτων (debuggers) Στατιστικοί Αναλυτές (profilers)
24
Λειτουργία Μεταγλωττιστή ΓΠΥΕ Πηγαίο Πρόγραμμα Μεταγλωττιστής (Compiler) Προεπεξεργαστής (Preprocessor) Συμβολομεταφραστή ς (Assembler) Συνδετής (Linker) Τροποποιημένο Πηγαίο Πρόγραμμα Πρόγραμμα σε Συμβολική Μορφή Ασύνδετο Πρόγραμμα σε γλώσσα Μηχανής Συνδεδεμένο Εκτελέσιμο Πρόγραμμα
25
Δομή ενός μεταγλωττιστή ▪Εμπρόσθιο Μέρος (front-end) Ανάλυση. Εξάγονται τα στοιχεία του αρχικού προγράμματος. Συντακτικός και σημασιολογικός έλεγχος. Παραγωγή ενδιάμεσου κώδικα. ▪Οπίσθιο Μέρος (back-end) Σύνθεση. Εξαγωγή τελικού κώδικα από τον ενδιάμεσο κώδικα. ▪Διευκόλυνση κατασκευής μεταγλωττιστών για πολλές αρχικές και πολλές τελικές γλώσσες.
26
Φάσεις Μεταγλώττισης Συντακτική Ανάλυση Λεκτική Ανάλυση Σημασιολογική Ανάλυση Παραγωγή Ενδιάμεσου Κώδικα Βελτιστοποίηση Ενδιάμεσου Κώδικα Βελτιστοποίηση Τελικού Κώδικα Παραγωγή Τελικού Κώδικα Πίνακας Συμβόλω ν Χειριστής Σφαλμάτω ν Αρχικό Πρόγραμμα λεκτικές μονάδες συντακτικό δένδρο ενδιάμεσος κώδικας τελικός κώδικας Τελικό Πρόγραμμα
27
Λεκτική Ανάλυση ▪Εύρεση λεκτικών μονάδων (lexemes) από την ακολουθία χαρακτήρων του προγράμματος. Για κάθε λεκτική μονάδα παράγεται (συνήθως) μια δυάδα της μορφής Ενημέρωση πίνακα συμβόλων (όχι πάντα) ▪Παράδειγμα position = initial + rate * 60
28
Συντακτική Ανάλυση ▪Ομαδοποίηση λεκτικών μονάδων βάση σύνταξης της γλώσσας. Εισαγωγή λεκτικών στον πίνακα συμβόλων ▪Παραγωγή δένδρου σύνταξης (syntax tree) Μετέπειτα παραγωγή ενδιάμεσου κώδικα.
29
Σημασιολογική Ανάλυση ▪Έλεγχος σημασιολογικών σφαλμάτων. Έλεγχος τύπων (type checking) Μετατροπή τύπων ▪Παραγωγή τροποποιημένου δένδρου ▪Αποθήκευση πληροφορίας στον Πίνακα Συμβόλων. inttofloat
30
Παραγωγή Ενδιάμεσου Κώδικα ▪Ενδιάμεσος κώδικας Χαμηλού επιπέδου “Καθαρός” διαχωρισμός μεταξύ εμπρόσθιου και οπίσθιου μέρους Βελτιστοποίηση ▪ Ενδιάμεσες Γλώσσες Τετράδες της μορφής op arg1, arg2, arg3 ▫ + 2 3 z Επιθεματικός Κώδικας (postfix code) ▫ z23+= Αφηρημένα συντακτικά δένδρα
31
Παραγωγή Ενδιάμεσου Κώδικα ▪inttofloat,60,_,t1 ▪*,id3,t1,t2 ▪+,id2, t2,t3 ▪=,t3,_,id1 inttofloat
32
Βελτιστοποίηση ▪Εφαρμογή μετασχηματισμών για παραγωγή περισσότερο αποδοτικού κώδικα. ▪Ανεξάρτητες από την υπολογιστική μηχανή ▪Εξαρτώμενες από την υπολογιστική μηχανή. ▪Δύο φάσεις βελτιστοποίησης Ενδιάμεσου Κώδικα Τελικού Κώδικα
33
Παράδειγμα 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
34
Παραγωγή Τελικού Κώδικα ▪Παραγωγή Τελικού Κώδικα από τον Ενδιάμεσο. Επιλογή θέσεων μνήμης ή καταχωρητών για τις μεταβλητές. Επιλογή καταχωρητών για τις πράξεις Μετάφραση εντολών στην τελική γλώσσα *,id3, 60.0, t2 +,id2, t2,id1 LDF R2, id3 MUL R2,R2,#60 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1
35
Σφάλματα ▪Λεκτικά Σφάλματα ▪Συντακτικά Σφάλματα ▪Σημασιολογικά Σφάλματα ▪Σφάλματα Εκτέλεσης ▪Λογικά Σφάλματα
36
Απαιτήσεις ▪Σωστή μετάφραση προγράμματος ▪Απόλυτη συμμόρφωση με τις προδιαγραφές της αρχικής και τελικής γλώσσας ▪Μετάφραση αυθαίρετου μεγέθους προγραμμάτων ▪Δευτερεύουσες Απαιτήσεις Αποδοτικός Κώδικας Μικρός χρόνος μεταγλώττισης Διαγνωστικά μηνύματα Μεταφερσιμότητα
37
Οργάνωση σε Περάσματα ▪Πέρασμα = ομαδοποίηση μιας ή περισσότερων φάσεων. ▪Μεταγλωττιστές ανάλογα με την αρχική ή τελική γλώσσα υλοποιούνται σε ένα ή περισσότερα περάσματα.
38
Υλοποίηση Μεταγλωττιστών ▪Αρχικοί μεταγλωττιστές υλοποιήθηκαν σε γλώσσα μηχανής. ▪Γλώσσες υλοποίησης οποιαδήποτε γλώσσα υψηλού επιπέδου (Pascal, C, C++, JAVA) ▪Προγράμματα γεννήτορες για μεταγλωττιστές, λεκτικούς αναλυτές, συντακτικούς αναλυτές. ▪Συνήθως χρησιμοποιείται συνδυασμός μεθόδων. Λεκτική-Συντακτική ανάλυση με την χρήση προγραμμάτων γεννητόρων. Παραγωγή κώδικα με πρόγραμμα σε γλώσσα υψηλού επιπέδου.
39
Δομή ▪Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου ▪Μεταγλωττιστές Δομή Φάσεις ενός μεταγλωττιστή Απαιτήσεις Οργάνωση σε περάσματα
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.