Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι Εαρινό Εξάμηνο 2018-2019 Lec 05 & 06 25 & 26 /02/2019 Διδάσκων: Γεώργιος Χρ. Μακρής
Φάσεις μεταγλώττισης Αρχικό Πρόγραμμα Λεκτική Ανάλυση λεκτικές μονάδες Πίνακας Συμβόλων Τελικό Πρόγραμμα Συντακτική Ανάλυση συντακτικό δένδρο Σημασιολογική Ανάλυση συντακτικό δένδρο Παραγωγή Ενδιάμεσου Κώδικα ενδιάμεσος κώδικας Βελτιστοποίηση Ενδιάμεσου Κώδικα ενδιάμεσος κώδικας Παραγωγή Τελικού Κώδικα τελικός κώδικας Βελτιστοποίηση Τελικού Κώδικα Χειριστής Σφαλμάτων
Βασικές Έννοιες
Ο ρόλος της λεξικής ανάλυσης (1/3)
Ο ρόλος της λεξικής ανάλυσης (2/3)
Ο ρόλος της λεξικής ανάλυσης (3/3)
Λεκτικές Μονάδες σε μια ΓΠ Μια λεκτική μονάδα για κάθε λέξη κλειδί (keyword) Λεκτικές μονάδες για κάθε τελεστή ή μια ομάδα για κάθε τελεστή (operator) Μια λεκτική μονάδα για τα αναγνωριστικά (identifiers) Λεκτικές Μονάδες για σταθερές (αριθμητικές, συμβολοσειρές) Λεκτικές Μονάδες για συντακτικά σύμβολα (παρενθέσεις, κόμματα, κλπ)
Τιμές Ιδιοτήτων (Attribute values) (1/2) Πως ξεχωρίζουν τα λεξήματα που αντιστοιχούν στην ίδια λεκτική μονάδα; πχ. id <- x, rate, position number <- 23 1123.345 1 0 Τιμές ιδιοτήτων που περιγράφουν το λέξημα Ιδιαίτερα σημαντικό στα αναγνωριστικά (id), όπου συνήθως αποθηκεύεται ένας δείκτης στον πίνακα συμβόλων. Για τους αριθμούς μπορεί να είναι η τιμή που αντιστοιχεί στον αριθμό, ή ένας δείκτης στην συμβολοσειρά που αναπαριστά τον αριθμό.
Τιμές Ιδιοτήτων (Attribute values) (2/2) Ε = Μ * C ** 2 (id, δείκτης στον πίνακα για το Ε) (assign_op) (id, δείκτης στον πίνακα για το M) (mult_op) (id, δείκτης στον πίνακα για το C) (exp_op) (number,2) Τα ονόματα ιδιοτήτων χρησιμοποιούνται συνήθως στην φάση της συντακτικής ανάλυσης ενώ τα οι τιμές ιδιοτήτων σε μεταγενέστερες φάσεις.
Αλφάβητο Μη κενό, πεπερασμένο σύνολο από σύμβολα Σ ονομάζεται αλφάβητο. {0,1} {α,β,γ,δ...ω} {2,3,5,6} σύνολο ASCII χαρακτήρων Συμβολοσειρά: πεπερασμένη παράθεση από σύμβολα. 010, μεταγλωττιστές, 2233322 κενή συμβολοσειρά ε Μήκος της συμβολοσειράς είναι ο αριθμός των συμβόλων που περιέχει. 010 = 3, μεταγλωττιστές =14
Συμβολοσειρές Σ n Σύνολο συμβολοσειρών μήκους n. Σ 0 ={ε}, Σ 2 ={00,01,10,11} Με Σ* συμβολίζεται η ένωση όλων των Σ n Σ = n=0 Σ n Με Σ + η ένωση όλων των μη-κενών συνόλων. Σ + = n=1 Σ n
Παράθεση και Δυνάμεις Παράθεση δύο συμβολοσειρών α και β αποτελείται από τα σύμβολα της α ακολουθούμενα από όλα τα σύμβολα της β. α=011 β=000 αβ=011000 Ύψωση σε δύναμη n είναι η παράθεση n μιας συμβολοσειράς n φορές με τον εαυτό της. α 0 = ε α n+1 = αα n
Συμβολοσειρές Πρόθεμα (prefix) Η συμβολοσειρά α είναι πρόθεμα της συμβολοσειράς β εάν υπάρχει συμβολοσειρά γ τέτοια ώστε β = αγ wh while Επίθεμα ή κατάληξη (suffix) Η συμβολοσειρά α είναι επίθεμα της συμβολοσειράς β εάν υπάρχει συμβολοσειρά γ τέτοια ώστε β = γα ile while Υποσυμβολοσειρά (substring) Η συμβολοσειρά α είναι υποσυμβολοσειρά της συμβολοσειράς β εάν υπάρχουν συμβολοσειρές γ και δ τέτοιες ώστε β = δαγ hil while
Γλώσσες Μια γλώσσα L ενός αλφαβήτου Σ είναι ένα υποσύνολο του Σ*, δηλαδή: Ένα απαριθμήσιμο σύνολο συμβολοσειρών ενός πεπερασμένου αλφάβητου. Έστω το αλφάβητο Σ={a,b,c,d,e...y,z}. Παραδείγματα γλωσσών είναι: L={if} L={if, then, else, while, repeat} L={a n b 2n n ακέραιος} H κενή γλώσσα L = {ε} Η πλήρης γλώσσα
Πράξεις στις Γλώσσες (1/2) Εφόσον οι γλώσσες είναι σύνολα, ορίζονται σε αυτές πράξεις συνόλων: ένωση, τομή, διαφορά. Ένωση δύο γλωσσών L1 και L2 L 1 L 2 = {α α L 1 α L 2 } Η παράθεση L δύο γλωσσών L1 και L2 είναι η γλώσσα που περιέχει συμβολοσειρές που είναι παραθέσεις μιας συμβολοσειράς της L1 και μιας συμβολοσειράς της L2. L 1 L 2 = {αβ α L 1 β L 2 }
Πράξεις στις Γλώσσες (2/2) Παράθεση μιας γλώσσας με τον εαυτό της n φορές. L 0 ={ε} L n = LL n 1 Κλείσιμο Kleene (Kleene closure) μιας γλώσσας L, είναι η παράθεση με τον εαυτό της μηδέν η περισσότερες φορές. L = n=0 L n Θετικό κλείσιμο Kleene είναι η παράθεση μιας γλώσσας με τον εαυτό της, μια η περισσότερες φορές. L + = n=1 L n = LL
Γραμματική Σύστημα παραγωγής συμβολοσειρών G, που αποτελείται από μια τετράδα (T,N,P,S) T τερματικά σύμβολα (terminals) που αποτελούν το αλφάβητο της γλώσσας. N μη-τερματικά σύμβολα (non-terminals) P κανόνες παραγωγής (production rules) της μορφής α β, όπου α και β (Τ Ν)* S αρχικό σύνολο, το οποίο είναι στοιχείο το Ν (start symbol)
Αναπαραγωγή συμβολοσειράς Η διαδικασία αρχίζει με το αρχικό σύμβολο. Αντικαθιστούμε μια υποσυμβολοσειρά α της τρέχουσας δ με την β εάν υπάρχει κανόνας παραγωγής α β Αν δ = γαγ' τότε από γαγ' -> γβγ' Όταν η συμβολοσειρά περιέχει μόνο τερματικά σύμβολα, λέμε ότι αυτή παράγεται από την γραμματική.
Αναπαραγωγή συμβολοσειράς. Παράδειγμα 1 ο Έστω η γραμματική Τ = {a,b} N = {I,S,U} P = {I asb, S e S as, S bs} S = I Ι asb ab (παραγωγή) Ι asb absb abasb ababb T τερματικά σύμβολα (terminals) που αποτελούν το αλφάβητο της γλώσσας. N μη-τερματικά σύμβολα (nonterminals) P κανόνες παραγωγής (production rules) της μορφής α β, όπου α και β (Τ Ν)* S αρχικό σύνολο, το οποίο είναι στοιχείο το Ν (start symbol)
Αναπαραγωγή συμβολοσειράς. Παράδειγμα 2 ο Έστω η γραμματική Τ = {0,1-9,.,e} N = {Ν,D,Ds,E} P = { Ν DsE, D 0, D 1, D 2, D 3,...,D 9 Ds DDs, Ds D, E eds, E ε} S = Ν Ν 2DsE 24E 24 (παραγωγή) N 4DsE 45E 45eDs 45e6 45e6
Ορισμοί Συμβολοσειρά α Τ* παράγεται από την G όταν υπάρχει μια ακολουθία παραγωγών τέτοια ώστε α 1 = S α n = α και ισχύει α i α i+1 για κάθε i, 0 < i < n Μεταβατικό κλείσιμο α + β Ανακλαστικό Μεταβατικό κλείσιμο α * β Η γραμματική G παράγει την γλώσσα L(G), για την οποία L(G) = {α T* S + α}
Ιεραρχία Chomsky (1/3) Γραμματικές τύπου 0. Γραμματικές τύπου 1 (γραμματικές με συμφραζόμενα context sensitive grammars) Γραμματικές τύπου 2 (γραμματικές χωρίς συμφραζόμενα context free grammars) Γραμματικές τύπου 3 (κανονικές γραμματικές regular grammars)
Ιεραρχία Chomsky (2/3) Γραμματικές τύπου 0. Όλες οι γραμματικές χωρίς περιορισμούς. Γραμματικές τύπου 1 (γραμματικές με συμφραζόμενα context sensitive grammars) Γραμματικές της μορφής α β, έτσι ώστε η συμβολοσειρά α να περιέχει τουλάχιστον ένα μητερματικό σύμβολο και α β.
Ιεραρχία Chomsky (3/3) Γραμματικές τύπου 2 (γραμματικές χωρίς συμφραζόμενα context free grammars) Οι κανόνες παραγωγής έχουν μορφή α β, όπου η συμβολοσειρά α αποτελείται από ένα μη-τερματικό σύμβολο και η β είναι συμβολοσειρά. Γραμματικές τύπου 3 (κανονικές γραμματικές regular grammars) Οι κανόνες παραγωγής έχουν την μορφή Α aβ Α a Α ε A,B μη τερματικά και a τερματικό.
Αναγνωριστές Μια αφηρημένη μηχανή που δέχεται ως είσοδο μια συμβολοσειρά ενός αλφαβήτου και δίνει έξοδο ναι ή όχι. Αναφέρονται και ως αυτόματα. Μηχανή Turing πολυπλοκότερο υπολογιστικό μοντέλο Γραμμικά Περιορισμένη Μηχανή Turing ΜΤ με περιορισμό Μνήμης Αυτόματα Στοίβας Πεπερασμένα Αυτόματα.
Γραμματικές και Αναγνωριστικά Μοντέλα Γραμματική Αναγνωριστικά Μοντέλα Γραμματικές τύπου 0. Μηχανή Turing Γραμμικά Περιορισμένη Γραμματικές με συμφραζόμενα Μηχανή Turing Γραμματικές χωρίς συμφραζόμενα Αυτόματα Στοίβας Κανονικές γραμματικές Πεπερασμένα Αυτόματα.
Κανονικές εκφράσεις (1/2)
Κανονικές εκφράσεις (2/2)
Κανονικές εκφράσεις. Παραδείγματα (1/3) συμβολοσειρές που ξεκινούν με το πρόθεμα "auth" ή "csd_auth" ακολουθούμενο το σύμβολο "-" και από ένα ή περισσότερα γράμματα πχ. auth-makris, auth-computer, csd_auth makris,, csd_auth a (auth csd_auth)-([a-za-z])+ ένα ή περισσότερα γράμματα ακολουθούμενα από το σύμβολο "_" (underscore) και από ένα ή περισσότερα ψηφία. πχ. var_19, complexvar_2019, a_4 ([a-z]+)_([0-9])+
Κανονικές εκφράσεις. Παραδείγματα (2/3) συμβολοσειρές που αποτελούνται από 0 και 1, όπου κάθε 0 έχει πριν και μετά τουλάχιστον ένα 1. πχ. 11 101 101011 ενώ απορρίπτονται οι 110, 00 και 0010. 1(1 01)*
Κανονικές εκφράσεις. Παραδείγματα (3/3) συμβολοσειρές με μήκος τουλάχιστον 2 που περιέχουν τουλάχιστον ένα 1, οι οποίες όταν ξεκινούν από 1 τότε η υπόλοιπη συμβολοσειρά πρέπει να έχει άρτιο αριθμό 1, ενώ όταν ξεκινούν από 0 η υπόλοιπη συμβολοσειρά πρέπει να έχει περιττό αριθμό 1, πχ 1011, 1010101110100 και 01, 0111, 0100010100. Γραμματική: S::=1B S::=0C B::=0B B::=1C C::=0C C::=1D D::=ε D::=1C D::=0D (0 10*1)0*1(0 10*1)*
Λεξική Ανάλυση & Αυτόματα (1/7)
Λεξική Ανάλυση & Αυτόματα (2/7)
Λεξική Ανάλυση & Αυτόματα (3/7)
Λεξική Ανάλυση & Αυτόματα (4/7)
Λεξική Ανάλυση & Αυτόματα (5/7)
Λεξική Ανάλυση & Αυτόματα (6/7)
Λεξική Ανάλυση & Αυτόματα (7/7)
Χαρακτηριστικά της λεκτικής δομής των ΓΠ (1/6)
Χαρακτηριστικά της λεκτικής δομής των ΓΠ (2/6)
Χαρακτηριστικά της λεκτικής δομής των ΓΠ (3/6)
Χαρακτηριστικά της λεκτικής δομής των ΓΠ (4/6)
Χαρακτηριστικά της λεκτικής δομής των ΓΠ (5/6)
Χαρακτηριστικά της λεκτικής δομής των ΓΠ (6/6)
Σύγκριση λεκτικής δομής ΓΠ (1/3)
Σύγκριση λεκτικής δομής ΓΠ (2/3)
Σύγκριση λεκτικής δομής ΓΠ (3/3)