ΕΠΛ 223 - Θεωρία και Πρακτική Μεταγλωττιστών8-1 Μετάφραση κατευθυνόμενη από τη σύνταξη Ένας μεταγλωττιστής πρέπει όχι απλώς να αναγνωρίζει κατά πόσο μία.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Κατηγορηματικός Λογισμός
Advertisements

Copyright © 2005 Elsevier Κεφάλαιο 2 :: Σύνταξη των γλωσσών προγραμματισμού Πραγματολογία των Γλωσσών Προγραμματισμού Michael L. Scott.
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Γλωσσομάθεια.
Η φωνολογική επίγνωση.
Λεκτική Ανάλυση (lexical analysis)
Μετρήσεις στη γλώσσα και ανάλυση του λόγου Γ. Μικρός, Γ. Ταμπουρατζής, Σ. Μαρκαντωνάτου ΙΝΣΤΙΤΟΥΤΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΤΟΥ ΛΟΓΟΥ INSTITUTE FOR LANGUAGE & SPEECH.
Τι είναι ο υπολογιστής; Τι είναι ο προγραμματισμός
H διαδικασία ανάπτυξης λογισμικού. Tι θα γνωρίσουμε •Τις φάσεις ανάπτυξης του λογισμικού. •Γιατί χρειάζεται να γίνει ανάλυση του προβλήματος. •Τι θα πρέπει.
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
ΕΠΛ223 - Θεωρία και Πρακτική Μεταγλωττιστών9-1 Στατικός Έλεγχος Με τον όρο στατικός έλεγχος (static checking) χαρακτηρίζεται ο έλεγχος της συντακτικής.
Βρόχος με συνθήκη εισόδου στη C, οδηγούμενος από μετρητή: for
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΝΝΟΙΑ ΤΟΥ ΑΛΓΟΡΙΘΜΟΥ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΑΡΤΙΟΣ 2012 Π. Σοφράς.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Εαρινό Εξάμηνο 2002 Κ. Μουρλάς, Λέκτορας Σημείωση: Οι διαφάνειες αυτές βασίζονται κατά το μεγαλύτερο μέρος τους.
ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών11-1 Παραγωγή Ενδιάμεσου Κώδικα Ο ενδιάμεσος κώδικας αποτελεί τη γλώσσα επικοινωνίας ανάμεσα στο εμπρόσθιο.
Γεωργαλλίδης Δημήτρης Καθηγητής Πληροφορικής
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών5-1 Επίλυσης ασάφειας με εισαγωγή μη-τερματικών Π.χ. stmt = “if”, expr, “then”, stmt | “if”, expr, “then”,
ΒΡΟΧΟΙ ΜΑΘΗΜΑ 5. ΒΡΟΧΟΙΒΡΟΧΟΙ Ο Βρόχος (loop) αποτελείται από προτάσεις επανάληψης. Οι προτάσεις επανάληψης είναι οι προτάσεις που επαναλαμβάνουν ένα.
ΣΗΜΑ ● Οι άνθρωποι έχουν την δυνατότητα να αναγνωρίζουν πρότυπα στο περιβάλλον τους. ● Η οργάνωση των προτύπων παράγει νόημα και η συλλογή τους τις γλώσσες.
Κεφ.1 Εισαγωγη στην εννοια του Αλγοριθμου και στον Προγραμματισμο
Τμήμα Πληροφορικής Πανεπιστημίου Κύπρου ΕΠΛ 371 – Προγραμματισμός Συστημάτων Ονόματα: Αντώνης Μαυρής, Γιώργος Ματθαίου, Χρίστος Κυριάκου Ταυτότητες: ,
Διδάσκοντας με τη βοήθεια του επεξεργαστή κειμένου.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό Φυσικές και τεχνητές γλώσσες.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 30/03/2009.
ΘΠ06 - Μεταγλωττιστές Συντακτική Ανάλυση, Bison 1.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Π. ΚΑΤΣΑΡΟΣ Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τμ. Πληροφορικής,
Άσκηση 1. Θεωρούμε το ακόλουθο κομμάτι κώδικα int i,j; double result, a[110][4]; for(i=0; i
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
ΣΑ από κάτω-προς-τα-πάνω
Η ΣΗΜΑΣΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ  Εκπαιδευτικό Κεφάλαιο 4.1 Στόχοι και κανάλια επικοινωνίας.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής,
1.5 Γλώσσες Προγραμματισμού
ΤΡΕΛΟΙ ΛΟΓΟΤΕΧΝΕΣ Λογοτεχνία – Γλώσσα Ονόματα μαθητών Ασλανίδου Νεκταρία – Χριστίνα Α1 Τουλούμη Αντιγόνη Α4 Αραούζου Βαρδαλάχου Αθηνά Α1 Νικοδημητροπούλου.
ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ Μάθημα 1ο Εισαγωγή στη Γλωσσική Τεχνολογία
Ειδική Ημερίδα για Ανάκτηση και Εξαγωγή Πληροφορίας Ειδική Ημερίδα για Ανάκτηση και Εξαγωγή Πληροφορίας Συζήτηση στρογγυλής τραπέζης.
ΠΜΣ ΕΡΓΑΣΙΑ ΣΤΟ ΜΑΘΗΜΑ ΨΗΦΙΑΚΕΣ ΒΙΒΛΙΟΘΗΚΕΣ The Digital Library and Computational Philology: The BAMBI Project Γόντικα Ειρήνη.
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ. ΥΠΟΛΟΓΙΣΤΗΣ Μηχανή που μπορεί να φέρει σε πέρας πνευματικές εργασίες ρουτίνας με μεγάλη ταχύτητα.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 9: Παραγωγή Ενδιάμεσου Κώδικα (Ενδιάμεσες Γλώσσες) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 12: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Β) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Κ. ΛΑΖΟΣ - Π. ΚΑΤΣΑΡΟΣ Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τμ.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 13: Επαναληπτικό μάθημα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Το περιεχόμενο του μαθήματος διατίθεται.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Επανάληψη.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Περιεχόμενα Μαθήματος
Διαγνώσιμες και μη-διαγνώσιμες ασυμφραστικές γραμματικές και γλώσσες
1 Κέλυφος Bash – Τι μάθαμε? Μεταξύ άλλων…  Συνθήκες ελέγχου (if, case…) και βρόχοι επανάληψης (for, while)  Πράξεις ακεραίων (let, expr) και δεκαδικών.
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Πρώτο Αρχιτεκτονική.
Σπουδαστές Πάλλης Δημήτρης Μεϊμαρίδης Δημήτρης
Slide 1/52 ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Yacc.
Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση με το Εργαλείο BISON Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Εισαγωγή στον προγραμματισμό Μέρος 3 ο Προγραμματιστικά περιβάλλοντα § 6.7.
Διαγράμματα Πακέτων (Package Diagrams)
Το θηρίο έγινε αρνάκι; Όχι ακριβώς!!
Κεφάλαιο 4 :: Σημασιολογική Ανάλυση
Web, Web 2.0, Web 3.0 και Web X.0 ΚΕΦΑΛΑΙΟ 9.
ΑΠΑΡΑΙΤΗΤΕΣ ΙΚΑΝΟΤΗΤΕΣ ΓΙΑ ΤΗ ΜΑΘΗΣΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Μοντέλα διδασκαλίας της γλώσσας Σχετίζονται με εκάστοτε θεώρηση και αντίληψη για γλώσσα και παιδαγωγικές και διδακτικές τάσεις που επικρατούν. Η διδακτική.
ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ Γυμνασίου Α΄ Τρίμηνο
Εισαγωγή στον Προγραμματισμό (στη γλώσσα Java)
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (στη γλώσσα Java)
ΣΥΓΓΡΑΦΗ ΕΠΙΣΤΗΜΟΝΙΚΗΣ ΕΡΓΑΣΙΑΣ
Μεταγράφημα παρουσίασης:

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-1 Μετάφραση κατευθυνόμενη από τη σύνταξη Ένας μεταγλωττιστής πρέπει όχι απλώς να αναγνωρίζει κατά πόσο μία πρόταση ακολουθεί τους κανόνες μίας γλώσσας, αλλά και να κάνει κάτι χρήσιμο με βάση αυτή την πρόταση. Οι σημασιολογικές ενέργειες (semantic actions) ενός συντακτικού αναλυτή είναι ένας από τους τρόπους για την ερμηνεία της σημασίας της πρότασης. Π.χ. στο YACC: expr : expr ‘+’ expr { $$ = $1 + $3 } Γενικά, για τη μετάφραση μίας προγραμματιστικής δομής ο μεταγλωττιστής χρειάζεται να διατηρεί πολλές πληροφορίες πέρα από τον πιθανό κώδικα που απαιτείται για την υλοποίησή της. Π.χ. ένας βρόχος επανάληψης for: for( i =1; i<100; i++) {…

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-2 Μετάφραση κατευθυνόμενη από τη σύνταξη Ορισμοί κατευθυνόμενοι από τη σύνταξη (Syntax Directed Definitions) : μηχανισμός προσδιορισμού του τρόπου μετάφρασης μίας πρότασης μέσω απόδοσης χαρακτηριστικών (attributes) στα σύμβολα της γραμματικής που απαρτίζουν τον κανόνα παραγωγής που την περιγράφει. Ένας ορισμός κατευθυνόμενος από τη σύνταξη είναι μία γενίκευση μίας γραμματικής χωρίς συμφραζόμενα, όπου σε κάθε σύμβολο της γραμματικής (τερματικό ή μη) αντιστοιχούν ένα σύνολο χαρακτηριστικών. Κάθε κανόνας παραγωγής της γραμματικής συμπληρώνεται από ένα ή περισσότερους «σημασιολογικούς κανόνες» (semantic rules). Οι «σημασιολογικοί κανόνες» χρησιμεύουν στον υπολογισμό των χαρακτηριστικών.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-3 Ορισμοί κατευθυνόμενοι από τη σύνταξη Οι σημασιολογικοί κανόνες μπορούν να παράγουν κώδικα που υλοποιεί την αντίστοιχη δομή, να ενημερώνουν τον πίνακα συμβόλων, να παράγουν μηνύματα λάθους, κ.α. Απαιτείται ο προσδιορισμός της σειράς εκτίμησης των σημασιολογικών κανόνων. Οι σημασιολογικοί κανόνες προσδιορίζουν την εξάρτηση ανάμεσα στα χαρακτηριστικά αλλά όχι τη σειρά υπολογισμού τους. Η κατασκευή του γράφου εξάρτησης (dependency graph) ή και του συντακτικού δένδρου δεν είναι δεσμευτική. Εξαρτάται από την υλοποίηση.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-4 Χαρακτηριστικά συμβόλων Τα χαρακτηριστικά των συμβόλων χωρίζονται σε : - Παραγόμενα (synthesized attributes) - Κληρονομούμενα (inherited attributes) Σε ένα ορισμό κατευθυνόμενο από την σύνταξη κάθε κανόνας παραγωγής A=a, συνοδεύεται από ένα σύνολο σημασιολογικών κανόνων της μορφής b=f(c 1,c 2, …,c n ) όπου f είναι συνάρτηση και c 1,c 2, …,c n χαρακτηριστικά των συμβόλων του κανόνα (συμπεριλαμβανομένου του Α). Το b είναι παραγόμενο χαρακτηριστικό εάν ανήκει στο Α. Το b είναι κληρονομούμενο χαρακτηριστικό εάν ανήκει σε σύμβολα του δεξιού μέλους του κανόνα παραγωγής.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-5 Παράδειγμα Ορισμός κατευθυνόμενος από την σύνταξη μίας αριθμομηχανής: Τα τερματικά σύμβολα έχουν μόνο παραγόμενα χαρακτηριστικά. Επειδή δεν βρίσκονται στο αριστερό μέλος ενός κανόνα παραγωγής, ο υπολογισμός των χαρακτηριστικών τους γίνεται από τον λεκτικό αναλυτή. αρίθμηση ίδιων συμβόλων newline

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-6 Παραγόμενα Χαρακτηριστικά Ένας ορισμός κατευθυνόμενος από τη σύνταξη ο οποίος χρησιμοποιεί αποκλειστικά παραγόμενα χαρακτηριστικά ονομάζεται ορισμός με χαρακτηριστικά S (S-attributed definition). Το συντακτικό δένδρο στο οποίο σε κάθε κόμβο εμφανίζονται τα χαρακτηριστικά των αντίστοιχων συμβόλων ονομάζεται δένδρο με σχόλια (annotated parse tree) ή διακοσμημένο δένδρο (decorated tree). Σε ένα ορισμό με χαρακτηριστικά S, η εκτίμηση των σημασιολογικών κανόνων μπορεί να γίνει από κάτω-προς- τα-πάνω, ακόμα και κατά τη διάρκεια της συντακτικής ανάλυσης.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-7 Παράδειγμα διακοσμημένου δένδρου Η είσοδος * 5 οδηγεί στη δημιουργία του ακόλουθου δένδρου με βάση την γραμματική του προηγούμενου παραδείγματος:

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-8 Κληρονομούμενα Χαρακτηριστικά Τα κληρονομούμενα χαρακτηριστικά ενός κόμβου του δένδρου βασίζονται στα χαρακτηριστικά του γονέα του και/ή στα χαρακτηριστικά των συγγενικών του κόμβων (siblings). Τυπικά χρησιμοποιούνται για να δηλώσουν την εξάρτηση μίας δομής από το περιβάλλον στην οποία συναντάται, π.χ. - για να διαπιστώσουμε αν μία μεταβλητή βρίσκεται στο δεξί ή αριστερό μέρος μίας ισότητας. Στην πρώτη περίπτωση πρέπει να χρησιμοποιήσουμε την τιμή της ενώ στη δεύτερη την διεύθυνσή της. - για να ελέγξουμε το τύπο των μεταβλητών σε δηλώσεις της μορφής : var i, j : integer Το αρχικό σύμβολο S δεν έχει κληρονομούμενα χαρακτηρ.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-9 Παράδειγμα κληρονομούμενων χαρακτ. Κανόνες παραγωγής για δήλωση μεταβλητών: Η διαδικασία addtype τροποποιεί κατάλληλα τον τύπο της μεταβλητής που έχει τοποθετηθεί στο πίνακα συμβόλων και βρίσκεται στη θέση id.entry.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-10 Υπολογισμός κληρον. χαρακτηριστικών Ο υπολογισμός των κληρονομούμενων χαρακτηριστικών δεν μπορεί να γίνει κατά την ελάττωση των κανόνων (reduction). Π.χ. για την δήλωση a, b, c : real το διακοσμημένο δένδρο σύμφωνα με τον προηγούμενο ορισμό είναι:

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-11 Γράφος εξάρτησης Ο υπολογισμός των χαρακτηριστικών μπορεί να γίνει με τη βοήθεια του γράφου εξάρτησης που δημιουργείται ως εξής: - για κάθε κόμβο του συντακτικού δένδρου και για κάθε χαρακτηριστικό του δημιουργούμε ένα κόμβο - για κάθε σημασιολογικό κανόνα b=f(c 1, …,c n ) δημιουργούμε μία ακμή από τον κόμβο του c i στο κόμβο του b. Στη περίπτωση που ένας σημασιολογικός κανόνας είναι κλήση μίας διαδικασίας, δημιουργούμε ένα τεχνητό (dummy) χαρακτηριστικό για αυτόν.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-12 Παράδειγμα γράφου εξάρτησης

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-13 Εύρεση της σειράς υπολογισμού χαρακτ. Τοπολογική ταξινόμηση (topological sort): ενός ακυκλικού γράφου είναι οποιαδήποτε ταξινόμηση των κόμβων του, π.χ. m 1, m 2, …, m n ώστε να μην υπάρχει ακμή m i  m j με j<i. Η εύρεση μίας τοπολογικής ταξινόμησης ενός γράφου εξάρτησης εγγυάται την ορθή σειρά υπολογισμού των χαρακτηριστικών. Μέθοδοι εύρεσης: - Mε τη βοήθεια του συντακτικού δένδρου - Με τη βοήθεια των κανόνων παραγωγής (rule-based) - Με μεθόδους που αγνοούν τις προτεραιότητες (oblivious)

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-14 Εύρεση της σειράς υπολογισμού χαρακτ. Εναλλακτικά: απαλειφή της διαφορετικής προτεραιότητας, ώστε να μπορούν να υπολογιστούν κατά την ελάττωση των αντίστοιχων κανόνων: - με τροποποίηση της γραμματικής, π.χ.: - με κατασκευή λιστών από χαρακτηριστικά

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-15 Συντακτικά Δένδρα Το συντακτικό δένδρο που μπορεί να κατασκευάσει ο συντακτικός αναλυτής ονομάζεται συμπαγές συντακτικό δένδρο (concrete syntax tree). Αφηρημένο συντακτικό δένδρο (abstract syntax tree ή AST) είναι μία συμπυκνωμένη μορφή του συμπαγούς συντ. Δένδρου όπου δεν υπάρχουν μη-τερματικοί κόμβοι.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-16 Κατασκευή αφηρημένου συντ. δένδρου Τα αφηρημένα συντακτικά δένδρα προσφέρουν ένα μηχανισμό απαγκίστρωσης των επόμενων σταδίων μεταγλώττισης από την συντακτική ανάλυση. Οι εσωτερικοί κόμβοι ενός αφηρημένου συντακτικού δένδρου αναπαριστούν τελεστές και οι κόμβοι-απόγονοί τους τους τελεστέους ή τα ορίσματα πάνω στα οποία δρούν. Για την κατασκευή ενός AST για αριθμητικές εκφράσεις μπορούν να χρησιμοποιηθούν οι ακόλουθες συναρτήσεις σε συνδυασμό με ένα ορισμό κατευθυνόμενο από την σύνταξη και παραγόμενα χαρακτηριστικά: mknode(op, left, right) mkleaf(id, entry) : κόμβος για μεταβλητή τοποθετημένη στη θέση entry του πίνακα συμβόλων. mkleaf(num, val) : κόμβος για σταθερά με τιμή val.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-17 Παράδειγμα ορισμού για κατασκευή AST Κάθε κόμβος ενός AST μπορεί να έχει τη μορφή εγγραφής (record) με κατάλληλα πεδία. To ΑST που δημιουργείται για την έκφραση a-4+c:

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-18 Απαλειφή κοινών υποεκφράσεων Κατά την κατασκευή του AST μπορούμε να τροποποιήσουμε τις συναρτήσεις mknode & mkleaf, ώστε σε περίπτωση που έχουν δημιουργηθεί προηγουμένως αντίστοιχοι κόμβοι να επιστρέφουν απλώς ένα δείκτη σε αυτούς. Η δομή που προκύπτει είναι ένα ακυκλικός κατευθυνόμενος γράφος (DAG). Π.χ. Για την έκφραση a+a*(b+c)+(b+c)*d

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-19 Αξιολόγηση χαρακ. μαζί με τη συντ. ανάλυση Ένας ορισμός κατευθυνόμενος από την σύνταξη: –Προσδιορίζει τα χαρακτηριστικά που πρέπει να υπολογιστούν, καθώς και τις εξαρτήσεις μεταξύ των κόμβων σε ένα συντακτικό δέντρο. –ΔΕΝ περιγράφει το πώς και το πότε. Σχέδιο μετάφρασης (translation scheme) : γραμματική χωρίς συμφράζομενα όπου κομμάτια κώδικα (semantic actions) τοποθετούνται στο εσωτερικό των δεξιών μελών των κανόνων παραγωγής. Το σχέδιο μετάφρασης προσδιορίζει και το πώς και το πότε του υπολογισμού. Τόσο η συντακτική ανάλυση από πάνω-προς-τα- κάτω όσο και η από κάτω-προς-τα-πάνω, μπορούν να τροποποιηθούν κατάλληλα ώστε να επιτρέπουν τη πραγματοποίηση της μετάφρασης παράλληλα με την ΣΑ.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-20 Σχέδια Μετάφρασης Σε ένα σχέδιο μετάφρασης οι σημασιολογικές ενέργειες περικλείονται ανάμεσα σε {} Η γραφική αναπαράσταση της εφαρμογής ενός σχεδίου μετάφρασης αποτελείται από το συντακτικό δένδρο στο οποίο έχουν προστεθεί κόμβοι για τις σημασιολογικές ενέργειες. Π.χ.E = E 1, “*”, T, {E.val=E 1.val * T.val}

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-21 Αξιολόγηση Χαρακ. από κάτω-προς-τα- πά νω Σε ένα ορισμό με χαρακτηριστικά S (S-attributed definition), η εκτίμηση των σημασιολογικών κανόνων μπορεί να γίνει κατά τη συντακτική ανάλυση από κάτω- προς-τα-πάνω, με τη χρήση μίας στοίβας χαρακτηριστικών. Π.χ. Α = Χ, Υ, Ζ, { Α.α = f(X.x, Y.y, Z.z) } Ακριβώς πριν την ελάττωση του Α υπάρχουν στη στοίβα των χαρακτηριστικών όλες οι τιμές που απαιτούνται για τον υπολογισμό του Α.α : Α.α = f (val[top-2], val[top-1], val[top])

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-22 Σχέδιο μετάφρασης από κάτω-προς-τα- πά νω Παράδειγμα: L = E, n, {printf("%i", val[top])} E = E 1, "+", T, {val[ntop] = val[top-2] + val[top]} E = T T = T 1, "*", F, {val[ntop] = val[top-2] * val[top]} T = F F = "(", E, ")”, {val[ntop] = val[top-1]} F = digit Ο δείκτης στη κορυφή της στοίβας (top) παίρνει μετά την ελάττωση του εκάστοτε κανόνα την τιμή ntop. Περιορισμός: τα κομμάτια κώδικα που πραγματοποιούν την μετάφραση μπορούν να εκτελεστούν μόνο αμέσως πριν την ελάττωση του κανόνα.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-23 Αξιολόγηση Χαρακτηριστικών κατά βάθος Ένας τρόπος για τον υπολογισμό των χαρακτηριστικών με την βοήθεια του συντακτικού δένδρου είναι με χρήση της ακόλουθης συνάρτησης: procedure dfvisit(n: node); begin for each child node m of n, from left to right do begin evaluate inherited attributes of m; dfvisit(m) end; evaluate synthesized attributes of n end Η κατά βάθος επίσκεψη των κόμβων του δένδρου από αριστερά προς τα δεξιά (depth-first order, left to right) αντιστοιχεί στον τρόπο με τον οποίο διατρέχει το συντ. δένδρο ένας ΣΑ LL(1).

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-24 Ορισμοί με χαρακτηριστικά L Τα κληρονομούμενα χαρακτηριστικά τα οποία μπορούν υπολογιστούν επιτυχώς με τον τρόπο αυτό, πρέπει να εξαρτώνται μόνο από τα χαρακτηριστικά κόμβων τους οποίους έχουμε ήδη διατρέξει. Οι ορισμοί που ικανοποιούν αυτό τον περιορισμό ονομάζονται ορισμοί με χαρακτηριστικά L (L-attributed definitions). Ένας ορισμός κατευθυνόμενος από τη σύνταξη χαρακτηρίζεται ως ορισμός με χαρακτηριστικά L (L=left to right), όταν για κάθε κανόνα της μορφής Α=Χ 1, Χ 2, …, Χ n τα κληρονομούμενα χαρακτηριστικά του συμβόλου Χ j, εξαρτώνται από τα κληρονομούμενα χαρακτηριστικά του Α και τα χαρακτηριστικά των συμβόλων Χ i με i<j.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-25 Αξιολ. Χαρακ. από πάνω-προς-τα-κ άτ ω Κατασκευή σχεδίου μετάφρασης για ορισμούς με χαρακτηριστικά L και για ΣΑ από πάνω-προς-τα-κάτω: οι σημασιολογικές ενέργεις πρέπει να τηρούν τους εξής κανόνες: –Οι ενέργειες που υπολογίζουν τα κληρονομούμενα χαρακτηριστικά ενός συμβόλου πρέπει να προηγούνται της εμφάνισής του στο δεξί μέλος της παραγωγής –Οι ενέργειες που υπολογίζουν τα παραγόμενα χαρακτηριστικά ενός συμβόλου πρέπει να έπονται της εμφάνισής του στο δεξί μέλος της παραγωγής. –Οι ενέργειες που υπολογίζουν τα παραγόμενα χαρακτηριστικά του συμβόλου του αριστερού μέλους πρέπει να έπονται όλων των συμβόλων από τα χαρακτηριστικά των οποίων εξαρτώνται.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-26 Παράδειγμα Έστω το σχέδιο μετάφρασης: S = A 1, A 2, {A 1.in=1; A 2.in=2} A = a, {print(A.in) } Σύμφωνα με του προηγούμενους κανόνες και για να είναι δυνατός ο υπολογισμός των χαρακτηριστικών από πάνω- προς-τα-κάτω, πρέπει να γίνει: S = {A 1.in=1}, A 1, {A 2.in=2}, A 2 A = a, { print(A.in) }

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-27 Πρόβλημα Ποιό είναι το κατάλληλο σχέδιο μετάφρασης για τον ακόλουθο ορισμό;

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-28 Σχέδιο μετάφρ. για ΣΑ από πάνω-προς-τα-κάτω Για την χρησιμοποίηση ΣΑ από πάνω-προς-τα-κάτω, απαιτείται αρχικά η απαλειφή της αριστερής αναδρομικότητας. Αυτό συνεπάγεται την τροποποίηση των ενεργειών που υπολογίζουν τα παραγόμενα χαρακτηριστικά ως ακολούθως: Α = Α 1, Υ, {Α.α = g(Α 1.α, Υ.y)} A = X, {A.a = f(X.x)}  A = X, { R.i = f(X.x)} R, { A.a = R.s } R = Y, { R 1.i = g( R.i, Y.y) } R 1, { R.s = R 1.s} R = ε, {R.s = R.i}

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-29 Παράδειγμα Ορισμός:

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-30 Παράδειγμα (συνέχεια) Σχέδιο μετάφρασης: Ε = Τ, {E’.i = T.val} Ε’ {E.val = E’.val} Ε’ = ‘+’, Τ, {Ε 1 ’.i = E.i + T.val} Ε 1 ’, {Ε’.val = Ε 1 ’.val} Ε’ = ‘-’, Τ, {Ε 1 ’.i = E.i - T.val} Ε 1 ’, {Ε’.val = Ε 1 ’.val} Ε’ = ε {Ε’.val = Ε’.i} T = ‘(’, E, ‘)’ {T.val = E.val} T = num {T.val = num.val} Πώς θα έπρεπε να τροποποιηθεί το σχέδιο ώστε να δημιουργεί το ΑST;

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-31 Mετάφραση με ΣΑ αναδρομικής κατάβασης  Για κάθε μη-τερματικό σύμβολο δημιουργούμε μία διαδικασία με παραμέτρους τα κληρονομούμενα χαρακτ. του συμβόλου. Η διαδικασία επιστρέφει τα παραγόμενα χαρακτηριστικά του. Υπάρχει μία τοπική μεταβλητή για κάθε χαρακτηριστικό κάθε συμβόλου του δεξιού μέλους.  Ανάλογα με το επόμενο σύμβολο εισόδου ο αναλυτής αποφασίζει ποιά διαδικασία θα καλέσει.  Για καθένα από τα τερματικά σύμβολα κρατά απλώς τα παραγόμενα χαρακτ. τους σε τοπικές μεταβλητές.  Για κάθε μη-τερματικό σύμβολο Β καλεί τη διαδικασία c=B(b 1,b 2,…,b n ), όπου c είναι τα παραγόμενα και b i τα κληρονομούμενα χαρακτηριστικά του Β.  Εκτελεί τις σημασιολογικές ενέργειες αντικαθιστώντας τις αναφορές σε χαρακτ. με τις αντίστοιχες μεταβλητές.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-32 Παράδειγμα μετάφρασης Έστω ο ορισμός με χαρακτ. L: Tο αντίστοιχο σχέδιο μετάφρασης σύμφωνα με τους κανόνες που αναφέρθηκαν είναι: D = T, “:”, {L.in=T.type}, L L = {id.type = L.in}, id, “,”, {L 1.in= L.in}, L 1 L = {id.type = L.in}, id T = int {T.type = integer} T = real {T.type = real}

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-33 Παράδειγμα μετάφρασης (συνέχεια) Ο κώδικας υλοποίησης του σχεδίου μετάφρασης είναι: void D() { int T_type, L_in; T_type=T(); L_in = T_type; if(next_tok == “:”) L(L_in); else error(); } void L(int L_in) {int id_type; id_type = L_in; id(id_type); if(next_ tok == “,”) L(L_in); } int T() { if(next_ tok == int_tok) return(1); else if (next_ tok == real_tok) return(2); else error(); }

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-34 Μετάφραση από κάτω-προς-τα-πάνω ορισμών L Οι ΣΑ από κάτω-προς-τα-πάνω δεν επιτρέπουν την ύπαρξη σημασιολογικών ενεργειών στο εσωτερικό του δεξιού μέλους της παραγωγής. Η λύση στο πρόβλημα αυτό ώστε να είναι δυνατή η εκτίμηση των κληρονομούμενων χαρακτηριστικών σε ένα ορισμό L, είναι με τη χρήση σημειωτών (markers): R = “+”, T, {print(‘+’)}, R | “-”, T, {print(‘-’)}, R  R = “+”, T, M, R | “-”, T, N, R M = ε, {print(‘+’)} Ν = ε, {print(‘-’)} Οι markers είναι μη-τερματικά σύμβολα με κανόνες παραγωγής στο κενό.

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-35 Υπολ. των κληρονομούμενων χαρακτ. O υπολογισμός των κληρονομούμενων χαρακτηριστικών μπορεί να γίνει κατά την ελάττωση της παραγωγής του αντίστοιχου συμβόλου εφ όσον τα χαρακτηριστικά από τα οποία εξαρτώνται υπάρχουν ήδη στη στοίβα. Σε ένα ορισμό με χαρακτηριστικά L κάτι τέτοιο είναι εφικτό. Π.χ. έστω το σχέδιο μετάφρασης: D = T, {L.in = T.type} L L = {L 1.in=L.in}, L 1 ",", id, {id.type=L.in} L = id,{id.type=L.in} T = int,{T.type = integer} T = real,{T.type = real}

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-36 Υπολ. κληρον. χαρακτ. από κάτω-προς-τα-πάνω Κατά την ΣΑ της συμβολοσειράς εισόδου: real p, q, r θα έχουμε: Κατά την ελάττωση L=id, το Τ.type υπάρχει στη στοίβα στη θέση val[top-1] Κατά την ελάττωση L=L, id το Τ.type υπάρχει στη στοίβα στη θέση val[top-3]

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-37 Υπολ. κληρον. χαρακτ. (συνέχεια) Τι γίνεται όταν δεν μπορεί να υπολογιστεί ακριβώς η θέση των χαρακτηριστικών στη στοίβα; Π.χ.: To πρόβλημα λύνεται με την εισαγωγή ενός marker στο δεύτερο κανόνα:

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-38 Αναδρομικοί Αξιολογητές (recursive evaluators) Στην περίπτωση που δεν είναι δυνατός ο υπολογισμός των χαρακτηριστικών παράλληλα με τη ΣΑ, είναι απαραίτητη η κατασκευή του συντακτικού δένδρου. Οι αναδρομικοί αξιολογητές διατρέχουν το συντακτικό δένδρο χρησιμοποιώντας αναδρομικές διαδικασίες, σε αναλογία με τους ΣΑ αναδρομικής κατάβασης. Δηλ. για κάθε μη-τερματικό σύμβολο υπάρχει μία (ή περισσότερες) διαδικασία(ες). H σειρά με την οποία ο αξιολογητής επισκέπτεται τους κόμβους του συντακτικού δένδρου δεν είναι σημαντική, αρκεί τα κληρονομούμενα χαρακτηριστικά ενός κόμβου να υπολογίζονται πριν την επίσκεψη σε αυτόν και τα παραγόμενα να υπολογίζονται πριν τον «εγκαταλείψουμε».

ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών8-39 Παράδειγμα ορισμού μή-L int A(node *n, int ai) { int li, ls, mi, ms, ri, rs, qi, qs; switch(n->production) { case 1:li = l(ai); ls = L(n->child1, li); mi = m(ls); ms = M(n->child2, mi); return( f(ms)); break; default:ri = r(ai); rs = R(n->child2, ri); qi = q(rs); qs = Q(n->child1, qi); return( f(qs)); } }