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

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

ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.

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


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

1 ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009

2 Τι είναι ο Πίνακας Συμβόλων (Symbol Table)? (Ι)‏  Ο πίνακας συμβόλων είναι μια δομή στην οποία αποθηκεύονται τα ονόματα (και πληροφορίες για αυτά) ενός προγράμματος.  Είδη ονομάτων είναι:  το ίδιο το πρόγραμμα  μεταβλητές  συναρτήσεις / διαδικασίες  ετικέτες εντολών, στις οποίες επιτρέπεται η μετάβαση με εντολές όπως η goto  σταθερές  τύποι δεδομένων  … …

3 Τι είναι ο Πίνακας Συμβόλων (Symbol Table)? (ΙΙ)‏  Ο πίνακας συμβόλων χρησιμοποιείται σε διάφορα στάδια της μετάφρασης, όταν ο μεταγλωττιστής συναντά κάποιο όνομα.  π.χ. στην φάση της σημασιολογικής ανάλυσης ελέγχεται αν η χρήση των ονομάτων συμφωνεί με τον τύπο τους

4 Περιεχόμενα του Πίνακα Συμβόλων  Μεταβλητές  όνομα  τύπος  εμβέλεια (scope)‏  Συναρτήσεις  όνομα  επιστρεφόμενος τύπος  ορίσματα / αριθμός ορισμάτων  εμβέλεια

5 Οργάνωση του Πίνακα Συμβόλων  Insert  Εισαγωγή ενός νέου συμβόλου στον πίνακα  Lookup  Αναζήτηση ενός συμβόλου στον πίνακα  Delete  Διαγραφή ενός ονόματος ή μιας ομάδας ονομάτων

6 Εισαγωγή - Αναζήτηση  Κάθε φορά που αναγνωρίζεται ένα όνομα δημιουργείται μία νέα εγγραφή για αυτό, εφόσον δεν υπάρχει ήδη στον πίνακα συμβόλων  κατά τον ορισμό μιας νέας μεταβλητής ή συνάρτησης  Αναζήτηση ενός ονόματος στο τρέχον επίπεδο εμβέλειας ή σε περιέχουσα εμβέλεια με βάση τη σημασιολογία της γλώσσας  κατά τον ορισμό ενός συμβόλου  κατά τη χρήση ενός συμβόλου

7 Διαγραφή  Διαγραφή ενός ονόματος και των πληροφοριών του το οποίο δεν χρειαζόμαστε πλέον  κατά την έξοδο από κάποιο block

8 Παράδειγμα Χρήσης Πίνακα Συμβόλων float g;lookup(g), ins(g)‏ g = 12.4;lookup(g)‏ writeString(typeof(x));lookup(writeString()), lookup(typeof()), lookup(x)‏ int foo(int x, int y) {lookup(foo()), ins(foo()), ins(x), ins(y)‏ writeInt(x+y);lookup(writeInt()), lookup(x), lookup(y)‏ int print = y;lookup(print), ins(print), lookup(y)‏ writeInt(print);lookup(writeInt()), lookup(print)‏ int h(int a) {lookup(h()), ins(h()), ins(a)‏ return x+y+a;lookup(x), lookup(y), lookup(a)‏ }delete(h.a)‏ y = h(x);lookup(y), lookup(h()), lookup(x)‏ }delete(foo.x), delete(foo.y), delete(foo.print), delete(foo.h)‏

9 Υλοποίηση με Συνδεδεμένες Λίστες  Η απλούστερη και λιγότερο αποδοτική υλοποίηση  Τα νέα ονόματα εισάγονται στη λίστα σύμφωνα με την σειρά εμφάνισης στο πρόγραμμα  Η αναζήτηση απαιτεί να διατρέξουμε όλη την λίστα  Σε ένα πίνακα συμβόλων με n ονόματα  κόστος εισαγωγής/αναζήτησης O(n)‏ b z c a x αρχη y

10 Υλοποίηση με Δέντρα Δυαδικής Αναζήτησης (Ι)‏ c b y a xz

11 Υλοποίηση με Δέντρα Δυαδικής Αναζήτησης (II)‏  Σε κάθε κόμβο x ο οποίος περιέχει το όνομα n(x)‏  όλοι οι αριστεροί κόμβοι y, περιέχουν ονόματα n(y) που προηγούνται του n(x) κατ’αλφαβητική σειρά  όλοι οι δεξιοί κόμβοι z, περιέχουν ονόματα n(z) που έπονται του n(x) κατ’αλφαβητική σειρά  Για να εισάγουμε ένα όνομα το συγκρίνουμε με αυτό του τρέχοντος κόμβου και ακολουθούμε το αντίστοιχο μονοπάτι  Σε ένα πίνακα συμβόλων με n ονόματα  κόστος εισαγωγής/αναζήτησης O(log(n))‏

12 Υλοποίηση με Hash Table (Ι)‏  Ένας πίνακας κατακερματισμού αποτελείται από k θέσεις (αριθμημένες από 0 εώς k-1)‏  σε κάθε θέση υπάρχει ένας δείκτης στο αρχικό στοιχείο μιας συνδεδεμένης λίστας  κάθε όνομα n κατανέμεται σε μία από αυτές τις λίστες με βάση μια hash συνάρτηση (h(n) = x, 0 ≤ x ≤ k-1)  είναι πολύ χρήσιμο στην υλοποίηση σας να υπάρχει και ένα scope link που δημιουργεί μία λίστα συνδέοντας όλα τα σύμβολα που ανήκουν στο ίδιο scope.  Σημείωση: αυτή η λίστα θα είναι μία δομή πάνω στην ήδη υπάρχουσα.

13 Υλοποίηση με Hash Table (ΙΙ)‏ Οι εγγραφές με το ίδιο χρώμα ανήκουν στο ίδιο scope. 0 1 2... k-1

14 Εμβέλεια  Ένας τρόπος διαχείρισης της εμβέλειας είναι να αντιστοιχίσουμε σε κάθε εμβέλεια μοναδικό αριθμό εμβέλειας  Μια καθολική μεταβλητή μπορεί να δείχνει την τρέχουσα εμβέλεια  η μεταβλητή αυτή θα πρέπει να αυξάνεται / μειώνεται στα actions των γραμματικών κανόνων  Μόλις κλείσει μια εμβέλεια όλες οι καταχωρήσεις με τον αριθμό που αντιστοιχεί στην εμβέλεια εξαλείφονται

15 Bison και Πίνακας Συμβόλων  Σε ένα αρχείο C υλοποιούμε τις δομές και συναρτήσεις του πίνακα συμβόλων  Στο bison αρχείο προσθέτουμε actions στους κανόνες της γραμματικής έτσι ώστε:  κάνουμε αναζήτηση του ονόματος στην τρέχουσα (ή/και παραπάνω) εμβέλεια  σε κανόνες δήλωσης μεταβλητής/συνάρτησης εισάγουμε το όνομα και τις πληροφορίες του στον πίνακα συμβόλων  διαχειριζόμαστε την εμβέλεια


Κατέβασμα ppt "ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009."

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


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