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

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

Σημασιολογική ανάλυση Ι

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


Παρουσίαση με θέμα: "Σημασιολογική ανάλυση Ι"— Μεταγράφημα παρουσίασης:

1 Σημασιολογική ανάλυση Ι
Εκτός από τη συντακτική ορθότητα ενός προγράμματος μας ενδιαφέρει και η εκτέλεση κάποιων άλλων ελέγχων, που δυστυχώς δεν είναι δυνατό να περιγραφούν από μια γραμματική χωρίς συμφραζόμενα: fie(a,b,c,d) int a, b, c, d; { … } fee() { int f[3], g[0], h, i, j, k; char *p; call fie(h, i, “ab”, j, k); k = f * i + j; h = g[17]; printf(“<%s,%s>.\n”,p,q); p = 10; } Τι λάθη έχει το συγκεκριμένο πρόγραμμα; δηλώθηκε g[0], χρησιμοποιήθηκε g[17] λάθος αριθμός παραμέτρων στη fie() η παράμετρος “ab” δεν είναι int λάθος στη χρήση της μεταβλητής f δεν έχει δηλωθεί η q το 10 δεν είναι συμβολοσειρά Όλοι αυτοί οι έλεγχοι δεν μπορούν να γίνουν από τη συντακτική ανάλυση. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

2 Σημασιολογική ανάλυση ΙΙ
Γενικά για τη δημιουργία κώδικα πρέπει να απαντηθούν τα ακόλουθα: Είναι το “x” βαθμωτού τύπου, πίνακας ή συνάρτηση; Έχει δηλωθεί η “x”; Υπάρχουν ονόματα που έχουν δηλωθεί αλλά δεν χρησιμοποιούνται; Ποια από τις δηλώσεις του “x” χρησιμοποιείται όταν γίνεται αναφορά σε αυτό; Είναι η έκφραση “x * y + z” σωστή σε ότι αφορά τον έλεγχο τύπων των ονομάτων; Στην “a[i,j,k]”, έχει πράγματι δηλωθεί το a ως πίνακας τριών διαστάσεων; Τη μεταβλητή είναι η “z”; (ολική, τοπική, static) Πόσες παραμέτρους δέχεται η συνάρτηση “fie()”; Η “*p” αναφέρεται πράγματι στο αποτέλεσμα μιας “malloc()”; Αναφέρονται οι “p” και “q” στην ίδια διεύθυνση μνήμης ή όχι; Η “x” έχει δηλωθεί πριν από τη χρήση της ή όχι; Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

3 Σημασιολογική ανάλυση ΙΙΙ
Όταν οι προαναφερόμενοι έλεγχοι βασίζονται σε πληροφορίες που γίνονται διαθέσιμες κατά τη μεταγλώττιση, τότε λέμε ότι σχετίζονται με τη στατική σημασία του προγράμματος. Όταν βασίζονται σε πληροφορίες που γίνονται διαθέσιμες κατά την εκτέλεση, τότε λέμε ότι σχετίζονται με τη δυναμική σημασία του προγράμματος. Γλώσσες όπως η Lisp και η Smalltalk διεξάγουν σχεδόν το σύνολο της σημασιολογικής ανάλυσης κατά την εκτέλεση του προγράμματος. Γλώσσες όπως η Ada έχουν ιδιαίτερα αυξημένες απαιτήσεις στατικού σημασιολογικού ελέγχου. Η Pascal και η C θα μπορούσαν να ενταχθούν κάπου μεταξύ των δύο προαναφερόμενων περιπτώσεων. Στη συνέχεια θα ασχοληθούμε με τεχνικές που έχουν εφαρμοσθεί με επιτυχία στον έλεγχο της στατικής σημασίας των γλωσσών. Τα αποτελέσματα των ελέγχων αυτών εξαρτώνται από συγκεκριμένες ιδιότητες των λεξικών μονάδων, όπως π.χ. ο τύπος και η τιμή ενός ονόματος κ.α. από πληροφορίες που δε συνοδεύουν τη λεξική μονάδα στο σημείο της εμφάνισής της (π.χ. δηλώσεις μεταβλητών, συναρτήσεων κ.α.) από υπολογισμούς που ίσως χρειάζεται να γίνουν Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

