Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση II Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση II Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου."— Μεταγράφημα παρουσίασης:

1 Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση II Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου

2 Δομή ▪Εισαγωγή στην ανάλυση από κάτω προς τα πάνω. Οι έννοιες της ελάττωσης και ολίσθησης Συγκρούσεις Πλεονεκτήματα της LR ανάλυσης ▪Συντακτική ανάλυση LR Στοιχεία Συναρτήσεις CLOSURE και GOTO Κατασκευή Πίνακα SLR(1) ▪Ανάνηψη από σφάλματα

3 Συντακτική Ανάλυση από Κάτω προς τα Πάνω ▪Bottom-up Syntax Analysis ▪Δημιουργία δένδρου: Κατασκευή αριστερότερου κόμβου, του οποίου όλοι οι κόμβοι παιδιά (απόγονοι) έχουν ήδη κατασκευαστεί. ▪Η κατασκευή του δένδρου τερματίζει όταν κατασκευαστεί το τερματικό σύμβολο της γραμματικής (ρίζα). ▪Πρόβλημα: Ποιοι ήδη δημιουργημένοι κόμβοι θα χρησιμοποιηθούν ως παιδιά για την κατασκευή του νέου κόμβου;

4 Παράδειγμα ▪Έστω η ακόλουθη γραμματική και η συμβολοσειρά id * id. Ε ::= Ε "+" Τ | Τ T ::= Τ "*" F | F F ::= "id" | "(" E ")" ▪Η δημιουργία του δένδρου περιλαμβάνει id * * F * F T * * F T F T * F T F E T * F T F

5 Δεξιότερη Παραγωγή ▪Σε κάθε βήμα, ανάγουμε/ελαττώνουμε (reduce) μια υπο- συμβολοσειρά της εισόδου που ταιριάζει με το δεξιό μέλος ενός κανόνα παραγωγής με αντίστοιχο μη-τερματικό του σύμβολο (αριστερό μέλος). ▪Η προηγούμενη κατασκευή του δένδρου αντιστοιχεί με ανάστροφη σειρά στην παραγωγή: Ε => Τ => Τ * F => T * id => F * id => id*id ▪είναι δηλαδή η δεξιότερη παραγωγή για την συγκεκριμένη συμβολοσειρά.

6 ΣΑ Ολίσθησης Ελάττωσης (shift-reduce) ▪Γενική κατηγορία ΣΑ από κάτω προς τα πάνω ▪Χρησιμοποιούν στοίβα για να αποθηκεύουν τερματικά και μη- τερματικά σύμβολα. ▪Ενέργειες ενός ΣΑ: Ολίσθηση (shift), όπου ένα σύμβολο εισόδου τοποθετείται στη στοίβα Ελάττωση (reduce), όπου ένα ή περισσότερα σύμβολα από την κορυφή της στοίβας αντικαθίστανται από ένα μη- τερματικό σύμβολο. Αποδοχή (accept), όταν η στοίβα περιέχει το αρχικό σύμβολο της γραμματικής Σφάλμα (error), όταν εμφανιστεί συντακτικό σφάλμα.

7 Παράδειγμα Ανάλυσης Ολίσθησης Ελάττωσης

8 Αποφάσεις κατά την διάρκεια της Συντακτικής Ανάλυσης Ε ::= Ε "+" Τ | Τ T ::= Τ "*" F | F F ::= "id" | "(" E ")" ▪Ελάττωση με κανόνα Ε::=Τ ή ολίσθηση? ▪Ελάττωση με τον κανόνα Τ::=Τ*F ή T::=F?

9 Συγκρούσεις Ολίσθησης Ελάττωσης (shift-reduce) ▪Έστω η γραμματική: S ::= "if" E "then" S | "if" E "then" S "else" S | O ▪και η ακόλουθη είσοδος: if E1 then if E2 then S1 else S2 ▪Ένας συντακτικός αναλυτής ολίσθησης ελάττωσης σε κάποια στιγμή θα περιέχει: Στοίβα Είσοδος $if E then if E then S1 else S2 ▪Τι θα πρέπει να γίνει ολίσθηση ή ελάττωση? ▪Σύγκρουση ολίσθησης-ελάττωσης.

10

11 Συγκρούσεις Ελάττωσης – Ελάττωσης (ii) ▪Έστω η συμβολοσειρά id(id,id) οπότε σε μια δεδομένη στιγμή θα περιέχεται στην στοίβα ΣτοίβαΕίσοδος $id(id,id) ▪είναι δεδομένο ότι θα πρέπει να ελαττωθεί το id αλλά με ποίον από τους δύο κανόνες; (5) parameter ::= "id" (7) expr ::= "id" ▪Αν το πρώτο id είναι διαδικασία τότε ο κανόνας (5) είναι σωστός, αν το id είναι πίνακας, τότε ο κανόνας (7) είναι σωστός. ▪Σύγκρουση ελάττωσης-ελάττωσης

12 LR(k) Συντακτικοί Αναλυτές ▪Αποφεύγουμε ΣΑ με συγκρούσεις, ώστε να έχουμε ντετερμινιστικούς συντακτικούς αναλυτές. ▪LR(k) (Left-to-right, Rightmost derivation, k lookahead symbols): Διαβάζουν συμβολοσειρά εισόδου από αριστερά προς τα δεξιά, κατασκευάζουν το συντακτικό δένδρο χρησιμοποιώντας την αριστερότερη παραγωγή, διαβάζοντας k προπορευόμενα σύμβολα. Υλοποίηση με αυτόματα στοίβας ειδικής μορφής. Υλοποίηση LR(k) για k μεγαλύτερο του 1 είναι ιδιαίτερα πολύπλοκη. LR(1), SLR(1), LALR(1)

13 Γιατί Συντακτικούς Αναλυτές LR ▪Είναι δυνατό να κατασκευαστούν ΣΑ LR σχεδόν για κάθε προγραμματιστική δομή και καλύπτουν τις ανάγκες της συντριπτικής πλειοψηφίας των γλωσσών προγραμματισμού. ▪Είναι η γενικότερη μέθοδος συντακτικής ανάλυσης ελάττωσης- ολίσθησης και μπορεί να υλοποιηθεί αποδοτικά. ▪Είναι εύκολη η ανίχνευση λαθών. ▪Οι κλάση των γραμματικών LR είναι υπερσύνολο εκείνων των γραμματικών LL.

14 Συντακτικοί Αναλυτές LR

15 ΣΑ LR(1) ▪Οι ΣΑ της κατηγορίας υλοποιούνται με αυτόματο στοίβας της μορφής: ΠΙΝΑΚΕΣ ΕΛΕΓΧΟΥ ΣΥΝΤΑΚΤΙΚΗΣ ΑΝΑΛΥΣΗΣ ACTIONNEXT ΑΛΓΟΡΙΘΜΟΣ LR a1a1 a2a2 amam EOF... xnxn s1s1 x1x1 s0s0 snsn

16 Αυτόματο LR ▪Ενδιάμεση μνήμη για ανάγνωση συμβολοσειράς εισόδου. ▪Πεπερασμένο σύνολο καταστάσεων Κ. ▪Στοίβα όπου τοποθετούνται εναλλάξ σύμβολα της γραμματικής και καταστάσεις του αυτομάτου από το Κ. ▪Πίνακας πράξεων ACTIOΝ, με μια γραμμή για κάθε κατάσταση K και μια στήλη για κάθε τερματικό σύμβολο της γραμματικής και το σύμβολο EOF. ▪Πίνακας επόμενης κατάστασης NEXT, με μια γραμμή για κάθε κατάσταση του Κ και μια στήλη για κάθε σύμβολο της γραμματικής (τερματικό ή μη- τερματικό).

