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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Ανασκόπηση σε Δείκτες, Ουρές, Στοίβες, Συνδεδεμένες Λίστες
Advertisements

Διαφάνειες παρουσίασης #5
Εντολες Επιλογης (Selection)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες.
Τεχνολογία ΛογισμικούSlide 1 Έλεγχος Καταψύκτη (Ada) Τεχνολογία ΛογισμικούSlide 39 with Pump, Temperature_dial, Sensor, Globals, Alarm; use Globals ; procedure.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Γενική μορφή προγράμματος Pascal
Εισαγωγικό Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
ΘΠ06 - Μεταγλωττιστές Συντακτική Ανάλυση, Bison 1.
Scala Programming Language
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
Copyright © 2006 – Quality & Reliability SA PL/SQL TRIGGERS ΜΕΡΟΣ 1.
Διαφάνειες παρουσίασης Ορθότητα (συνέχεια) Τακτικοί τύποι και τύποι υποπεριοχής Πίνακες.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΜΕΤΑΛΛΕΥΤΙΚΗ ΝΟΜΟΘΕΣΙΑ ΔΙΑΧΕΙΡΙΣΗΚΑΙ ΑΞΙΟΠΟΙΗΣΗ ΜΕΤΑΛΛΕΥΜΑΤΩΝ Τζίμας Σπύρος Μηχανικός Μεταλλείων – Μεταλλουργός ΕΜΠ.
ΣΥΣΤΑΣΗ - ΣΥΓΚΡΟΤΗΣΗ ΑΥΤΟΔΙΟΙΚΗΣΗΣ ΚΑΙ ΑΠΟΚΕΝΤΡΩΜΕΝΗΣ ΔΙΟΙΚΗΣΗΣ Οι δήμοι και οι περιφέρειες συγκροτούν τον πρώτο και δεύτερο βαθμό τοπικής αυτοδιοίκησης.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Παραγωγή Ενδιάμεσου Κώδικα Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java.
ONLINE ΠΑΙΧΝΙΔΙΑ Παρουσιάζουν οι μαθητές: Γ Ι Ο Υ Λ Η Λ Ι Ο Υ Ν Η Ι Α Σ Ω Ν Α Σ Τ Α Σ Σ Η Σ.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση με το Εργαλείο BISON Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
ΑΡΧΑΪΚΟ ΕΠΟΣ: ΟΜΗΡΟΣ ΣΤΟΙΧΕΙΑ ΟΜΗΡΙΚΗΣ ΔΙΑΛΕΚΤΟΥ Α. Τσοπανάκης, Εισαγωγή στον Όμηρο, Θεσ/νίκη 2004, σ
ΔΟΜΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C 1.Σχόλια 2.Οδηγίες προεπεξεργαστή 3.Ορισμοί τύπων 4.Δηλώσεις συναρτήσεων (πρωτότυπα) 5.Ορισμός της main 6.Ορισμοί συναρτήσεων.
1 Προγραμματισμός Ι Ενότητα 7 : Πίνακες I Αλέξανδρος Τζάλλας Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου.
Κύκλος Πληροφορίας Δεδομένα: Δεδομένα Πληροφορία Γνώση Παραγωγή
Εισαγωγή στον Προγ/μό Η/Υ
Κεφάλαιο 2 :: Σύνταξη των γλωσσών προγραμματισμού
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Η Γλώσσα Pascal Εντολή If
Βελτιστοποίηση σε τρίλιζα Καταδίωξη/διαφυγή
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Εισαγωγή στον Προγ/μό Υπολογιστών
Τεχνολογία και Προγραμματισμός Υπολογιστών
Δομές.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
«Δημότης Αμαρουσίου» η τεχνολογία στην υπηρεσία του Πολίτη
Ενισχυτική διδασκαλία
Αντικειμενοστραφής Προγραμματισμός ΙΙ
9 Η Γλώσσα SQL Εισαγωγή – Βασικές Έννοιες Τύποι Δεδομένων
Ενότητα 1 : Εισαγωγικά Στοιχεία της Pascal Αλέξανδρος Τζάλλας
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Μακροοικονομία Διάλεξη 9.
Δομές διακλάδωσης, επαναλήψεις, μέθοδοι
Ποιοί είναι οι δικαστικοί σχηματισμοί του Δικαστηρίου;
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Πρακτική Άσκηση σε Σχολεία της Δευτεροβάθμιας Εκπαίδευσης
«Από τη MicroWorlds Pro στην Python»
Πρωτογενείς τύποι δεδομένων
6. 3 Φυσικές και τεχνητές γλώσσες Το αλφάβητο της ΓΛΩΣΣΑΣ. 7
Ειδικά Θέματα στον προγραμματισμό Υπολογιστών
Αρχή συστήματος συντεταγμένων: Το σημείο 0,0,0 (x, y, z)
Σχεσιακεσ βασεισ δεδομενων
ΓΙΑ ΤΗΝ ΕΤΑΙΡΙΚΗ ΔΙΑΚΥΒΕΡΝΗΣΗ
Κεφάλαιο 7 10/11/2018 Ξένιος Αντωνιάδης.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΕΑΠ – ΠΛΗ24 2η ΟΣΣ.
Δομές Δεδομένων (Data Structures)
Διάλεξη #10: Εκτέλεση Java χωρίς το BlueJ
ΑΣΚΗΣΕΙΣ.
Μεταγράφημα παρουσίασης:

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

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

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

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

Στατική Σημασιολογία ▪Έλεγχος πέρα από τον συντακτικό έλεγχο για την ορθότητα ενός προγράμματος για τον εντοπισμό σημασιολογικών σφαλμάτων. Δήλωση μεταβλητής μια μόνο φορά σε μια εμβέλεια. Ορθή χρήση τελεστών σε σχέση με τον τύπο των ορισμάτων. Ύπαρξη μιας εντολής 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 : (υποσύνολο τύπου integer)

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

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

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

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

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

Παράδειγμα ΓραμματικήΚανόνες Ε::=Ε+Τ Ε 1.val = E 2.val + T.val E::=TE.val = T.val Τ::=T*FT 1.val = T 2.val * F.val Τ::=FT.val = F.val F::=numT.val = num.value F::=(E)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 B A.s B.i

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

Παράδειγμα: Συμβολοσειρά float id, id D T L idid L, idid flo at T.type = float 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} L.inh = float

Παράδειγμα 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 d value (= 3) T'T' valinh T'T' valinh *F 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");} }

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