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

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.

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


Παρουσίαση με θέμα: "ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών."— Μεταγράφημα παρουσίασης:

1 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών που σχετίζονται με τις δομές του πηγαίου κώδικα. Οι πληροφορίες αυτές συλλέγονται κατά την φάση της ανάλυσης (λεκτική, συντακτική, σημασιολογική) και χρησιμοποιούνται στις φάσεις παραγωγής κώδικα που ακολουθούν. Π.χ.: - Κατά την λεκτική ανάλυση προσδιορίζεται το όνομα ενός αναγνωριστικού. Η τοποθέτηση στον ΠΣ συντελείται κατά την συντακτική ανάλυση αφού προσδιοριστεί ο τύπος του αναγνωριστικού π.χ. μεταβλητή, διαδικασία, κλπ. - Κατά την παραγωγή κώδικα τα στοιχεία του ΠΣ χρησιμεύουν στο προσδιορισμό του αποθηκευτικού χώρου των μεταβλητών κ.α.

2 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-2 Πληροφορίες που διαχειρίζεται ο ΠΣ Οι πίνακες συμβόλων ονομάζονται και περιβάλλοντα (environments) και αντιστοιχούν σε κάθε αναγνωριστικό (identifier) τουλάχιστον δύο πεδία που περιέχουν αντίστοιχα: –τη συμβολοσειρά (lexeme) –τον τύπο της λεκτικής μονάδας Η διαπροσωπία (interface) του πίνακα συμβόλων πρέπει να παρέχει τουλάχιστον τις ακόλουθες λειτουργίες: –insert(lexeme, token) –lookup(lexeme) H διεύθυνση που επιστρέφεται με την λειτουργία lookup επιτρέπει την επισκόπηση και τροποποίηση των χαρακτηριστικών του αντίστοιχου συμβόλου.

3 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-3 Πληροφορίες που διαχειρίζεται ο ΠΣ (2) Ο ΠΣ μπορεί επιπρόσθετα να περιέχει: –Πληροφορίες για την ποσότητα μνήμης που απαιτείται για την αποθήκευση του αντίστοιχου συμβόλου –Τη διεύθυνση μνήμης στην οποία είναι τοποθετημένο το σύμβολο Καθώς οι απαιτούμενες πληροφορίες εξαρτώνται από το εκάστοτε σύμβολο συνηθίζεται η χρήση δομών όπως η union της γλώσσας C για την ενιαία αντιμετώπιση των εγγραφών του ΠΣ. Τυπικά η λειτουργία insert συντελείται κατά την συντακτική ανάλυση. Π.χ. int x; struct x {float y, z;};

4 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-4 Διαχείριση των δεσμευμένων λέξεων μίας γλώσσας Μια ενδεικτική λύση για την διαχείριση οποιουδήποτε συνόλου δεσμευμένων λέξεων από ένα ΠΣ, είναι η εισαγωγή τους σε αυτόν κατά την αρχικοποίηση του συντακτικού ή λεκτικού αναλυτή, π.χ. #define WHILE_TOKEN 1 … insert(“while”, WHILE_TOKEN); Οποιαδήποτε κλήση της λειτουργίας lookup στη συνέχεια θα εμποδίσει την εισαγωγή αναγνωριστικών με το ίδιο όνομα. Στην περίπτωση που η γλώσσα δεν έχει δεσμευμένες λέξεις όπως η Fortran, η προσέγγιση αυτή παρέχει τη δυνατότητα προειδοποίησης του χρήστη για ενδεχόμενο λάθος.

5 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-5 Μία πρώτη προσέγγιση υλοποίησης ΠΣ Κάθε στοιχείο του πίνακα περιέχει (τουλάχιστον): –Ένα δείκτη σε ένα μονοδιάστατο πίνακα που περιέχει τα ονόματα των αναγνωριστικών, χωρισμένα με ένα σύμβολο (ΕΟS) που δεν συναντάται στα ονόματα –το τύπο του αναγνωριστικού

6 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-6 Δυναμικές Δομές κατάλληλες για ΠΣ Γραμμικές λίστες: μικρό κόστος υλοποίησης, μεγάλο κόστος εκτέλεσης Κόστος λειτουργίας lookup: κατά μέσο όρο n/2 όπου n το πλήθος των συμβόλων Κόστος λειτουργίας insert: επειδή ελέγχουμε πρώτα αν ένα σύμβολο υπάρχει στον ΠΣ πάλι το κόστος είναι αναλογικό ως προς n. Συνολικά για εισαγωγή n συμβόλων και e αναζητήσεων το κόστος είναι: cn(n+e) όπου c σταθερά ίση με το χρόνο εκτέλεσης μερικών εντολών μηχανής Αν n=100 και e=1000 είναι εντάξει, αλλά αν n=1000 και e=10000 τότε...

7 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-7 Δυναμικές Δομές κατάλληλες για ΠΣ Πίνακες κατακερματισμού (hash tables) : μεγάλο κόστος υλοποίησης, μικρό κόστος εκτέλεσης Κόστος λειτουργίας lookup: Ο(n) όπου n το πλήθος των συμβόλων Κατά μέσο όρο όμως είναι n / m. Κόστος λειτουργίας insert: Θ(1) Συνολικά για n σύμβολα και e εκτελέσεις της lookup το κόστος είναι κατά μέσο όρο: ( n (n+e) ) / m κατά προτίμηση το m είναι πρώτος αριθμός

