Τι είναι ο Symbol Table. ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο. Περιεχόμενη Πληροφορία. Table. Πίνακας Συμβόλων

Σχετικά έγγραφα
Slide 6 / 43. Slide 5 / 43. Α. Σαββίδης. Α. Σαββίδης. Slide 8 / 43. Slide 7 / 43. Α. Σαββίδης. Α. Σαββίδης HY340, 2009 HY340, 2009 HY340, 2009

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος

Μεταγλωττιστές. Συντακτικός Αναλυτής Κατασκευή Πίνακα Συμβόλων (ΠΣ) Εργαστήριο 7. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

a = false; else a = 3.33; b = (a and c); //?

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ


ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Δομημένος Προγραμματισμός

Προγραμματισμός Δομές Δεδομένων

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

HY150a Φροντιστήριο 3 24/11/2017

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Φροντιστήριο 4 Σκελετοί Λύσεων

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Περιεχόμενα. Πρόλογος... 17

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

Εισαγωγή στον Προγραμματισμό με C++

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Ανάπτυξη και Σχεδίαση Λογισμικού

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

{ int a = 5; { int b = 7; a = b + 3;

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Δομημένος Προγραμματισμός (ΤΛ1006)

Παράλληλη Επεξεργασία

Standard Template Library (STL) C++ library

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Advanced Data Indexing

Εισαγωγή στον Προγ/μό Υπολογιστών

Διαδικασιακός Προγραμματισμός

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Πίνακες Κατακερματισμού. Hash Tables. Προγραμματισμός II 1

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

Φροντιστήριο 3 ο Παραγωγή Ενδιάμεσου Κώδικα. Σημασιολογία της γλώσσας alpha (1/7) Type Checking

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Διάλεξη 22η: Επιπλέον στοιχεία της C

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

HY340, 2009 Α. Σαββίδης Slide 2 / 26. HY340, 2009 Α. Σαββίδης Slide 3 / 26. HY340, 2009 Α. Σαββίδης Slide 4 / 26

Φροντιστήριο 4 Σκελετοί Λύσεων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Δομή προγράμματος στη Fortran

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Προγραµµατιστικές Τεχνικές

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή


Στοιχειώδης προγραμματισμός σε C++

Δομή προγράμματος στη Fortran

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Προγραμματισμός Συστημάτων

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Δομές δεδομένων (2) Αλγόριθμοι

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1. Εργαστήριο 6. Εαρινό Εξάμηνο

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Μεταφραστής (Compiler)

Πληρουορική Γ Γσμμασίοσ

Δομημένος Προγραμματισμός (ΤΛ1006)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Οντοκεντρικός Προγραμματισμός

Φροντιςτήριο. Linked-List

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Transcript:

Τι είναι ο Symbol Table ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα (μεταβλητές και συναρτήσεις) του προγράμματος. Ο πίνακας συμβόλων προσπελαύνεται κάθε φορά που ο compiler συναντά κάποιο σύμβολο. 1 2 Ποια είναι η δουλειά του Symbol Table read(a); //< Σημασία των read, a? input(a); //< Σημασία του input? function foo(x) //< foo, x? s = hy340 ; //< s? Ο compiler μας στο παραπάνω πρόγραμμα πρέπει να μπορεί να ξχ ξεχωρίσει τον τύπο του κάθε συμβόλου όταν το συναντά. 3 Περιεχόμενη Πληροφορία Μεταβλητή Όνομα Τύπος Εμβέλεια (scope) Γραμμή δήλωσης Συνάρτηση Όνομα Ορίσματα Εμβέλεια Γραμμή δήλωσης 4

Λειτουργίες του Symbol Table Insert Εισαγωγή ενός νέου συμβόλου στον πίνακα. Lookup Αναζήτηση ενός συμβόλου στον πίνακα. Hide Απενεργοποίηση ε εργο οηση (όχι διαγραφή) όλων των συμβόλων ενός επιπέδου εμβέλειας. Insert Κάθε φορά που αναγνωρίζεται ένα σύμβολο δημιουργείται μία νέα εγγραφή για αυτό, εφόσον δεν υπάρχει ήδη στον symbol table. Πότε γίνεται; Κατά τον ορισμό μιας νέας μεταβλητής ή συνάρτησης ρη ης Κατά την χρήση μη ορισμένου συμβόλου 5 6 Lookup Αναζήτηση ενός συμβόλου στο τρέχον επίπεδο εμβέλειας ή σε περιέχουσα εμβέλεια με βάση τη λογική των κανόνων που ακολουθεί η γλώσσα Πότε γίνεται; Κατά τον ορισμό ενός συμβόλου Κατά την χρήση ενός συμβόλου Hide Απενεργοποίηση των μεταβλητών του επιπέδου εμβέλειας το οποίο δεν χρειαζόμαστε πλέον Πότε γίνεται; Κατά Κ ά την έξοδο από κάποιο block Προσοχή: Ακύρωση τοπικών μεταβλητών και τυπικών ορισμάτων μιας συνάρτησης με την έξοδο από το block της συνάρτησης 7 8

Παράδειγμα Symbol Table - Χρήση συναρτήσεων ρή input(x); lookup(input()), lookup(x), ins(x) g = 12.4; lookup(g), ins(g) print(typeof(x)); lookup(print()), lookup(typeof()), lookup(x) function foo(x,y) lookup(foo()), ins(foo()), ins(x), ins(y) print(x+y); lookup(print()), lookup(x), lookup(y) local print = y; lookup(print), ins(print), lookup(y) ::print(print); lookup(::print()), lookup(print) function h(a) lookup(h()), ins(h()), ins(a) return x+y+a; lookup(x), lookup(y), ins(y), lookup(a) hide(h.a, h.y) y = h(::x); lookup(y), lookup(h()), lookup(::x) hide(foo.x, foo.y, foo.print, foo.h()) Η Δομή vartype Σε αυτή την δομή αποθηκεύεται πληροφορία σχετικά με τις μεταβλητές. typedef struct vartype vartype; name type scope level declline // το όνομα της μεταβλητής // ο τύπος της μεταβλητής // εμβέλεια μεταβλητής // γραμμή δήλωσης μεταβλητής 9 10 Η Δομή funtype Σε αυτή την δομή αποθηκεύεται πληροφορία σχετικά με τις συναρτήσεις. typedef struct funtype vartype; name arguments scope level declline // το όνομα της συνάρτησης // ορίσματα συνάρτησης // εμβέλεια συνάρτησης // γραμμή δήλωσης συνάρτησης Η εγγραφή στον πίνακα συμβόλων Κάθε εγγραφή στον πίνακα συμβόλων είναι για την δήλωση ενός συμβόλου. typedef struct symboltablerecord bool isactive; // είναι ενεργό σύμβολο; union vartype* p_var; funttype* p_fun; types; enum symboltype; // αν το σύμβολο είναι // μεταβλητή ή συνάρτηση symboltablerecord; 11 12

Υλοποίηση Πίνακα Συμβόλων Υπάρχουν δύο τρόποι υλοποίησης του πίνακα συμβόλων: Linked List Hash Table Προτιμήστε η υλοποίηση με Hashtable κυρίως λόγω της επίδοσης του LookUp. Υλοποίηση Πίνακα Συμβόλων με Hashtable (1/2) Ένας Hashtable αποτελείται από m buckets. Κάθε σύμβολο κατανέμεται σε ένα από αυτά τα buckets με βάση μια hash συνάρτηση. Σύμβολα που τυχαίνει να πέσουν στο ίδιο bucket δημιουργούν ένα linked list. Επιπλέον είναι πολύ χρήσιμο στην υλοποίηση σας να υπάρχει και ένα scope link που δημιουργεί μία λίστα συνδέοντας όλα τα σύμβολα που ανήκουν στο ίδιο scope. Σημείωση: αυτή η λίστα θα είναι μία δομή πάνω στην ήδη υπάρχουσα. 13 14 Υλοποίηση Πίνακα Συμβόλων με Hashtable (2/2) Οι εγγραφές με το ίδιο χρώμα ανήκουν στο ίδιο scope. Συναρτήσεις χειρισμού Οι συναρτήσεις Insert και LookUp είναι όμοιες με αυτές που έχετε υλοποιήσει σε προηγούμενα μαθήματα για έναν Hashtable, με την διαφορά ότι πρέπει να γίνει ο χειρισμός του scope link. Η συνάρτηση Hide θα «ακολουθεί» το scope link για μία συγκεκριμένη ρμ εμβέλεια και θα ακυρώνει αυτά τα σύμβολα. 15 16

Χώροι Εμβέλειας Ένας τρόπος χειρισμού των χώρων εμβέλειας είναι να υπάρχει μία καθολική μεταβλητή που να δείχνει την εμβέλεια στην οποία βρισκόμαστε. Στα actions των κατάλληλων γραμματικών κανόνων θα πρέπει να αυξάνεται ή να μειώνεται αυτή η μεταβλητή. Type Checking (1/3) Redefine Όταν υπάρχει ήδη μια μεταβλητή με id ίδιο με το id της μεταβλητής που πάμε να ορίσουμε στο ίδιο επίπεδο εμβέλειας. Undefine Όταν μια μεταβλητή που χρησιμοποιείται δεν είναι στον πίνακα συμβόλων στο επίπεδο εμβέλειας στο οποίο θα έπρεπε να βρίσκεται. 17 18 Type Checking (2/3) Στη γλώσσα alpha Redefine global μεταβλητή με ίδιο όνομα με κάποια συνάρτηση βιβλιοθήκης Undefine Οι μεταβλητές που δεν υπάρχουν στον πίνακα συμβόλων ορίζονται με την πρώτη εμφάνισή τους (εισάγονται στον symbol table) Όταν ζητάμε global μεταβλητή η οποία δεν έχει οριστεί και άρα δεν υπάρχει στον symbol table (error) Type Checking (3/3) read(a); // νέα συνάρτηση read() και μεταβλητή a input(a); function foo(x) // definition συνάρτησης foo() s = hy340 ; // νέα μεταβλητή s print(x+y); // νέα μεταβλητή y local hello = a; // δήλωση νέας local μεταβλητής hello function hello() // redefined hello, error if(a > 10) print(::a + x); // νέα μεταβλητή x sqrt(s); y = cos(::y); // error: undefined ::y 19 20

Παράδειγμα Symbol Table Yacc (1/2) Παράδειγμα Symbol Table Yacc (2/2) %union char* s_type;. %type <s_type> ID %% lvalue block : ::ID p = LookUp($2, 0); // Αναζήτηση ID στη καθολική εμβέλεια if(p == null) //error : ++scope; stmts Hide(scope--); 21 22