Upload
poikon
View
20
Download
1
Embed Size (px)
DESCRIPTION
analysis computer science
Citation preview
Λεκτική Ανάλυση (lexical analysis)
Lexical Analyzer
Source Program
Target Program
Syntax Analyzer
Semantic Analyzer
Intermediate codegenerator
Code optimizer
Code generator
•Ορισμοί –Λεκτικές μονάδες –Πρότυπα
•Ορισμός γλωσσών •Κανονικές εκφράσεις •Πεπερασμένα αυτόματα (ΠΑ)
– Ντετερμινιστικά (ΝΠΑ) – Μη-ντετερμινικά (ΜΠΑ)
•Μετατροπή από ΜΠΑ σε ΝΠΑ •Συγγραφή λογισμικού για λεκτική ανάλυση
2-2
Τι είναι η λεκτική ανάλυση; • Η μετατροπή των χαρακτήρων που αποτελούν τον
πηγαίο κώδικα σε λεκτικές μονάδες if (x1 * x2<1.0) { y = x1; }
• Χαρακτηριστικά λεκτικών μονάδων • Τί είναι οι λεκτικές μονάδες;
i f ( x 1 * x 2 < 1 . 0 ) { \n
Keyword: if ( Id: x1 * Id: x2 < Num: 1.0 ) { Id: y
2-3
Παραδείγματα λεκτικών μονάδων (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 **/
2-4
Τα προβλήματα της λεκτικής ανάλυσης • Πώς θα περιγράψουμε τις λεκτικές μονάδες;
2.e0 20.e-01 2.0000 • Πώς θα γίνει σωστά η διάσπαση των χαρακτήρων
του πηγαίου κώδικα; if (x == 0) a = x<<1; iff (x == 0) a = x<1;
• Πώς θα γίνει η μετατροπή σε λεκτικές μονάδες αποδοτικά; – λεκτικές μονάδες με ίδιο πρόθεμα – ανάγκη για εξέταση χαρακτήρων που έπονται (look-
ahead), π.χ. σε γλώσσες που δεν έχουν δεσμευμένες λέξεις
2-5
Λεκτικές μονάδες - Πρότυπα - Λέξεις • Λεκτικές μονάδες (tokens): τερματικά σύμβολα
της γραμματικής που περιγράφει την γλώσσα εισόδου.
• Πρότυπο (pattern) : κανόνας που περιγράφει σύνολο συμβολοσειρών για τις οποίες ο λεκτικός αναλυτής επιστρέφει την ίδια λεκτική μονάδα.
• Λέξεις (lexemes): οποιαδήποτε ακολουθία χαρακτήρων περιγράφεται από τα πρότυπα
2-6
Βασικοί Ορισμοί • Γλώσσα: είναι οποιοδήποτε υποσύνολο του
συνόλου των συμβολοσειρών οι οποίες κατασκευάζονται από το αλφάβητο της γλώσσας.
• Αλφάβητο: πεπερασμένο σύνολο συμβόλων π.χ. {0,1}. Χαρακτήρας ≡ Σύμβολο
• Συμβολοσειρά (string): πεπερασμένη ακολουθία συμβόλων (ή λέξη ή πρόταση). – ε : κενή συμβολοσειρά – |x| : μήκος συμβολοσειράς x
• Σύμφωνα με τον ορισμό τα σύνολα {ε} και ∅ είναι γλώσσες.
2-7
Βασικοί Ορισμοί (2) • Ο ορισμός γλώσσας απαιτεί να προσδιοριστούν:
– ποιές συμβολοσειρές ανήκουν στη γλώσσα (syntax) – η σημασία των συμβολοσειρών (semantics)
Lexical Analyzer
Source Program
Syntax Analyzer
Semantic Analyzer
syntax rules
semantic rules
2-8
Πράξεις μεταξύ γλωσσών • Παράθεση (concatenation) δύο συμβολοσειρών x
και y: x⋅y ή xy • Προφανώς ισχύει : x ε = ε x = x • Θεωρώντας την παράθεση ως πολλαπλασιασμό
μπορούμε να ορίσουμε την ύψωση σε δύναμη: x0=ε και x2=x x , κ.ο.κ.
• Πράξεις μεταξύ γλωσσών: – Παράθεση (concatenation) – Ένωση (union) – Κλείσιμο (closure)
2-9
Παράθεση (concatenation) • Έστω οι γλώσσες L και Μ. Ως παράθεσή τους
L⋅M ή 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}
2-10
Ένωση (union) • Έστω οι γλώσσες L και Μ. Ως ένωσή τους L∪M
ορίζεται η γλώσσα: L∪M = {s | όπου η συμβολοσειρά s ∈ L ή s ∈ M} Π.χ.αν L={A, B, C, …, Z} και M={0,1,2,…,9} τότε L∪M = {A, B, C, …, Z, 0,1,2,…,9}
2-11
• Ως κλείσιμο (closure ή Kleene closure) L* της γλώσσας L ορίζεται:
δηλ. η ένωση των 0 ή περισσότερων παραθέσεων του L. Βέβαια, ε ∈ L*
• Ως θετικό κλείσιμο (positive closure) L+ της γλώσσας L ορίζεται:
Κλείσιμο
i
iLL
∞
=
+ ∪=1
i
iLL
∞
=∪=
0
*
2-12
Κανονικές εκφράσεις • Οι λεκτικές μονάδες των γλωσσών
προγραμματισμού μπορούν να περιγραφούν από κανονικές εκφράσεις (regular expressions).
• H κανονική έκφραση r αναπαριστά τη γλώσσα L(r), π.χ. L(abc) = { “abc” }. Οι κανόνες ορισμού των κανονικών εκφράσεων προσδιορίζουν πώς από το r προκύπτει το σύνολο των συμβολοσειρών που απαρτίζουν την L.
2-13
Κανόνες ορισμού κανονικών εκφράσεων • ε είναι η κανονική έκφραση που συμβολίζει τη
γλώσσα {ε} • Έστω το αλφάβητο Σ. Για κάθε 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)*
2-14
Ιδιότητες Κανονικών Εκφράσεων • Αν 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 • Η ένωση συμπεριφέρεται ως πρόσθεση και η
παράθεση ως πολλαπλασιασμός.
2-15
Συντομογραφίες • R+ : μία ή περισσότερες συμβολοσειρές από το
σύνολο που ανήκει στη γλώσσα L(R). Ισοδυναμεί με την έκφραση R(R*)
• R? : μία ή καμία από τις συμβολοσειρές της γλώσσας L(R). Ισοδυναμεί με την έκφραση ε|R.
• [a-z] : ένας από τους χαρακτήρες {a, b, …,z}. Ισοδυναμεί με a|b|c|d…|z.
• [^a-z] : ένας χαρακτήρας που δεν ανήκει στο σύνολο {a, b, …,z}
2-16
Παραδείγματα Κανονική Έκφραση Συμβολοσειρές 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
2-17
Αναγνώριση (σύνταξης) γλωσσών • Δύο μέθοδοι έχουν επικρατήσει:
– Με χρήση ως μοντέλου ενός “αυτόματου” (automaton): αναγνωριστικό μοντέλο, δηλ. αναγνωρίζει, επιστρέφει TRUE ή FALSE ανάλογα με το αν μία συμβολοσειρά ανήκει ή όχι στη γλώσσα
– Με χρήση ως μοντέλου μίας γραμματικής: γεννητικό
μοντέλο, δηλ. παράγει το σύνολο των συμβολοσειρών που ανήκουν στη γλώσσα.
2-18
Λεκτική + Συντακτική ανάλυση • Λεκτική + Συντακτική ανάλυση = επιβεβαίωση
της συντακτικής ορθότητας
lexical analyzer syntax analyzeror parser
token
get nexttoken
symbol table
source
2-19
Μία απλή προσέγγιση ΛΑ • Διαγράμματα μετάβασης (transition diagrams).
• Υλοποίηση: φωλιασμένες εντολές if-else ή switch-case
1 2
3
4
5
6
7
11
>
=
!
<
=
=
other
8
12
=
other
10other
9
13
=
other
return(RELOP, GT)
return(RELOP, GE)
return(UNOP, NOT)
return(RELOP, NE)
return(RELOP, LT)
return(RELOP, LE)
return(ASS, NULL)
return(RELOP, EQ)
start
*
*
*
*
2-20
Πεπερασμένα Αυτόματα • Πεπερασμένο αυτόματο (ΠΑ) M (finite automaton
ή FA) είναι ένα μαθηματικό μοντέλο το οποίο ορίζεται ως η πεντάδα: Μ=(K, Σ, δ, S, F)
όπου K : πεπερασμένο σύνολο καταστάσεων Σ : πεπερασμένο αλφάβητο εισόδου δ : συνάρτηση αλλαγής κατάστασης (transition
function) S : αρχική κατάσταση, S ∈ K F : σύνολο τελικών (accepting) καταστάσεων F ⊆ K
2-21
Αναπαράσταση ΠΑ • H αναπαράσταση των ΠΑ μπορεί να γίνει με τους
εξής δύο τρόπους: – Με γράφο μετάβασης (transition graph) – Mε πίνακα αλλαγής κατάστασης (transition table).
• Π.χ. έστω το ΠΑ Μ=(Κ, Σ, δ, S, F) με Κ = {Α, Β} Σ = {0, 1} δ = {δ(Α,0)=Α, δ(Α,1)=Β, δ(Β,0)=Β, δ(Β,1)=Α} S = Α F = {Α}
2-22
Αναπαράσταση με γράφο μετάβασης • Τερματικές καταστάσεις:
• Τί σημαίνει ότι ένα ΠΑ αναγνωρίζει μία συμβολοσειρά εισόδου;
BA 1
1
00
start
2-23
Αναπαράσταση με πίνακα μετάβασης
• Τί γίνεται αν του δοθεί η συμβολοσειρά εισόδου: 0 1 0 0 1 0 1 1 -|
όπου -| συμβολίζει το τέλος της συμβολοσειράς;
0 1 -|
A A B Τεπ
B B A
Κατ
αστά
σει
ςΣύμβολα εισόδου
2-24
Γράφος & Διάγραμμα Μετάβασης • Γράφος μετάβασης (transition graph) ⇒ ΠΑ • Διάγραμμα μετάβασης (transition diagram) ⇒
Λεκτικός Αναλυτής 10 > = D
Eother
start
*
return(relop, LE)
return(relop, GT)
• ΔΜ: – Είναι ντετερμινιστικά – Τελικές καταστάσεις δεν έχουν μεταβάσεις (χωρίζονται
σε “με” και “χωρίς οπισθοδρόμηση”) – Έξοδος δύο φυσικών που αναπαριστούν την λεκτική
μονάδα και τη λέξη (lexeme) αντίστοιχα.
2-25
Κανονικές εκφράσεις & ΠΑ • Ντετερμινιστικά ΠΑ ή ΝΠΑ (Deterministic Finite
Automaton ή DFA): ΠΑ όπου έχουμε συνάρτηση μετάβασης δηλαδή υπάρχει μία τιμή για κάθε ζεύγος κατάστασης - συμβόλου εισόδου.
• Μη-ντετερμινιστικά ΠΑ ή ΜΠΑ : (Non-deterministic Finite Automaton ή NFA): ΠΑ όπου έχουμε σχέση μετάβασης δηλαδή μπορεί να υπάρχουν καμία, μία ή περισσότερες τιμές για ένα τουλάχιστον ζεύγος κατάστασης - συμβόλου εισόδου.
• Κανονικές εκφράσεις : μηχανισμός περιγραφής κανονικών γλωσσών, δηλ., γλωσσών που μπορούν να αναγνωριστούν από πεπερασμένα αυτόματα.