170 likes | 382 Views
Συντακτική Ανάλυση. Βασικοί ορισμοί Γραμματικές Χωρίς Συμφραζόμενα (Context-Free Grammars ή CFGs) Παραγωγές (derivations) Συντακτικά δένδρα ( parse trees) Συντακτική ανάλυση από πάνω-προς-τα-κάτω (top-down) Συντακτική ανάλυση από κάτω -προς-τα-πάνω (bottom-up) Διφορούμενες γραμματικές.
E N D
Συντακτική Ανάλυση • Βασικοί ορισμοί • Γραμματικές Χωρίς Συμφραζόμενα (Context-Free Grammars ή CFGs) • Παραγωγές (derivations) • Συντακτικά δένδρα (parse trees) • Συντακτική ανάλυση από πάνω-προς-τα-κάτω (top-down) • Συντακτική ανάλυση από κάτω-προς-τα-πάνω (bottom-up) • Διφορούμενες γραμματικές ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
sentence “I gave him the book” indirect object subject: I verb:gave object: him noun phrase noun: book article: the Συντακτική Ανάλυση, Ορισμός • Συντακτική ανάλυση (parsing): η διαδικασία με την οποία προσδιορίζουμε αν η συμβολοσειρά εισόδου ακολουθεί τους κανόνες σύνταξης της γλώσσας, καθώς και τη λειτουργία κάθε λεκτικής μονάδας. ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Συντακτική Ανάλυση Προγράμματος { if (b == (0)) a = b; while (a != 1) printf(“%I “,I--); } Source code (character stream) Lexical Analysis { if ( b == 0 ) a = b ; Token stream Syntax Analysis block Syntax tree while_stmt if_stmt expr expr block != constant == constant variable variable ... 1 expr 0 b a = variable variable a b ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Λειτουργία της Συντακτικής Ανάλυσης • Είσοδος ΣΑ : ροή λεκτικών μονάδων (token stream) • Έξοδος ΣΑ : συντακτικό δένδρο που προσδιορίζει τις σχέσεις ανάμεσα στις ΛΜ και/ή ένδειξη ορθότητας του προγράμματος • Η συντακτική ανάλυση δεν ελέγχει πολλές παραμέτρους όπως π.χ. την συμφωνία ορισμάτων-τελεστών, την αρχικοποίηση των μεταβλητών κ.α. int x = true; int y; z = f(y); • Τα παραπάνω παραπέμπονται στη σημασιολογική ανάλυση ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Προσδιορισμός του συντακτικού με ΚΕ • Οι κανονικές εκφράσεις είναι εύκολες να κατανοηθούν και να υλοποιηθούν με ΝΠΑ. Δυστυχώς δεν μπορούν να εκφράσουν το συντακτικό των γλωσσών προγραμματισμού. Π.χ. Η γλώσσα που περιέχει όλες τις συμβολοσειρές με ισορροπημένες (balanced) παρενθέσεις: () (()) ()()() (())()((()())) Καθώς οι ΚΕ ισοδυναμούν με ΝΠΑ, θα έπρεπε να κατασκευάσουμε αυτόματο με άπειρες καταστάσεις για να αναγνωρίσουμε όλες τις συμβολοσειρές της γλώσσας. Π.χ. για μέχρι πέντε φωλιασμένες παρενθέσεις απαιτείται: ( ( ( ( ( S ) ) ) ) ) ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Γραμματικές • Μοντέλο παραγωγής (αντί αναγνώρισης) των συμβολοσειρών που ανήκουν σε μία γλώσσα. • Οι γραμματικές ορίζουν το συντακτικό και όχι τη σημασιολογία της γλώσσας. • Γενικά, οι γραμματικές δίνονται σαν ένα σύνολο κανόνων “παραγωγής”, π.χ. stmt if expr then stmt else stmt expr expr + expr | expr * expr Οι κανόνες περιέχουν τερματικά (δηλ. τις λεκτικές μονάδες της γλώσσας) και μη τερματικά σύμβολα (terminals & non-terminals). ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Γραμματικές : ορισμός • Ως γραμματική G ορίζεται η τετράδα: G = { VN, VT, P, S}, όπου VN :αλφάβητο συμβόλων που ονομάζονται μη τερματικά VT : αλφάβητο συμβόλων που ονομάζονται τερματικά P : σύνολο συντακτικών κανόνων ή κανόνων παραγωγής της μορφής α β όπου αV+και β V*όπου V = VNVT . S: το αρχικό σύμβολο της γραμματικής VN Ισχύει ότι VNVT = ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Επεξήγηση • Τερματικά σύμβολα: βασικές δομικές μονάδες από τις οποίες κατασκευάζουμε μία γλώσσα. • Μη-τερματικά σύμβολα : αναπαριστούν ομάδες συμβόλων • Κανόνες παραγωγής : καθορίζουν το πώς συνδυάζονται τα τερματικά και μη σύμβολα της γραμματικής για την κατασκευή της γλώσσας • Αρχικό σύμβολο : σημείο εκκίνησης για την κατασκευή των συμβολοσειρών της γλώσσας. ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Είδη γραμματικών • Ανάλογα με την μορφή των κανόνων παραγωγής οι γραμματικές διακρίνονται σε τέσσερις τύπους. Οι σημαντικότερες από αυτές είναι: • Τύπου 2 ή Γραμματικές χωρίς συμφραζόμενα (Context Free Grammars ή CFG): Α = x όπου Α VN και x V*. • Τύπου 3 ή Κανονικές Γραμματικές (Regular Grammars): Α = α | α, Β όπου Α, Β VN και a VT. • Οι κανονικές γραμματικές ισοδυναμούν με ΝΠΑ. ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Γλώσσες με συμφραζόμενα • L1={wcw | όπου w (a|b)*} που αποτελεί παράδειγμα της υποχρεωτικής δήλωσης των μεταβλητών πριν τη χρήση τους • L2={anbmcndm | όπου n1, m 1} παράδειγμα κλήσης διαδικασιών, όπου ο αριθμός των παραμέτρων πρέπει να ταιριάζει με όσες έχουν δηλωθεί στις αντίστοιχες δήλωσεις. • L3={anbncn | όπου n 0} • Λύση : έλεγχος των χαρακτηριστικών που δεν μπορούν να περιγραφούν από γλώσσες χωρίς συμφραζόμενα, κατά την σημασιολογική ανάλυση. ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Σύγκριση ΚΕ - CFG • Οι κανονικές εκφράσεις ισοδυναμούν με ΝΠΑ. • Τα ΝΠΑ είναι ισοδύναμα με κανονικές γραμματικές. • Οι κανονικές γραμματικές είναι υποσύνολο των CFG. • Άρα γιατί δεν χρησιμοποιούμε CFG και για την περιγραφή των λεκτικών μονάδων; • Η περιγραφή CFG είναι πολύ πιο ισχυρή από ότι απαιτείται για τη λεκτική ανάλυση • Οι ΚΕ είναι εύκολες στην κατανόηση • Η υλοποίηση της λεκτική ανάλυσης μέσω ΝΠΑ είναι πολύ πιο αποδοτική. • Ο διαχωρισμός της λεκτικής από την συντακτική ανάλυση βοηθά στην εύκολη συντήρηση του μεταγλωττιστή. ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Παραγωγή (derivation) • Μία συμβολοσειρά ανήκει σε μία γλώσσα G αν μπορούμε να την κατασκευάσουμε ξεκινώντας από το αρχικό σύμβολο της G και εφαρμόζοντας τους κανόνες παραγωγής. Μία τέτοια συμβολοσειρά ονομάζεται “προτασιακός τύπος” (sentential form). Π.χ., έστω expr = expr, “+” , expr | expr, “*” , expr | “(”, expr, “)” | “-” , expr | ID ; Μία παραγωγή (δημιουργία συμβολοσειράς) μπορεί να είναι: expr expr , “+” , expr ID , “+”, expr ID , “+” , ID ; : παραγωγή σε ένα βήμα : παραγωγή σε μηδέν ή περισσότερα βήματα : παραγωγή σε ένα ή περισσότερα βήματα ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Παραγωγή (συνέχεια) • Δύο γραμματικές ονομάζονται ισοδύναμες αν παράγουν την ίδια γλώσσα. Π.χ. S = A,B ; A = “a”,A | “” ; B = “b”,B | “” ; S = “a”, S | “a” | “b” | Β | “” ; B = “b”,B | “” ; παράγουν τη γλώσσα {ambn, όπου m,n 0} Επιλογές κατά την παραγωγή μίας συμβολοσειράς: • Ποιό μη-τερματικό σύμβολο να αντικαταστήσουμε; • Ποιό κανόνα παραγωγής να επιλέξουμε; ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Αριστερότερη - Δεξιότερη Παραγωγή • Αριστερότερη Παραγωγή (leftmost derivation): σε κάθε βήμα αντικαθιστούμε το μη-τερματικό σύμβολο που βρίσκεται πιο αριστερά. • Δεξιότερη Παραγωγή (rightmost derivation): σε κάθε βήμα αντικαθιστούμε το μη-τερματικό σύμβολο που βρίσκεται πιο δεξιά. Αποκαλείται επίσης και κανονική παραγωγή. • Σε κάθε προτασιακή μορφή μίας γλώσσας είναι δυνατό να αντιστοιχούν πλήθος παραγωγών, τόσο αριστερότερων όσο και δεξιότερων. ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Συντακτικό δένδρο (parse tree) • Συντακτικό δένδρο : δένδρο το οποίο κατασκευάζεται συνδέοντας τα σύμβολα που προκύπτουν από μία παραγωγή με το σύμβολο από το οποίο προήλθαν. Π.χ. expr = expr, “+” , expr | expr, “*” , expr | “(”, expr, “)” | “-” , expr | ID ; Η προτασιακή μορφή ID, “+”, ID, “*”, ID μπορεί να προκύψει ως εξής: expr expr, “+”, expr expr, “+”, expr , “*” , expr expr, “+”, expr , “*” , ID expr, “+”, ID, “*” , ID ID, “+”, ID, “*” , ID ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Συντακτικό δένδρο (συνέχεια) • Eναλλακτικά μπορεί να χρησιμοποιηθεί και η ακόλουθη επίσης δεξιότερη παραγωγή: expr expr, “*”, exprexpr, “*”, ID expr, “+”, expr , “*” , IDexpr, “+”,ID,“*”,IDID, “+”, ID, “*” , ID ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών
Διφορούμενες γραμματικές • Τα φύλλα ενός συντακτικού δένδρου είναι τα τερματικά σύμβολα της γραμματικής ενώ οι εσωτερικοί του κόμβοι είναι μη-τερματικά σύμβολα. • Διφορούμενη (ambiguous) γραμματική : ονομάζεται μία γραμματική όταν υπάρχει προτασιακή μορφή της για την οποία υπάρχουν περισσότερα του ενός συντακτικά δένδρα. • Επιλύεται η ασάφεια (ambiguity); ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών