Γλώσσες Προγραμματισμού Μεταγλωττιστές. Σημασιολογική Ανάλυση



Σχετικά έγγραφα
Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

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

Υλοποίηση ΣΑ με το bison

Υλοποίηση ΣΑ με το bison

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

Παρουσίαση του εργαλείου BISON

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού

Θέματα Μεταγλωττιστών

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

Εργαστήριο 08 Εισαγωγή στo Yacc

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

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση II

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Δομημένος Προγραμματισμός (ΤΛ1006)

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

Εισαγωγή στην γλώσσα προγραμματισμού C

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Παρουσίαση του εργαλείου BISON

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Βασικά Στοιχεία της Java

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Υπολογισμός - Εντολές Ελέγχου

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

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

3 Αλληλεπίδραση Αντικειμένων

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Δομημένος Προγραμματισμός (ΤΛ1006)

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

Βασικά Στοιχεία της Java

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Προγραμματισμό για ΗΜΥ

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Διαδικασιακός Προγραμματισμός

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

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών

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

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση Ι. Εαρινό Εξάμηνο Lec /03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Pascal, απλοί τύποι, τελεστές και εκφράσεις

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Προγραμματισμός Δομές Δεδομένων

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση ΙII. Εαρινό Εξάμηνο Lec 11 26/03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

Υπολογισμός - Εντολές Επανάληψης

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΜΑΘΗΜΑ: Μεταγλωττιστές

Προγραμματισμός Ι (ΗΥ120)

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

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

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Pascal. 15 Νοεμβρίου 2011

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

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

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Απάντηση: (func endfunc)-([a-za-z])+

Προγραμματισμός Η/Υ (ΤΛ2007 )

Ανάπτυξη και Σχεδίαση Λογισμικού

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Transcript:

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

Δομή Σημασιολογικής Ανάλυσης Στατική και Δυναμική Σημασιολογία Σημασιολογικοί Έλεγχοι Συστήματα Τύπων Γραμματικές Ιδιοτήτων Είδη ιδιοτήτων Σημασιολογικοί Κανόνες

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

Σύνταξη και Σημασιολογία Σε οποιαδήποτε γλώσσα (προγραμματισμού ή μη) υπάρχουν δύο βασικές έννοιες: Σύνταξη: μορφή και δομή καλώς σχηματισμένων ακολουθιών συμβόλων (προγραμμάτων) Σημασιολογία: αφορά την ερμηνεία των ορθά σχηματισμένων ακολουθιών (προγραμμάτων). Η περιγραφή της σημασιολογίας γίνεται συνήθως σε φυσική γλώσσα και τυποκρατικές μεθόδους (σπάνια).

Στατική Σημασιολογία Έλεγχος πέρα από τον συντακτικό έλεγχο για την ορθότητα ενός προγράμματος για τον εντοπισμό σημασιολογικών σφαλμάτων. Δήλωση μεταβλητής μια μόνο φορά σε μια εμβέλεια. Ορθή χρήση τελεστών σε σχέση με τον τύπο των ορισμάτων. Ύπαρξη μιας εντολής break εκτός κατάλληλου βρόγχου. κλπ.

Δυναμική Σημασιολογία Απόδοση ερμηνείας σε προγράμματα που περιγράφει την συμπεριφορά τους. Τρόποι περιγραφής: Λειτουργική Σημασιολογία (operational semantics): περιγράφει συμπεριφορά σαν υπολογιστικά βήματα. Δηλωτική Σημασιολογία (denotational semantics): περιγραφή με κάποιο μαθηματικό φορμαλισμό (πχ. συναρτήσεις) Αξιωματική Σημασιολογία (axiomatic semantics): περιγραφή ως λογικές προτάσεις πάνω στις ιδιότητες του προγράμματος.

