25
Λεκτική Ανάλυση (lexical analysis) Lexical Analyzer Source Program Target Program Syntax Analyzer Semantic Analyzer Intermediate code generator Code optimizer Code generator Ορισμοί Λεκτικές μονάδες Πρότυπα Ορισμός γλωσσών Κανονικές εκφράσεις Πεπερασμένα αυτόματα (ΠΑ) Ντετερμινιστικά (ΝΠΑ) Μη-ντετερμινικά (ΜΠΑ) Μετατροπή από ΜΠΑ σε ΝΠΑ Συγγραφή λογισμικού για λεκτική ανάλυση

2 Lexical Analysis (02-2).pdf

  • Upload
    poikon

  • View
    20

  • Download
    1

Embed Size (px)

DESCRIPTION

analysis computer science

Citation preview

Page 1: 2 Lexical Analysis (02-2).pdf

Λεκτική Ανάλυση (lexical analysis)

Lexical Analyzer

Source Program

Target Program

Syntax Analyzer

Semantic Analyzer

Intermediate codegenerator

Code optimizer

Code generator

•Ορισμοί –Λεκτικές μονάδες –Πρότυπα

•Ορισμός γλωσσών •Κανονικές εκφράσεις •Πεπερασμένα αυτόματα (ΠΑ)

– Ντετερμινιστικά (ΝΠΑ) – Μη-ντετερμινικά (ΜΠΑ)

•Μετατροπή από ΜΠΑ σε ΝΠΑ •Συγγραφή λογισμικού για λεκτική ανάλυση

Page 2: 2 Lexical Analysis (02-2).pdf

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

Page 3: 2 Lexical Analysis (02-2).pdf

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 **/

Page 4: 2 Lexical Analysis (02-2).pdf

2-4

Τα προβλήματα της λεκτικής ανάλυσης • Πώς θα περιγράψουμε τις λεκτικές μονάδες;

2.e0 20.e-01 2.0000 • Πώς θα γίνει σωστά η διάσπαση των χαρακτήρων

του πηγαίου κώδικα; if (x == 0) a = x<<1; iff (x == 0) a = x<1;

• Πώς θα γίνει η μετατροπή σε λεκτικές μονάδες αποδοτικά; – λεκτικές μονάδες με ίδιο πρόθεμα – ανάγκη για εξέταση χαρακτήρων που έπονται (look-

ahead), π.χ. σε γλώσσες που δεν έχουν δεσμευμένες λέξεις

Page 5: 2 Lexical Analysis (02-2).pdf

2-5

Λεκτικές μονάδες - Πρότυπα - Λέξεις • Λεκτικές μονάδες (tokens): τερματικά σύμβολα

της γραμματικής που περιγράφει την γλώσσα εισόδου.

• Πρότυπο (pattern) : κανόνας που περιγράφει σύνολο συμβολοσειρών για τις οποίες ο λεκτικός αναλυτής επιστρέφει την ίδια λεκτική μονάδα.

• Λέξεις (lexemes): οποιαδήποτε ακολουθία χαρακτήρων περιγράφεται από τα πρότυπα

Page 6: 2 Lexical Analysis (02-2).pdf

2-6

Βασικοί Ορισμοί • Γλώσσα: είναι οποιοδήποτε υποσύνολο του

συνόλου των συμβολοσειρών οι οποίες κατασκευάζονται από το αλφάβητο της γλώσσας.

• Αλφάβητο: πεπερασμένο σύνολο συμβόλων π.χ. {0,1}. Χαρακτήρας ≡ Σύμβολο

• Συμβολοσειρά (string): πεπερασμένη ακολουθία συμβόλων (ή λέξη ή πρόταση). – ε : κενή συμβολοσειρά – |x| : μήκος συμβολοσειράς x

• Σύμφωνα με τον ορισμό τα σύνολα {ε} και ∅ είναι γλώσσες.

Page 7: 2 Lexical Analysis (02-2).pdf

2-7

Βασικοί Ορισμοί (2) • Ο ορισμός γλώσσας απαιτεί να προσδιοριστούν:

– ποιές συμβολοσειρές ανήκουν στη γλώσσα (syntax) – η σημασία των συμβολοσειρών (semantics)

Lexical Analyzer

Source Program

Syntax Analyzer

Semantic Analyzer

syntax rules

semantic rules

Page 8: 2 Lexical Analysis (02-2).pdf

2-8

Πράξεις μεταξύ γλωσσών • Παράθεση (concatenation) δύο συμβολοσειρών x

και y: x⋅y ή xy • Προφανώς ισχύει : x ε = ε x = x • Θεωρώντας την παράθεση ως πολλαπλασιασμό

μπορούμε να ορίσουμε την ύψωση σε δύναμη: x0=ε και x2=x x , κ.ο.κ.

• Πράξεις μεταξύ γλωσσών: – Παράθεση (concatenation) – Ένωση (union) – Κλείσιμο (closure)

Page 9: 2 Lexical Analysis (02-2).pdf

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}

Page 10: 2 Lexical Analysis (02-2).pdf

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}

Page 11: 2 Lexical Analysis (02-2).pdf

2-11

• Ως κλείσιμο (closure ή Kleene closure) L* της γλώσσας L ορίζεται:

δηλ. η ένωση των 0 ή περισσότερων παραθέσεων του L. Βέβαια, ε ∈ L*

• Ως θετικό κλείσιμο (positive closure) L+ της γλώσσας L ορίζεται:

Κλείσιμο

i

iLL

=

+ ∪=1

i

iLL

=∪=

0

*

Page 12: 2 Lexical Analysis (02-2).pdf

2-12

Κανονικές εκφράσεις • Οι λεκτικές μονάδες των γλωσσών

