Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες."— Μεταγράφημα παρουσίασης:

1 ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες

2 Πίνακας Συμβόλων (I)  Δομή αποθήκευσης και ανάκτησης πληροφοριών σχετικά με τα χαρακτηριστικά γνωρίσματα των ονομάτων του μεταγλωττιζόμενου προγράμματος  Προσπελαύνεται από τον μεταγλωττιστή σε κάθε εμφάνιση ενός ονόματος και υποστηρίζει τις λειτουργίες:  έλεγχο ύπαρξης ονόματος (lookup())  εισαγωγή ονόματος (insert())  ανάκτηση πληροφοριών ενός ονόματος  πρόσθεση πληροφοριών σχετικά με κάποιο όνομα  διαγραφή ονόματος ή ομάδας ονομάτων (delete())

3 Πίνακας Συμβόλων (II)  Διαδικασία προσπέλασης του πίνακα συμβόλων:  ορισμός ονόματος  έλεγχος για την ύπαρξη του ονόματος στην ίδια εμβέλεια, εισαγωγή του ονόματος  χρήση ονόματος  έλεγχος ύπαρξης ονόματος  ορισμός συνάρτησης ή σύνθετης εντολής  δημιουργία καινούργιας εμβέλειας  τέλος συνάρτησης ή σύνθετης εντολής  απόκρυψη τοπικών ονομάτων

4 Σημασιολογικός Έλεγχος  Έλεγχος τύπων  οι τιμές/τελεστές εφαρμόζονται σε τελεστέους με τον αντίστοιχο τύπο  Έλεγχος ροής  μήπως χρησιμοποιείται εντολή εξόδου από κάποια δομή ελέγχου (π.χ., break ) έξω από την αντίστοιχη δομή  Έλεγχος ύπαρξης ονομάτων  όταν χρησιμοποιείται ένα όνομα πρέπει προηγουμέ νω ς να έχει οριστεί  Έλεγχος μοναδικότητας  δεν πρέπει ένα όνομα να ορίζεται περισσότερες από μία φορές στην ίδια εμβέλεια  εξα ί ρεση αποτελε ί ο ορισμ ός εν ός σ ύ νθετου τ ύ που και η δ ή λωση μ ί α ς μεταβλητ ής με το ί διο ό νομα (π.χ., record t {…}; int t; )

5 Σημασιολογία (I)  Σε κάθε σύμβολο της γραμματικής μπορεί να αποδοθεί μια σημασιολογική τιμή.  Ο τύπος των σημασιολογικών τιμών καθορίζεται από το macro YYSTYPE,  #define YYSTYPE double  Οι σημασιολογικές τιμές μπορούν να είναι διαφορετικού τύπου για διαφορετικά σύμβολα. Οι τύποι αυτοί δε δηλώνονται με ορισμό του YYSTYPE, αλλά στο πρώτο μέρος ως εξής:  %{ typedef enum {TY_int, TY_real, TY_boolean} Type; %union { char * n; Type t; struct { Type type; /* other fields */ } v; }  Ο τύπος των συμβόλων καθορίζεται επίσης στο πρώτο μέρος της περιγραφής με δηλώσεις όπως: %type T_id %type typename %type expression

6 Σημασιολογία (II)  Με $$ συμβολίζεται η σημασιολογική τιμή του αριστερού μέλους ενός κανόνα.  Τα σύμβολα $n, όπου n>0, παριστάνουν τη σημασιολογική τιμή του n-οστού συμβόλου του δεξιού μέλους του κανόνα. Το πρώτο σύμβολο αντιστοιχεί στο $1, κ.ο.κ.  Οι σημασιολογικές τιμές των τερματικών συμβόλων συνήθως καθορίζονται από το λεκτικό αναλυτή και τοποθετούνται στη μεταβλητή yylval.  Στην περιγραφή του λεκτικού αναλυτή πρέπει σε κάθε αναγνωρίσιμο στοιχείο να αποθηκεύσουμε την τιμή του  {id}{yylval.string=strdup(yytext); return(TK_ID);}

7 Έλεγχος Τύπων (Ι)  Στο σχηματισμό των εκφράσεων αποδίδονται σημασιολογικές τιμές σύμφωνα με τα (μη- )τερματικά σύμβολα που τις παράγουν:  στην περίπτωση των σταθερών, παίρνουμε τον τύπο, όπως αυτός έχει αναγνωρισθεί από τον λ εκτικό α ναλυτή.  στην περίπτωση των μεταβλητών, ο τύπος τους αποθηκεύεται στον π ίνακα σ υμβόλων κατά τον ορισμό τους  στην περίπτωση εκφράσεων με τελεστές, υπάρχουν περιπτώσεις που επιτρέπονται μόνο συγκεκριμένοι τύποι

8 Έλεγχος Τύπων (ΙΙ)  Παραδείγματα:  Ο τελεστής ακεραίου υπολοίπου mod (ή %) δέχεται μόνο τελούμενα ακεραίου τύπου expr: expr “%” expr { if ($1.type==TY_INT && $3.type==TY_INT) $$.type=TY_INT; else yyerror(“type mismatch”);}  Στον κανόνα περιγραφής του while η συνθήκη πρέπει να έχει τύπο boolean stmt: “while” condition while_body { if ($2.type != TY_boolean) yyerror(“condition type mismatch”);}

9 Μετατροπές Τύπων  Στη Floop2009 επιτρέπεται ρητή μετατροπή τύπου (type casting) ανάμεσα σε συμβατούς τύπους  expr : ‘(‘ typename ‘)’ expr { if (isCastAllowed ($2, $4.type)) $$.type = $2; else yyerror(“illegal type cast”); }  Επιτρέπεται επίσης η έμμεση μετατροπή τύπου (type coersion) όπου μια έκφραση τύπου t χρησιμοποιείται σε ένα σημείο όπου αναμενόταν μια έκφραση τύπου t’, τότε η έκφραση μετατρέπεται αυτόματα στον τύπο t’ (άν αυτό είναι δυνατό)

10 Υπερφόρτωση Τελεστών  Όταν ένας τελεστής μπορεί να εφαρμοστεί σε τελούμενα διαφορετικών τύπων υλοποιώντας διαφορετικές πράξεις, λέμε ότι έχουμε υπερφόρτωση (overloading) του τελεστή  expr: expr ‘+’ expr { if ($1.type == TY_int) if($3.type == TY_int)$$.type = TY_int; else if($3.type == TY_real) $$.type = TY_real; else yyerror(“type mismatch”); else if($1.type == TY_real) if($3.type == TY_int)$$.type = TY_real; else if($3.type == TY_real) $$.type = TY_real; elseyyerror(“type mismatch”);


Κατέβασμα ppt "ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google