4 Σημασιολογική ανάλυση ΙV
Για τη σημασιολογική ανάλυση δεν υπάρχουν τυποποιημένες τεχνικές όπως στη συντακτική ανάλυση που να εφαρμόζονται σε όλες τις περιπτώσεις. Εναλλακτικές προσεγγίσεις: Περιγραφή της σημασιολογικής ανάλυσης με γραμματική ιδιοτήτων Περιγραφή της σημασιολογικής ανάλυσης με ένα σχήμα μετάφρασης Απευθείας υλοποίηση της σημασιολογικής ανάλυσης με αξιοποίηση των δυνατοτήτων του byacc (εκτέλεση ενεργειών κάθε φορά που γίνεται απλοποίηση σύμφωνα με συγκεκριμένο κανόνα) και του πίνακα συμβόλων Στην υλοποίηση της γλώσσας YAPL του βιβλίου σας χρησιμοποιήσαμε την τελευταία προσέγγιση και ορίσαμε κάποιες σύνθετες δομές δεδομένων, που σε συνδυασμό με μία στοίβα ανάλυσης (που συντηρούμε) και τον πίνακα συμβόλων διεξάγουν τους επιθυμητούς ελέγχους. Όλες οι προαναφερόμενες τεχνικές λέμε ότι αποδίδουν μία μετάφραση με βάση τη σύνταξη. Όταν γίνεται χρήση γραμματικής ιδιοτήτων πρέπει να υπολογισθεί η σειρά εκτέλεσης των ενεργειών της μετάφρασης. Αυτή καθορίζεται από την τοπολογική ταξινόμηση ενός γράφου εξάρτησης ιδιοτήτων. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

5 Σημασιολογική ανάλυση V
Στη δεύτερη και στην τρίτη προσέγγιση η σειρά εκτέλεσης των ενεργειών της μετάφρασης καθορίζεται αυστηρά από τον αλγόριθμο της συντακτικής ανάλυσης που χρησιμοποιείται. Όταν ο μεταγλωττιστής είναι μιας μόνο σάρωσης, τότε η σημασιολογική ανάλυσης γίνεται ταυτόχρονα με τη συντακτική ανάλυση. Όταν χρειάζεται να γίνουν περίπλοκοι σημασιολογικοί έλεγχοι τότε είναι δύσκολη η κατασκευή μεταγλωττιστή μιας μόνο σάρωσης, λόγω των σύνθετων εξαρτήσεων μεταξύ των ιδιοτήτων. Έτσι, οι μεταγλωττιστές πολλαπλής σάρωσης αν και δε μπορούν να αποδώσουν το ίδιο γρήγορη μεταγλώττιση, έχουν περιθώρια διενέργειας πιο περίπλοκων σημασιολογικών ελέγχων. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

6 Γραμματικές ιδιοτήτων Ι
Τι είναι μία γραμματική ιδιοτήτων; Γραμματική ιδιοτήτων είναι μία γραμματική χωρίς συμφραζόμενα, που συνοδεύεται από σημασιολογικούς κανόνες ή αλλιώς εξισώσεις ιδιοτήτων Κάθε σύμβολο σε κανόνα παραγωγής συνοδεύεται από ένα σύνολο τιμών, τις αποκαλούμενες ιδιότητες. Οι εξισώσεις ιδιοτήτων περιγράφουν το πως υπολογίζονται οι τιμές των ιδιοτήτων των συμβόλων. ΠΑΡΑΔΕΙΓΜΑ: Έστω ότι θέλουμε να κατασκευάσουμε ένα διερμηνευτή αριθμητικών εκφράσεων. Ένας τρόπος είναι να επισυνάψουμε στη γραμματική του σχήματος εξισώσεις ιδιοτήτων που περιγράφουν το πως γίνεται ο υπολογισμός της τιμής των συντακτικά ορθών εκφράσεων. S  E E  E + T | E – T   | T T  T * F | T / F | F F  num Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

7 Γραμματικές ιδιοτήτων ΙΙ
Παραγωγές Εξισώσεις ιδιοτήτων S  E S.val  E.val E0  E1 + T E0.val  E1.val + T.val | E1 – T E0.val  E1.val – T.val   | T E0.val  T.val T0  T1 * F T0.val  T1.val * F.val | T1 / F T0.val  T1.val / F.val | F T0.val  F.val F  num F.val  num.val Παρατηρούμε ότι: Οι εξισώσεις ιδιοτήτων χρησιμοποιούν πληροφορίες από τα συμφραζόμενα Στη συγκεκριμένη γραμματική ιδιοτήτων οι ιδιότητες των συμβόλων του αριστερού μέρους υπολογίζονται με βάση τις ιδιότητες των συμβόλων του δεξιού μέρους (ονομάζονται συνθέσιμες ιδιότητες) Το τερματικό σύμβολο num παίρνει τιμή από το λεξικό αναλυτή Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

8 Γραμματικές ιδιοτήτων ΙΙΙ
ΣΥΜΒΟΛΟΣΕΙΡΑ: “10 – 2 * 3” S  E – T  E – T  E – T * F  E – T * num  E – F * num  E – num * num  T – num * num  F – num * num  num – num * num τόξα εξάρτησης S val = 10 – 4 = 4 E - T val = 10 val = 2 * 3 = 6 T F val = 3 T * val = 10 val = 2 F num val = 3 F val = 10 val = 2 num val = 2 num val = 10 Παράγωγο δένδρο με σχόλια (υπολογισμός τιμών ιδιοτήτων) Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

9 Γραμματικές ιδιοτήτων ΙV
Οι ιδιότητες «συνοδεύουν» τους αντίστοιχους κόμβους στο παράγωγο δένδρο (τερματικά και μη τερματικά) Οι κανόνες παραγωγής συνοδεύονται από εξισώσεις που καθορίζουν τον τρόπο υπολογισμού των τιμών των ιδιοτήτων Όταν σε ένα κανόνα το ίδιο σύμβολο εμφανίζεται περισσότερες από μία φορές, τότε για να ξεχωρίσουμε την κάθε εμφάνιση χρησιμοποιούμε δείκτες, δηλ. ο E  E + T γίνεται E0  E1 + T Οι εξισώσεις μαζί με το παράγωγο δένδρο ορίζουν ένα γράφο εξάρτησης τιμών Ο γράφος αυτός για να έχει νόημα πρέπει να είναι μη κυκλικός Συνθέσιμες ιδιότητες Η τιμή τους εξαρτάται μόνο από απογόνους Κληρονομήσιμες ιδιότητες Η τιμή τους εξαρτάται από αδελφούς κόμβους ή προγόνους Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

10 Γραμματικές ιδιοτήτων V
Έστω ένας κανόνας παραγωγής A  X1 X2 ... Xn Συνθέσιμη ιδιότητα: Κάθε ιδιότητα του A που υπολογίζεται από τιμές των X1 , X2 , ... , Xn Παράδειγμα: E0  E1 + T [ E0.val  E1.val + T.val ] Κληρονομήσιμη ιδιότητα: Κάθε ιδιότητα συμβόλου του δεξιού μέρους που υπολογίζεται από τιμές των A , X1 , X2 , ... , Xn Παράδειγμα: Decl  Type L ; [ L.type  Type . type ] Παράδειγμα: L0  L1 , id [ L1.type  L0 . type ] παραγωγή εξίσωση ιδιοτήτων παραγωγή εξίσωση ιδιοτήτων παραγωγή εξίσωση ιδιοτήτων Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

11 Γραμματικές ιδιοτήτων VΙ
ΠΑΡΑΔΕΙΓΜΑ: Number  Sign List Sign  +  | - List  List Bit  | Bit Bit  0  | 1 Η γραμματική αυτή περιγράφει τη σύνταξη δυαδικών αριθμών με πρόσημο Θέλουμε να ορίσουμε τις κατάλληλες εξισώσεις ιδιοτήτων για τον υπολογισμό της δεκαδικής τιμής των συντακτικά ορθών συμβολοσειρών Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

12 Γραμματικές ιδιοτήτων VΙΙ
ΠΑΡΑΔΕΙΓΜΑΤΑ ΑΝΑΛΥΣΗΣ: Number  Sign List  Sign Bit  Sign 1  - 1 Number List Bit 1 Sign - για τη “-1” για τη “-101” Number  Sign List  Sign List Bit  Sign List 1  Sign List Bit 1  Sign List 1 1  Sign Bit 0 1  Sign 1 0 1  - 101 Number List Sign - Bit 1 Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

13 Γραμματικές ιδιοτήτων VΙΙΙ
Σημασιολογικοί κανόνες (εξισώσεις ιδιοτήτων) για τον υπολογισμό της δεκαδικής τιμής ενός δυαδικού αριθμού με πρόσημο Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

14 Γραμματικές ιδιοτήτων ΙΧ
για τη “-1” Μία πιθανή σειρά εκτέλεσης των υπολογισμών: List.pos Sign.neg Bit.pos Bit.val List.val Number.val Όχι εφικτός ο υπολογισμός με μία μόνο διάσχιση του δένδρου. Θα μπορούσαν να υπάρξουν και άλλες περιπτώσεις εκτέλεσης των υπολογισμών Number List Bit 1 Sign - neg  true Bit.pos  0 Bit.val  2Bit.pos  1 List.pos  0 List.val  Bit.val  1 Number.val  - List.val  -1 Σειρά υπολογισμού τιμών: Πρώτα υπολογίζονται αυτές που δεν εξαρτώνται από άλλες Υπολογίζονται οι υπόλοιπες με τη σειρά που οι τιμές από τις οποίες εξαρτώνται γίνονται διαθέσιμες Η σειρά εκτέλεσης των υπολογισμών πρέπει να είναι συμβατή με το γράφο εξάρτησης Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