Σημασιολογική Ανάλυση Έλεγχοι που διεξάγονται: Έλεγχοι τύπων: τύποι μεταβλητών, συστήματα τύπων, κλπ. Έλεγχοι ύπαρξης ονομάτων: η χρήση μιας μεταβλητής επιτρέπεται μετά τη δήλωση της (πίνακας συμβόλων). Έλεγχοι μοναδικότητας: δύο ονόματα ετικετών, συναρτήσεων, κλπ δεν μπορούν να έχουν το ίδιο όνομα (πίνακας συμβόλων). Έλεγχοι συνέπειας: σε εντολές που ξεκινούν και τελειώνουν με το όνομα της δηλωθείσας δομής. Έλεγχοι ροής: πχ. ύπαρξη break έξω από κατάλληλη δομή, κλπ.

Συστήματα Τύπων Σύστημα τύπων (type system): διαχείριση και έλεγχος τύπων. Βασικοί τύποι (basic types): πρωταρχικοί τύποι της γλώσσας. integer, boolean, real, char. Σύνθετοι τύποι (composite types): τύποι ου προκύπτουν από "κατασκευαστές τύπων" με συνδυασμό άλλων τύπων: Πίνακες, Καρτεσιανά γινόμενα, εγγραφές, δείκτες, συναρτήσεις.

Συστήματα Τύπων (ii) Περιορισμοί στη κατασκευή τύπων: πχ. διάσταση πινάκων, επιστροφή τιμών από συναρτήσεις, κλπ. Οι τύποι που δεν υπόκεινται σε περιορισμούς ονομάζονται τύποι πρώτης τάξης (first class types). Τυποκρατική περιγραφή των συστημάτων τύπων περιλαμβάνει την έννοια περιβάλλοντα τύπων (type environments). Εξαγωγή τύπων βάσει κανόνων για εκφράσεις. var x,y : int { x integer, y real}

Τύποι και Έλεγχοι Δύο είδη μετατροπών: ρητή μετατροπή τύπου (type casting): ο προγραμματιστής δηλώνει ρητά την μετατροπή. έμμεση μετατροπή τύπου (type coersion): που η μετατροπή αποφασίζεται από το μεταγλωττιστή αν είναι επιτρεπτή. Υπερφόρτωση τελεστών: τελεστής διεξάγει δύο παρεμφερείς αλλά διαφορετικές πράξεις. Μεταγλωττιστής πρέπει να ελέγξει την σωστή χρήση υπερφόρτωσης. Παράδειγμα τελεστής "+"

Τύποι και Έλεγχοι Πολυμορφικοί τελεστές: υλοποιούν την ίδια πράξη αλλά με διαφορετικού τύπου ορίσματα. πχ. τελεστής αποδεικτοδότητησης (dereferencing) Αν Ε είναι δείκτης σε τύπο τ, τότε ^Ε είναι τύπου τ. Συνώνυμα τύπων Ισοδυναμία τύπων (χρήση χωρίς μετατροπή) Δομική ισοδυναμία (σχηματίζονται με τον ίδιο κατασκευαστή) Ονομαστική Ισοδυναμία Υποσύνολα τύπων πχ. var i : 1..100 (υποσύνολο τύπου integer)

Πότε γίνονται οι έλεγχοι Κατά την μεταγλώττιση: στατικοί έλεγχοι Κατά την εκτέλεση: δυναμικοί έλεγχοι Ισχυρά συστήματα τύπων (strong type systems): Εγγύηση ότι το μεταγλωττισμένο πρόγραμμα δεν θα εμφανίσει σφάλμα τύπου. Μεγάλο κόστος. Πολλές φορές ανάγκη για δυναμικούς ελέγχους.

Υλοποίηση Σημασιολογικής Ανάλυσης; Πώς γίνεται η σημασιολογική ανάλυση; Μεταγλωττιστής πολλαπλών περασμάτων: δημιουργία συντακτικού δένδρου και έπειτα έλεγχος. Μεταγλωττιστής απλού περάσματος: Η ανάλυση γίνεται σταδιακά παράλληλα με την συντακτική ανάλυση. Θεωρητικά υπάρχει η ανάγκη για υποστήριξη όλων των παραπάνω από κάποιου είδους γραμματικής. Γραμματική με συμφραζόμενα: μεγάλο υπολογιστικό κόστος.

