Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεEvangeline Korba Τροποποιήθηκε πριν 9 χρόνια
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 στους κανόνες της γραμματικής έτσι ώστε: κάνουμε αναζήτηση του ονόματος στην τρέχουσα (ή/και παραπάνω) εμβέλεια σε κανόνες δήλωσης μεταβλητής/συνάρτησης εισάγουμε το όνομα και τις πληροφορίες του στον πίνακα συμβόλων διαχειριζόμαστε την εμβέλεια
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.