15 Γραμματικές ιδιοτήτων Χ
Στο σχήμα απεικονίζεται ο γράφος εξάρτησης τιμών για τη “-101”...... μαζί με το παράγωγο δένδρο. Μερικές εξαρτήσεις έχουν διεύθυνση από πάνω προς τα κάτω (ή από το πλάϊ)  κληρονομήσιμες ιδιότητες Μερικές εξαρτήσεις έχουν διεύθυνση από κάτω προς τα πάνω  συνθέσιμες ιδιότητες Number val: -5 pos: 0 val: 5 Sign List neg: true - List pos: 1 val: 4 Bit pos: 0 val: 1 List pos: 2 val: 4 Bit pos: 1 val: 0 1 Bit pos: 2 val: 4 για τη “-101” 1 Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

16 Γραμματικές ιδιοτήτων ΧI
ΜΕΘΟΔΟΙ ΣΗΜΑΣΙΟΛΟΓΙΚΟΥ ΕΛΕΓΧΟΥ: Μέθοδοι που βασίζονται σε γράφο με κόμβους που αντιστοιχούν στα σύμβολα του δένδρου Κατασκευή παράγωγου δένδρου Κατασκευή γράφου εξάρτησης τιμών Τοπολογική ταξινόμηση των κορυφών του γράφου Υπολογισμός των τιμών με τη σειρά της τοπολογικής ταξινόμησης (που καθορίζεται κατά τη μεταγλώττιση) Μέθοδοι βασιζόμενοι σε κανόνες Ανάλυση των σημασιολογικών κανόνων τη στιγμή της δημιουργίας του μεταγλωττιστή Καθορισμός μιας standard σειράς εκτέλεσης των υπολογισμών Υπολογισμός των τιμών σύμφωνα με αυτή τη σειρά για όλες τις συμβολοσειρές της γλώσσας Μέθοδοι που η σειρά εκτέλεσης των υπολογισμών καθορίζεται χωρίς να λαμβάνονται υπόψη οι εξαρτήσεις ιδιοτήτων: συνήθως η σειρά εκτέλεσης είναι αυτή που υπαγορεύεται από τον αλγόριθμο συντακτικής ανάλυσης (byacc) Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

17 Γραμματικές ιδιοτήτων ΧII
Number Sign List Bit val: -5 pos: 0 val: 5 Αν από το προηγούμενο παράδειγμα neg: true - 1 pos: 1 val: 4 pos: 0 val: 1 αφαιρέσουμε το παράγωγο δένδρο ... pos: 2 val: 4 pos: 1 val: 0 pos: 2 val: 4 για “-101” Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

18 Γραμματικές ιδιοτήτων ΧIIΙ
Ο γράφος που προκύπτει εκφράζει τις εξαρτήσεις τιμών για τη συγκεκριμένη περίπτωση συμβολοσειράς. Η πρώτη κατηγορία των μεθόδων σημασιολογικού ελέγχου εκτελεί τους υπολογισμούς αρχής γινομένης από τις ανεξάρτητες τιμές και προχωράει σύμφωνα με τα τόξα εξάρτησης, Οι μέθοδοι που βασίζονται σε κανόνες προσπαθούν να ανιχνεύσουν τη σειρά εκτέλεσης των υπολογισμών τη στιγμή της δημιουργίας του μεταγλωττιστή. Για το σκοπό αυτό αναλύουν τους σημασιολογικούς κανόνες. Όλες οι άλλες μέθοδοι αγνοούν τη δομή του γράφου. val: -5 pos: 0 val: 5 neg: true pos: 1 val: 4 pos: 0 val: 1 pos: 2 val: 4 pos: 1 val: 0 pos: 2 val: 4 για την “-101” Ο γράφος εξάρτησης πρέπει να είναι μη κυκλικός Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

