Μεαγλωισές - openclass.teiwm.gr · •Συντακτικό δένδρο....
Transcript of Μεαγλωισές - openclass.teiwm.gr · •Συντακτικό δένδρο....
Μεταγλωττιστές
Ενότητα 7: Συντακτική ανάλυση (Μέρος 1ο)
Αγγελική Σγώρα
Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης
• Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
• Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
2
Χρηματοδότηση • Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα
πλαίσια του εκπαιδευτικού έργου του διδάσκοντα.
• Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού.
• Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
3
Περιεχόμενα ενότητας (1/3)
• Φάσεις της μεταγλώττισης.
• Συντακτική ανάλυση.
• Γραμματικές.
• Ορισμός γραμματικών.
• Ιεραρχία Chomsky.
• Γραμματικές και συντακτική ανάλυση.
6
Περιεχόμενα ενότητας (2/3)
• Διαδικασία της συντακτικής ανάλυσης.
• Συμβολισμοί Backus-Naur Form (BNF) και Extended BNF (EBNF).
• Παράγωγα και συντακτικά δένδρα.
• Γραμματικές με ασάφειες.
• Αναπαράσταση παράγωγου δένδρου.
• Καθοδική ανάλυση.
7
Περιεχόμενα ενότητας (3/3)
• Καθοδική ανάλυση με οπισθοδρόμηση.
• Ανάλυση προβλέπουσας αναδρομικής κατάβασης.
• Ανάλυση LL(1).
• Αλγόριθμος ανάλυσης LL(1).
• Απομάκρυνση αριστερής αναδρομικότητας.
• Αριστερή παραγοντοποίηση.
8
Συντακτική ανάλυση (1/2)
• Είσοδος.
– Λεξικές μονάδες.
• Παράγονται κατά τη λεξική ανάλυση.
• Προσπαθεί να ανιχνεύσει τη δομή του προγράμματος.
10
Συντακτική ανάλυση (2/2)
• Αποτέλεσμα.
– Παράγεται μία δομή.
• Ανάλογα με τη μορφή της αποκαλείται είτε παράγωγο είτε συντακτικό δένδρο.
• Πώς μπορεί να παραστασταθεί η σύνταξη της γλώσσας με ακρίβεια και ευκολία;
• Θα πρέπει να βρεθεί η κατάλληλη γραμματική.
11
Γραμματικές (1/6)
12
• Γραμματική. – Ένα σύστημα παραγωγής συμβολοσειρών G.
• Που ορίζεται από μία διατεταγμένη τετράδα της μορφής (T, N,P, S).
• Τ: Αλφάβητο τερματικών συμβόλων.
• Ν: Αλφάβητο μη τερματικών συμβόλων. • Τ∩Ν=∅.
Γραμματικές (2/6)
13
• Ρ: Πεπερασμένο σύνολο κανόνων παραγωγής. • U→ ū. • Με U∈N και ū ∈(Ν ∪ Τ)u.
– Το σύνολο δηλαδή των λέξεων με μήκος μεγαλύτερο ή ίσο του μηδενός.
– Που μπορεί να σχηματισθούν από τα στοιχεία του (Ν ∪ Τ), λεξικού της G: » {x1,…,xn|xi ∈ Ν ∪ Τ, i=1,… }.
Γραμματικές (3/6)
• S: Αρχικό σύμβολο της γραμματικής. – Μη τερματικό σύμβολο.
• Παραγωγή συμβολοσειρών.
– Ξεκινούμε με τη συμβολοσειρά που περιέχει μόνο το αρχικό σύμβολο.
– Από τη συμβολοσειρά αυτή, παράγεται μία νέα.
• Μία υποσυμβολοσειρά της που αντιστοιχεί σε αριστερό μέλος κανόνα, αντικαθίσταται με το αντίστοιχο δεξί μέλος.
14
Γραμματικές (4/6)
• Παραγωγής συμβολοσειρών (Συνέχεια).
• Η διαδικασία επαναλαμβάνεται όσες φορές κριθεί απαραίτητο.
– Όταν προκύψει μία συμβολοσειρά αποτελούμενη μόνο από τερματικά σύμβολα.
• Λέμε ότι αυτή η συμβολοσειρά παράγεται από τη γραμματική.
15
Γραμματικές (5/6)
• Μία γλώσσα.
– Παράγεται από μία γραμματική.
– Ορίζεται ως � L(G) = { α ∈ T * | S ⇒+ α }.
• �Το σύµβολο +.
– Σηµαίνει ότι διενεργούνται ένα ή περισσότερα βήµατα για την παραγωγή της συµβολοσειράς.
16
Γραμματικές (6/6)
• Μία γραμματική G=(T,N,P,S).
– Ορίζει µία γλώσσα L(G) ⊆ T *.
• �Μια γλώσσα χαρακτηρίζεται ως τυπική.
– Όταν υπάρχει γραμματική που την παράγει.
17
Ορισμός γραμματικής (1/2)
• Κατά τον ορισμό μίας γραμματικής πρέπει να πληρούνται οι παρακάτω προϋποθέσεις.
– Να μην περιλαμβάνονται πλεονασματικοί κανόνες παραγωγής, που ενδέχεται να:
– Έχουν αρνητικές επιπτώσεις στην ταχύτητα ανάλυσης των προτάσεων της γλώσσας.
– Οδηγούν σε λάθη.
– Να μην περιλαμβάνονται παραγωγές-ε.
• Μόνο στην περίπτωση που υπάρχει ισοδύναμη γραμματική χωρίς κανόνες-ε.
18
Ορισμός γραμματικής (2/2)
• Κατά τον ορισμό μίας γραμματικής πρέπει να πληρούνται οι παρακάτω προϋποθέσεις (Συνέχεια).
– Να μην περιλαμβάνονται κυκλικοί κανόνες παραγωγής.
19
Ιεραρχία Chomsky (1/5)
20
• Οι γραμματικές και τις σχετικές γλώσσες κατατάσσονται σε 4 τύπους:
• Τύπος 3 ⊂ Τύπος 2 ⊂ Τύπος 1 ⊂ Τύπος 0.
• Γραμματικές τύπου 0.
– Δεν διέπονται από κανένα περιορισμό.
Ιεραρχία Chomsky (2/5)
21
• Γραμματικές τύπου 1.
– Χαρακτηρίζονται κι ως γραμματικές με συμφραζόμενα.
– Περιέχουν κανόνες της μορφής α→β.
– Η συμβολοσειρά α περιέχει τουλάχιστον ένα μη τερματικό σύμβολο |α|≤|β|.
– Αν το S δεν υπάρχει σε δεξί μέλος κανόνα.
• Οι παραγόμενες γλώσσες μπορούν να περιέχουν την κενή συμβολοσειρά (S→ε).
Ιεραρχία Chomsky (3/5)
• Γραμματικές τύπου 2.
– Χαρακτηρίζονται κι ως γραμματικές χωρίς συμφραζόμενα.
– Περιέχουν κανόνες της μορφής Α→α.
• Α: ένα μη τερματικό σύμβολο.
• α: συμβολοσειρά.
– Χρησιμοποιούνται για την περιγραφή του συντακτικού γλωσσών προγραμματισμού.
22
Ιεραρχία Chomsky (4/5)
• Γραμματικές τύπου 3.
– Χαρακτηρίζονται κι ως κανονικές γραμματικές.
– Περιέχει κανόνες της μορφής Α→ε ή � Α→aΒ, Α→a.
• Α,Β: Μη τερματικό σύμβολο.
• a: Τερματικό σύμβολο.
– Γλώσσες που αποφασίζονται από πεπερασμένα αυτόματα.
23
Γραμματικές και συντακτική ανάλυση
• Πιθανές Επιλογές.
– Κανονικές Γραμματικές.
• Ευκολία στην υλοποίηση.
• Πρόβλημα.
– ΝΠΑ έχουν πεπερασμένο αριθμό καταστάσεων.
– Γλώσσες χωρίς συμφραζόμενα.
25
Διαδικασία της συντακτικής ανάλυσης (1/2)
• Είσοδος.
– Μια γραμματική του τύπου που υποστηρίζει ο αλγόριθμος.
• Π.χ. γραμματική χωρίς συμφραζόμενα.
– Μια ακολουθία α από τερματικά σύμβολα της γραμματικής.
26
Διαδικασία της συντακτικής ανάλυσης (2/2)
• Έξοδος.
– Απάντηση στο αν η α ανήκει στη γλώσσα που ορίζει η γραμματική.
• Αν ανήκει τότε παράγεται και το συντακτικό δέντρο της α.
27
Συμβολισμοί BNF και EBNF (1/2)
Μη τερματικά
σύμβολα
Κανονικοί χαρακτήρες, που δεν περικλείονται
σε < >
Τερματικά σύμβολα Περιλαμβάνονται σε “ ”
| Συμβολίζει εναλλακτικές περιπτώσεις
( ) Για ομαδοποίηση κι αλλαγή της προτεραιότητας
εφαρμογής των συμβόλων
[ ] Δηλώνει την προαιρετική εμφάνιση των
συμβόλων που περιέχει
{ } Δηλώνει την προαιρετική επανάληψη των
συμβόλων που περιέχει
Πίνακας 1. Συμβολισμοί BNF και EBNF.
28
Συμβολισμοί BNF και EBNF (2/2)
Μη τερματικά
σύμβολα
Κανονικοί χαρακτήρες, που δεν περικλείονται
σε < >
Τερματικά σύμβολα Περιλαμβάνονται σε “ ”
= Χρησιμοποιείται στους ορισμούς των κανόνων
παραγωγής αντί των ή ::=
. Δηλώνει το τέλος ενός κανόνα παραγωγής
(* *) Χρησιμοποιούνται για τη συμπερίληψη σχολίων
Πίνακας 1 (Συνέχεια). Συμβολισμοί BNF και EBNF.
29
Παράγωγα και συντακτικά δένδρα
• Ένα παράγωγο δένδρο.
– Αναπαριστά τη δομή μίας πρότασης.
– Μπορεί να αντιστοιχεί σε περισσότερες από μία παραγωγές.
31
Παράδειγμα παράγωγων και συντακτικών δένδρων
Έστω S = έκφραση.
Η έκφραση διατυπώνεται ως:
έκφραση τελεστής έκφραση | “(” έκφραση “)” | “αριθμός”
Ο τελεστής διατυπώνεται ως:
“+” | “-” | “*” | “/”
Πρόταση: (32-6)*12
32
Παράγωγα και συντακτικά δένδρα - Συνέχεια (1/6)
• Παραγωγή μέσω δεξιών προτασιακών μορφών.
έκφραση → έκφραση τελεστής έκφραση [έκφραση = έκφραση τελεστής έκφραση].
έκφραση → έκφραση τελεστής αριθμός [έκφραση = “αριθμός”].
έκφραση → έκφραση * αριθμός [τελεστής = “*”].
έκφραση →( έκφραση ) * αριθμός [έκφραση = “(” έκφραση “)”].
33
Παράγωγα και συντακτικά δένδρα - Συνέχεια (2/6)
• Παραγωγή μέσω δεξιών προτασιακών μορφών (Συνέχεια).
έκφραση →(έκφραση τελεστής έκφραση) * αριθμός
[έκφραση = έκφραση τελεστής έκφραση].
έκφραση →(έκφραση τελεστής αριθμός) * αριθμός
[έκφραση = “αριθμός”].
έκφραση →(έκφραση - αριθμός) * αριθμός
[τελεστής = “-”].
έκφραση →(αριθμός - αριθμός) * αριθμός
[έκφραση = “αριθμός”].
34
Παράγωγα και συντακτικά δένδρα - Συνέχεια (3/6)
• Παραγωγή μέσω αριστερών προτασιακών μορφών
έκφραση → έκφραση τελεστής έκφραση
[έκφραση = έκφραση τελεστής έκφραση]
έκφραση → (έκφραση) τελεστής έκφραση
[έκφραση = “(” έκφραση “)”]
έκφραση →(έκφραση τελεστής έκφραση) τελεστής έκφραση
[έκφραση = έκφραση τελεστής έκφραση]
έκφραση → (αριθμός τελεστής έκφραση) τελεστής έκφραση
[έκφραση = “αριθμός”]
35
Παράγωγα και συντακτικά δένδρα - Συνέχεια (4/6)
• Παραγωγή μέσω αριστερών προτασιακών μορφών (Συνέχεια).
έκφραση → (αριθμός - έκφραση) τελεστής έκφραση
[τελεστής = “-”].
έκφραση → (αριθμός - αριθμός) τελεστής έκφραση
[έκφραση = “αριθμός”].
έκφραση → (αριθμός - αριθμός) * έκφραση
[τελεστής = “*”].
έκφραση → (αριθμός - αριθμός) * αριθμός
[έκφραση = “αριθμός”].
36
Παράγωγα και συντακτικά δένδρα - Συνέχεια (5/6)
Σχήμα 2. Παράγωγα και συντακτικά δέντρα (πηγή: διδάσκων, 2014).
37
Παράγωγα και συντακτικά δένδρα - Συνέχεια (6/6)
• Συντακτικό δένδρο.
– Συμπαγής δομή.
– Περιέχει και την πληροφορία της στατικής σημασίας της πρότασης.
Σχήμα 3. Συντακτικό δέντρο (πηγή: διδάσκων, 2014).
38
Γραμματικές με ασάφειες (1/18)
• Λέμε ότι μία γραμματική περιέχει ασάφειες.
– Όταν σε μία πρότασή της μπορεί να αντιστοιχούν περισσότερα από ένα δένδρα.
39
Γραμματικές με ασάφειες (2/18)
• έκφραση → έκφραση τελεστής έκφραση
[έκφραση = έκφραση τελεστής έκφραση].
• έκφραση → έκφραση τελεστής έκφραση τελεστής έκφραση
[έκφραση = έκφραση τελεστής έκφραση].
• έκφραση → αριθμός τελεστής έκφραση τελεστής έκφραση
[έκφραση = “αριθμός”].
• έκφραση → αριθμός - έκφραση τελεστής έκφραση
[τελεστής = “-”].
40
Γραμματικές με ασάφειες (3/18)
• έκφραση → αριθμός - αριθμός τελεστής έκφραση
[έκφραση = “αριθμός”].
• έκφραση → αριθμός - αριθμός * έκφραση
[τελεστής = “*”].
• έκφραση → αριθμός - αριθμός * αριθμός
[έκφραση = “αριθμός”].
41
Γραμματικές με ασάφειες (5/18)
έκφραση → έκφραση τελεστής έκφραση
[έκφραση = έκφραση τελεστής έκφραση].
έκφραση → αριθμός τελεστής έκφραση
[έκφραση = “αριθμός”].
έκφραση → αριθμός - έκφραση
[τελεστής = “-”].
έκφραση → αριθμός - έκφραση τελεστής έκφραση
[έκφραση = έκφραση ΤΛ έκφραση].
43
Γραμματικές με ασάφειες (6/18)
έκφραση → αριθμός - αριθμός ΤΛ έκφραση
[έκφραση = “αριθμός”].
έκφραση → αριθμός - αριθμός * έκφραση
[τελεστής = “*”].
έκφραση → αριθμός - αριθμός * αριθμός
[έκφραση = “αριθμός”].
44
Γραμματικές με ασάφειες (8/18)
• Σωστό δένδρο.
– Το δένδρο που είναι συμβατό με τη σημασία που θέλουμε να αποδώσουμε στο εκάστοτε στοιχείο της γλώσσας.
• Για την αντιμετώπιση της ασάφειας στην προτεραιότητα των τελεστών.
– Χρησιμοποιούνται κανόνες αποσαφήνισης των προτεραιοτήτων.
46
Γραμματικές με ασάφειες (9/18)
S = έκφραση
• έκφραση = έκφραση τελεστής_πα έκφραση | όρος.
– τελεστής = “+” | “-”.
• όρος = όρος τελεστής_πδ όρος | παράγοντας.
– τελεστής = “*” | “/”.
– παράγοντας = “(” έκφραση “)” | “αριθμός”.
47
Γραμματικές με ασάφειες (10/18)
• Η προηγούμενη γραμματική δημιουργεί ασάφειες σχετικά με την προσεταιριστικότητα των πράξεων:
– Ανάλυση της 32-6-12.
– Η συγκεκριμένη γραμματική αφήνει ανοιχτά δύο και ενδεχόμενα.
• (32-6)-12.
• 32-(6-12).
48
Γραμματικές με ασάφειες (11/18)
• Συνήθως μας ενδιαφέρει να διασφαλίζουμε αριστερή προσεταιριστικότητα.
– Αυτό επιτυγχάνεται αν ο αντίστοιχος κανόνας της γραμματικής:
• Χαρακτηρίζεται από αριστερή και μόνο αριστερή αναδρομικότητα.
49
Γραμματικές με ασάφειες (12/18)
Διορθωμένη γραμματική:
– S = έκφραση.
– έκφραση = έκφραση τελεστής_πα όρος | όρος.
• τελεστής_πα = “+” | “-”.
• όρος = όρος τελεστής_πδ παράγοντας | παράγοντας
– τελεστής_πδ = “*” | “/”.
• παράγοντας = “(” έκφραση “)” | “αριθμός” .
– Πρόταση: 32-5*12.
50
Γραμματικές με ασάφειες (14/18)
• Πρόταση: 32-6-12.
Σχήμα 7. Πρόταση 32-6-12, (πηγή: διδάσκων, 2014).
52
Καθοδική ανάλυση
• Ξεκινά από την αρχή της γραμματικής. – Για να αναπτύξει τη συμβολοσειρά που αναλύει αν αυτή
αποτελεί πρόταση.
• Καμία από τις τεχνικές που εξετάζονται παρακάτω δεν εφαρμόζεται σε αριστερά αναδρομικές γραμματικές.
• Διακρίνουμε δύο τεχνικές. – Οπισθοδρόμηση .
– Πρόγνωση.
57
Καθοδική ανάλυση με οπισθοδρόμηση (1/3)
1. Δοθέντος ενός μη τερματικού συμβόλου.
– Γίνεται εφαρμογή του πρώτου κανόνα της γραμματικής.
2. Στην προτασιακή μορφή που προκύπτει.
– Επιλέγεται το πρώτο από αριστερά μη τερματικό σύμβολο
• Εφαρμόζεται ο πρώτος κανόνας που αναφέρεται σε αυτό.
58
Καθοδική ανάλυση με οπισθοδρόμηση (2/3)
3. Γίνεται επαναληπτική εφαρμογή του βήματος 2.
– Για κάθε ένα από τα μη τερματικά σύμβολα που ακολουθούν.
– Μέχρι τη στιγμή της παραγωγής:
• Μίας σειράς τερματικών συμβόλων ή.
• Τμήματος τερματικών συμβόλων της προτασιακής μορφής.
– Που διαφέρει από το αντίστοιχο τμήμα της συμβολοσειράς εισόδου.
59
Καθοδική ανάλυση με οπισθοδρόμηση (3/3)
3. (Συνέχεια).
– Η δεύτερη περίπτωση μπορεί να είναι αποτέλεσμα εσφαλμένης επιλογής κανόνα.
– Αναιρείται ο κανόνας που εφαρμόσθηκε τελευταίος και χρησιμοποιείται ο επόμενος που ισχύει για το ίδιο μη τερματικό σύμβολο.
– Αν έχουν χρησιμοποιηθεί όλοι οι κανόνες, ο αλγόριθμος.
• Διατηρεί το σύμβολο ως έχει.
• Προχωρά στην αναίρεση του κανόνα για το προηγούμενο μη τερματικό σύμβολο και οπισθοδρομεί στην κατάλληλη θέση της συμβολοσειράς εισόδου.
60
Καθοδική ανάλυση με οπισθοδρόμηση - Παράδειγμα
S = “k” X “n” ή “k” Y
X = “l” ή “m”
Y = “mmn” ή “nnm” Πρόταση: “kmmm”
Σχήμα 10. Καθοδική ανάλυση με οπισθοδρόμηση, (πηγή: διδάσκων, 2014).
61
Καθοδική ανάλυση με οπισθοδρόμηση - Συνέχεια
• Πολύπλοκη.
• Μη αποδοτική.
• Γενική.
– Αναγνωρίζει περισσότερες γλώσσες από ότι οι υπόλοιπες τεχνικές καθοδικής ανάλυσης.
• Αργεί στον εντοπισμό λαθών.
– Η ανάνηψη γίνεται πολύ δύσκολη.
62
Ανάλυση προβλέπουσας αναδρομικής κατάβασης (1/3)
• Στην ανάλυση αναδρομικής κατάβασης.
– Ο κάθε κανόνας που αναφέρεται σε κάποιο μη τερματικό σύμβολο.
• Εκφράζεται από τον ορισμό μιας διαδικασίας που θα το αναγνωρίζει.
63
Ανάλυση προβλέπουσας αναδρομικής κατάβασης (2/3)
• Ένας αναλυτής προβλέπουσας αναδρομικής κατάβασης αποτελείται από:
– Μία καθολική μεταβλητή.
• Που περιέχει την τιμή της τρέχουσας λεξικής μονάδας.
– Μία βοηθητική διαδικασία αναγνώρισης.
• Που ελέγχει αν η τρέχουσα λεξική μονάδα είναι η αναμενόμενη και καλεί τη διαδικασία λεξικής ανάλυσης.
– Για την ανάγνωση της επόμενης λεξικής μονάδας και την ενημέρωση της καθολικής μεταβλητής.
64
Ανάλυση προβλέπουσας αναδρομικής κατάβασης (3/3)
• Ένας αναλυτής προβλέπουσας αναδρομικής κατάβασης αποτελείται από (Συνέχεια):
– Τις διαδικασίες ανάλυσης.
• Που αντιστοιχούν στα μη τερματικά σύμβολα της γραμματικής.
– Μία διαδικασία εκκίνησης.
• Που αφού διαβάσει την πρώτη λεξική μονάδα.
– Καλεί τη διαδικασία που αντιστοιχεί στο μη τερματικό σύμβολο της αρχής.
65
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Παράδειγμα
S = έκφραση
έκφραση = έκφραση + όρος ή έκφραση - όρος ή όρος
όρος = όρος * παράγοντας ή όρος / παράγοντας ή παράγοντας
παράγοντας = ( έκφραση ) ή αριθμός
66
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (1/26)
• Η προβλέπουσα αναδρομική κατάβαση.
– Στηρίζεται στην πρόγνωση του κατάλληλου κάθε φορά κανόνα.
• Οδηγεί στην παραγωγή του δένδρου της πρότασης.
• Δε μπορεί να εφαρμοσθεί σε αριστερά αναδρομικές γραμματικές.
67
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (2/26)
• Ας θεωρήσουμε τη μη αριστερά αναδρομική γραμματική των αριθμητικών εκφράσεων:
S = έκφραση
έκφραση = όρος υπ_όροι
υπ_όροι = + όρος υπ_όροι ή - όρος υπ_όροι ή ε
όρος = παράγοντας υπ_παραγ
υπ_παραγ = * παράγοντας υπ_παραγ ή / παράγοντας υπ_παραγ ή ε
παράγοντας = ( έκφραση ) ή αριθμός
68
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (3/26)
• Εναλλακτικά, για το μη τερματικό σύμβολο «έκφραση» μπορούμε να έχουμε μία από τις παρακάτω παραγωγές:
έκφραση όρος υπ_όροι παράγοντας υπ_παραγ υπ_όροι (έκφραση) υπ_παραγ υπ_όροι . . .
έκφραση όρος υπ_όροι παράγοντας υπ_παραγ υπ_όροι αριθμός υπ_παραγ υπ_όροι . . .
69
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (4/26)
• Για να στηριχθεί η ανάλυση στην τεχνική της πρόγνωσης.
– Χρειάζεται για κάθε μη τερματικό σύμβολο.
• Να είναι εκ των προτέρων γνωστό τo σύνολο των τερματικών.
– Που είναι δυνατό να εμφανισθούν στην αρχή των συμβολοσειρών, που παράγονται από αυτό.
» Σύνολο FIRST.
70
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (5/26)
• Αν η γραμματική περιλαμβάνει κανόνες-ε.
– Για κάθε μη τερματικό σύμβολο που βρίσκεται στο αριστερό μέρος ενός τέτοιου κανόνα.
• Επιβάλλεται και ο υπολογισμός του συνόλου των τερματικών.
– Που μπορεί να εμφανισθούν αμέσως μετά από αυτό.
» Σύνολο FOLLOW.
71
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (6/26)
• Ανάλυση πρόγνωσης.
– Δοθείσης μίας παραγωγής A .
• Ο αναλυτής πρέπει να είναι σε θέση να επιλέξει μεταξύ & .
• Σύνολα FIRST.
– Για ένα δεξί μέρος παραγωγής G.
• Ορίζουμε ως FIRST() το σύνολο των αναγνωριστικών που εμφανίζονται πρώτα στις συμβολοσειρές που παράγονται από το .
72
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (7/26)
• Δηλαδή ισχύει.
– x FIRST() αν και μόνο αν * x .
• Για κάποια συμβολοσειρά .
• Γραμματική LL(1).
– Αν A και A εμφανίζονται στη γραμματική πρέπει FIRST() FIRST() = .
– Αυτό επιτρέπει στον αναλυτή να προγνώσει με ασφάλεια την παραγωγή που θα χρησιμοποιεί σε κάθε βήμα!.
73
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (8/26)
• Δοθείσης μίας γραμματικής που έχει την ιδιότητα LL(1).
– Μπορούμε να γράψουμε διαδικασίες.
• Που να αναγνωρίζουν το αριστερό μέρος της κάθε παραγωγής.
– Ο κώδικας της ανάλυσης είναι απλός και γρήγορος.
74
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (9/26)
• Οι γραμματικές με την ιδιότητα LL(1).
– Ονομάζονται προγνώσιμες γραμματικές.
• Γιατί ο αναλυτής μπορεί να «προγνώσει» τη σωστή ανάπτυξη σε κάθε σημείο της ανάλυσης.
• Οι αναλυτές που εκμεταλλεύονται την ιδιότητα LL(1).
– Ονομάζονται αναλυτές πρόγνωσης.
• Μία περίπτωση ανάλυσης πρόγνωσης είναι η ανάλυση προβλέπουσας αναδρομικής κατάβασης.
75
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (10/26)
• Παράδειγμα διορθωμένης γραμματικής αριθμητικών εκφράσεων.
• Για την κατασκευή παράγωγου δένδρου:
– Γράφουμε μέσα στις διαδικασίες κώδικα για δημιουργία κόμβου.
– Περνάμε τους κόμβους από διαδικασία σε διαδικασία μέσω μίας στοίβας.
76
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (11/26)
• Για την κατασκευή παράγωγου δένδρου (Συνέχεια):
– Αφαιρούμε από τη στοίβα τους κόμβους του δεξιού μέρους της παραγωγής.
• Τους κάνουμε απογόνους του κόμβου του αριστερού μέρους.
• Εισάγουμε τον τελευταίο στη στοίβα.
77
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (12/26)
• Για την κατασκευή συντακτικού δένδρου.
– Κατασκευάζουμε λιγότερους κόμβους.
– Χρειάζεται να τους βάζουμε στη στοίβα με την κατάλληλη σειρά.
• Ώστε να εξασφαλίζουμε αριστερή προσεταιριστικότητα.
78
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (13/26)
• Γενική μορφή διαδικασιών προβλέπουσας αναδρομικής κατάβασης.
• Αν για το μη τερματικό σύμβολο Χ ορίζεται στη γραμματική ο κανόνας:
...|2|1X pp
79
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (14/26)
• Σύνολα first για σύμβολα γραμματικής.
– Για μία σειρά συμβόλων της γραμματικής.
• Ορίζουμε FIRST() ως το σύνολο των αναγνωριστικών.
– Που εμφανίζονται στην αρχή των συμβολοσειρών που παράγονται από την .
80
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (15/26)
• Για να υπολογίσετε το FIRST(X) για ένα σύμβολο X.
– Εφαρμόζετε τους επόμενους κανόνες.
• Μέχρι όταν δεν προστίθενται πλέον στο FIRST(X) νέα σύμβολα.
• Αν το X είναι τερματικό.
– Τότε FIRST(X) είναι το {X}.
81
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (16/26)
• Αν υπάρχει παραγωγή X .
– Τότε το περιλαμβάνεται στο FIRST(X).
• Αν το X είναι μη τερματικό και X Y1Y2 ... Yk είναι μια παραγωγή.
– Τότε συμπεριλαμβάνουμε στο FIRST(X) κάθε στοιχείο του FIRST(Y1) εκτός από το .
82
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (17/26)
• Αν το X είναι μη τερματικό και X Y1Y2 ... Yk είναι μια παραγωγή.
– Τότε συμπεριλαμβάνουμε το τερματικό a στο FIRST(X).
• Αν το a είναι στο FIRST(Yi) και είναι στα FIRST(Yj) για όλα τα 1 j i.
83
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (18/26)
• Αν X είναι ένα μη τερματικό και X Y1Y2 ... Yk μία παραγωγή.
– Τότε συμπεριλαμβάνουμε το στο FIRST(X).
• Αν το είναι στα FIRST(Yi) για όλα 1 i k.
84
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (19/26)
• Σύνολα first για σειρές συμβόλων της γραμματικής.
– Για να υπολογίσουμε το σύνολο FIRST για μία σειρά X1X2 ... Xn συμβόλων της γραμματικής.
• Εφόσον έχουμε υπολογίσει τα σύνολα FIRST για τα X1, Χ2 , ... , Xn εφαρμόζουμε τα ακόλουθα (βλέπε επόμενη διαφάνεια).
85
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (20/26)
• Το FIRST(X1X2 ... Xn) θα περιλαμβάνει:
– Όλα τα σύμβολα του FIRST(X1) εκτός από το .
– Όλα τα σύμβολα του FIRST(Xi) εκτός από το .
• Αν το είναι στα FIRST(Xj) για όλα τα 1 j i.
– Και το .
• Αν είναι στα FIRST(Xi) για όλα τα 1 i n.
86
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (21/26)
• Παράδειγμα υπολογισμού συνόλων first.
S = έκφραση έκφραση = όρος υπ_όροι υπ_όροι = + όρος υπ_όροι ή - όρος υπ_όροι ή ε όρος = παράγοντας υπ_παραγ υπ_παραγ = * παράγοντας υπ_παραγ ή / παράγοντας υπ_παραγ ή ε. παράγοντας = ( έκφραση ) ή αριθμός
87
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (22/26)
• Σύνολα follow για μη τερματικά σύμβολα γραμματικής.
• Για ένα μη τερματικό σύμβολο A ορίζουμε το FOLLOW(A).
– Ως το σύνολο των τερματικών που μπορούν να εμφανισθούν δεξιά του A.
• Σε κάποια προτασιακή μορφή.
88
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (23/26)
• Για τον υπολογισμό των FOLLOW(A) για ένα μη τερματικό A.
– Εφαρμόζουμε τους κανόνες που ακολουθούν.
• Μέχρι όταν δεν προστίθενται πλέον νέα σύμβολα στο FOLLOW(A).
• Εισάγουμε το $ στο FOLLOW(S).
– $ είναι το τέλος συμβολοσειράς.
– S είναι η αρχή της γραμματικής.
89
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (24/26)
• Αν υπάρχει παραγωγή A B .
– Περιλαμβάνουμε στο FOLLOW(B) όλα τα σύμβολα του FIRST() εκτός του .
• Αν υπάρχει παραγωγή A B.
– Περιλαμβάνουμε στο FOLLOW(B) όλα τα σύμβολα του FOLLOW(A).
90
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (25/26)
• Αν υπάρχει παραγωγή A B και το είναι στο FIRST().
– Περιλαμβάνουμε στο FOLLOW(B) όλα τα σύμβολα του FOLLOW(A).
91
Ανάλυση προβλέπουσας αναδρομικής κατάβασης - Συνέχεια (26/26)
• Δεν μπορούν να χρησιμοποιηθούν αριστερά αναδρομικές γραμματικές.
• Δεν μπορούν να χρησιμοποιηθούν γραμματικές, που δεν είναι LL(1), όπως π.χ.:
σειρά_εντολών = εντολή ; σειρά_εντολών ή εντολή
εντολή = τερματικό
92
Ανάλυση LL(1) (2/3)
Αλγόριθμος υπολογισμού πίνακα ανάλυσης Μ.
• Για όλες τις παραγωγές A , εφάρμοσε τα εξής βήματα:
– Για κάθε τερματικό a στο FIRST().
• Θέσε A στη θέση M[A, a].
– Αν το περιλαμβάνεται στο FIRST().
• Θέσε A στις θέσεις M[A, b] για κάθε τερματικό b του FOLLOW(A).
• Θέσε A στη θέση M[A, $] αν το $ περιλαμβάνεται στο FOLLOW(A).
94
Ανάλυση LL(1) (3/3)
• Όλες οι υπόλοιπες θέσεις του πίνακα M εκφράζουν την αναγνώριση λάθους.
• Παράδειγμα (Γραμματική αριθμητικών εκφράσεων).
S = έκφραση έκφραση = όρος υπ_όροι υπ_όροι = + όρος υπ_όροι ή - όρος υπ_όροι ή ε όρος = παράγοντας υπ_παραγ. υπ_παραγ = * παράγοντας υπ_παραγ ή / παράγοντας υπ_παραγ ή ε παράγοντας = ( έκφραση ) ή αριθμός
95
Απομάκρυνση αριστερής αναδρομικότητας (1/2)
• Διακρίνουμε την άμεση και την έμμεση αριστερή αναδρομικότητα.
• Παράδειγμα άμεσης αριστερής αναδρομικότητας:
• Παράδειγμα έμμεσης αριστερής αναδρομικότητας:
......|2pYX
......|1pXY
έκφραση = έκφραση ΤΛ_ΑΘ όρος ή όρος
96
Απομάκρυνση αριστερής αναδρομικότητας (2/2)
• Γενική μορφή άμεσης αριστερής αναδρομικότητας:
• Μετασχηματίζεται στην ισοδύναμη μορφή:
mn qqqpXpXpXX |...||||...|| 2121
'.|...|'|' 21 XqXqXqX m
.|'|...|'|'' 21 XpXpXpX n
97
Απομάκρυνση αριστερής αναδρομικότητας - Παράδειγμα
• Η S = έκφραση.
• Μετασχηματίστηκε στην:
έκφραση = έκφραση + όρος ή έκφραση - όρος ή όρος
όρος = όρος * παράγοντας ή όρος / παράγοντας ή παράγοντας
παράγοντας = ( έκφραση ) ή αριθμός
έκφραση = όρος υπ_όροι
υπ_όροι = + όρος υπ_όροι ή - όρος υπ_όροι ή ε
όρος = παράγοντας υπ_παραγ
υπ_παραγ = * παράγοντας υπ_παραγ ή / παράγοντας υπ_παραγ ή ε
παράγοντας = ( έκφραση ) ή αριθμός
98
Απομάκρυνση αριστερής αναδρομικότητας - Συνέχεια (1/4)
• Αλγόριθμος απομάκρυνσης άμεσης και έμμεσης αριστερής αναδρομικότητας.
• Είσοδος.
– Μία γραμματική G χωρίς κυκλικούς κανόνες παραγωγής και κανόνες-ε.
• Έξοδος.
– Μία ισοδύναμη γραμματική χωρίς αριστερή αναδρομικότητα.
99
Απομάκρυνση αριστερής αναδρομικότητας - Συνέχεια (2/4)
• Περιγραφή.
– Θεωρούμε τα μη τερματικά σύμβολα.
– Με το δείκτη του καθενός να αντιστοιχεί στη σειρά.
• Με την οποία κάνει την εμφάνισή του ο αντίστοιχος κανόνας στη γραμματική.
100
Απομάκρυνση αριστερής αναδρομικότητας - Συνέχεια (4/4)
• Κατά την απομάκρυνση της αριστερής αναδρομικότητας.
– Δεν αλλάζει η γλώσσα της γραμματικής.
– Αλλάζει η μορφή των δένδρων που παράγει η επιλεγείσα μέθοδος ανάλυσης.
– Σημαντικότερη συνέπεια:
• Χάνεται η επιθυμητή ιδιότητα της αριστερής προσεταιριστικότητας.
102
Αριστερή παραγοντοποίηση
• Προηγείται οποιασδήποτε προβλέπουσας ανάλυσης.
– Αν για το ίδιο μη τερματικό σύνολο.
• Υπάρχουν δύο ή περισσότεροι κανόνες με το ίδιο πρόθεμα στο δεξί μέρος.
103
Αριστερή παραγοντοποίηση -Συνέχεια
• Γενικά, ο κανόνας:
• Μετασχηματίζεται στον:
• Είσοδος.
– Μία γραμματική G.
• Έξοδος.
– Μία ισοδύναμη γραμματική LL(1).
."|""" 21 pypyX
'."" XyX
.|' 21 ppX
105
Βιβλιογραφία
1. «Μεταγλωττιστές γλωσσών Προγραμματισμού: Θεωρία και Πράξη», Λάζος, Κ.Ε., Κατσαρός και Π.Θ., Καραΐσκος, Ζ.Κ. (2004), Εκδόσεις Θεσσαλονίκη, [ISBN:960-87723-4-6].
2. «Μεταγλωττιστές», Παπασπύρου, Ν.Σ. και Σκορδαλάκης, Ε.Σ (2002), Εκδόσεις Συμμετρία, 2002, [ISBN: 978-960-266-135-2].
106