Σημασιολογική Ανάλυση Γραμματικές Ιδιοτήτων (Attributed Grammars)

Γραμματικές Ιδιοτήτων (ή Κατηγορημάτων) Attributed grammars Επέκταση των γραμματικών χωρίς συμφραζόμενα Προσκολλούνται ιδιότητες (κατηγορήματαattributes) σε κάθε σύμβολο της γραμματικής. Συνήθως συμβολίζονται με X.att, όπου Χ το σύμβολο της γραμματικής και att το όνομα της ιδιότητας. Οι ιδιότητες χρησιμοποιούνται σε κανόνες ώστε να εξασφαλιστεί ότι ακολουθούνται οι περιορισμοί της γλώσσας. Σημασιολογικοί Κανόνες

Ορισμός Μια γραμματική ιδιοτήτων είναι μια τριάδα (G,V,F) όπου: G είναι μια γραμματική χωρίς συμφραζόμενα. V ένα πεπερασμένο σύνολο ιδιοτήτων για κάθε σύμβολο της γλώσσας, με ορισμένο τύπο. F ένα σύνολο περιορισμών (assertions) με σκοπό: να καθορίσει τις τιμές των ιδιοτήτων των συμβόλων να ορίσει υπό ποιες προϋποθέσεις είναι μια παραγωγή δυνατή, καθώς κάθε περιορισμός αντιστοιχεί σε ένα κανόνα παραγωγής (ένας κανόνας περιέχει περισσότερους περιορισμούς) Περιορισμοί είναι λογικές σχέσεις ανάμεσα στις ιδιότητες του αριστερού και δεξιού μέλους του κανόνα.

Παράδειγμα Γραμματική Ε::=Ε+Τ E::=T Τ::=T*F Τ::=F F::=num F::=(E) Κανόνες Ε 1.val = E 2.val + T.val E.val = T.val T 1.val = T 2.val * F.val T.val = F.val T.val = num.value F.val = E.val

Παράδειγμα σε FLEX/BISON %{typedef int YYSTYPE; %} program :expression {printf( Value: %d\n, $1};) ; expression : term {$$ = $1;} expression + term {$$ = $1 + $3;} ; term : factor {$$ = $1;} term * factor {$$ = $1 * $3;} ; factor : ( expression ) {$$ = $2;} TK_num {$$ = $1;} ; Flex file (part): {D}+ {yylval = atoi(yytext); return T_num; }

Γραμματικές Ιδιοτήτων και ΣΑ Δεδομένης μιας γραμματικής ιδιοτήτων και ενός συντακτικού δένδρου που παράγεται για μια συμβολοσειρά: είναι δυνατό να ελεγχθεί αν η κατασκευή του δένδρου ικανοποιεί τους περιορισμούς, απλώς ελέγχοντας κάθε κόμβο. Απαιτείται "πρίν" τον έλεγχο η ανάθεση τιμών στις ιδιότητες των συμβόλων. Στην γενική περίπτωση το παραπάνω πρόβλημα είναι εξαιρετικά δύσκολο, λόγω πιθανών αλληλεξαρτήσεων. Περιορισμός του τρόπου υπολογισμού των τιμών.

Είδη Ιδιοτήτων Συνθετικές ιδιότητες (synthesized attributes): εξαρτώνται από τους κόμβους που είναι άμεσοι απόγονοι του κόμβου αυτού. Χρησιμοποιούνται για να περαστούν τιμές από τα χαμηλότερα επίπεδα του δένδρου στα υψηλότερα. Κληρονομούμενες ιδιότητες (inherited attributes): εξαρτώνται από ιδιότητες του κόμβου γονέα ή των αδελφών κόμβων του συντακτικού δένδρου. Χρησιμοποιούνται για να περαστούν τιμές από τα υψηλότερα επίπεδα του δένδρου στα χαμηλότερα.