17 Λειτουργία ΣΑ LR ▪Αρχικά, η στοίβα περιέχει μόνο η αρχική κατάσταση. ▪Έστω ότι στην κορυφή της στοίβας βρίσκεται η κατάσταση s και το σύμβολο εισόδου είναι a. Τότε αν το κελί του πίνακα action(s,a) περιέχει: πράξη ολίσθησης, τότε το a τοποθετείται στη στοίβα και μετά από αυτό η κατάσταση next(s,a). πράξη ελάττωσης, με ένα κανόνα της μορφής Α::=β, τότε αφαιρούνται από τη στοίβα |β| ζεύγη καταστάσεων-συμβόλων. Η επόμενη κατάσταση καθορίζεται από την ενέργεια s''=next(s',Α) (πίνακας ΝΕΧΤ), όπου s' το στοιχείο στην κορυφή της στοίβας. Τοποθετείται στη στοίβα το Α και η κατάσταση s''. πράξη αποδοχής, τότε ο ΣΑ σταματά.

18 Αναπαράσταση Πινάκων ΣΑ ▪Αναπαράσταση στοιχείων του πίνακα ΣΑ: si : Στη θέση Μ(j,x), σημαίνει ότι η επόμενη κατάσταση θα είναι η i, και θα γίνει η πράξη της ολίσθησης. rk : Στην θέση Μ(j,x), σημαίνει ότι γίνεται ελάττωση με τον κανόνα k (υποθέτουμε αρίθμηση των κανόνων), και acc : αποδοχή.

19 Παράδειγμα Πίνακα ΣΑ LR (1)Ε ::= Ε "+" Τ (2)Ε ::= Τ (3)T ::= Τ "*" F (4)T::=F (5)F::="(" E ")" (6)F ::= "id"

20 Παράδειγμα ανάλυσης της id * id + id

21 Κατασκευή Πινάκων ACTION & GOTO (NEXT) ▪Αρκετοί αλγόριθμοι κατασκευής πινάκων: LR(0): αν η γραμματική ανήκει στην κατηγορία LR(0). Δεν χρησιμοποιείται πολύ στην πράξη. SLR(1): Μεγαλύτερο εύρος γραμματικών αλλά αρκετά περιοριστικός. LALR(1): Χρησιμοποιείται περισσότερο στην πράξη. LR(1): Πολύ μεγάλο μέγεθος πινάκων. ▪Οι κατηγορίες γλωσσών που αναγνωρίζονται από τους αντίστοιχους ΣΑ είναι: LR(0)  SLR(1)  LALR(1)  LR(1)

22 Αλγόριθμος SLR(1) Κατασκευή των Πινάκων ACTION GOTO (ΝΕΧΤ)

23 Κατασκευή Πίνακα SLR(1) ▪Για την κατασκευή του αντίστοιχου πίνακα συντακτικής ανάλυσης απαιτείται ο ορισμός: της έννοιας του στοιχείου (item), της συνάρτησης CLOSURE(I) (κλεισίματος) ενός συνόλου στοιχείων, της συνάρτησης GOTO(I,X) ενός συνόλου στοιχείων και ενός συμβόλου της γραμματικής, η οποία επιστρέφει ένα σύνολο στοιχείων, ορισμός των καταστάσεων του αυτομάτου. ▪Αλγόριθμος κατασκευής του πίνακα βάσει των παραπάνω.

24 Στοιχεία (Items) ▪Στοιχείο είναι ένας κανόνας παραγωγής, στον οποίο έχει προστεθεί το σύμβολο " ● ". Για παράδειγμα στον κανόνα Α::= ΧΥΖ αντιστοιχούν τα ακόλουθα στοιχεία Α::= ● ΧΥΖ, Α::= Χ ● ΥΖ, Α::= ΧΥ ● Ζ Α::= ΧΥΖ ● ▪Το σημείο " ● " σηματοδοτεί το σημείο της συμβολοσειράς που έχουμε ήδη δει, και το τι περιμένουμε να δούμε στη συνέχεια.

25 Συνάρτηση CLOSURE(I) ▪Η συνάρτηση CLOSURE (κλείσιμο) ενός συνόλου στοιχείων Ι της γραμματικής δίνεται από: όλα τα στοιχεία του συνόλου Ι, για κάθε στοιχείο του Ι της μορφής Α::=α ● Ββ το οποίο ανήκει στο σύνολο CLOSURE(I) και για κάθε κανόνα της γραμματικής της μορφής Β::=γ, το στοιχείο Β::= ● γ ανήκει στο CLOSURE(I). Το παραπάνω βήμα εκτελείται μέχρι να μη ν μεταβάλλεται το CLOSURE(I).

26 Παράδειγμα Υπολογισμού CLOSURE(I) ▪Έστω η (επαυξημένη) γραμματική: Ε' ::= Ε Ε ::= Ε "+" Τ | Τ T ::= Τ "*" F | F F ::= "id" | "(" E ")" ▪Εάν θεωρήσω το σύνολο I 0 = {E' ::= ● E} η συνάρτηση CLOSURE(I 0 ) είναι: CLOSURE(I 0 ) = {E'::= ● E; E::= ● E+T; E::= ● T; T ::= ● T * F; T ::= ● F; F ::= ● (E); F ::= ● id }

27 Συνάρτηση GOTO(Ι,Χ) ▪Η συνάρτηση GOTO(I,X) απεικονίζει ένα σύνολο στοιχείων Ι και ένα σύμβολο της γραμματικής Χ (τερματικό ή μη) σε ένα σύνολο Ι' στοιχείων τέτοιων ώστε: GOTO(I,X) = CLOSURE(J) J = {A::=αX ● b | A::=α ● Xb  I} ▪Παράδειγμα Υπολογισμού GOTO: I 1 ={E'::=E ● ; E::=E ● +T} GOTO(I 1,*) = {} GOTO(I 1,+)={E::=E+ ● T; T::= ● T*F;T::= ● F; F::= ● id; F::= ● (E) } Ε' ::= Ε Ε ::= Ε "+" Τ | Τ T ::= Τ "*" F | F F ::= "id" | "(" E ")"

