1 / 39

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

Σημασιολογική ανάλυση Ι. Εκτός από τη συντακτική ορθότητα ενός προγράμματος μας ενδιαφέρει και η εκτέλεση κάποιων άλλων ελέγχων, που δυστυχώς δεν είναι δυνατό να περιγραφούν από μια γραμματική χωρίς συμφραζόμενα:. fie(a,b,c,d) int a, b, c, d; { … } fee() {

maili
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 δεν είναι συμβολοσειρά Όλοι αυτοί οι έλεγχοι δεν μπορούν να γίνουν από τη συντακτική ανάλυση. Τμ. Πληροφορικής, Α.Π.Θ.

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

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

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

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

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

  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παίρνει τιμή από το λεξικό αναλυτή Τμ. Πληροφορικής, Α.Π.Θ.

  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 val = 3 T F * T val = 10 val = 2 val = 3 F num F val = 10 val = 2 num val = 2 num val = 10 Παράγωγο δένδρο με σχόλια (υπολογισμός τιμών ιδιοτήτων) Τμ. Πληροφορικής, Α.Π.Θ.

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

  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 ] παραγωγή εξίσωση ιδιοτήτων παραγωγή εξίσωση ιδιοτήτων παραγωγή εξίσωση ιδιοτήτων Τμ. Πληροφορικής, Α.Π.Θ.

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

  12. Number  Sign List  Sign Bit  Sign 1  - 1 Number για τη “-1” Sign List List - Bit Bit Bit Number List 0 1 1 Sign List - Bit 1 Γραμματικές ιδιοτήτων VΙΙ ΠΑΡΑΔΕΙΓΜΑΤΑ ΑΝΑΛΥΣΗΣ: για τη “-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 Τμ. Πληροφορικής, Α.Π.Θ.

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

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

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

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

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

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

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

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

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

  22. L-Γραμματικές ιδιοτήτων Ι • Αν η κληρονομήσιμη ιδιότητα ενός συμβόλου υπολογίζεται με βάση τιμές από πρόγονο ή/και από σύμβολα που βρίσκονται στον κανόνα αριστερά του, τότε η γραμματική αυτή ονομάζεται 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για τη ρίζα του δένδρου Τμ. Πληροφορικής, Α.Π.Θ.

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

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

  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) } Τμ. Πληροφορικής, Α.Π.Θ.

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

  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) ] Τμ. Πληροφορικής, Α.Π.Θ.

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

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

  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.in))] varlist = “*” “ID”. [ addtype(ID.entry, pointer(varlist.in)) ] Τμ. Πληροφορικής, Α.Π.Θ.

  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.type = “type error”;} E = “*” ER. {αν (ER.type = = pointer(b_type)) τότε E.type = b_type; αλλιώς E.type = “type error”;} E = E1 “= =” E2 . {αν (E1.type = = E2.type) τότε E.type = “boolean”; αλλιώς E.type = “type error”;} Τμ. Πληροφορικής, Α.Π.Θ.

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

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

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

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

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

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

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

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

More Related