Λεκτική Ανάλυση (lexical analysis) Ορισμοί Λεκτικές μονάδες Πρότυπα Ορισμός γλωσσών Κανονικές εκφράσεις Πεπερασμένα αυτόματα (ΠΑ) Ντετερμινιστικά (ΝΠΑ) Μη-ντετερμινικά (ΜΠΑ) Μετατροπή από ΜΠΑ σε ΝΠΑ Συγγραφή λογισμικού για λεκτική ανάλυση
Τι είναι η λεκτική ανάλυση; Η μετατροπή των χαρακτήρων που αποτελούν τον πηγαίο κώδικα σε λεκτικές μονάδες if (x1 * x2<1.0) { y = x1; } Χαρακτηριστικά λεκτικών μονάδων Τί είναι οι λεκτικές μονάδες; i f ( x 1 * x 2 < 1 { . ) \n Keyword: if ( Id: x1 * Id: x2 < Num: 1.0 ) { Id: y ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Παραδείγματα λεκτικών μονάδων (tokens) Αναγνωριστικά (identifiers): x y11 elsex _i00 Δεσμευμένες λέξεις (keywords): if else while break Ακέραιες σταθερές : 2 1000 -500 5L Πραγματικές σταθερές : 2.0 0.00020 .02 1. 1e5 Τελεστές ή σύμβολα : + * { } ++ < << [ ] >= Αλφαριθμητικές ποσότητες (strings): “x” “He said, \“Are you?\”” Σχόλια: /** comment **/ ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Τα προβλήματα της λεκτικής ανάλυσης Πώς θα περιγράψουμε τις λεκτικές μονάδες; 2.e0 20.e-01 2.0000 Πώς θα γίνει σωστά η διάσπαση των χαρακτήρων του πηγαίου κώδικα; if (x == 0) a = x<<1; iff (x == 0) a = x<1; Πώς θα γίνει η μετατροπή σε λεκτικές μονάδες αποδοτικά; λεκτικές μονάδες με ίδιο πρόθεμα ανάγκη για εξέταση χαρακτήρων που έπονται (look-ahead), π.χ. σε γλώσσες που δεν έχουν δεσμευμένες λέξεις ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Λεκτικές μονάδες - Πρότυπα - Λέξεις Λεκτικές μονάδες (tokens): τερματικά σύμβολα της γραμματικής που περιγράφει την γλώσσα εισόδου. Πρότυπο (pattern) : κανόνας που περιγράφει σύνολο συμβολοσειρών για τις οποίες ο λεκτικός αναλυτής επιστρέφει την ίδια λεκτική μονάδα. Λέξεις (lexemes): οποιαδήποτε ακολουθία χαρακτήρων περιγράφεται από τα πρότυπα ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Βασικοί Ορισμοί Γλώσσα: είναι οποιοδήποτε υποσύνολο του συνόλου των συμβολοσειρών οι οποίες κατασκευάζονται από το αλφάβητο της γλώσσας. Αλφάβητο: πεπερασμένο σύνολο συμβόλων π.χ. {0,1}. Χαρακτήρας Σύμβολο Συμβολοσειρά (string): πεπερασμένη ακολουθία συμβόλων (ή λέξη ή πρόταση). ε : κενή συμβολοσειρά |x| : μήκος συμβολοσειράς x Σύμφωνα με τον ορισμό τα σύνολα {ε} και είναι γλώσσες. ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Βασικοί Ορισμοί (2) Ο ορισμός γλώσσας απαιτεί να προσδιοριστούν: ποιές συμβολοσειρές ανήκουν στη γλώσσα (syntax) η σημασία των συμβολοσειρών (semantics) ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Πράξεις μεταξύ γλωσσών Παράθεση (concatenation) δύο συμβολοσειρών x και y: xy ή xy Προφανώς ισχύει : x ε = ε x = x Θεωρώντας την παράθεση ως πολλαπλασιασμό μπορούμε να ορίσουμε την ύψωση σε δύναμη: x0=ε και x2=x x , κ.ο.κ. Πράξεις μεταξύ γλωσσών: Παράθεση (concatenation) Ένωση (union) Κλείσιμο (closure) ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Παράθεση (concatenation) Έστω οι γλώσσες L και Μ. Ως παράθεσή τους LM ή LM ορίζεται η γλώσσα: LM = {st | όπου η συμβολοσειρά s L και η t M} Π.χ.αν L={A, B, C, …, Z} και M={0,1,2,…,9} τότε LM είναι η γλώσσα που περιέχει όλους τους συνδυασμούς από κεφαλαία ακολουθούμενα από ένα ψηφίο. Ύψωση σε δύναμη γλώσσας (exponentiation): L0 = {ε} Lk = {s1 s2 …sk | όπου si L, i=1,..,k} ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Ένωση (union) Έστω οι γλώσσες L και Μ. Ως ένωσή τους LM ορίζεται η γλώσσα: LM = {s | όπου η συμβολοσειρά s L ή s M} Π.χ.αν L={A, B, C, …, Z} και M={0,1,2,…,9} τότε LM = {A, B, C, …, Z, 0,1,2,…,9} ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Κλείσιμο Ως κλείσιμο (closure ή Kleene closure) L* της γλώσσας L ορίζεται: δηλ. η ένωση των 0 ή περισσότερων παραθέσεων του L. Βέβαια, ε L* Ως θετικό κλείσιμο (positive closure) L+ της γλώσσας L ορίζεται: ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Κανονικές εκφράσεις Οι λεκτικές μονάδες των γλωσσών προγραμματισμού μπορούν να περιγραφούν από κανονικές εκφράσεις (regular expressions). H κανονική έκφραση r αναπαριστά τη γλώσσα L(r), π.χ. L(abc) = { “abc” }. Οι κανόνες ορισμού των κανονικών εκφράσεων προσδιορίζουν πώς από το r προκύπτει το σύνολο των συμβολοσειρών που απαρτίζουν την L. ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Κανόνες ορισμού κανονικών εκφράσεων ε είναι η κανονική έκφραση που συμβολίζει τη γλώσσα {ε} Έστω το αλφάβητο Σ. Για κάθε a Σ το a είναι μία κανονική έκφραση που συμβολίζει τη γλώσσα {a}. Aν R και S είναι κανονικές εκφράσεις που συμβολίζουν τις γλώσσες L(R) και L(S), τότε (R)|(S) είναι κανονική έκφραση που συμβολίζει τη γλώσσα L(R) L(S) (R)(S) είναι κανονική έκφραση που συμβολίζει τη γλώσσα L(R) L(S) (R)* είναι κανονική έκφραση που συμβολίζει τη γλώσσα L(R)* ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Ιδιότητες Κανονικών Εκφράσεων Αν R, S, T κανονικές εκφράσεις, ισχύουν: R|S = S|R R|(S|T) = (R|S)|T R(ST) = (RS)T R(S|T) = RS| RT (R|S)T = RT| ST εR = Rε = R Η ένωση συμπεριφέρεται ως πρόσθεση και η παράθεση ως πολλαπλασιασμός. ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Συντομογραφίες R+ : μία ή περισσότερες συμβολοσειρές από το σύνολο που ανήκει στη γλώσσα L(R). Ισοδυναμεί με την έκφραση R(R*) R? : μία ή καμία από τις συμβολοσειρές της γλώσσας L(R). Ισοδυναμεί με την έκφραση ε|R. [a-z] : ένας από τους χαρακτήρες {a, b, …,z}. Ισοδυναμεί με a|b|c|d…|z. [^a-z] : ένας χαρακτήρας που δεν ανήκει στο σύνολο {a, b, …,z} ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Παραδείγματα Κανονική Έκφραση Συμβολοσειρές L(R) a ‘a’ ab ‘ ab’ a | b ‘ a’ ‘b’ (ab)* ‘’ ‘ab’ ‘abab’ … (a | ε) b ‘ab’ ‘b’ digit = [0-9] ‘0’ ‘1’ ‘2’ ‘3’ … posint = digit+ ‘8’ ‘412’ … int = -? posint ‘-42’ ‘1024’ … real = int (ε | (. posint)) ‘-1.56’ ’12’ ‘1.0’ [a-zA-Z_][a-zA-Z0-9_]* Αναγνωριστικά C, Java ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Αναγνώριση (σύνταξης) γλωσσών Δύο μέθοδοι έχουν επικρατήσει: Με χρήση ως μοντέλου ενός “αυτόματου” (automaton): αναγνωριστικό μοντέλο, δηλ. αναγνωρίζει, επιστρέφει TRUE ή FALSE ανάλογα με το αν μία συμβολοσειρά ανήκει ή όχι στη γλώσσα Με χρήση ως μοντέλου μίας γραμματικής: γεννητικό μοντέλο, δηλ. παράγει το σύνολο των συμβολοσειρών που ανήκουν στη γλώσσα. ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Λεκτική + Συντακτική ανάλυση Λεκτική + Συντακτική ανάλυση = επιβεβαίωση της συντακτικής ορθότητας ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Μία απλή προσέγγιση ΛΑ Διαγράμματα μετάβασης (transition diagrams). Υλοποίηση: φωλιασμένες εντολές if-else ή switch-case ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Πεπερασμένα Αυτόματα Πεπερασμένο αυτόματο (ΠΑ) M (finite automaton ή FA) είναι ένα μαθηματικό μοντέλο το οποίο ορίζεται ως η πεντάδα: Μ=(K, Σ, δ, S, F) όπου K : πεπερασμένο σύνολο καταστάσεων Σ : πεπερασμένο αλφάβητο εισόδου δ : συνάρτηση αλλαγής κατάστασης (transition function) S : αρχική κατάσταση, S K F : σύνολο τελικών (accepting) καταστάσεων F K ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών Αναπαράσταση ΠΑ H αναπαράσταση των ΠΑ μπορεί να γίνει με τους εξής δύο τρόπους: Με γράφο μετάβασης (transition graph) Mε πίνακα αλλαγής κατάστασης (transition table). Π.χ. έστω το ΠΑ Μ=(Κ, Σ, δ, S, F) με Κ = {Α, Β} Σ = {0, 1} δ = {δ(Α,0)=Α, δ(Α,1)=Β, δ(Β,0)=Β, δ(Β,1)=Α} S = Α F = {Α} ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Αναπαράσταση με γράφο μετάβασης Τερματικές καταστάσεις: Τί σημαίνει ότι ένα ΠΑ αναγνωρίζει μία συμβολοσειρά εισόδου; ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Αναπαράσταση με πίνακα μετάβασης Τί γίνεται αν του δοθεί η συμβολοσειρά εισόδου: 0 1 0 0 1 0 1 1 -| όπου -| συμβολίζει το τέλος της συμβολοσειράς; ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Γράφος & Διάγραμμα Μετάβασης Γράφος μετάβασης (transition graph) ΠΑ Διάγραμμα μετάβασης (transition diagram) Λεκτικός Αναλυτής ΔΜ: Είναι ντετερμινιστικά Τελικές καταστάσεις δεν έχουν μεταβάσεις (χωρίζονται σε “με” και “χωρίς οπισθοδρόμηση”) Έξοδος δύο φυσικών που αναπαριστούν την λεκτική μονάδα και τη λέξη (lexeme) αντίστοιχα. ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών
Κανονικές εκφράσεις & ΠΑ Ντετερμινιστικά ΠΑ ή ΝΠΑ (Deterministic Finite Automaton ή DFA): ΠΑ όπου έχουμε συνάρτηση μετάβασης δηλαδή υπάρχει μία τιμή για κάθε ζεύγος κατάστασης - συμβόλου εισόδου. Μη-ντετερμινιστικά ΠΑ ή ΜΠΑ : (Non-deterministic Finite Automaton ή NFA): ΠΑ όπου έχουμε σχέση μετάβασης δηλαδή μπορεί να υπάρχουν καμία, μία ή περισσότερες τιμές για ένα τουλάχιστον ζεύγος κατάστασης - συμβόλου εισόδου. Κανονικές εκφράσεις : μηχανισμός περιγραφής κανονικών γλωσσών, δηλ., γλωσσών που μπορούν να αναγνωριστούν από πεπερασμένα αυτόματα. ΕΠΛ223 Θεωρία και Πρακτική Μεταγλωττιστών