19 Γραμματικές ιδιοτήτων ΧΙV
Ένας γράφος εξάρτησης τιμών λέμε ότι είναι κυκλικός αν περιέχει κύκλο. Μία γραμματική ιδιοτήτων λέμε ότι είναι μη κυκλική αν δεν υπάρχει παράγωγο δένδρο με κύκλο εξάρτησης τιμών των ιδιοτήτων των κόμβων του. Αν υπάρχει κύκλος, τότε δε μπορεί να καθορισθεί η σειρά υπολογισμού των τιμών. Ο έλεγχος του αν μία γραμματική ιδιοτήτων είναι μη κυκλική χαρακτηρίζεται από εκθετική πολυπλοκότητα. Εναλλακτικά, ελέγχεται αν η γραμματική είναι “ισχυρά μη κυκλική”, μία ιδιότητα λιγότερο γενική από τη μη κυκλικότητα. Ο έλεγχος του αν μία γραμματική είναι ισχυρά μη κυκλική μπορεί να γίνει σε πολυωνυμικό χρόνο και αν αυτό ισχύει, τότε μπορεί να σχεδιασθεί ένας αναδρομικός αλγόριθμος μετάφρασης, δηλαδή υπολογισμού τιμών, κατά τη δημιουργία του μεταγλωττιστή. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

20 S-Γραμματικές ιδιοτήτων I
Άρα οι S-γραμματικές ιδιοτήτων μπορούν εύκολα να χρησιμοποιηθούν με αλγορίθμους ανάλυσης LR ως εξής Αποθηκεύονται οι ιδιότητες των συμβόλων στη στοίβα της ανάλυσης Όταν γίνεται απλοποίηση τότε Τα σύμβολα του δεξιού μέρους της παραγωγής και οι ιδιότητές τους βρίσκονται ήδη στη στοίβα Υπολογίζονται οι συνθέσιμες ιδιότητες του συμβόλου του αριστερού μέρους χρησιμοποιώντας τις τιμές των συμβόλων του δεξιού μέρους Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

21 S-Γραμματικές ιδιοτήτων IΙ
Παραγωγή E0  E1 + T Σημασιολογικός κανόνας E0.val  E1.val + T.val κορυφή στοίβας ανάλυσης κορυφή στοίβας ανάλυσης T T.val μετά από την απλοποίηση + E1 E1.val E0 E0.val Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

22 L-Γραμματικές ιδιοτήτων Ι
Δοθέντος συμβόλου Xi στο δεξί μέρος της παραγωγής A  X1 X2 ... Xn , κάθε κληρονομήσιμη ιδιότητα του Xi μπορεί να εξαρτάται: Από ιδιότητες του A Από ιδιότητες των X1 , X2 , ..., Xi-1 που βρίσκονται αριστερά από το Xi στο δεξί μέρος της παραγωγής Οι τιμές των L-γραμματικών ιδιοτήτων μπορούν να υπολογισθούν σε μία μόνο depth-first-search διάσχιση του δένδρου: dfsvisit(n: κόμβος) Για (κάθε απόγονο m του n από αριστερά προς τα δεξιά) επανέλαβε υπολόγισε τις κληρονομήσιμες ιδιότητες του m; dfsvisit(m); Τέλος επανάληψης υπολόγισε τις συνθέσιμες ιδιότητες του n; Τέλος dfsvisit Οι κόμβοι που αναφέρονται στον αλγόριθμο είναι οι κόμβοι του δένδρου Η διάσχιση ξεκινά με κλήση της dfsvisit για τη ρίζα του δένδρου Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

23 L-Γραμματικές ιδιοτήτων ΙΙ
Μπορούμε να κάνουμε μετάφραση L-γραμματικών ιδιοτήτων με καθοδική ανάλυση αν η γραμματική χωρίς συμφραζόμενα είναι LL(1) Μπορούμε να επεκτείνουμε έναν αναλυτή προβλέπουσας αναδρομικής κατάβασης με σημασιολογικούς κανόνες, έτσι να υπολογίζονται οι τιμές των ιδιοτήτων παράλληλα με την ανάλυση της εισόδου Οι ανοδικοί LR αναλυτές μπορούν να εκτελέσουν μετάφραση L-γραμματικών ιδιοτήτων χρησιμοποιώντας μη τερματικά σύμβολα σήμανσης (τα εισάγουμε όπου εξυπηρετεί ενδιάμεσα, στο δεξί μέρος των κανόνων), που είναι απαλείψιμα (έχουν παραγωγή που οδηγεί σε ε) Τα μη τερματικά σύμβολα σήμανσης χρησιμοποιούνται για την εκτέλεση ενεργειών «περάσματος» κληρονομήσιμων τιμών στη στοίβα της ανάλυσης Οι ανοδικοί αναλυτές μπορούν με ασφάλεια να χρησιμοποιήσουν το προαναφερόμενο τέχνασμα για τη μετάφραση L-γραμματικών ιδιοτήτων όπου η γραμματική είναι LL(1) Σε όλες τις άλλες περιπτώσεις μπορεί ο προαναφερόμενος μετασχηματισμός της γραμματικής να προκαλέσει συγκρούσεις ώθησης – απλοποίησης Στο byacc το τέχνασμα αυτό εφαρμόζεται με χρήση “embedded actions” (περισσότερες λεπτομέρειες στα manuals & σελ. 203 του βιβλίου) Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

