01_Εισαγωγή.pdf
Document Details
Uploaded by SuperbMalachite
University of West Attica
Tags
Full Transcript
Μεταγλωττιστές (Θ) Ενότητα 1: Εισαγωγή στους Μεταγλωττιστές Περιεχόμενα Μαθήματος 1. Εισαγωγή στους Μεταφραστές 2. Γλώσσες & Γραμματικές 3. Λεκτική Ανάλυση 4. Συντακτική Ανάλυση 5. Σημασιολογική Ανάλυση & Πίνακες Συμβόλων 6. Παραγωγή Ενδιάμεσου Κώδικα...
Μεταγλωττιστές (Θ) Ενότητα 1: Εισαγωγή στους Μεταγλωττιστές Περιεχόμενα Μαθήματος 1. Εισαγωγή στους Μεταφραστές 2. Γλώσσες & Γραμματικές 3. Λεκτική Ανάλυση 4. Συντακτική Ανάλυση 5. Σημασιολογική Ανάλυση & Πίνακες Συμβόλων 6. Παραγωγή Ενδιάμεσου Κώδικα 7. Βελτιστοποίηση Ενδιάμεσου Κώδικα 8. Παραγωγή & Βελτιστοποίηση τελικού κώδικα 2 Βασικοί Στόχοι Βασικοί στόχοι του μαθήματος είναι οι ακόλουθοι: ✓ κατανόηση του τρόπου λειτουργίας των μεταγλωττιστών και καλύτερη αξιοποίηση των δυνατοτήτων τους. ✓ δυνατότητα δημιουργίας νέων γλωσσών (προγραμματισμού, σεναρίων, εντολών κ.α.) ή απλών λειτουργιών αναγνώρισης συμβολοσειρών και αυτοματοποιημένης επεξεργασίας κειμένου. ✓ εξοικείωση με χρήση γεννητριών λεκτικής και συντακτικής ανάλυσης. 3 Λογισμικό Μετάφρασης Μεταφραστής / Πηγαία Πηγαίο Τελικό γλώσσα Μεταγλωττιστής γλώσσα πρόγραμμα πρόγραμμα στόχος Διαγνωστικά μηνύματα Ορολογία: Μετάφραση (translation) Πηγαία γλώσσα (source language) Γλώσσα στόχος (target language) Μεταγλώττιση (compilation) Πηγαίο πρόγραμμα (source code) Τελικό πρόγραμμα (object code) 4 Μεταγλωττιστές - Compilers Έξοδος: Πρόγραμμα στόχος Είσοδος: Πηγαίο Πρόγραμμα Μεταγλωττιστής Εκτελέσιμος κώδικας σε γλώσσα μηχανής 5 Είδη επεξεργαστών γλωσσών Επεξεργαστές γλωσσών Επεξεργαστές προγραμματισμού φυσικών γλωσσών Εργαλεία Απλοί Διερμηνευτές Βοηθητικοί Διαχειριστές μεταφραστές επεξεργαστές Βιβλιοθηκών Εκδότες Μεταγλωττιστές Προγρ/μάτων Συμβολομεταφραστές Εντοπιστές Συνδέτες Προεπεξεργαστές Σφαλμάτων Φορτωτές Γεννήτορες Προγραμμάτων Συνδετικοί Στατικοί Φορτωτές Αναλυτές Μετα- μεταφραστές Αντίστροφοι μεταφραστές 6 Σημαντικοί παράγοντες μεταγλώττισης δομή (structure) της πηγαίας γλώσσας (που περιγράφεται μέσω της γραμματικής της πηγαίας γλώσσας), σημασιολογία των περιεχομένων (semantics) του πηγαίου κώδικα (που προκύπτει άμεσα από τη δομή της πηγαίας γλώσσας). Φυσική δομή του Μεταγλωττιστή Αρχική επεξεργασία Τελική επεξεργασία Πηγαίο Front – end Σημασιολογική Back – end Τελικό πρόγραμμα (ανάλυση) αναπαράσταση (ανάλυση) πρόγραμμα 7 Παραγωγή μεταγλωττιστή - Διαδικασία δημιουργίας και χρήσης μεταγλωττιστή Πηγαίος κώδικας Εκτελέσιμος κώδικας μεταγλωττιστή Β Μεταγλωττιστής Α μεταγλωττιστή Β (σε γλώσσα εφαρμογής Α) (υπάρχων) Compiler_name.exe Compiler_name.txt Πηγαίο πρόγραμμα σε Εκτελέσιμο Πρόγραμμα γλώσσα Β Μεταγλωττιστής Β (νέος) Program_name.exe Program_name.txt Δεδομένα σε κάποια μορφή εισόδου Αποτελέσματα σε Εκτελέσιμο κάποια μορφή εξόδου Πρόγραμμα Υ; Χ; 8 8 Μεταγλώττιση προγράμματος C 9 Δομή ενός Μεταγλωττιστή (1 από 3) αρχικό πρόγραμμα Λεκτικός αναλυτής Συντακτικός αναλυτής Διαχειριστής Διαχειριστής πίνακα συμβόλων Σημασιολογικός αναλυτής λαθών Γεννήτωρ ενδιάμεσου κώδικα Βελτιστοποιητής ενδιάμεσου κώδικα Γεννήτωρ τελικού κώδικα τελικό πρόγραμμα 10 Δομή ενός Μεταγλωττιστή (2 από 3) Διακρίνουμε τις εξής φάσεις: 1. Λεκτική Ανάλυση 2. Συντακτική Ανάλυση 3. Σημασιολογική Ανάλυση 4. Παραγωγή ενδιάμεσου κώδικα 5. Βελτιστοποίηση ενδιάμεσου κώδικα 6. Παραγωγή τελικού κώδικα 7. Βελτιστοποίηση τελικού κώδικα 11 Δομή ενός Μεταγλωττιστή (3 από 3) F Πηγαίο Παραγωγή B R αρχείο Τελικού Κώδικα A O Χαρακτήρες C N Εντολές σε συμβολική γλώσσα K T Λεκτική Ανάλυση – – Παραγωγή Βελτιστοποίηση E E Λεκτικές Μονάδες Ενδιάμεσου Τελικού Κώδικα Κώδικα N N Συντακτική D D Ανάλυση Ενδιάμεσος Εντολές σε συμβολική κώδικας (ΕΚ) γλώσσα Τ Αφηρημένο Συντακτικό Μ Τ Δένδρο (ΑΣΔ) Βελτιστοποίηση Παραγωγή Η Μ Ενδιάμεσου Κώδικα Σημασιολογική κώδικα Μηχανής Μ Η Ανάλυση Α Μ ΕΚ Κώδικας σε bits Α Σχολιασμένο ΑΣΔ Έξοδος υπό μορφή εκτελέσιμου κώδικα 12 Λεκτική Ανάλυση Έστω το παράδειγμα της έκφρασης: Rised_Wage := Wage + Wage * 0.06 το αποτέλεσμα της λεκτικής ανάλυσης της έκφρασης φαίνεται στον πίνακα: Group 1 Group 2 Group 3 Group 4 Group 5 Group 6 Group 7 id1 := id2 + id2 * 0.06 Rised_Wage := Wage + Wage * 0.06 Λεκτικός Αναλυτής 13 id1 := id2 + id2 * 0.06 Συντακτική Ανάλυση Ένα παράδειγμα συντακτικής ανάλυσης του προϊόντος της λεκτικής ανάλυσης της έκφρασης: Rised_Wage := Wage + Wage * 0.06 είναι 14 Σημασιολογική Ανάλυση 15 Παραγωγή κώδικα 16 Παράδειγμα μεταγλώττισης Πηγαίος κώδικας: a := b + c* 10 op(:=) (1) id(1), op(:=), id(2), op(+), id(3), op(*), cons(10) id(1) op(+) (3) op(:=) (2) id(2) op(*) id(1) op(+) id(3) cons(10) id(2) op(*) (5) temp1 := id(3) * int_to_real(10) id(3) Int_to_real (6,7) (4) id(1) := id(2)+temp1 cons(10) …….. temp1 := int_to_real(10) temp2 := id(3) * temp1 Back-end temp3 := id(2) + temp2 μετάφραση σε τελική γλώσσα id(1) := temp3 17 Η διαδικασία μεταγλώττισης Μεταγλωττιστές ❑Απλής σάρωσης, ❑Πολλαπλής σάρωσης. Διαχείριση λαθών ❑Λεκτικών, ❑Συντακτικών, ❑Σημασιολογικών. 18 Μεταγλώττιση πηγαίου χωρίς λάθη Ελέγχεται όλος ο πηγαίος κώδικας για λάθη και σε περίπτωση συντακτικά ορθού κώδικα (μόνο με πιθανά προειδοποιητικά λάθη) η διαδικασία μεταγλώττισης ολοκληρώνεται με τη κλήση του back-end μέρος του μεταγλωττιστή. Ανάλυση Κώδικα Εντολή 1 Μεταγλωττιστής Διαχείριση προειδοπ. λαθών Δημιουργία - Βελτιστοποίηση Πηγαίο Ενδιάμεσου κώδικα Πρόγραμμα Μετάφραση σε τελική γλώσσα Εντολή 2 (Κλήση Συμβολ/στη) Στατική Σύνδεση Φόρτωση. Δυναμική Σύνδεση. Εκτέλεση προγράμματος Εντολή n 19 Μεταγλώττιση πηγαίου με σημαντικά λάθη Σε περίπτωση έστω και ενός σημαντικού λάθους η διαδικασία ανάλυσης ολοκληρώνεται αλλά δεν καλείται το back-end τμήμα και ΔΕΝ δημιουργείται τελικός κώδικας. Εντολή 1 Μεταγλωττιστής Ανάλυση Κώδικα Διαχείριση λαθών Δημιουργία Ενδιάμεσου Πηγαίο κώδικα Πρόγραμμα Εντολή 2 Παρουσίαση διαγνωστικών. μηνυμάτων στον. προγραμματιστή προς Εντολή n διόρθωση 20 Συνδέτης-Φορτωτής (1 από 2) Κώδικας σε Μεταγλωττιστής Αντικειμενικός Συνδέτης Αντικειμενικός πηγαία γλώσσα Κώδικας με Κώδικας με προγρ/σμου επανατοποθετίσιμες επανατοποθετίσιμες διευθύνσεις διευθύνσεις Διαγνωστικά Αντικειμενικά μηνύματα προγράμματα βιβλιοθήκης Εκτελέσιμος Η/Υ Αποτελέσματα Φορτωτής Κώδικας με απόλυτες διευθύνσεις Δεδομένα 21 Συνδέτης-Φορτωτής (2 από 2) Ο στατικός συνδέτης: παράγει το τελικό εκτελέσιμο πρόγραμμα. περιέχει επανατοποθετήσιμες και απόλυτες διευθύνσεις μνήμης. Ο δυναμικός συνδέτης: υλοποιεί τις δυναμικές συνδέσεις (βιβλιοθήκες στην κεντρική μνήμη πόροι του λειτουργικού συστήματος). Ο φορτωτής (loader) : μεταφέρει το εκτελέσιμο (executable) στην κεντρική μνήμη. μετατρέποντας τις επανατοποθετήσιμες διευθύνσεις σε απόλυτες. Συνήθως, ο δυναμικός συνδέτης και ο φορτωτής αποτελούν ένα ενιαίο πρόγραμμα, το λεγόμενο συνδετικό φορτωτή. 22 Διερμηνευτές -Interpreters Πηγαίο Πρόγραμμα Διερμηνευτής Έξοδος Δεδομένα εισόδου Δεδομένα Εξόδου όχι εκτελέσιμος κώδικας 23 Διερμηνευτές (1 από 2) Μεταφράζουν μία προς μία τις εντολές του προγράμματος και πριν μεταφράσουν την επόμενη εντολή, το back-end μέρος "εκτελεί" τις προηγούμενες ενέργειες που καθορίζονται από τη σημασιολογική ανάλυση Διερμηνευτής Πηγαίο Πρόγραμμα Μεταγλωττιστής Ανάλυση –Ανίχνευση λαθών- Διόρθωση- Εντολή 1 Εκτέλεση εντολής 1 Ανάλυση – Ανίχνευση & Αντιμετώπιση λαθών- μετάφραση σε τελική γλώσσα Ανάλυση –Ανίχνευση Στατική Σύνδεση του Εντολή 2 λαθών- Διόρθωση- μεταφρασμένου προγράμματος Εκτέλεση εντολής 2.... Φόρτωση – Δυναμική Σύνδεση. Εκτέλεση του μεταφρασμένου Ανάλυση –Ανίχνευση προγράμματος λαθών- Διόρθωση- Εντολή n Εκτέλεση εντολής n 24 Διερμηνευτές (2 από 2) Υπέρ: μεταφερσιμότητα του προγράμματος. απλούστερη η συγγραφή ενός διερμηνευτή από τη δημιουργία ενός back-end μέρους. άμεσος εντοπισμό λαθών και ευκρινέστερη αναφορά λαθών. εμπνέει μεγαλύτερη ασφάλεια ως προς την ορθότητα της μετάφρασης που πραγματοποιεί, διότι τα αποτελέσματά της είναι άμεσα ορατά και ελεγχόμενα. Κατά: Σχετικά αργός χρόνος εκτέλεσης. 25 Προεπεξεργαστές Επεξεργάσιμος αρχικός πηγαίος κώδικας Στενοί συγγενείς των Προεπεξεργαστής μεταγλωττιστών Αναλυτικός αρχικός κώδικας προετοιμάζουν κώδικα εισόδου για τους Μεταγλωττιστής μεταφραστές Τελικός συμβολικός κώδικας Συμβολομεταφραστής Επανατοποθετήσιμος κώδικας μηχανής Βιβλιοθήκες, επανατοποθετήσιμα Συνδετικός φορτωτής τελικά αρχεία Εκτελέσιμο τελικό πρόγραμμα 26 Μετα-μεταφραστές και αντίστροφοι μεταφραστές Αρχικό πρόγραμμα Απλός Τελικό πρόγραμμα σε γλώσσα υψηλού μεταφραστής σε γλώσσα μηχανής επιπέδου ή συμβολική Προδιαγραφές Μεταφραστής αρχικής αρχικής γλώσσας x Μετά - γλώσσας x και τελικής γλώσσας y μεταφραστής σε τελική γλώσσα y Αρχικό πρόγραμμα Προδιαγραφές Αυτοπροσαρμοζόμενος Τελικό σε γλώσσα x γλωσσών x,y μετα-μεταφραστής πρόγραμμα σε γλώσσα y Αρχικό πρόγραμμα Αντίστροφος Τελικό πρόγραμμα σε γλώσσα μηχανής Μεταφραστής σε γλώσσα υψηλού επιπέδου ή συμβολική 27 Αφηρημένες -Ιδεατές Μηχανές Πηγαίο Πρόγραμμα Μεταφραστής Ενδιάμεσο πρόγραμμα Ιδεατή Έξοδος Μηχανή Δεδομένα Δεδομένα Εξόδου εισόδου όχι εκτελέσιμος κώδικας 28 Πραγματικές και αφηρημένες μηχανές (1 από 2) Πραγματικές μηχανές (real machines): η τελική γλώσσα προσδιορίζεται από τον τύπο του επεξεργαστή, διαθέτουν λειτουργίες και δομές όπως pointers, linear storage, indexed access, που εύκολα αντιστοιχίζονται σε σχετικές έννοιες των προστακτικών (imperative) γλωσσών, έννοιες εύκολα μεταφράσιμες σε δομές και σειρές εντολών των υπολογιστών. 29 Πραγματικές και αφηρημένες μηχανές (2 από 2) Αφηρημένες μηχανές (abstract machines): Θεωρητικά μοντέλα υλικού ή λογισμικού που χρησιμοποιούνται στη θεωρία αυτομάτων, Υλοποιούνται σε διακριτά βήματα (turing machines), Είναι προσανατολισμένες προς τις συναρτησιακές (functional) και λογικές (logical) γλώσσες, Διευκολύνουν τη μεταφερσιμότητα ενός μεταγλωττιστή γιατί υλοποιούνται σε λογισμικό και όχι σε υλικό. 30 Αναγκαιότητα χρήσης αφηρημένων μηχανών (1 από Οι 2) εφαρμογές διαδικτύου τρέχουν σε διαφορετικούς servers (πραγματικές μηχανές), άρα η ανάγκη σχεδιασμού των εφαρμογών με αρχικό προσανατολισμό σε μια κοινή αφηρημένη μηχανή δηλ μια κοινή πλατφόρμα είναι προφανής και επιτακτική. name.java (standalone application or java applet) Compiler/interpreter bytecodes Java Virtual stored in a.class Machine Δεδομένα file (JVM) Εξόδου Δεδομένα εισόδου 31 Αναγκαιότητα χρήσης αφηρημένων μηχανών (2 από 2) Επιπλέον, μια αφηρημένη μηχανή είναι πολύ χρήσιμη για διδακτικούς σκοπούς και πολλές φορές σχεδιάζεται αποκλειστικά γι’ αυτούς (παρουσίαση των αρχών της μεταγλώττισης απομονώνοντας τα θεμελιώδη προβλήματα που αντιμετωπίζει η σχεδίαση του μεταγλωττιστή από αυτά που δημιουργούνται λόγω των τελευταίων εξελίξεων στις αρχιτεκτονικές των ηλεκτρονικών υπολογιστών). 32 Χαρακτηριστικά καλών μεταγλωττιστών (1 από 2) Ένας καλός μεταγλωττιστής χαρακτηρίζεται από: Την αξιοπιστία του. Τη γρήγορη εκτέλεσή του. Τις μικρές απαιτήσεις του σε μνήμη. Τα καλά διαγνωστικά μηνύματα που παρέχει. Τη δυνατότητα ανάνηψης από λάθη. 33 Χαρακτηριστικά καλών μεταγλωττιστών (2 από 2) Ένας καλός μεταγλωττιστής χαρακτηρίζεται από: Τη μεταφερσιμότητά του. Την εύκολη συντήρησή του. Τη δημιουργία τελικού κώδικα γρήγορου σε εκτέλεση. Τη δημιουργία τελικού κώδικα με μικρές απαιτήσεις σε μνήμη. Aπό τα περάσματα (passes) που πραγματοποιούν στον πηγαίο κώδικα στο front-end τμήμα του. 34 Οργάνωση σε ένα ή δυο περάσματα Συντακτικός αναλυτής Σημασιολογικός αναλυτής Διαχειριστής Γεννήτορας σφαλμάτων Λεκτικός ενδιάμεσου κώδικα αναλυτής Βελτιστοποιητής ενδιάμεσου κώδικα Γεννήτορας τελικού κώδικα Πίνακας συμβόλων Βελτιστοποιητής τελικού κώδικα 35 Συγγραφή και χρήση μεταγλωττιστή Ο συγγραφέας του μεταγλωττιστή: πρέπει να περιγράψει όλες τις πιθανές γλωσσολογικές κατασκευές και για κάθε μια από αυτές να δώσει τη μετάφραση που αντιστοιχεί στο νόημά της Πηγαίος Κώδικας Λεκτικός Αναλυτής Κανονικές εκφράσεις Συντακτικοί κανόνες Συντακτικός Αναλυτής Σημασιολογικοί Σημασιολογικός Αναλυτής κανόνες Ο προγραμματιστής: πρέπει να ξέρει τις επιτρεπόμενες να χρησιμοποιήσει γλωσσολογικές κατασκευές καθώς και το νόημά τους. 36 Χρήση τεχνικών μεταγλώττισης Η τεχνική string matching των λεκτικών αναλυτών χρησιμοποιείται σε: text editors συστήματα αναζήτησης πληροφορίας προγράμματα pattern recognition Οι γραμματικές και οι ορισμοί σύνταξης χρησιμοποιούνται για να φτιάχνουμε μικρές γλώσσες. Οι τεχνικές βελτιστοποίησης του κώδικα χρησιμοποιούνται στους επαληθευτές προγραμμάτων (program verifiers) σε προγράμματα που φτιάχνουν «δομημένα» προγράμματα. 37 Βιβλιογραφία Κ. Γεωργούλη, Μεταγλωττιστές: Μια εισαγωγική προσέγγιση, Εκδ. Κάλλιπος. 38 Άσκηση 1 Συνδέστε τους όρους της αριστερής στήλης με τους όρους που αυτοί σχετίζονται στη δεξιά στήλη. 1. Γλώσσα εφαρμογής A. Συντακτικά ορθός πηγαίος κώδικας 2. Προεπεξεργαστής B. Γλώσσα τελικού κώδικα 3. Συμβολική γλώσσα (Assembly) C. Βιβλιοθήκες συστήματος 4. Δυναμική σύνδεση D. Γλώσσα υλοποίησης του μεταγλωττιστή 5. Εκτέλεση E. Βιβλιοθήκες πηγαίου κώδικα 39 Άσκηση 2 Ποια από τα παρακάτω περιγράφουν σωστά τις διαφορές μεταξύ ενός μεταγλωττιστή και ενός διερμηνευτή; 1. Ο μεταγλωττιστής δημιουργεί εκτελέσιμο αρχείο ενώ ο διερμηνευτής όχι. 2. Ο μεταγλωττιστής τρέχει το πρόγραμμα που μεταφράζει. 3. Ο μεταγλωττιστής ολοκληρώνει τη λειτουργία του μόνο σε περίπτωση που δεν εντοπιστεί σημαντικό λάθος (fatal error) αλλιώς εμφανίζει το λάθος και διακόπτει τη λειτουργία του. 4. Η διερμήνευση δίνει αποτελέσματα εξόδου μόνο σε κάθε περίπτωση που διορθωθούν όλα τα λάθη. 5. Τα δεδομένα εισόδου χρειάζονται κατά την ώρα της διερμήνευσης αλλά όχι κατά την ώρα της μεταγλώττισης. 40 Άσκηση 3 Αντιστοιχήστε κάθε έναν επεξεργαστή της αριστερής στήλης στου πίνακα που ακολουθεί με την αντίστοιχη έξοδο που εμφανίζεται στη δεξιά στήλη. 1. Προεπεξεργαστής A. Πλήρως αναπτυγμένο πηγαίο πρόγραμμα 2. Διερμηνευτής B. Τελικός κώδικας σε συμβολική μορφή (assembly) 3. Μεταγλωττιστής C. Αποτελέσματα εκτέλεσης 4. Συνδέτης/Φορτωτής D. Αντικειμενικός κώδικας 5. Συμβολομεταφραστής E. Τελικό κώδικα μηχανής με απόλυτες διευθύνσεις 41 Άσκηση 4 Ποιες από τις παρακάτω φάσεις ανήκουν στο εμπρόσθιο τμήμα ενός μεταγλωττιστή. 1. Συντακτική Ανάλυση 2. Σημασιολογική Ανάλυση 3. Βελτιστοποίηση Ενδιάμεσου Κώδικα 4. Βελτιστοποίηση Κώδικα Μηχανής 42 Άσκηση 5 Ποιο από τα παρακάτω σενάρια συνεργασίας Λεκτικού και Συντακτικού Αναλυτή είναι το συνηθέστερο; 1. Ο Λεκτικός Αναλυτής διαχωρίζει έναν αριθμό από λεκτικές μονάδες τις ελέγχει και στη συνέχεια τις αποστέλλει στον Συντακτικό Αναλυτή που ΄χτίζει΄ με αυτές ορθές προτάσεις βάσει της γραμματικής. 2. Ο Συντακτικός Αναλυτής, με βάσει τη γραμματική, ζητά συνεχώς λεκτικές μονάδες από το Λεκτικό Αναλυτή ώστε να 'χτίσει' ορθές προτάσεις. 3. Ο Λεκτικός Αναλυτής ελέγχει πρώτα όλο το κώδικα αν είναι λεκτικά σωστός και στη συνέχεια συνεργάζεται με το Συντακτικό Αναλυτή για να γίνει και ο συντακτικός έλεγχος. 4. Ο Λεκτικός Αναλυτής και ο Συντακτικός Αναλυτής δε συνεργάζονται. Πρώτα ολοκληρώνει τον έλεγχο ο πρώτος και μετά ελέγχει ο δεύτερος. 43 Άσκηση 6 Ποιο από τα παρακάτω σενάρια συνεργασίας Συντακτικού και Σημασιολογικού Αναλυτή είναι το συνηθέστερο; 1. Πρώτα ολοκληρώνεται η Συντακτική Ανάλυση που δημιουργεί το δένδρο παραγωγής και στη συνέχεια αναλαμβάνει η Σημασιολογική Ανάλυση που τo διακοσμεί. 2. Πρώτα ολοκληρώνεται η Συντακτική Ανάλυση που δημιουργεί το δένδρο παραγωγής και στη συνέχεια αναλαμβάνει η Σημασιολογική Ανάλυση που δημιουργεί ένα νέο διακοσμημένο δένδρο παραγωγής. 3. Η Συντακτική Ανάλυση δημιουργεί το δένδρο παραγωγής ενώ παράλληλα η Σημασιολογική Ανάλυση το διακοσμεί. 4. Η Συντακτική Ανάλυση δημιουργεί το δένδρο παραγωγής και παράλληλα η Σημασιολογική Ανάλυση δημιουργεί ένα νέο διακοσμημένο δένδρο παραγωγής. 44 Άσκηση 7 Ποια είναι η είσοδος και ποια η έξοδος του εμπρόσθιου τμήματος ενός μεταγλωττιστή; 1. Είσοδος: γραμματική πηγαίας γλώσσας - Έξοδος: κώδικας μηχανής 2. Είσοδος: γραμματική πηγαίας γλώσσας - Έξοδος: κώδικας συμβολομετάφρασης (assembly) 3. Είσοδος: συμβολοσειρά χαρακτήρων ενός συγκεκριμένου αλφαβήτου - Έξοδος: κώδικας συμβολομετάφρασης (assembly) 4. Είσοδος: συμβολοσειρά χαρακτήρων ενός συγκεκριμένου αλφαβήτου - Έξοδος: κώδικας σε γλώσσα τριών διευθύνσεων 5. Είσοδος: λεκτικές μονάδες - Έξοδος: κώδικας σε γλώσσα τριών διευθύνσεων 45 Άσκηση 8 Τι εννοούμε με τον όρο αντικειμενικά στοιχεία (pragmatics) μιας γλώσσας προγραμματισμού; 1. Η αναλυτική περιγραφή της γλώσσας, όπως το αλφάβητό της και οι λέξεις που αναγνωρίζει. 2. Περιορισμοί της γλώσσας, όπως ο αριθμός των επιτρεπόμενων μεταβλητών που μπορούν να ορισθούν ή όρια σχετικά με το βάθος μιας αναδρομής. 3. Οι κανόνες που περιγράφουν τη σύνταξη των εντολών μιας γλώσσας, με ότι περιορισμούς έχουν οι ορισμοί κάθε εντολής. 4. Όλα τα στοιχεία που περιγράφονται τη σημασιολογία της γλώσσας. 46 Άσκηση 9 Τι από τα παρακάτω ισχύει για τη διαχείριση λαθών μέσα σε έναν μεταγλωττιστή; 1. Αποτελεί ανεξάρτητη φάση μεταγλώττισης. 2. Είναι ενσωματωμένη μέσα στον κώδικα κάθε αναλυτή. 3. Αποτελεί ανεξάρτητη ρουτίνα η οποία καλείται αποκλειστικά από τον συντακτικό αναλυτή που συντονίζει το εμπρόσθιο τμήμα. 4. Αποτελεί ανεξάρτητη ρουτίνα η οποία καλείται από τους αναλυτές όταν αυτοί εντοπίσουν σημαντικό λάθος. 5. Αποτελεί ανεξάρτητη ρουτίνα η οποία καλείται από τους αναλυτές όταν αυτοί εντοπίσουν προειδοποιητικό λάθος. 47 Άσκηση 10 Ποια από τα παρακάτω είναι σωστά όσον αφορά στους ρόλους συγγραφέα και χρήστη ενός μεταγλωττιστή; 1. Ο συγγραφέας του μεταγλωττιστή πρέπει να γνωρίζει τη γραμματική της γλώσσας εφαρμογής του μεταγλωττιστή. 2. Ο συγγραφέας ενός προγράμματος πρέπει να γνωρίζει τη γραμματικής της γλώσσας εφαρμογής του μεταγλωττιστή. 3. Ο συγγραφέας ενός μεταγλωττιστή πρέπει να γνωρίζει τη γραμματικής της πηγαίας γλώσσας του προγράμματος. 4. Ο συγγραφέας ενός προγράμματος πρέπει να γνωρίζει τη γραμματικής της πηγαίας γλώσσας του προγράμματος. 5. Ο συγγραφέας ενός μεταγλωττιστή πρέπει να γνωρίζει τη γραμματικής της τελικής γλώσσας του μεταγλωττιστή. 6. Ο συγγραφέας ενός προγράμματος πρέπει να γνωρίζει τη γραμματικής της τελικής γλώσσας του μεταγλωττιστή. 48