8 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-8 Αναπαράσταση της Εμβέλειας int S; … void area(int x, int y) { double S; … Μέθοδοι : 1.Με την υλοποίηση ενός ξεχωριστού ΠΣ για κάθε εμβέλεια, πχ. κάθε διαδικασία να έχει τον δικό της ΠΣ. 2. Επεκτείνοντας κατάλληλα τις δομές που αναφέραμε προηγούμενα έτσι ώστε να λαμβάνουν υπόψη τους τη θέση δήλωσης και χρήσης ενός ονόματος (identifier) μέσα στον κώδικα. Απαιτείται η επιπλέον λειτουργία delete() για τον ΠΣ η οποία θα διαγράφει ή θα απενεργοποιεί μετά το τέλος μιας διαδικασίας η ενός μπλοκ τα σύμβολα που είχαν εισαχθεί στον ΠΣ κατά την επεξεργασία από τον μεταφραστή αυτής της διαδικασίας ή αυτού του μπλοκ.

9 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-9 Αναπαράσταση της Εμβέλειας (2) Ανάγκη λοιπόν καταγραφής των τροποποιήσεων για να είναι δυνατή η αντιστροφή τους κατά την έξοδο από το μπλοκ. Θεωρητικά, αν κατά την εισαγωγή ενός ονόματος στον ΠΣ αποθηκεύουμε και έναν μοναδικό αριθμό που χαρακτηρίζει την διαδικασία ή το μπλοκ στο οποίο βρίσκουμε αυτό το όνομα, τότε μπορούμε να χειριστούμε την εμβέλεια.

10 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-10 Αναπαράσταση της εμβέλειας των συμβόλων Συνήθως χρησιμοποιούμε μία καθολική μεταβλητή που αναπαριστά το τρέχων επίπεδο εμβέλειας, π.χ. extern int current_scope Κάθε φορά που εισάγουμε ένα νέο σύμβολο αντιγράφουμε τα περιεχόμενα της current_scope στο αντίστοιχο πεδίο της εγγραφής του ΠΣ. Aρχικά η current_scope είναι 0 και μεταβάλλεται στα ακόλουθα σημεία: - Αυξάνεται κατά ένα μετά την επικεφαλίδα του προγράμματος ή των διαδικασιών, ή κατά την είσοδο σε ένα μπλοκ. Η αύξηση γίνεται πριν τους ορισμούς των μεταβλητών. - Μειώνεται κατά ένα κατά την έξοδο από ένα επίπεδο εμβέλειας.

11 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-11 Αναπαράσταση της Εμβέλειας (συν.) Πρακτικά: 1. Για τους ΠΣ που υλοποιούνται με συνδεδεμένες λίστες μπορούμε να κρατάμε σε μια στοίβα κάνοντας push() την τελευταία θέση της λίστας, και μετά την έξοδο από το μπλοκ να διαγράφουμε μέσω της delete() όλες τις εισόδους μέχρι εκείνη τη διεύθυνση που μας δείχνει η κορυφή της στοίβας, αφού προηγουμένως την κάνουμε pop().

12 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-12 Αναπαράσταση της Εμβέλειας (συν) Συνήθως χρησιμοποιούνται πίνακες κατακερματισμού για την υλοποίηση και την αναπαράσταση της εμβέλειας. Αν η λειτουργία insert(s, t) εισάγει το όνομα s στην αρχή της εκάστοτε αλυσίδας σύγκρουσης (collision chain), κρύβεται με τον τρόπο αυτό οποιαδήποτε προηγούμενο ίδιο αναγνωριστικό του εξωτερικού μπλοκ. Απαιτείται μια κατάλληλη υλοποίηση της delete() για την διαγραφή των στοιχείων που έχουν εισαχθεί, κατά την έξοδο από ένα μπλοκ και τη διατήρηση της ακεραιότητας του ΠΣ.

13 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-13 Αποκατάσταση του ΠΣ κατά την έξοδο από μπλοκ Απαιτείται η χρήση μίας διαδικασίας π.χ. close_scope. Σε περίπτωση εξαντλητικού ψαξίματος θα έχουμε: void close_scope(){ struct ST_entry *temp1; if(cur_level==1) {error(1);return(1);} for(i=0; i<hash_t_size; i++) { temp1 = hash_table[i]; while((temp1!=NULL) &&(temp1->level == current_level)) { hash_table[i]=temp1->prev_s; free(temp1); temp1=hash_table[i]; } } current_level--; }

14 ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-14 Αποκατάσταση του ΠΣ κατά την έξοδο από μπλοκ Δύο πιο αποδοτικές υλοποιήσεις είναι οι εξής: 1.Να αποθηκεύουμε κάθε φορά που εισαγάγουμε ένα νέο σύμβολο μιας διαδικασίας ή μπλοκ τον αριθμό της αλυσίδας του ΠΣ στην οποία αποθηκεύτηκε. Έτσι στην εκτέλεση της delete(), θα διατρέχουμε κάθε φορά την αλυσίδα εκείνη στην οποία υπάρχει σίγουρα σύμβολο για διαγραφή. 2.Να διασυνδέουμε μέσω ενός νέου δείκτη (scope link) όλα τα σύμβολα μιας διαδικασίας ή μπλοκ φτιάχοντας έτσι μία νέα συνδεδεμένη λίστα. Η πράξη delete() κατά την έξοδο θα διαγράφει τα σύμβολα εκείνα που βρίσκονται στη νέα αυτή λίστα μειώνοντας στο ελάχιστο το κόστος αναζήτησης και διαγραφής συμβόλων κατά την έξοδο από διαδικασία ή μπλοκ.


Κατέβασμα ppt "ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών."

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


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