24 Σχήματα μετάφρασης Ι Στις γραμματικές ιδιοτήτων δε διατυπώνεται η σειρά υπολογισμού τιμών ιδιοτήτων των συμβόλων. Οι εξισώσεις ιδιοτήτων επισυνάπτονται στα δεξιά των κανόνων παραγωγής Στην πιο γενική περίπτωση, για τον καθορισμό της σειράς υπολογισμού των τιμών απαιτείται η δημιουργία ενός γράφου εξάρτησης τιμών Σε ένα σχήμα μετάφρασης η σειρά υπολογισμού τιμών καθορίζεται με την απευθείας τοποθέτηση των ενεργειών στις επιλεγείσες θέσεις του δεξιού μέρους των κανόνων παραγωγής Μία κληρονομήσιμη ιδιότητα ενός συμβόλου του δεξιού μέρους πρέπει να έχει υπολογισθεί σε ενέργεια πριν από αυτό το σύμβολο Μία ενέργεια δεν πρέπει να αναφέρεται σε συνθέσιμη ιδιότητα συμβόλου που βρίσκεται δεξιά της ενέργειας Μία συνθέσιμη ιδιότητα για το μη τερματικό σύμβολο του αριστερού μέρους μπορεί να υπολογισθεί μόνο μετά τον υπολογισμό όλων των ιδιοτήτων στις οποίες αναφέρεται (την τοποθετούμε στο τέλος του δεξιού μέρους του κανόνα) Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

25 Σχήματα μετάφρασης ΙΙ Παραγωγές Σημασιολογικοί κανόνες
Καταχώρηση μεταβλητών στον πίνακα συμβόλων. Από θεωρητικής απόψεως αυτός ο κανόνας δεν επιτρέπεται σε μία γραμματική ιδιοτήτων. Μιλάμε για μία ad hoc μετάφραση. D  T L L.in  T . type T  int T.type  integer | float T.type  float L  L1 , id L1.in  L . in , enter(id.spelling, L.in) | id enter(id.spelling, L.in) Σχήμα μετάφρασης: Οι σημασιολογικές ενέργειες τοποθετούνται στα δεξιά μέρη των παραγωγών καθορίζοντας τη σειρά εκτέλεσής τους. D  T { L.in  T . type } L T  int { T.type  integer } | float { T.type  float } L  { L1.in  L . in } L1 , id {enter(id.spelling, L.in)} | id { enter(id.spelling, L.in) } Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

26 Σχήματα μετάφρασης ΙΙΙ
ΠΑΡΑΔΕΙΓΜΑ: Το σχήμα μετάφρασης, που ακολουθεί, μετατρέπει αριθμητικές εκφράσεις ένθετης μορφής στην αντίστοιχη επιθεματική μορφή. Έτσι, η μετάφραση της έκφρασης, ((a+b)*c)/(d-e*f)+3 δίνει ως αποτέλεσμα την ab+c*def*-/3+ έκφραση = όρος υπ_όροι. υπ_όροι = “+” όρος {print(“+”.λεξ_μονάδα)} υπ_όροιR | “-” όρος {print(“-”.λεξ_μονάδα)} υπ_όροιR | ε. όρος = παράγοντας υπ_παραγ. υπ_παραγ = “*” παράγοντας {print(“*”.λεξ_μονάδα)} υπ_παραγR | “/” παράγοντας {print(“/”.λεξ_μονάδα)} υπ_παραγR παράγοντας = “(” έκφραση “)” | “αριθμός” {print(“αριθμός ”.τιμή)}. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

27 Παράδειγμα γραμματικής ιδιοτήτων: συντακτικό δένδρο
Γραμματική ιδιοτήτων για την ανάπτυξη του συντακτικού δένδρου των εκφράσεων. ιδιότητα nptr δείκτης σε κόμβο δένδρου ιδιότητα ID.entry η εγγραφή ενός ονόματος στον πίνακα συμβόλων mknode δημιουργία νέου κόμβου mkleaf δημιουργία φύλλου στο δένδρο Εn+1 = Εn-1 “+” Εn. [Εn+1.nptr = mknode(‘+’, Εn-1.nptr, Εn.nptr) ] Εn+1 = Εn-1 “*” Εn. [Εn+1.nptr = mknode(‘*’, Εn-1.nptr, Εn.nptr) ] Εn+1 = “(” Εn “)”. [Εn+1.nptr = Εn.nptr ] Εn+1 = “ID”. [Εn+1.nptr = mkleaf(ID, ID.entry) ] Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

