Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση ΙII Εαρινό Εξάμηνο 2018-2019 Lec 11 26/03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής
Γραμματικές Μία γραμματική ονομάζεται αναδρομική εφόσον επιτρέπει παραγωγές της μορφής X + p Xq, όπου X N και p, q V *. Επίσης, ονομάζεται αριστερά αναδρομική αν X + Xp και δεξιά αναδρομική αν X + p X. Μία γραμματική λέμε ότι παρουσιάζει αυτοένθεση (self-embedding grammar), αν επιτρέπει παραγωγές της μορφής X + p Xq, όπου X N και p, q V *, με ένα τουλάχιστο από αυτά να είναι τερματικό, δηλαδή (p T) (q T) 0. Λέμε ότι η γλώσσα L παράγεται από τη γραμματική G, αν: L = w w T * ; S G * w Γραμματικές Τύπου 2 (χωρίς συμφραζόμενα) Oι κανόνες παραγωγής έχουν τη μορφή: X q με X N και q N T +
Γραμματικές Μία γραμματική, για να έχει εφαρμογή στην ανάπτυξη κώδικα ανάλυσης, θα πρέπει να διατυπωθεί με τέτοιο τρόπο, ώστε να συντρέχουν κάποιες προϋποθέσεις: Ο ορισμός της να μην περιλαμβάνει πλεονασματικούς κανόνες παραγωγής, οι οποίοι εκτός των επιπτώσεων, που μπορεί να έχουν στην ταχύτητα ανάλυσης των προτάσεων της γλώσσας, μπορεί επίσης να οδηγούν σε λάθη. Ο ορισμός της να μην περιλαμβάνει παραγωγές-ε, για τις οποίες θα μιλήσουμε στη συνέχεια της παραγράφου. Ο ορισμός της να μην περιλαμβάνει κυκλικούς κανόνες παραγωγής. Γραμματική με πλεονασματικούς κανόνες παραγωγής Μη τερματικά σύμβολα: Τερματικά σύμβολα: (i) (ii) (iii) (iv) (v) (vi) Αρχή:
Πλεονασματικοί κανόνες παραγωγής Γραμματική με πλεονασματικούς κανόνες παραγωγής Μη τερματικά σύμβολα: Τερματικά σύμβολα: (i) (ii) (iii) (iv) (v) (vi) Αρχή:
Γραμματικές Γραμματική με κανόνα-ε για τερματισμό αναδρομικού ορισμού Ορισμός γραμματικής με χρήση κανόνα-ε P QR R QR R ε Q x Ορισμός ισοδύναμης γραμματικής χωρίς κανόνα-ε P Q P QP Q x Γραμματική με κυκλικούς κανόνες παραγωγής P Q Q R R P ή P P
Παράδειγμα (1) Πρόταση: (())()
Αυτόματα Στοίβας
Αυτόματα Στοίβας
ΑΣ Λογική Λειτουργίας
ΑΣ Λογική Λειτουργίας
Αυτόματα Στοίβας
Παράδειγμα (1) Αυτόματο στοίβας Πρόταση: (())()
Παράδειγμα (1)
Άσκηση
Γραμματικές και συντακτική ανάλυση Ι Έστω, η γραμματική χωρίς συμφραζόμενα Γ=(Τ,Ν,S,R), όπου Τ={NUMBER,+,-,*,/,(,)} N={E} S=E με κανόνες παραγωγής: E E+E (1) E-E (2) E*E (3) E/E (4) (E) (5) NUMBER (6)
Γραμματικές και συντακτική ανάλυση ΙΙ Η παραπάνω γραμματική μπορεί να αναλύσει την παράσταση (3+7)/(8-6). Πρώτα χρησιμοποιεί τον κανόνα παραγωγής (4) και σχηματίζει το δένδρο: E E / E Μετά σχηματίζει το αριστερό και το δεξί υποδένδρο χρησιμοποιώντας τον κανόνα παραγωγής (5):
Γραμματικές και συντακτική ανάλυση ΙΙΙ (3+7)/(8-6) E E / E ( E ) ( E ) Η ανάλυση συνεχίζει με τα φύλλα Ε στα δύο υποδένδρα. Το Ε στο αριστερό υποδένδρο αναλύεται με τον κανόνα παραγωγής (1) και το Ε στο δεξί υποδένδρο αναλύεται με τον κανόνα παραγωγής (2).
Γραμματικές και συντακτική ανάλυση ΙV (3+7)/(8-6) E E / E ( E ) ( E ) E + E E - E Τέλος όλα τα φύλλα Ε αναλύονται με τον κανόνα παραγωγής (6).
Γραμματικές και συντακτική ανάλυση V (3+7)/(8-6) E E / E ( E ) ( E ) E + E E - E NUMBER NUMBER NUMBER NUMBER
Γραμματικές και συντακτική ανάλυση VI Το αποτέλεσμα της ανάλυσης είναι ένα παράγωγο δένδρο. Όταν η ανάλυση προχωράει πάντα πρώτα με το σχηματισμό των αριστερών υποδένδρων, τότε λέμε ότι η ανάλυση σχηματίζει αριστερές προτασιακές μορφές. Λέμε ότι η συμβολοσειρά είναι μια αριστερή προτασιακή μορφή, αν έχει προκύψει από τις προηγούμενες, εφαρμόζοντας κάθε φορά παραγωγή, που αντικαθιστά το πρώτο μη τερματικό σύμβολο από αριστερά. Αυτό γράφεται ως, q q p lm Μια συμβολοσειρά είναι δεξιά προτασιακή μορφή, αν έχει προκύψει εφαρμόζοντας κάθε φορά παραγωγή, που αντικαθιστά το πρώτο μη τερματικό σύμβολο από δεξιά. Αυτό γράφεται ως * q p rm * q
Γραμματικές και συντακτική ανάλυση VII Λέμε ότι μια γραμματική είναι γραμματική LL(k) αν κάθε της πρόταση μπορεί να προέλθει από την αρχή της μέσω αριστερών προτασιακών μορφών, όπου ο κανόνας που εφαρμόζεται σε κάθε παραγωγή μπορεί να προβλεφθεί με βάση τα k επόμενα σύμβολα της συμβολοσειράς. Όλες οι γλώσσες της οικογένειας LL είναι προσδιοριστικές. Μια γραμματική είναι γραμματική LR(k) αν κάθε της πρόταση μπορεί να παραχθεί από την αρχή της μέσω δεξιών προτασιακών μορφών, που προκύπτουν με εφαρμογή κανόνα ο οποίος μπορεί να ανιχνευθεί με βάση τα k πρώτα τερματικά σύμβολα της προτασιακής μορφής. Όλες οι γλώσσες της οικογένειας LR είναι προσδιοριστικές. Η οικογένεια των γλωσσών LR(1) είναι ακριβώς η οικογένεια των προσδιοριστικών γλωσσών και είναι ευρύτερη από την οικογένεια των γλωσσών LL.
Γραμματικές χωρίς συμφραζόμενα Η σημειογραφία των γραμματικών χωρίς συμφραζόμενα ονομάζεται συχνά μορφή Backus-Naur (Backus-Naur Form, BNF) Μια γραμματική χωρίς συμφραζόμενα αποτελείται από Ένα σύνολο τερματικών συμβόλων T Ένα σύνολο μη τερματικών συμβόλων N Ένα αρχικό σύμβολο S (μη τερματικό) Ένα σύνολο συντακτικών κανόνων Copyright 2005 Elsevier
Γραμματικές χωρίς συμφραζόμενα Γραμματική εκφράσεων με προτεραιότητα και προσεταιριστικότητα Copyright 2005 Elsevier
Γραμματικές χωρίς συμφραζόμενα Συντακτικό δένδρο για τη γραμματική των εκφράσεων (με προτεραιότητα) για το 3 + 4 * 5 Copyright 2005 Elsevier
Γραμματικές χωρίς συμφραζόμενα Συντακτικό δένδρο για τη γραμματική των εκφράσεων (με αριστερή προσεταιριστικότητα) για το 10-4 - 3 Copyright 2005 Elsevier
Συμβολισμοί BNF και EBNF
Συμβολισμοί BNF και EBNF Συμβολισμός EBNF του N. Wirth Μη τερματικά σύμβολα Χρησιμοποιούνται κανονικοί χαρακτήρες, που δεν περικλείονται σε < και >, όπως στην περίπτωση του κλασσικού συμβολισμού BNF. Τερματικά σύμβολα Περιλαμβάνονται σε και, όπως π.χ. το +. Χρησιμοποιείται για το συμβολισμό εναλλακτικών περιπτώσεων. ( και ) Χρησιμοποιείται στην ομαδοποίηση συμβόλων και στην αλλαγή της προτεραιότητας εφαρμογής των άλλων μετασυμβόλων. [ και ] Προαιρετική εμφάνιση ενός συμβόλου ή μιας ομάδας συμβόλων. { και } Προαιρετική επανάληψη ενός συμβόλου ή μιας ομάδας συμβόλων. = Χρησιμοποιείται αντί του ή του ::= στους ορισμούς των κανόνων παραγωγής.. Σημειώνει το τέλος ενός κανόνα παραγωγής. (* και *) Χρησιμοποιούνται για τη διατύπωση σχολίων.
ΠΑΡΑΔΕΙΓΜΑ: Κανόνες Παραγωγής αριθμητικών εκφράσεων σε EBNF S = έκφραση έκφραση = έκφραση + όρος έκφραση - όρος όρος όρος = όρος * παράγοντας όρος / παράγοντας παράγοντας παράγοντας = ( έκφραση ) αριθμός αριθμός = ψηφίο { ψηφίο } ψηφίο = 0 1 2 3 4 5 6 7 8 9. Ας θεωρήσουμε τον κανόνα: έκφραση = έκφραση + όρος έκφραση - όρος όρος Που μπορεί να αντικατασταθεί από τους κανόνες: έκφραση = έκφραση ΤΛ_ΑΘ όρος όρος ΤΛ_ΑΘ= + - έκφραση = όρος {ΤΛ_ΑΘ όρος} 29
Παράγωγα και συντακτικά δένδρα I Ένα παράγωγο δένδρο αναπαριστά τη δομή μιας πρότασης και έχει το χαρακτηριστικό ότι μπορεί να αντιστοιχεί σε περισσότερες από μία παραγωγές. ΠΑΡΑΔΕΙΓΜΑ S = έκφραση. έκφραση = έκφραση ΤΛ έκφραση ( έκφραση ) αριθμός. ΤΛ = + - * /. ΠΡΌΤΑΣΗ: (27-5)*8
Παράγωγα και συντακτικά δένδρα II Παραγωγή μέσω δεξιών προτασιακών μορφών (1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) έκφραση ΤΛ αριθμός [έκφραση = αριθμός ] (3) έκφραση * αριθμός [ΤΛ = * ] (4) ( έκφραση ) * αριθμός [έκφραση = ( έκφραση ) ] (5) (έκφραση ΤΛ έκφραση) * αριθμός [έκφραση = έκφραση ΤΛ έκφραση] (6) (έκφραση ΤΛ αριθμός) * αριθμός [έκφραση = αριθμός ] (7) (έκφραση - αριθμός) * αριθμός [ΤΛ = - ] (8) (αριθμός - αριθμός) * αριθμός [έκφραση = αριθμός ] Παραγωγή μέσω αριστερών προτασιακών μορφών (27-5)*8 (1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) (έκφραση) ΤΛ έκφραση [έκφραση = ( έκφραση ) ] (3) (έκφραση ΤΛ έκφραση) ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (4) (αριθμός ΤΛ έκφραση) ΤΛ έκφραση [έκφραση = αριθμός ] (5) (αριθμός - έκφραση) ΤΛ έκφραση [ΤΛ = - ] (6) (αριθμός - αριθμός) ΤΛ έκφραση [έκφραση = αριθμός ] (7) (αριθμός - αριθμός) * έκφραση [ΤΛ = * ] (8) (αριθμός - αριθμός) * αριθμός [έκφραση = αριθμός ]
Παράγωγα και συντακτικά δένδρα IIΙ (27-5)*8 έκφραση έκφραση ΤΛ έκφραση ( έκφραση ) * αριθμός έκφραση ΤΛ έκφραση αριθμός - αριθμός
Παράγωγα και συντακτικά δένδρα IV Συντακτικό δένδρο: πιο συμπαγής δομή που παράλληλα περιέχει και την πληροφορία για τη στατική σημασία της πρότασης (27-5)*8 * - 8 27 5
Γραμματικές με ασάφειες Ι Λέμε ότι μια γραμματική περιέχει ασάφειες, όταν σε μια πρότασή της μπορεί να αντιστοιχούν περισσότερα από ένα δένδρα. ΑΣΑΦΕΙΑ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΤΕΛΕΣΤΩΝ S = έκφραση. έκφραση = έκφραση ΤΛ έκφραση ( έκφραση ) αριθμός. ΤΛ = + - * /. ΠΡΟΤΑΣΗ: 27-5*8
Γραμματικές με ασάφειες ΙΙ (1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) έκφραση ΤΛ έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (3) αριθμός ΤΛ έκφραση ΤΛ έκφραση [έκφραση = αριθμός ] (4) αριθμός - έκφραση ΤΛ έκφραση [ΤΛ = - ] (5) αριθμός - αριθμός ΤΛ έκφραση [έκφραση = αριθμός ] (6) αριθμός - αριθμός * έκφραση [ΤΛ = * ] (7) αριθμός - αριθμός * αριθμός [έκφραση = αριθμός ] έκφραση έκφραση ΤΛ έκφραση έκφραση ΤΛ έκφραση * αριθμός αριθμός - αριθμός
Γραμματικές με ασάφειες ΙΙΙ (1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) αριθμός ΤΛ έκφραση [έκφραση = αριθμός ] (3) αριθμός - έκφραση [ΤΛ = - ] (4) αριθμός - έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (5) αριθμός - αριθμός ΤΛ έκφραση [έκφραση = αριθμός ] (6) αριθμός - αριθμός * έκφραση [ΤΛ = * ] (7) αριθμός - αριθμός * αριθμός [έκφραση = αριθμός ] έκφραση έκφραση ΤΛ έκφραση αριθμός - έκφραση ΤΛ έκφραση αριθμός * αριθμός
Γραμματικές με ασάφειες ΙV Σωστό δένδρο είναι το δένδρο εκείνο που είναι συμβατό με τη σημασία που θέλει να αποδώσει ο κατασκευαστής σε κάθε στοιχείο της γλώσσας. Για την ασάφεια προτεραιότητας τελεστών απαιτείται η χρήση κανόνων αποσαφήνισης προτεραιοτήτων. S = έκφραση. έκφραση = έκφραση ΤΛ_ΑΘ έκφραση όρος. ΤΛ_ΑΘ = + -. όρος = όρος ΤΛ_ΓΙ όρος παράγοντας. ΤΛ_ΓΙ = * /. παράγοντας = ( έκφραση ) αριθμός.
Γραμματικές με ασάφειες V Η προηγούμενη γραμματική παραμένει δέσμια ασάφειας ως προς την προσεταιριστικότητα των πράξεων: πως γίνεται η ανάλυση της 27-5-8; Η συγκεκριμένη γραμματική αφήνει ανοικτό και το ενδεχόμενο (27-5)-8 αλλά και το ενδεχόμενο 27-(5-8). Συνήθως μας ενδιαφέρει να διασφαλίζουμε αριστερή προσεταιριστικότητα και αυτό επιτυγχάνεται αν ο αντίστοιχος κανόνας της γραμματικής χαρακτηρίζεται από αριστερή και μόνο αριστερή αναδρομικότητα.
Γραμματικές με ασάφειες VΙ Διορθωμένη γραμματική: S = έκφραση. έκφραση = έκφραση ΤΛ_ΑΘ όρος όρος. ΤΛ_ΑΘ = + -. όρος = όρος ΤΛ_ΓΙ παράγοντας παράγοντας. ΤΛ_ΓΙ = * /. παράγοντας = ( έκφραση ) αριθμός. Πρόταση: 27-5*8 έκφραση έκφραση ΤΛ_ΑΘ όρος όρος - όρος ΤΛ_ΓΙ παράγοντας παράγοντας παράγοντας * αριθμός αριθμός αριθμός
Γραμματικές με ασάφειες VΙΙ Πρόταση: 27-5-8 έκφραση έκφραση ΤΛ_ΑΘ όρος έκφραση ΤΛ_ΑΘ όρος - παράγοντας όρος - παράγοντας αριθμός παράγοντας αριθμός αριθμός
Γραμματικές με ασάφειες VΙΙI ΤΟ ΠΡΟΒΛΗΜΑ ΤΟΥ ΜΕΤΕΩΡΟΥ ELSE S = εντολή. εντολή = if έκφραση then εντολή if έκφραση then εντολή else εντολή άλλο. if EK1 then if EK2 then ΕΝΤ1 else ΕΝΤ2
Γραμματικές με ασάφειες IΧ εντολή εντολή if έκφραση then εντολή if έκφραση then εντολή else εντολή EK1 if έκφραση then εντολή else εντολή EK1 if έκφραση then εντολή ENT2 EK2 ENT1 ENT2 EK2 ENT1
Γραμματικές με ασάφειες Χ ΓΡΑΜΜΑΤΙΚΗ ΠΟΥ ΑΠΟΦΕΥΓΕΙ ΤΟ ΠΡΟΒΛΗΜΑ ΤΟΥ ΜΕΤΕΩΡΟΥ ELSE ΜΕ ΤΕΧΝΑΣΜΑ S = εντολή. εντολή = συν_εντολή ασυν_εντολή. συν_εντολή= if έκφραση then συν_εντολή else συν_εντολή άλλο. ασυν_εντολή= if έκφραση then εντολή if έκφραση then συν_εντολή else ασυν_εντολή.
Αναπαράσταση παράγωγου δένδρου #define astemptyprogram 399 #define astprogram 400 #define astemptydeclseq 401 #define astdeclseq 402 #define astdecl 403.............. /* ----------------------------------------------------------- */ /* ----- THE STRUCTURE FOR THE ABSTRACT SYNTAX TREE NODES ---- */ /* ----------------------------------------------------------- */ typedef struct AstNode_tag { int NodeType; struct symbol_tag *SymbolNode; struct AstNode_tag *pastnode[4]; } AstNode;