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

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

ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.

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


Παρουσίαση με θέμα: "ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και."— Μεταγράφημα παρουσίασης:

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

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

3 Πίνακας Συμβόλων (Symbol Table) (ΙΙ)  Είδη πληροφορίας είναι οι εξής:  εμβέλεια  γραμμή (δήλωσης/ορισμού ονόματος)  τύπος  τρόπος περάσματος σε συνάρτηση (με αναφορά ή κατ’ αξία)  τυπικές παράμετροι συνάρτησης, αριθμός τυπικών παραμέτρων  κατηγορία αποθήκευσης (στοίβας, στατική, σωρού)

4 Πίνακας Συμβόλων (Symbol Table) (ΙΙΙ)  Ο πίνακας συμβόλων χρησιμοποιείται σε διάφορα στάδια της μεταγλώττισης  Λεκτική ανάλυση (σπάνια)  Όταν συναντάται κάποιο όνομα / σταθερά  Σημασιολογική ανάλυση  Όταν συναντάται κάποιο όνομα  Όταν αποτιμάται ο τύπος μίας έκφρασης  Παραγωγή ενδιάμεσου κώδικα  Όταν παράγονται τετράδες για εντολές

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

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

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

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

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

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

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

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

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

14 Υλοποίηση με Πίνακα Κατακερματισμού (ΙΙ) Οι εγγραφές με το ίδιο χρώμα ανήκουν στο ίδιο scope k-1

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

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


Κατέβασμα ppt "ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και."

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


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