28 Καταστάσεις του Αυτομάτου ▪Αρχικά το αυτόματο δεν έχει "διαβάσει" κανένα σύμβολο. Άρα η αρχική του κατάσταση είναι: Ε' ::= ● E ▪Φυσικά, το Ι 0 =CLOSURE(E'::= ● E) CLOSURE(E'::= ● E) = {E'::= ● E; E::= ● E+T; E::= ● T; T ::= ● T * F; T ::= ● F; F ::= ● (E); F ::= ● id } ▪Αν το αυτόματο διαβάσει ένα σύμβολο a τότε η κατάσταση του θα δίνεται από την I 1 =GOTO(I 0,a) ▪Πχ. "ανάγνωση" σύμβολου id, άρα GOTO(I 0,id)={ F ::= id ● } = I 1

29 Κατασκευή Καταστάσεων ▪Έστω μια γραμματική G=(T,N,P,S) και η επαυξημένη γραμματική: G'={T,N  S',P  (S'::=S),S'} ▪Οι καταστάσεις Ι 0, Ι 1,...Ι n προκύπτουν από την ακόλουθη διαδικασία: I 0 = CLOSURE({S'::= ● S}) C = {I 0 } repeat forall Ι i  C forall α  (T  N) if GOTO(Ι i,α)  and GOTO(Ι i,α)  C then I j = GOTO(Ι i,α) C = C  { I j } until C unchaged

30 Κατασκευή Πίνακα SLR(1) ΣΑ για μια Γραμματική G 1Δημιουργία των καταστάσεων των στοιχείων της G. 2Για μια κατάσταση Ι i, αν υπάρχει στο Ι i κανόνας: i.Α::=α ● aβ και a είναι τερματικό σύμβολο και υπάρχει GOTO(Ι i,a)= Ι j τότε action(i,a)=shift j ii.Α::=α ● τότε για κάθε a στο FOLLOW(A) με Α  S', τότε action(i,a)= reduce A::=α iii.S'::=S ● τότε action(i,EOF) = accept 3Για κάθε μη-τερματικό σύμβολο Α αν GOTO(Ι i,A)= Ι j τότε next(i,A)= j 4Όλες οι άλλες θέσεις του πίνακα παίρνουν την τιμή error. 5Η αρχική κατάσταση είναι η Ι 0 =CLOSURE({S'::= ● S})

31 Παράδειγμα Υπολογισμού SLR(1) Πίνακα I 0 ={E'::= ● E; E::= ● E+T; E::= ● T; T ::= ● T * F;T ::= ● F; F ::= ● (E);F ::= ● id } I 1 =GOTO(I 0,E)={E'::=E ● ;E::=E ● +T} I 2 =GOTO(I 0,T)={E::=T ● ; T ::=T ● * F} I 3 =GOTO(I 0,F)={T ::= F ● } I 4 =GOTO(I 0, ( )={F ::=( ● E);E::= ● E+T; E::= ● T; T ::= ● T * F; T ::= ● F; F ::= ● (E); F ::= ● id } I 5 =GOTO(I 0, id) = { F ::= id ● } I 6 =GOTO(I 1, +)={E::=E+ ● T;T ::= ● T * F; T ::= ● F; F ::= ● (E); F ::= ● id } I 7 =GOTO(I 2, *)={T ::=T * ● F;F ::= ● (E);F ::= ● id }... Ε' ::= Ε Ε ::= Ε "+" Τ Ε ::= Τ T ::= Τ "*" F T ::=F F ::= "(" E ")" F ::= "id"

32 Παράδειγμα Κατασκευή Πίνακα I 1 =GOTO(I 0,E)I 6 =GOTO(I 1, +) I 2 =GOTO(I 0,T)και I 1 ={E'::=E ● ;...} I 3 =GOTO(I 0,F)I 7 =GOTO(I 2, *) I 4 =GOTO(I 0, ( )I 2 ={E::=T ● ;...} & I 5 =GOTO(I 0, id) FOLLOW(E)={+,),EOF}

33 Πλήρης Πίνακας SLR (1)Ε ::= Ε "+" Τ (2)Ε ::= Τ (3)T ::= Τ "*" F (4)T::=F (5)F::="(" E ")" (6)F ::= "id"

34 Παρατηρήσεις ▪Προφανώς, αν σε ένα κελί του πίνακα αντιστοιχούν δύο τιμές, όπως αυτές ορίστηκαν παραπάνω, τότε η γραμματική δεν είναι SLR(1). ▪Η υλοποίηση ΣΑ LR γίνεται συνήθως με μετα-εργαλεία, όπως είναι το bison (yacc).

35 Ανάνηψη από σφάλματα στη Συντακτική Ανάλυση LR

36 Ανάνηψη από σφάλματα σε ΣΑ LR(1) ▪Ο εντοπισμός σφάλματος γίνεται όταν διαπιστωθεί ότι για το συγκεκριμένο συνδυασμό συμβόλου στοίβας και συμβόλου εισόδου, ο πίνακας ACTION είναι κενός. Ανάνηψη από λάθη με την μέθοδο πανικού Ανάνηψη από λάθη σε επίπεδο φάσης.

37 Μέθοδος Πανικού ▪Ανιχνεύεται η στοίβα μέχρι να βρεθεί μια κατάσταση s, η οποία να έχει μια μετάβαση για ένα συγκεκριμένο σύμβολο Α, δηλ. GOTO(s,A) να μην είναι κενό. ▪Αφαιρούνται από την είσοδο, ένα η περισσότερα σύμβολα μέχρι να βρεθεί ένα, το οποίο να ανήκει στο FOLLOW(A). ▪Τοποθετείται στη στοίβα η κατάσταση GOTO(s,A) και συνεχίζεται η συντακτική ανάλυση. ▪Καθορίζει ότι το σφάλμα βρίσκεται στο Α και αφαιρεί τόσο από την στοίβα όσο και από την είσοδο σύμβολα σχετιζόμενα με το Α.

38 Ανάνηψη από λάθη σε επίπεδο φάσης. ▪Δημιουργείται μια ρουτίνα λάθους για κάθε κενή θέση του πίνακα συντακτικής ανάλυσης. ▪Η συνάρτηση προσθέτει ή αφαιρεί κατάλληλα σύμβολα τόσο στη στοίβα όσο και στην είσοδο ή ακόμα αλλαγή ή αντιμετάθεση δύο συμβόλων. ▪Προσοχή πρέπει να δοθεί στη αποφυγή βρόγχων.

39 Σύνοψη ▪Εισαγωγή στην ανάλυση από πάνω προς τα κάτω. Οι έννοιες της ελάττωσης και ολίσθησης Συγκρούσεις Πλεονεκτήματα της LR ανάλυσης ▪Συντακτική ανάλυση LR Στοιχεία Συναρτήσεις CLOSURE και GOTO Κατασκευή Πίνακα SLR(1) ▪Ανάνηψη από σφάλματα


Κατέβασμα ppt "Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση II Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google