προγραμματισμού μπορούν να περιγραφούν από κανονικές εκφράσεις (regular expressions).

• H κανονική έκφραση r αναπαριστά τη γλώσσα L(r), π.χ. L(abc) = { “abc” }. Οι κανόνες ορισμού των κανονικών εκφράσεων προσδιορίζουν πώς από το r προκύπτει το σύνολο των συμβολοσειρών που απαρτίζουν την L.

Page 13: 2 Lexical Analysis (02-2).pdf

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)*

Page 14: 2 Lexical Analysis (02-2).pdf

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 • Η ένωση συμπεριφέρεται ως πρόσθεση και η

παράθεση ως πολλαπλασιασμός.

Page 15: 2 Lexical Analysis (02-2).pdf

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}

Page 16: 2 Lexical Analysis (02-2).pdf

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

Page 17: 2 Lexical Analysis (02-2).pdf

2-17

Αναγνώριση (σύνταξης) γλωσσών • Δύο μέθοδοι έχουν επικρατήσει:

– Με χρήση ως μοντέλου ενός “αυτόματου” (automaton): αναγνωριστικό μοντέλο, δηλ. αναγνωρίζει, επιστρέφει TRUE ή FALSE ανάλογα με το αν μία συμβολοσειρά ανήκει ή όχι στη γλώσσα

– Με χρήση ως μοντέλου μίας γραμματικής: γεννητικό

μοντέλο, δηλ. παράγει το σύνολο των συμβολοσειρών που ανήκουν στη γλώσσα.

Page 18: 2 Lexical Analysis (02-2).pdf

2-18

Λεκτική + Συντακτική ανάλυση • Λεκτική + Συντακτική ανάλυση = επιβεβαίωση

της συντακτικής ορθότητας

lexical analyzer syntax analyzeror parser

token

get nexttoken

symbol table

source

Page 19: 2 Lexical Analysis (02-2).pdf

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

*

*

*

*

Page 20: 2 Lexical Analysis (02-2).pdf

2-20

Πεπερασμένα Αυτόματα • Πεπερασμένο αυτόματο (ΠΑ) M (finite automaton

ή FA) είναι ένα μαθηματικό μοντέλο το οποίο ορίζεται ως η πεντάδα: Μ=(K, Σ, δ, S, F)

όπου K : πεπερασμένο σύνολο καταστάσεων Σ : πεπερασμένο αλφάβητο εισόδου δ : συνάρτηση αλλαγής κατάστασης (transition

function) S : αρχική κατάσταση, S ∈ K F : σύνολο τελικών (accepting) καταστάσεων F ⊆ K

Page 21: 2 Lexical Analysis (02-2).pdf

2-21

Αναπαράσταση ΠΑ • H αναπαράσταση των ΠΑ μπορεί να γίνει με τους

εξής δύο τρόπους: – Με γράφο μετάβασης (transition graph) – Mε πίνακα αλλαγής κατάστασης (transition table).

• Π.χ. έστω το ΠΑ Μ=(Κ, Σ, δ, S, F) με Κ = {Α, Β} Σ = {0, 1} δ = {δ(Α,0)=Α, δ(Α,1)=Β, δ(Β,0)=Β, δ(Β,1)=Α} S = Α F = {Α}

Page 22: 2 Lexical Analysis (02-2).pdf

2-22

Αναπαράσταση με γράφο μετάβασης • Τερματικές καταστάσεις:

• Τί σημαίνει ότι ένα ΠΑ αναγνωρίζει μία συμβολοσειρά εισόδου;

BA 1

1

00

start

Page 23: 2 Lexical Analysis (02-2).pdf

2-23

Αναπαράσταση με πίνακα μετάβασης

• Τί γίνεται αν του δοθεί η συμβολοσειρά εισόδου: 0 1 0 0 1 0 1 1 -|

όπου -| συμβολίζει το τέλος της συμβολοσειράς;

0 1 -|

A A B Τεπ

B B A

Κατ

αστά

σει

ςΣύμβολα εισόδου

Page 24: 2 Lexical Analysis (02-2).pdf

2-24

Γράφος & Διάγραμμα Μετάβασης • Γράφος μετάβασης (transition graph) ⇒ ΠΑ • Διάγραμμα μετάβασης (transition diagram) ⇒

Λεκτικός Αναλυτής 10 > = D

Eother

start

*

return(relop, LE)

return(relop, GT)

• ΔΜ: – Είναι ντετερμινιστικά – Τελικές καταστάσεις δεν έχουν μεταβάσεις (χωρίζονται

σε “με” και “χωρίς οπισθοδρόμηση”) – Έξοδος δύο φυσικών που αναπαριστούν την λεκτική

μονάδα και τη λέξη (lexeme) αντίστοιχα.

Page 25: 2 Lexical Analysis (02-2).pdf

2-25

Κανονικές εκφράσεις & ΠΑ • Ντετερμινιστικά ΠΑ ή ΝΠΑ (Deterministic Finite

Automaton ή DFA): ΠΑ όπου έχουμε συνάρτηση μετάβασης δηλαδή υπάρχει μία τιμή για κάθε ζεύγος κατάστασης - συμβόλου εισόδου.

• Μη-ντετερμινιστικά ΠΑ ή ΜΠΑ : (Non-deterministic Finite Automaton ή NFA): ΠΑ όπου έχουμε σχέση μετάβασης δηλαδή μπορεί να υπάρχουν καμία, μία ή περισσότερες τιμές για ένα τουλάχιστον ζεύγος κατάστασης - συμβόλου εισόδου.

• Κανονικές εκφράσεις : μηχανισμός περιγραφής κανονικών γλωσσών, δηλ., γλωσσών που μπορούν να αναγνωριστούν από πεπερασμένα αυτόματα.