Μεαγλωισές - openclass.teiwm.gr · •Συντακτικό δένδρο....

107
Μεταγλωττιστές Ενότητα 7: Συντακτική ανάλυση (Μέρος 1 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Transcript of Μεαγλωισές - openclass.teiwm.gr · •Συντακτικό δένδρο....

Μεταγλωττιστές

Ενότητα 7: Συντακτική ανάλυση (Μέρος 1ο)

Αγγελική Σγώρα

Τμήμα Μηχανικών Πληροφορικής ΤΕ

Άδειες Χρήσης

• Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

• Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

2

Χρηματοδότηση • Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα

πλαίσια του εκπαιδευτικού έργου του διδάσκοντα.

• Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού.

• Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

3

Συντακτική ανάλυση (Μέρος 1ο)

Σκοποί ενότητας

• Σκοπός της ενότητας είναι η περιγραφή της συντακτικής ανάλυσης.

5

Περιεχόμενα ενότητας (1/3)

• Φάσεις της μεταγλώττισης.

• Συντακτική ανάλυση.

• Γραμματικές.

• Ορισμός γραμματικών.

• Ιεραρχία Chomsky.

• Γραμματικές και συντακτική ανάλυση.

6

Περιεχόμενα ενότητας (2/3)

• Διαδικασία της συντακτικής ανάλυσης.

• Συμβολισμοί Backus-Naur Form (BNF) και Extended BNF (EBNF).

• Παράγωγα και συντακτικά δένδρα.

• Γραμματικές με ασάφειες.

• Αναπαράσταση παράγωγου δένδρου.

• Καθοδική ανάλυση.

7

Περιεχόμενα ενότητας (3/3)

• Καθοδική ανάλυση με οπισθοδρόμηση.

• Ανάλυση προβλέπουσας αναδρομικής κατάβασης.

• Ανάλυση LL(1).

• Αλγόριθμος ανάλυσης LL(1).

• Απομάκρυνση αριστερής αναδρομικότητας.

• Αριστερή παραγοντοποίηση.

8

Φάσεις της μεταγλώττισης

Σχήμα 1. Φάσεις της μεταγλώττισης, (πηγή: διδάσκων, 2014).

9

Συντακτική ανάλυση (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

Ιεραρχία Chomsky (5/5)

• Γραμματικές τύπου 3 (Συνέχεια).

– Χρησιμοποιούνται στη λεξική ανάλυση.

24

Γραμματικές και συντακτική ανάλυση

• Πιθανές Επιλογές.

– Κανονικές Γραμματικές.

• Ευκολία στην υλοποίηση.

• Πρόβλημα.

– ΝΠΑ έχουν πεπερασμένο αριθμό καταστάσεων.

– Γλώσσες χωρίς συμφραζόμενα.

25

Διαδικασία της συντακτικής ανάλυσης (1/2)

• Είσοδος.

– Μια γραμματική του τύπου που υποστηρίζει ο αλγόριθμος.

• Π.χ. γραμματική χωρίς συμφραζόμενα.

– Μια ακολουθία α από τερματικά σύμβολα της γραμματικής.

26

Διαδικασία της συντακτικής ανάλυσης (2/2)

• Έξοδος.

– Απάντηση στο αν η α ανήκει στη γλώσσα που ορίζει η γραμματική.

• Αν ανήκει τότε παράγεται και το συντακτικό δέντρο της α.

27

Συμβολισμοί BNF και EBNF (1/2)

Μη τερματικά

σύμβολα

Κανονικοί χαρακτήρες, που δεν περικλείονται

σε < >

Τερματικά σύμβολα Περιλαμβάνονται σε “ ”

| Συμβολίζει εναλλακτικές περιπτώσεις

( ) Για ομαδοποίηση κι αλλαγή της προτεραιότητας

εφαρμογής των συμβόλων

[ ] Δηλώνει την προαιρετική εμφάνιση των

συμβόλων που περιέχει

{ } Δηλώνει την προαιρετική επανάληψη των

συμβόλων που περιέχει

Πίνακας 1. Συμβολισμοί BNF και EBNF.

28

Συμβολισμοί BNF και EBNF (2/2)

Μη τερματικά

σύμβολα

Κανονικοί χαρακτήρες, που δεν περικλείονται

σε < >

Τερματικά σύμβολα Περιλαμβάνονται σε “ ”

= Χρησιμοποιείται στους ορισμούς των κανόνων

παραγωγής αντί των ή ::=

. Δηλώνει το τέλος ενός κανόνα παραγωγής

(* *) Χρησιμοποιούνται για τη συμπερίληψη σχολίων

Πίνακας 1 (Συνέχεια). Συμβολισμοί BNF και EBNF.

29

Παράδειγμα συμβολισμών BNF και EBNF

• Γραμματική αριθμητικών εκφράσεων.

30

Παράγωγα και συντακτικά δένδρα

• Ένα παράγωγο δένδρο.

– Αναπαριστά τη δομή μίας πρότασης.

– Μπορεί να αντιστοιχεί σε περισσότερες από μία παραγωγές.

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

Γραμματικές με ασάφειες (4/18)

Σχήμα 4. Γραμματικές με ασάφειες (1), (πηγή: διδάσκων, 2014).

42

Γραμματικές με ασάφειες (5/18)

έκφραση → έκφραση τελεστής έκφραση

[έκφραση = έκφραση τελεστής έκφραση].

έκφραση → αριθμός τελεστής έκφραση

[έκφραση = “αριθμός”].

έκφραση → αριθμός - έκφραση

[τελεστής = “-”].

έκφραση → αριθμός - έκφραση τελεστής έκφραση

[έκφραση = έκφραση ΤΛ έκφραση].

43

Γραμματικές με ασάφειες (6/18)

έκφραση → αριθμός - αριθμός ΤΛ έκφραση

[έκφραση = “αριθμός”].

έκφραση → αριθμός - αριθμός * έκφραση

[τελεστής = “*”].

έκφραση → αριθμός - αριθμός * αριθμός

[έκφραση = “αριθμός”].

44

Γραμματικές με ασάφειες (7/18)

Σχήμα 5. Γραμματικές με ασάφειες (2), (πηγή: διδάσκων, 2014).

45

Γραμματικές με ασάφειες (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

Γραμματικές με ασάφειες (13/18)

Σχήμα 6. Γραμματικές με ασάφειες (3), (πηγή: διδάσκων, 2014).

51

Γραμματικές με ασάφειες (14/18)

• Πρόταση: 32-6-12.

Σχήμα 7. Πρόταση 32-6-12, (πηγή: διδάσκων, 2014).

52

Γραμματικές με ασάφειες (15/18)

• Το πρόβλημα του μετέωρου else.

53

Γραμματικές με ασάφειες (16/18)

Σχήμα 8. Γραμματικές με ασάφειες (4), (πηγή: διδάσκων, 2014).

54

Γραμματικές με ασάφειες (17/18)

Σχήμα 9. Γραμματικές με ασάφειες (5), (πηγή: διδάσκων, 2014).

55

Γραμματικές με ασάφειες (18/18)

• Αποφυγή του προβλήματος του μετεώρου else με τέχνασμα.

56

Καθοδική ανάλυση

• Ξεκινά από την αρχή της γραμματικής. – Για να αναπτύξει τη συμβολοσειρά που αναλύει αν αυτή

αποτελεί πρόταση.

• Καμία από τις τεχνικές που εξετάζονται παρακάτω δεν εφαρμόζεται σε αριστερά αναδρομικές γραμματικές.

• Διακρίνουμε δύο τεχνικές. – Οπισθοδρόμηση .

– Πρόγνωση.

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) (1/3)

Σχήμα 11. Ανάλυση LL(1), (πηγή: διδάσκων, 2014).

93

Ανάλυση 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

Απομάκρυνση αριστερής αναδρομικότητας - Συνέχεια (3/4)

101

Απομάκρυνση αριστερής αναδρομικότητας - Συνέχεια (4/4)

• Κατά την απομάκρυνση της αριστερής αναδρομικότητας.

– Δεν αλλάζει η γλώσσα της γραμματικής.

– Αλλάζει η μορφή των δένδρων που παράγει η επιλεγείσα μέθοδος ανάλυσης.

– Σημαντικότερη συνέπεια:

• Χάνεται η επιθυμητή ιδιότητα της αριστερής προσεταιριστικότητας.

102

Αριστερή παραγοντοποίηση

• Προηγείται οποιασδήποτε προβλέπουσας ανάλυσης.

– Αν για το ίδιο μη τερματικό σύνολο.

• Υπάρχουν δύο ή περισσότεροι κανόνες με το ίδιο πρόθεμα στο δεξί μέρος.

103

Αριστερή παραγοντοποίηση - Παράδειγμα

104

Αριστερή παραγοντοποίηση -Συνέχεια

• Γενικά, ο κανόνας:

• Μετασχηματίζεται στον:

• Είσοδος.

– Μία γραμματική 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

Τέλος Ενότητας

107