Βοηθητικές έννοιες (i) Σύνολα FIRST Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την Αν a τότε a FIRST Αν τότε FIRST Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 58 / 216
Βοηθητικές έννοιες (ii) Σύνολα FOLLOW Έστω μη τερματικό σύμβολο Το σύνολο FOLLOW EOF περιέχει τα τερματικά σύμβολα που μπορούν να ακολουθούν το στη διάρκεια μιας παραγωγής Αν το μπορεί να είναι το τελευταίο σύμβολο σε μια παραγωγή, τότε EOF FOLLOW Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 59 / 216
Βοηθητικές έννοιες (ii) Σύνολα FOLLOW Έστω μη τερματικό σύμβολο Το σύνολο FOLLOW EOF περιέχει τα τερματικά σύμβολα που μπορούν να ακολουθούν το στη διάρκεια μιας παραγωγής Αν το μπορεί να είναι το τελευταίο σύμβολο σε μια παραγωγή, τότε EOF FOLLOW Αν a τότε a FOLLOW Αν τότε EOF FOLLOW Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 59 / 216
Υπολογισμός FIRST (i) FIRST FIRST a a αν FIRST τότε FIRST FIRST αν FIRST τότε FIRST FIRST FIRST για κάθε κανόνα, πρέπει FIRST FIRST Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 60 / 216
Υπολογισμός FIRST (ii) Παράδειγμα FIRST E id ( FIRST T id ( FIRST F id ( FIRST E + FIRST T * E T E E E + T E T F T T T * F T F ( E ) F id Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 61 / 216
Υπολογισμός FOLLOW (i) EOF FOLLOW για κάθε κανόνα FIRST FOLLOW αν FIRST τότε FOLLOW FOLLOW Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 62 / 216
Υπολογισμός FOLLOW (ii) Παράδειγμα FOLLOW E ) EOF FOLLOW T + ) EOF FOLLOW F * + ) EOF FOLLOW E ) EOF FOLLOW T + ) EOF FIRST E + FIRST T * E T E E E + T E T F T T T * F T F ( E ) F id Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 63 / 216
ΣΑ top-down (i) Η συντακτική ανάλυση ξεκινά από τη ρίζα Κάθε φορά, αναζητά: το μη τερματικό σύμβολο που θα αντικατασταθεί συνήθως επιλέγεται το αριστερότερο τον κανόνα παραγωγής που θα εφαρμοστεί βάσει των επόμενων λεκτικών μονάδων στη συμβολοσειρά εισόδου: LL( ) Επαναλαμβάνεται μέχρι να εξαντληθούν τα μη τερματικά Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 86 / 216
Γραμματικές LL(1) Απαραίτητες προϋποθέσεις: Απουσία αριστερής αναδρομής (άμεσης ή έμμεσης) Απουσία κοινού προθέματος σε εναλλακτικούς κανόνες Μερικές φορές είναι δυνατός ο μετασχηματισμός μιας γραμματικής σε ισοδύναμη LL(1) απαλοιφή αριστερής αναδρομής αριστερή παραγοντοποίηση Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 87 / 216
Μετασχηματισμός σε LL(1) Αντικατάσταση A B A A B Αριστερή παραγοντοποίηση A A B B Απαλοιφή άμεσης αριστερής αναδρομής A A A A B B B B B Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 88 / 216
ΣΑ αναδρομικής κατάβασης A μετατρέπεται σε κώδικα της μορφής: if token FIRST then κώδικας για την αναγνώριση της else if token FIRST then κώδικας για την αναγνώριση της else if FIRST FIRST then συντακτικό σφάλμα else if token FOLLOW then συντακτικό σφάλμα end if Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 89 / 216
ΣΑ LL(1) (i) Χρησιμοποιούν μια στοίβα όπου τοποθετούν σύμβολα της γραμματικής αρχικά μόνο το Κάθε φορά εξετάζεται η κορυφή της στοίβας: Αν είναι τερματικό σύμβολο και είναι το ίδιο με το επόμενο της συμβολοσειράς εισόδου, τότε αφαιρούνται και τα δύο Αν είναι μη τερματικό σύμβολο, τότε ανάλογα με το επόμενο της συμβολοσειράς εισόδου εφαρμόζεται κάποιος κανόνας Επιτυχία: η στοίβα και η συμβολοσειρά εισόδου είναι άδειες Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 90 / 216
ΣΑ LL(1) (ii) συµβολοσειρά εισόδου a 1 a 2... a n EOF Ο αλγόριθμος κατασκευής του πίνακα ορίζει την οικογένεια των γλωσσών LL(1) x m... κορυφή επόµενο σύµβολο Πίνακας M συντακτικής ανάλυσης LL(1) x 2 x 1 στοίβα Συντακτικός Αναλυτής LL(1) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 91 / 216
Κατασκευή ΣΑ LL(1) E T E E + T E T F T T * F T F ( E ) id FIRST E FIRST T FIRST F id ( FIRST E + FIRST T * FOLLOW E FOLLOW E ) EOF FOLLOW T FOLLOW T + ) EOF FOLLOW F * + ) EOF id + * ( ) EOF E E TE E TE E E +TE E E T T FT T FT T T T *FT T T F F id F (E) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 92 / 216
Λειτουργία ΣΑ LL(1) E id + id * id EOF E T E E T id + id * id EOF T F T E T F id + id * id EOF F id E T id id + id * id EOF E T + id * id EOF T E + id * id EOF E + T E E T + + id * id EOF E T id * id EOF T F T E T F id * id EOF F id E T id id * id EOF E T * id EOF T * F T E T F * * id EOF E T F id EOF F id E T id id EOF E T EOF T E EOF E EOF αναγνώριση Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 93 / 216