28 Παράδειγμα γραμματικής ιδιοτήτων: έλεγχος τύπων I
βασικοί τύποι (λογικός τύπος, ακέραιοι, πραγματικοί κ.α.) και οριζόμενοι από τον προγραμματιστή, που μπορούν να έχουν το δικό τους όνομα ο τύπος ενός δομικού στοιχείου της γλώσσας περιγράφεται από μία έκφραση τύπων, όπου συνδυάζονται ένας ή περισσότεροι απλοί τύποι με δομητές τύπων τύπος πίνακα: array(index_type, component_type) εγγραφή από δύο πεδία: type1 x type2 δείκτης: pointer(type) συνάρτηση πρόσθεσης δύο αριθμών: int x int  int Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

29 Παράδειγμα γραμματικής ιδιοτήτων: έλεγχος τύπων II
έλεγχος συνέπειας τύπων: υλοποιείται με μία ανοδική διάσχιση του συντακτικού δένδρου όπου οι τύποι των φύλλων (ονόματα, σταθερές) εξετάζονται με βάση τις αντίστοιχες δηλώσεις τους στον πίνακα συμβόλων για κάθε κόμβο που αντιστοιχεί σε τελεστή γίνεται έλεγχος αν οι τύποι των υποδένδρων είναι επιτρεπτοί για τη συγκεκριμένη πράξη ονομαστική ισοδυναμία τύπων: πολύ περιοριστική type my_int = integer; var x: integer; y: my_int; x:=y; δομικά ισοδύναμες εκφράσεις: ανν είναι του ίδιου βασικού τύπου ή οι τύποι τους προκύπτουν μετά από εφαρμογή του ίδιου δομητή σε δομικά ισοδύναμους τύπους Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

