ΕΑΠ – ΠΛΗ24 2η ΟΣΣ
Συντακτική Ανάλυση Είσοδος: ακολουθία tokens από τον Λεκτικό Αναλυτή Σκοπός: να ελεγχθεί οτι η ακολουθία αυτή είναι μια πρόταση της δοθείσας γραμματικής Βασικές Μέθοδοι: Bottom-up, Top-down Απαιτούνται κατάλληλες γραμματικές για διευκόλυνση της B-U ή T-D συντακτικής ανάλυσης ΕΑΠ – ΠΛΗ24
Bottom-up συντακτική ανάλυση Shift-reduce Από μια συμβολοσειρά εισόδου w προχωράμε προς τη ρίζα. Παράδειγμα: S aΑcBe A Ab | b B d w = abbcde abbcde aAbcde aAcde aAcBe S υλοποιείται με τη βοήθεια μιας στοίβας (stack) Operator Precedence: κατάλληλη για συντακτική ανάλυση αριθμητικών εκφράσεων ΕΑΠ – ΠΛΗ24
Τop-down συντακτική ανάλυση Recursive descent – Αναδρομική κατάβαση Ξεκινώντας από την αρχική μεταβλητή της γραμματικής προσπαθούμε να δημιουργήσουμε τη συμβολοσειρά. Παράδειγμα: S cΑd A ab | a w = cad S cAd cabd : backtracking (1) (1) cad Υλοποίηση: για κάθε τερματικό σύμβολο μπορούμε να δημιουργήσουμε μια ρουτίνα ΕΑΠ – ΠΛΗ24
Προβλήματα Top-down ανίχνευσης Αριστερή Αναδρομή (left recursion) αν υπάρχει κανόνας της μορφής Α Αα (οδηγεί σε ατελείωτη ανακύκλωση) Backtracking: χρονοβόρα διαδικασία Επηρεάζεται από τη σειρά εφαρμογής των κανόνων. ΕΑΠ – ΠΛΗ24
Όροι καταλληλότητας μιας γραμματικής για αναδρομική κατάβαση Όροι καταλληλότητας μιας γραμματικής για αναδρομική κατάβαση Να μην είναι διφορούμενη Να μην υπάρχουν αριστερές αναδρομές Κάθε κανόνας που περιέχει Ν εναλλακτικά δεξιά μέρη να ξαναγραφεί έτσι ώστε τουλάχιστον τα Ν-1 να αρχίζουν με τερματικό σύμβολο Να είναι παραγοντοποιημένη ΕΑΠ – ΠΛΗ24
Απαλοιφή αριστερής αναδρομής Α Αα | β, όπου β δεν αρχίζει με Α: Α βΑ’ Α’ αΑ’ | ε Παράδειγμα: S -> A | aS A -> Sb | Ab | c Έμμεση αναδρομή A -> Sb => A -> Ab | aSb | c Άμεση Αναδρομή A -> Ab A -> aSbB | cB B -> bB | ε ΕΑΠ – ΠΛΗ24
Αριστερά παραγοντοποίηση Η απαλοιφή αριστερών αναδρομών δεν αρκεί: S if C then S else S | if C then S Ο μεταγλωττιστής δεν θα ήξερε ποιός κανόνας είναι προτιμότερος: Γενική μορφή παραγοντοποίησης Α αβ | αγ γίνεται Α αΑ’ Α’ β | γ Παράδειγμα 4.7: S iCtS | iCtSeS | a γίνεται S iCtSS’ | a S’ eS | ε ΕΑΠ – ΠΛΗ24
Συντακτικά Κατευθυνόμενη Μετάφραση (Τετράδες) PLACE:Θέση όπου βρίσκεται αποθηκευμένη η τιμή μιας l-value ή μιας r-value TYPE: Ο τύπος μιας l-value ή μιας r-value ΝΕΧΤ: Λίστα από ετικέτες τετράδων που περιέχουν άλματα στην επόμενη εντολή TRUE,FALSE:Λίστα από ετικέτες τετράδων που περιέχουν άλματα στον κώδικα που πρέπει να εκτελεστεί, αν μια συνθήκη είναι αληθής ή ψευδής NEXTQUAD():Επιστρέφει τον αριθμό της επόμενης τετράδας GENQUAD(op,x,y,z):Γεννά την επόμενη τετράδα op,x,y,z ΝΕWTEMP(t): Δημιουργεί μια νέα προσωρινή μεταβλητή τύπου t EMPTYLIST(): Δημιουργεί μια κενή λίστα ετικετών τετράδων ΕΑΠ – ΠΛΗ24
Εμβέλεια Μεταβλητών (1) ΕΑΠ – ΠΛΗ24
Εμβέλεια μεταβλητών (2) PROCEDURE main; TYPE t = FLOAT; VAR x,y,z:INTEGER; PROCEDURE sub1; TYPE t = STRING; VAR a,y,z : BOOLEAN; PROCEDURE sub2; VAR a,b,z: t; BEGIN (* body of sub2 *) END (* body of sub1 *) ΒEGIN (* body of main *) Ετικέτα Είδος Τύπος main Ρουτίνα x Μεταβλητή INTEGER sub1 Ρουτίνα t Τύπος (= STRING) y Μεταβλητή BOOLEAN sub2 Ρουτίνα a Μεταβλητή t (= STRING) b Μεταβλητή t (= STRING) z Μεταβλητή t (= STRING) ΕΑΠ – ΠΛΗ24