Παράδειγμα Έστω η γραμματική που επιτρέπει την δήλωση τύπων μεταβλητών. Γραμματική D ::= T L T ::= "int" T ::= "float" L ::= L 1, "id" L ::= "id" Σημασιολογικοί Κανόνες { L.inh = T.type } Συνθετική Ιδιότητα { T.type = integer } { T.type = float } { L 1.inh = L.inh, istype(id.entry, L.inh} { istype(id.entry, L.inh} Κληρονομούμενη Ιδιότητα

Σημασιολογικοί Κανόνες Για κάθε κανόνα της γραμματικής Α::=α 1...α n ορίζεται ως σημασιολογικός κανόνας ένα υποσύνολο των περιορισμών του συνόλου F. Ένας κανόνας: ορίζει συνθετικές ιδιότητες του Α ορίζει κληρονομούμενες ιδιότητες των α i βάσει των ιδιοτήτων του Α και των ιδιοτήτων των α j (i j) ορίζει συμπληρωματικούς περιορισμούς

Παράδειγμα Γραμματική T ::= F T T ::= * F T 1 T ::= ε F ::= "digit" Σημ. Κανόνες { T.val = T.val T'.inh = F.val} { T.val = T 1 '.val T 1 '.inh = T.inh * F } { T.val = T'.inh } { F.val = digit.value }

Γενική Μέθοδος Υπολογισμού Ιδιοτήτων (annotation) Κατασκευή του συντακτικού δένδρου. Υπολογισμός των ιδιοτήτων των κόμβων. Ιδιότητες των τερματικών συμβόλων μπορεί να είναι μόνο συνθετικές και να προέρχονται από εξωτερική πηγή (λεκτικός αναλυτής). Αν το αρχικό σύμβολο έχει κληρονομούμενες ιδιότητες πρέπει να δίνονται από εξωτερική πηγή. Εύρεση των τιμών των ιδιοτήτων στους ενδιάμεσους κόμβους του δένδρου. Πρόβλημα: Ιδιότητες μπορεί να έχουν εξαρτήσεις μεταξύ τους. Σειρά εκτέλεσης ενεργειών ανάθεσης τιμών.

Κυκλικές Εξαρτήσεις Πρόσθετο Πρόβλημα: Αν σε μια γραμματική ιδιοτήτων υπάρχει αλληλεξάρτηση μεταξύ συνθετικών και κληρονομούμενων ιδιοτήτων τότε μπορεί να υπάρξουν κυκλικές εξαρτήσεις. Απλό παράδειγμα Α::=Β {Α.s = B.i; B.i = A.s + 1;} A A.s B B.i

Σειρά Υπολογισμών Δημιουργία γράφου εξαρτήσεων ιδιοτήτων. Για κάθε σύμβολο της γραμματικής και για κάθε ιδιότητα του δημιουργείται ένας κόμβος στο γράφο. Κάθε εξάρτηση μεταξύ ιδιοτήτων, δηλ. όταν μια ιδιότητα Χ.α απαιτεί για τον υπολογισμό της την τμή μιας άλλης ιδιότητας Υ.b τότε προστίθεται μια ακμή από το Υ.β στο Χ.α. Υπολογίζεται μια τοπολογική διάταξη του γράφου. Σειρά με την οποία θα υπολογιστούν οι ιδιότητες. Η εκτέλεση ξεκινά από τις κληρονομούμενες ιδιότητες της ρίζας και τις συνθετικές των τερματικών συμβόλων.

Παράδειγμα: Συμβολοσειρά float id, id D T T.type = float L L.inh = float float L L.inh = float, id float id, id D ::= T L {L.inh = T.type } T ::= "int" { T.type = integer } T ::= "float" { T.type = float } L ::= L 1, "id" { L 1.inh = L.inh, istype(id.entry, L.inh} L ::= "id" { istype(id.entry, L.inh} id

Παράδειγμα 2: Συμβολοσειρά 3*2 T ::= F T { T.val = T.val, T'.inh = F.val} T ::= * F T 1 { T.val = T 1 '.val, T 1 '.inh = T.inh * F } T ::= ε { T.val = T'.inh } F ::= "d" { F.val = d.value } T val F val T' inh val d value (= 3) * F val T' inh val d value (= 2)

Μέθοδοι και Γραμματικες για Μεταγλωττιστές Η γενική μέθοδος είναι δαπανηρή. Δεν είναι κατάλληλη για μεταγλωττιστές απλού περάσματος, μιας και απαιτεί την κατασκευή του συντακτικού δένδρου και έπειτα υπολογισμό των ιδιοτήτων. Ανάγκη για γραμματικές που να είναι δυνατό να υπολογίζουν τις ιδιότητες σε ένα πέρασμα. Άρα: Περιορισμοί στη δομή των γραμματικών ιδιοτήτων. S-attributed Γραμματικές L-attributed Γραμματικές.

S-attributed Γραμματικές Υπάρχουν μόνο συνθετικές ιδιότητες Εύκολος υπολογισμός ξεκινώντας από τα φύλλα προς την ρίζα. Εύκολη υπολοποίηση με LR συντακτικούς αναλυτές από πάνω προς τα κάτω. Χρησιμοποιείται σε συντριπτική πλειοψηφία στην πράξη.

L-attributed Γραμματικές Ιδιότητες συμβόλων είναι: Συνθετικές Κληρονομούμενες, αλλά σε ένα κανόνα Α::=B 1,B 2...B j για σύμβολο Β i βασίζονται είτε: σε κληρονομούμενες ιδιότητες του Α, είτε σε ιδιότητες (γενικά) των συμβόλων Β k, όπου k<i, Ιδιότητες του Β i χωρίς όμως να δημιουργούνται κυκλικές αναφορές. L-attributed γραμματικές υλοποιούνται εύκολα σε LL συντακτικούς αναλυτές. Υλοποιούνται και με LR αναλυτές αν γίνει κατάλληλη μετατροπή της γραμματικής.

Μεταφραστικά Σχήματα Οδηγούμενα από τη Σύνταξη Στην πραγματικότητα εκτός από αναθέσεις τιμών σε ιδιότητες και έλεγχο ικανοποίησης περιορισμών, γίνονται και άλλες ενέργειες (έμμεσες συνέπειες) πχ. εγγραφή στον πίνακα συμβόλων, εκτύπωση μηνύματος κλπ. Οποιασδήποτε μορφής κώδικα. Κανόνες ονομάζονται σημασιολογικές ρουτίνες. Μεταφραστικό σχήμα οδηγούμενο από τη σύνταξη. Ιδιαίτερα χρήσιμο στη παραγωγή ενδιάμεσου κώδικα.

Άλλα παραδείγματα- Έλεγχος τύπων Έλεγχος τύπων E= Ε 1 + Ε 2 {if E 1.type = int then if E 2.type = int then E.type = int else if E 2.type = real then E.type = real else error("type missmatch") if E 1.type = real then if E 2.type = real or E 2.type = int then E.type = real else error("type missmatch") }

Άλλα παραδείγματα- Έλεγχος μοναδικότητας Κατά τη δήλωση της μεταβλητής εξετάζεται από τον πίνακα συμβόλων αν έχει δηλωθεί ξανά. var_decl: "var" T_id ':' T_type ';' {if (addvar($2, $4)!=0) {printf("variable:: %s on line %d. ",$2,line); yyerror("var already defined.\n");} }

Σύνοψη Σημασιολογικής Ανάλυσης Στατική και Δυναμική Σημασιολογία Σημασιολογικοί Έλεγχοι Συστήματα Τύπων Γραμματικές Ιδιοτήτων Είδη ιδιοτήτων Σημασιολογικοί Κανόνες