30 Παράδειγμα γραμματικής ιδιοτήτων: δηλώσεις τύπων
δηλώσεις μεταβλητών – δείκτη και πινάκων decl = type varlist. [varlist.in = type.name ] type = “INT”. [type.name = “integer” ] type = “FLOAT”. [type.name = “float” ] varlist = varlistR “,” “ID”. [varlistR.in = varlist.in addtype(ID.entry, varlist.in) ] varlist = varlistR “,” “ID” “[” “Num” “]”. [varlistR.in = varlist.in addtype(ID.entry, array(0… “Num”.val –1, varlist.in))] varlist = varlistR “,” “*” “ID”. [varlistR.in = varlist.in addtype(ID.entry, pointer(varlist.in)) ] varlist = “ID”. [addtype(ID.entry, varlist.in) ] varlist = “ID” “[” “Num” “]”. [ addtype(ID.entry, array(0… “Num”.val –1, varlist = “*” “ID”. [ addtype(ID.entry, pointer(varlist.in)) ] Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

31 Παράδειγμα σχήματος μετάφρασης: έλεγχος τύπων αριθμητικών εκφράσεων
Ε = “literal”. {E.type = “char” } E = “Num”. {E.type = “integer” } E = “ID”. {E.type = lookup(ID.entry) } E = E1 “mod” E2. {αν (E1.type = = “integer” και E2.type = = “integer”) τότε E.type = “integer”; αλλιώς E.type = “type error”; } E = E1 “[” E2 “]”. {αν (E2.type = = “integer” και E1.type = = array(i_type,b_type)) τότε E.type = b_type; E = “*” ER. {αν (ER.type = = pointer(b_type)) τότε E = E1 “= =” E2 . {αν (E1.type = = E2.type) τότε E.type = “boolean”; Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

32 Πίνακας συμβόλων Ι Ο προγραμματιστής επιλέγει ονόματα για τις διάφορες οντότητες, που πρόκειται να επεξεργαστεί ο μεταγλωττιστής: - σταθερές - τύποι - ετικέτες εντολών - συναρτήσεις - μεταβλητές (περιοχή δεδομένων που περιέχει μία απλή ή δομημένη τιμή) - αρχεία, συσκευές - μακροεντολές Οι οντότητες αυτές περιγράφονται από ένα σύνολο ιδιοτήτων, όπως π.χ. Το όνομα, η εμβέλεια, ο τύπος, η τιμή, το μέγεθος (χώρος μνήμης) κ.α. Ο μεταγλωττιστής συνδέει τα ονόματα των οντοτήτων με τις ιδιότητές τους μέσω μιας δομής που ονομάζεται κόμβος συμβόλου: εγγραφή που ως πεδία έχει τις ιδιότητες της οντότητας. Οι κόμβοι συμβόλων αποτελούν μέρος ενός πίνακα συμβόλων. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

33 Πίνακας συμβόλων ΙΙ Ο πίνακας συμβόλων σχηματίζεται κατά τη συντακτική ανάλυση και χρησιμοποιείται ξανά κατά το στατικό σημασιολογικό έλεγχο, τη δέσμευση χώρου μνήμης και τη δημιουργία κώδικα. Παραμένει στην κύρια μνήμη για να χρησιμοποιηθεί σε κάθε μία από τις προαναφερθείσες επεξεργασίες. Κάθε αναφορά σε όνομα του πηγαίου κώδικα έχει ως αποτέλεσμα την προσπέλαση του πίνακα συμβόλων, για την εύρεση του κόμβου συμβόλου που αντιστοιχεί στο όνομα με σκοπό την καταχώρηση νέας τιμής ή την ανάκτηση μιας υπάρχουσας. Ο πίνακας συμβόλων πρέπει να επιτρέπει την ταχεία προσπέλαση των καταχωρήσεων. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

34 Πίνακας συμβόλων ΙΙΙ Λειτουργίες που πρέπει να υποστηρίζει ένας πίνακας συμβόλων: Δημιουργία πίνακα Αναζήτηση κάποιου κόμβου συμβόλου στον πίνακα Εισαγωγή νέου κόμβου Διαγραφή ενός κόμβου Καταστροφή του πίνακα Η δομή του πίνακα συμβόλων σχεδιάζεται έτσι ώστε να υπάρχει η δυνατότητα αποθήκευσης των ιδιοτήτων, για κάθε τύπο καταχώρησης: δηλώσεις σταθερών δηλώσεις τύπων δηλώσεις μεταβλητών δηλώσεις συναρτήσεων Πιθανό να επιλέγεται η χρήση περισσοτέρων του ενός πίνακα συμβόλων. Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

35 Πίνακας συμβόλων ΙV Οργάνωση πίνακα συμβόλων:
ταχύτητα προσπέλασης καταχωρήσεων ευκολία εισαγωγής ή διαγραφής κόμβου συμβόλου διαχείριση επιπρόσθετων απαιτήσεων μνήμης Οργάνωση ακολουθίας: σύμφωνα με χρονική σειρά αφίξεως κόμβων πλήθος αναζητήσεων Μ.Ο. (n+1)/2 για επιτυχείς n για ανεπιτυχείς αναζητήσεις εισαγωγή στην n+1 θέση διαγραφή από τη θέση q: μετακίνηση από την q+1 ως την n Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

36 Πίνακας συμβόλων V Σειριακή οργάνωση: αλφαβητικά
πλήθος αναζητήσεων Μ.Ο. log2 n για ανεπιτυχείς και επιτυχείς αναζητήσεις εισαγωγή σημαντικό κόστος διαγραφή: απαιτείται μετατόπιση Δενδρικές δομές: δυαδικά δένδρα αναζήτησης Πιο διαδεδομένη οργάνωση: πίνακας κατακερματισμού (Hash): απαρτίζεται από ένα σύνολο θέσεων υποδοχής αριθμημένες από το 0 μέχρι το μέγεθος του πίνακα μείον ένα Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

37 Πίνακας συμβόλων VΙ Πιο διαδεδομένη οργάνωση: πίνακας κατακερματισμού (Hash): μία συνάρτηση Hash μετατρέπει τη συμβολοσειρά του ονόματος σε μία ακέραιη τιμή που κυμαίνεται στα όρια του μεγέθους του πίνακα οι καταχωρήσεις θα πρέπει να κατανέμονται όσο το δυνατό περισσότερο ομοιόμορφα διαχείριση συγκρούσεων: 1. ανοικτό Hash 2. αλυσίδες συνδέσμων αν a= n/m όπου m ο αριθμός θέσεων του πίνακα τότε για την περίπτωση 2 ο μέσος αριθμός αναζητήσεων είναι 1 + a/2 για επιτυχείς αναζητήσεις a + e-a για ανεπιτυχείς αναζητήσεις Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

38 Πίνακας συμβόλων VΙΙ Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017

39 Πίνακας συμβόλων VI Τμ. Πληροφορικής, Α.Π.Θ. Κυριακή, 9 Απριλίου 2017


Κατέβασμα ppt "Σημασιολογική ανάλυση Ι"

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


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