Τι είναι το Flex. Περιγραφή ενός λεξικογραφικού αναλυτή στη γλώσσα του lex/flex. Γενικά Χαρακτηριστικά του Flex



Σχετικά έγγραφα
HY340, 2009 Α. Σαββίδης Slide 2 / 26. HY340, 2009 Α. Σαββίδης Slide 3 / 26. HY340, 2009 Α. Σαββίδης Slide 4 / 26

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Παρουσίαση του εργαλείου. flex. γεννήτρια λεκτικών αναλυτών. για το µάθηµα: Μεταγλωττιστές. Χανιά, flex 1

ΘΕΣΕΙΣ ΤΟΥ ΣΥΝΔΕΣΜΟΥ ΓΙΑ ΤΗΝ ΑΝΑΜΟΡΦΩΣΗ ΤΟΥ ΘΕΣΜΙΚΟΥ ΠΛΑΙΣΙΟΥ ΑΝΑΘΕΣΗΣ ΚΑΙ ΕΚΠΟΝΗΣΗΣ ΜΕΛΕΤΩΝ

Μαρία-Στεφανία-Γιάννης 1 ο Πρότυπο Πειραματικό Δημοτικό Σχολείο Θεσσαλονίκης Ε2 Π.Τ.Δ.Ε.-Α.Π.Θ

Ταυτοποίηση Κυπριακής Φιλοξενίας. Πρότυπο κάτω από το εθνικό σήμα: «φ»

ΟΡΓΑΝΩΣΗ ΕΝΟΤΗΤΩΝ Α ΤΑΞΗΣ ΕΝΟΤΗΤΑ 3

ΚΩΔΙΚΑΣ ΔΕΟΝΤΟΛΟΓΙΑΣ

ΕΡΓΑΣΙΑ ΤΕΧΝΟΛΟΓΙΑΣ «ΚΑΤΟΙΚΙΔΙΑ ΖΩΑ»

Έλλειψη εσωτερικής ελευθερίας

Αναπαραστάσεις των φύλων στα παιδικά αναγνώσµατα του νηπιαγωγείου και του δηµοτικού σχολείου

ΔΗΜΟΓΡΑΦΙΚΑ ΝΕΑ Demo Νews

Πρώτη διδακτική πρόταση Χρωματίζοντας ένα σκίτσο

ΕΘΙΜΑ ΤΟΥ ΚΟΣΜΟΥ. Αγγελική Περιστέρη Α 2

ΠΤΥΧΕΣ ΤΟΥ ΣΥΓΧΡΟΝΟΥ ΦΑΙΝΟΜΕΝΟΥ ΤΗΣ ΖΩΟΛΑΤΡΙΑΣ! ΛΑΜΠΡΟΥ Κ. ΣΚΟΝΤΖΟΥ Θεολόγου - καθηγητού Δε χρειάζεται να είναι κάποιος ειδικός για να διαπιστώσει

Ενδεικτικό σενάριο συνανάγνωσης κειμένων

«Συλλογή, μεταφορά και διαχείριση επικίνδυνων στερεών αποβλήτων της Γ.Μ.Μ.Α.Ε. ΛΑΡΚΟ»

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΑΡΙΘΜΟΣ ΜΕΛΕΤΗΣ: 58/ 2014 ΝΟΜΟΣ ΘΕΣΠΡΩΤΙΑΣ ΔΗΜΟΣ ΗΓΟΥΜΕΝΙΤΣΑΣ Δ/ΝΣΗ ΤΕΧΝΙΚΩΝ ΥΠΗΡΕΣΙΩΝ ΜΕΛΕΤΗ

03-00: Βιομάζα για παραγωγή ενέργειας Γενικά ζητήματα εφοδιαστικών αλυσίδων

Παράρτημα III. Μεταβολές των αντίστοιχων παραγράφων της Περίληψης των Χαρακτηριστικών του Προϊόντος και του Φύλλου Οδηγιών

ΣΥΣΤΗΜΑ ΔΙΑΓΝΩΣΗΣ ΑΝΑΓΚΩΝ ΑΓΟΡΑΣ ΕΡΓΑΣΙΑΣ ΠΑΡΑΔΟΤΕΟ ΕΘΝΙΚΟΥ ΜΗΧΑΝΙΣΜΟΥ

Α. ΚΑΤΑΣΤΑΤΙΚΟ ΚΟΙΝΟΠΡΑΞΙΑΣ ΜΕ ΤΗΝ ΕΠΩΝΥΜΙΑ

ΕΥΡΩΠΑΪΚΟ ΚΟΙΝΟΒΟΥΛΙΟ ΓΡΑΦΕΙΟ ΓΙΑ ΤΗΝ ΕΛΛΑΔΑ Η ΜΕΤΑΡΡΥΘΜΙΣΤΙΚΗ ΣΥΝΘΗΚΗ

ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΦΟΡΕΙΑ ΑΘΗΝΩΝ. Αθήνα, 19 Ιανουαρίου 2015 Α ΝΑΚΟΙΝΩΣΗ 3/15. ΠΡΟΣ : Όλους τους Βαθμοφόρους της Αθήνας ΚΟΙΝΟΠΟΙΗΣΗ :

ΑΣΦΑΛΙΣΗ ΑΥΤΟΚΙΝΗΤΟΥ

Αξιολόγηση του Εκπαιδευτικού Έργου. Διαδικασία Αυτοαξιολόγησης στη Σχολική Μονάδα

Ξαναδίνουμε ζωή στο δικό μας ΗΡΑΚΛΕΙΟ Δ.Α.Σ.Η. ΓΙΩΡΓΟΣ ΜΑΣΤΟΡΑΚΟΣ. Δημοτική Ανεξάρτητη Συνεργασία Ηρακλείου

Περιεχόμενα. Εισαγωγή... 7 ΜΕΡΟΣ Α Κεφάλαιο 1. Κεφάλαιο 2. Κεφάλαιο 3. Κεφάλαιο 4. Κεφάλαιο 5. Κεφάλαιο 6. Κεφάλαιο 7. Κεφάλαιο 8.

Χρηματοδότηση των Συλλόγων στην εποχή της κρίσης

Εργασία στο μάθημα: Διδακτική των Μαθηματικών

Εργαστήριο 3 Εισαγωγή στο Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

1. Τα Ιατρικά Έξοδα που µπορεί να καταβάλει η Επιτροπή Ασθενειών που προκαλούνται από Πνευµονοκονίαση:

Κατερίνα Παναγοπούλου: Δημιουργώντας κοινωνικό κεφάλαιο την εποχή της κρίσης

Σηµειώσεις στο ταξινοµούµε

Πρακτικό εργαλείο. για την ταυτοποίηση πρώτου επιπέδου των θυμάτων παράνομης διακίνησης και εμπορίας. τη σεξουαλική εκμετάλλευση

Υποψήφιοι Σχολικοί Σύμβουλοι

Δρ.ΠΟΛΥΚΑΡΠΟΣ ΕΥΡΙΠΙΔΟΥ

Εκδήλωση-Συζήτηση. για τις φυλακές και τους κρατούμενους αγωνιστές. όσο υπαρχουν φυλακές κανείς δεν είναι ελεύθερος. Εισήγηση

ΣΥΜΒΟΛΗ ΤΩΝ ΝΕΩΝ ΤΕΧΝΟΛΟΓΙΩΝ ΣΤΗΝ ΚΑΤΑΡΤΙΣΗ ΚΑΙ ΕΚΠΑΙΔΕΥΣΗ ΤΟΥ ΠΡΟΣΩΠΙΚΟΥ ΜΙΑΣ ΣΥΓΧΡΟΝΗΣ ΕΠΙΧΕΙΡΗΣΗΣ

ΘΡΗΣΚΕΥΤΙΚΑ ΓΥΜΝΑΣΙΟΥ

8 Μάρτη. Η βία κατά των γυναικών

γραμματισμό των νηπίων

Σοφία Γιουρούκου, Ψυχολόγος Συνθετική Ψυχοθεραπεύτρια

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ ΝΕΟΕΛΛΗΝΙΚΗ ΓΛΩΣΣΑ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ

Τα πέντε κριτήρια που πρέπει να ικανοποιεί ένας αλγόριθμος είναι:

ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙ ΕΥΣΗΣ

ΠΟΛΙΤΙΚΉ ΠΑΙΔΕΙΑ. Α Γενικού Λυκείου και ΕΠΑ.Λ. Καζάκου Γεωργία, ΠΕ09 Οικονομολόγος

ΓΕΩΓΡΑΦΙΚΗ ΑΝΑΛΥΣΗ ΤΟΥ ΕΛΛΗΝΙΚΟΥ ΓΡΑΜΜΑΤΟΣΗΜΟΥ

Τίτλος Ειδικού Θεματικού Προγράμματος: «Διοίκηση, Οργάνωση και Πληροφορική για Μικρο-μεσαίες Επιχειρήσεις»

ΟΜΟΦΩΝΗ ΑΠΟΦΑΣΗ. -Συνημμένα 14 Ψηφίσματα: Ψήφισμα 1: Για τη Χρηματοδότηση των ΑΕΙ. Ψήφισμα 2: Θέματα Ανθρώπινου Δυναμικού


ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΕΠΙΛΟΓΗ ΔΙΑΧΕΙΡΙΣΗ ΘΕΜΑΤΩΝ ΣΧΕΤΙΚΑ ΜΕ ΤΑ ΝΑΠ ΔΙΑΦΟΡΩΝ ΓΝΩΣΤΙΚΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ ΣΤΑ ΣΥΜΠΛΕΓΜΑΤΑ ΤΑΞΕΩΝ

ΕΠΙΧΕΙΡΗΣΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΑΝΤΑΓΩΝΙΣΤΙΚΟΤΗΤΑ ΚΑΙ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΤΗΤΑ

«ΣΥΝΕΝΤΕΥΞΗ ΤΟΥ ΗΜΑΡΧΟΥ ΙΛΙΟΥ, Κ. ΝΙΚΟΥ ΖΕΝΕΤΟΥ ΣΤΗΝ ΕΦΗΜΕΡΙ Α «ΜΙΤΟΣ» ΚΑΙ ΤΗ ΗΜΟΣΙΟΓΡΑΦΟ ΑΘΗΝΑ ΠΕΡΡΑΚΗ»

4. Παρατηρήστε την εικόνα Τι συμβαίνει στους πάγους της Αρκτικής, στον Βόρειο Πόλο;

109(Ι)/2014 ΝΟΜΟΣ ΠΟΥ ΠΡΟΝΟΕΙ ΓΙΑ ΤΟ ΕΛΑΧΙΣΤΟ ΕΓΓΥΗΜΕΝΟ ΕΙΣΟΔΗΜΑ ΚΑΙ ΓΕΝΙΚΟΤΕΡΑ ΠΕΡΙ ΚΟΙΝΩΝΙΚΩΝ ΠΑΡΟΧΩΝ ΤΟΥ 2014 ΚΑΤΑΤΑΞΗ ΑΡΘΡΩΝ

Η ΔΙΑΘΕΜΑΤΙΚΗ ΤΗΣ ΔΙΑΘΕΜΑΤΙΚΗΣ

ΔΙΑΧΡΟΝΙΚΗ ΜΕΛΕΤΗ ΦΟΡΟΛΟΓΙΚΗΣ ΠΟΛΙΤΙΚΗΣ ΜΕ ΜΕΘΟΔΟΥΣ ΑΝΑΛΥΣΗΣ ΔΕΔΟΜΕΝΩΝ

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

Φλωρεντία, 10 Δεκεμβρίου 1513 Προς τον: ΦΡΑΓΚΙΣΚΟ ΒΕΤΤΟΡΙ, Πρέσβη της Φλωρεντίας στην Αγία Παπική Έδρα, Ρώμη. Εξοχώτατε Πρέσβη,

Πρόγραμμα Κοινωνικών Δεξιοτήτων Δεκεμβρίου

Η ΠΟΛΙΤΙΚΗ ΣΗΜΑΣΙΑ ΤΟΥ ΒΛΑΚΟΣ

Ηλεκτρικό φορτίο Ηλεκτρική δύναμη

Ο ΡΟΛΟΣ ΤΟΥ ΧΗΜΙΚΟΥ ΜΗΧΑΝΙΚΟΥ ΣΤΗΝ ΥΓΙΕΙΝΗ ΚΑΙ AΣΦΑΛΕΙΑ - OHSAS 18001

«ΑΝΩ ΛΙΟΣΙΑ: ΤΟΠΙΚΗ ΙΣΤΟΡΙΑ, ΠΕΡΙΒΑΛΛΟΝ, ΠΡΟΚΛΗΣΕΙΣ, ΠΡΟΟΠΤΙΚΕΣ»

ΔΙΑΔΟΣΗ ΘΕΡΜΟΤΗΤΑΣ Φυσική Β' Γυμνασίου. Επιμέλεια: Ιωάννης Γιαμνιαδάκης

Ατομικό ιστορικό νηπίου

ΙΙ, 3-4. Α. Ερωτήσεις ανοικτού τύπου ή ελεύθερης ανάπτυξης

ΟΙΚΟΝΟΜΙΚΟ ΕΠΙΜΕΛΗΤΗΡΙΟ ΤΗΣ ΕΛΛΑΔΑΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΣΤΑΤΙΣΤΙΚΗΣ. Τριμηνιαία Έρευνα. A Τρίμηνο 2014

ΠΡΟΒΛΗΜΑΤΑ ΤΗΣ ΔΗΜΟΣΙΑΣ ΖΩΗΣ, ΜΙΑ ΨΥΧΑΝΑΛΥΤΙΚΗ ΠΡΟΣΕΓΓΙΣΗ

Εργαστήριο Δημογραφικών και Κοινωνικών Αναλύσεων, Πεδίον Άρεως, Βόλος, 38334,

Η υποστήριξη της επαγγελματικής μάθησης μέσα από την έρευνα-δράση: διαδικασίες και αποτελέσματα

Το πρόβλημα του ανατοκισμού στις τραπεζικές πιστωτικές συμβάσεις ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΚΑΚΟΥΡΗ ΠΑΝΑΓΙΩΤΑ ΛΗΞΟΥΡΙ 2013

Φασίστες και αφεντικά στου πηγαδιού τον πάτο, ζήτω το παγκόσμιο προλεταριάτο.

ΘΕΜΑ: Καλυτέρευση διαπροσωπικών σχέσεων - Αποδοχή

2. Περίληψη των τοποθεσιών. 3. Τοποθεσίες. 4. Κάρτες εδάφους

Η ΔΙΔΑΚΤΙΚΗ ΑΞΙΟΠΟΙΗΣΗ ΚΙΝΗΤΩΝ ΕΡΓΑΣΤΗΡΙΩΝ ΦΟΡΗΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. στο μάθημα της Γλώσσας της ΣΤ ΔΗΜΟΤΙΚΟΥ

ΠΑΡΟΥΣΙΑΣΗ ΤΩΝ ΓΕΝΙΚΩΝ ΚΑΙ ΕΙΔΙΚΩΝ ΟΡΩΝ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ «ΑΣΦΑΛΩΣ ΚΑΤΟΙΚΕΙΝ» ΚΟΙΝΟΧΡΗΣΤΟΙ ΧΩΡΟΙ

Σεπτέμβριος 2011: Εφημερίδα μηνός Αυγούστου, έκδ. 34 η

Όλα όσα πρέπει να γνωρίζουν οι απόφοιτοι των ΕΠΑΛ για τις πανελλαδικές εξετάσεις

ΑΝΑΝΕΩΣΙΜΕΣ ΠΗΓΕΣ ΕΝΕΡΓΕΙΑΣ (Α.Π.Ε)

Απομόνωση χλωροφύλλης

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ «ΚΑΚΟΠΟΙΗΜΕΝΟΙ ΑΝΗΛΙΚΟΙ: ΠΡΟΣΤΑΣΙΑ, ΦΟΡΕΙΣ ΣΤΟ ΠΛΑΙΣΙΟ ΤΗΣ ΕΥΡΩΠΑΪΚΗΣ ΕΝΩΣΗΣ»

Ερωτήσεις πολλαπλής επιλογής

Αυτός που δεν μπορεί να δει τα μικρά πράγματα είναι τυφλός και για τα μεγαλύτερα. (Κομφούκιος, πχ)

ΣΥΝΕΝΤΕΥΞΗ ΤΥΠΟΥ. Η ολοκληρωμένη προσέγγιση θα εφαρμοστεί με τα παρακάτω Εργαλεία

Α.Τ.Ε.Ι. ΚΑΛΑΜΑΤΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣΗ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗΣ ΚΑΙ ΕΛΕΓΚΤΙΚΗΣ

Από το ξεκίνημά του ο ΤΙΤΑΝ εκφράζει

Ε.Ε. Π α ρ.ι(i), Α ρ.3646, 25/10/2002. ΤΗΣ ΕΠΙΣΗΜΗΣ ΕΦΗΜΕΡΙΔΑΣ ΤΗΣ ΔΗΜΟΚΡΑΤΙΑΣ Αρ της 25ης ΟΚΤΩΒΡΙΟΥ 2002

«Ειρήνη» Σημειώσεις για εκπαιδευτικούς

Ρόδος και Αίγυπτος : λίκνα ευεργετισμού. Ματούλα Τομαρά-Σιδέρη

Καλωσόρισμα επισήμων. Κυρίες και κύριοι,

Απόσπασμα από τα πρακτικά της με αριθμό 47/2015 συνεδρίασης της Οικονομικής Επιτροπής Δήμου Αμυνταίου.

ΟΜΙΛΙΑ ΠΡΟΕΔΡΟΥ Ο.Κ.Ε. κ. Χ. ΠΟΛΥΖΩΓΟΠΟΥΛΟΥ

Η Οδύσσεια από το βιβλίο στον υπολογιστή

Προδημοσιεύτηκαν τα τέσσερις πρώτα προγράμματα του νέου ΕΣΠΑ που αφορούν

ΚΕΦ. 1 Η ΛΟΓΙΣΤΙΚΗ ΚΑΙ Η ΣΗΜΑΣΙΑ ΤΗΣ ΣΤΙΣ ΕΠΙΧΕΙΡΗΣΕΙΣ

7. ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΕΛΛΗΝΙΚΗΣ ΝΟΗΜΑΤΙΚΗΣ ΓΛΩΣΣΑΣ ΤΗΣ ΠΡΩΤΗΣ ΤΑΞΗΣ ΤΟΥ ΔΗΜΟΤΙΚΟΥ ΣΧΟΛΕΙΟΥ

Οι Πνευματικές Δυνάμεις στο Σύμπαν

Transcript:

ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο Τι είναι το Flex Μία γεννήτρια λεξικογραφικών αναλυτών Παράγει λεξικογραφικούς αναλυτές στις γλώσσες C/C++ (target language) Εισαγωγή στο Flex 1/42 2/42 Γενικά Χαρακτηριστικά του Flex Υλοποίηση από την αρχή του κλασσικού Lex του AT&T Unix Υπάρχει για όλα τα διαδεδομένα λειτουργικά συστήματα (πχ. GNU/Linux, Solaris, Mac OS-X, Win32) Παράγει πολύ γρήγορους λεξικογραφικούς αναλυτές Flex σημαίνει Fast - Lex... Περιγραφή ενός λεξικογραφικού αναλυτή στη γλώσσα του lex/flex Για την περιγραφή ενός λεξικογραφικού αναλυτή στο flex/lex, χρησιμοποιούνται Κανονικές εκφράσεις (regular expressions ή regex) που περιγράφουν τα λεξικογραφικά πρότυπα μιας γλώσσας Actions, δηλαδή κώδικας σε μία γλώσσα προγραμματισμού που εκτελείται όταν αναγνωριστεί μια κανονική έκφραση (στην οποία αντιστοιχεί το action) 3/42 4/42

Κανονικές Εκφράσεις (1/8) Κανονικές Εκφράσεις (2/8) x - αναγνωρίζει τον χαρακτήρα x και μόνο αυτόν abcd... - αναγνωρίζει την ακολουθία χαρακτήρων abcd... [ab-e] αναγνωρίζει τους χαρακτήρες a ή b ή c ή d ή e. Δηλαδή ο συμβολισμός b-e δημιουργεί μία ακολουθία χαρακτήρων που ξεκινούν από το b και καταλήγουν στο e σύμφωνα με το ascii char set.. - (τελεία) αναγνωρίζει οποιονδήποτε χαρακτήρα ή σύμβολο πλην του newline [xyz] αναγνωρίζει οποιονδήποτε (έναν μόνο) από τους χαρακτήρες που βρίσκονται μέσα στο σύνολο. Δηλαδήήτοx ήτοy ήτοz [^ab-e] Όταν το σύμβολο ^ εμφανίζεται στην αρχή του συνόλου σημαίνει την ΑΡΝΗΣΗ του συνόλου. Δηλαδή το παραπάνω αναγνωρίζει ΟΛΟΥΣ τους χαρακτήρες, εκτός από τους a, b, c, d, e. 5/42 6/42 Κανονικές Εκφράσεις (3/8) Κανονικές Εκφράσεις (4/8) r* - kleen star, αναγνωρίζει καμία ή περισσότερες επαναλήψεις της κανονικής έκφρασης 'r' η a* περιγράφει τα ε, a, aa, aaaa, aaaaaaaaaaaa,... η [ab-e]* περιγράφει τα ε, a, c, ac, cab, bbbe, cbaead r+ - αναγνωρίζει μία ή περισσότερες επαναλήψεις της κανονικής έκφρασης r η a+ περιγράφει τα a, aa, aaaa, αλλά όχι το ε η [ab-e]* περιγράφει τα a, c, ac, cab, bbbe, cbaead r? - αναγνωρίζει μία ή καμία επανάληψη της κανονικής έκφρασης r(διαβάζεται ως προαιρετικό r) r{i, j} 0 < i < j, αναγνωρίζει i, i+1, i+2,..., j-1, j επαναλήψεις της κανονικής έκφρασης r η.{2, 3} περιγράφει τις λέξεις που αποτελούνται από 2 ή 3 χαρακτήρες, πχ. ant, ///,..., 3/2, 23, 2b, or, not,... r{i,} - 0 < i, αναγνωρίζει i ή περισσότερες επαναλήψεις της κανονικής έκφρασης r 7/42 8/42

11/42 12/42 Κανονικές Εκφράσεις (5/8) Κανονικές Εκφράσεις (6/8) r{i} 0 < i, αναγνωρίζει i ακριβώς επαναλήψεις της κανονικής έκφρασης r rs αναγνωρίζει τις ακολουθίες που αναγνωρίζει η συνένωση των κανονικών εκφράσεων r και s (concatenation) Η abc αναγνωρίζει την abc H [a-z] foo [1-3] αναγνωρίζει όλες τις λέξεις 5 χαρακτήρων που ξεκινούν με πεζό γράμμα, περιέχουν το string foo και τελειώνουν με έναν αριθμό από το 1 μέχρι το 3, πχ. afoo1, lfoo3,... (r) οι παρενθέσεις γύρω από μία κανονική έκφραση r, απλώς αλλάζουν την προτεραιότητα εφαρμογής των τελεστών Η abc+ αναγνωρίζει τις abc, abcc, abcccccc,... Ενώ η (abc)+ αναγνωρίζει τις abc, abcabc,... Επίσης η abc + αναγνωρίζει τις ίδιες ακολουθίες χαρακτήρων που αναγνωρίζει και η (abc)+ r s ικανοποιείται από τις ακολουθίες συμβόλων που ικανοποιούν την r ή τις ακολουθίες που ικανοποιούν την s όχι και τις δύο (xor). 9/42 10/42 Κανονικές Εκφράσεις (7/8) Κανονικές Εκφράσεις (8/8) Η ( abc ABC ){2,3} αναγνωρίζει τις abcabc, abcabc, ABCABC, abcabcabc,... ^r ικανοποιείται όταν ικανοποιείται η r και η ακολουθία που την ικανοποιεί βρίσκεται στην αρχή της γραμμής \\, \, \(, \), \*, \+, \[, \], \$, \^, \{, \},... οι ίδιοι οι χαρακτήρες \,, (, *,... (escaped) Οι κανονικές εκφράσεις παρατέθηκαν σύμφωνα με την προτεραιότητά τους (από την υψηλότερη προς την χαμηλότερη). r$ ικανοποιείται όταν ικανοποιείται η r και η ακολουθία που την ικανοποιεί βρίσκεται στο τέλος της γραμμής Παραδειγμα: Η foo bar* είναι ισοδύναμη με την (foo) (ba(r*)), επειδή ο τελεστής '*' έχει μεγαλύτερη προτεραιότητα από την παράθεση και αυτή από το τελεστή ' ' (alternation).

Προκαθορισμένες κλάσεις χαρακτήρων Το flex υποστηρίζει κάποιες προκαθορισμένες κλάσεις χαρακτήρων που μπορούν να χρησιμοποιηθούν σε κανονικές εκφράσεις. Ο συμβολισμός των κλάσεων αυτών έχει τη μορφή [:Χ:], όπου 'Χ' το όνομα της κλάσης. Συγκεκριμένα οι χαρακτήρες της κάθε κλάσης, ικανοποιούν τις συναρτήσεις 'isx(int c)' της επικεφαλίδας ctype.h. Οι κυριότερες από αυτές είναι: Προκαθορισμένες κλάσεις χαρακτήρων [:alnum:] - όλα τα αλφαριθμητικά: [a-za-z0-9] στο c (default) locale [:alpha:] - όλα τα γράμματα του αλφαβήτου: [a-za-z] στο c locale [:digit:] - όλα τα ψηφία του δεκαδικού συστήματος: [0-9] [:lower:] - όλα τα πεζά γράμματα του αλφαβήτου: [a-z] [:upper:] - όλα τα κεφαλαία γράμματα του αλφαβήτου: [A-Z] [:print:] - όλοι οι εκτυπώσιμοι χαρακτήρες [:space:] - όλοι οι χαρακτήρες whitespace [:xdigit:] - όλα τα ψηφία του δεκαεξαδικού συστήματος: [0-9a-eA-E] 13/42 14/42 Δομή ενός προγράμματος (f)lex Τμήμα ορισμών (1/10) Ορισμοί %% Κανόνες %% Κώδικας χρήστη Τμήμα ορισμών Τμήμα κανόνων Τμήμα κώδικα χρήστη (προαιρετικό) Σε αυτό το τμήμα, ο χρήστης μπορεί να ορίσει: 1.Κώδικα που θα αντιγραφεί χωρίς αλλαγές στο τελικό αρχείο.c που θα περιέχει τον κώδικα του παραγόμενου λεξικογραφικού αναλυτή 2.Macros (aliases), που υποκαθιστούν μία κανονική έκφραση. 3.Διάφορες παραμέτρους που επηρεάζουν τα χαρακτηριστικά του παραγόμενου λεξικογραφικού αναλυτή 15/42 4.Δήλωση user-defined conditions 16/42

19/42 20/42 Τμήμα ορισμών (2/10) Τμήμα ορισμών (3/10) Ο κώδικας που θέλουμε να εισάγουμε, θα πρέπει να περικλείεται στα σύμβολα %{... %} ήστα %top{... } Παράδειγμα: Μπορούμε να κάνουμε 'include' headers για να χρησιμοποιήσουμε συναρτήσεις που είναι υλοποιημένες σε μία βιβλιοθήκη Μπορούμε να υλοποιήσουμε συναρτήσεις που θα χρησιμοποιούνται από τον παραγόμενο συντακτικό αναλυτή 17/42 18/42 Τμήμα ορισμών (4/10) Τμήμα ορισμών (5/10) Σύνταξη: Όνομα Κανονική Έκφραση Παράδειγμα Ο ορισμός των συντομεύσεων βοηθάει κυρίως Στην αναγνωσιμότητα του προγράμματος Το συμβολικό όνομα literal είναι πιο ευανάγνωστο από την αντίστοιχη κανονική έκφραση που πιθανώς το περιγράφει: \"[^\n"]*\"

23/42 24/42 Τμήμα ορισμών (6/10) Τμήμα ορισμών (7/10) Οι παράμετροι που επηρεάζουν τα χαρακτηριστικά του παραγόμενου λεξικογραφικού αναλυτή ξεκινούν με το σύμβολο %option. Σχεδόν όλοι οι παράμετροι υπάρχουν και σαν command line options %option header-file=./scanner.h Αναγκάζει το flex να δημιουργήσει μία επικεφαλίδα που περιέχει τις δηλώσεις για τους τύπους και τις συναρτήσεις που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτή 21/42 %option noyywrap Δεν καλεί τη συνάρτηση yywrap, η οποία καλείται από τον παραγόμενο λεξικογραφικό αναλυτή όταν τελειώσει το διάβασμα ενός αρχείου (εάν επιστρέψει 0 συνεχίζει το scanning από την είσοδο) %option yylineno Δηλώνει μία καθολική μεταβλητή με το όνομα yylineno, που κρατάει τον αριθμό της τρέχουσας γραμμής του αρχείου εισόδου %option case-insensitive Ο παραγόμενος λεξικογραφικός αναλυτής είναι case insensitive. Δηλαδή η λέξη ClaSS θα είναι ίση με την λέξη class 22/42 Τμήμα ορισμών (8/10) Τμήμα ορισμών (9/10) %option reentrant Ο παραγόμενος λεξικογραφικός αναλυτής είναι reentrant (βλ. reentrant scanners). Προσοχή αλλάζει ο τρόπος κλήσης της κύριας συνάρτησης του αναλυτή %option prefix="prefix" Εξ' ορισμού οι τύποι και οι συναρτήσεις που χρησιμοποιεί ο παραγόμενος λεξικογραφικός αναλυτής έχουν το πρόθεμα yy πχ. yylex, yyin, yylineno, yytext, yywrap,... Επομένος αυτή η παράμετρος, αλλάζει το πρόθεμα στο string PREFIX %option nounistd Δεν κάνει 'include' την επικεφαλίδα unistd.h, ηοποία υπάρχει μόνο στα UNIX συστήματα Ο χρήστης μπορεί να ορίσει δικές του καταστάσεις (conditions) και να ενεργοποιεί ορισμένους κανόνες μόνο εάν ο λεξικογραφικός αναλυτής βρίσκεται σε συγκεκριμένη user-defined κατάσταση Inclusive (start) conditions Ορίζονται με την εντολή %s condition_name Μπορούν να ενεργοποιήσουν όλους τους κανόνες χωρίς <> πρόθεμα και αυτούς με πρόθεμα <condition_name> Exclusive conditions Ορίζονται με την εντολή %x condition_name Μπορούν να ενεργοποιήσουν μόνο τους κανόνες με πρόθεμα <condition_name>

27/42 28/42 Τμήμα ορισμών (10/10) Τμήμα κανόνων (1/8) Παράδειγμα Αυτό είναι το κύριο τμήμα του προγράμματος περιγραφής του λεξικογραφικού αναλυτή, αφού σε αυτό καθορίζεται η λειτουργικότητά του τελευταίου Σύνταξη: <condition1, condition2,...> Regular expression { action } Τα conditions ανάμεσα στα <, > αναφέρονται στις καταστάσεις που έχει ορίσει ο χρήστης (με %s ή %x ) 25/42 26/42 Τμήμα κανόνων (2/8) Τμήμα κανόνων (3/8) Ηπαράθεσητωνconditions είναι προαιρετική. Εάν παραληφθούν, ο κανόνας μπορεί να ενεργοποιηθεί είτε από την προκαθορισμένη κατάσταση (INITIAL), είτε από τα inclusive conditions Η προκαθορισμένη κατάσταση στην οποία βρίσκεται στην αρχή ο λεξικογραφικός αναλυτής (και η οποία είναι inclusive ), είναι η INITIAL και μπορεί να συμμετέχει κανονικά στην λίστα των conditions που προηγείται της κανονικής έκφρασης Η κατάσταση <*> είναι συντομογραφία για ΟΛΕΣ τις καταστάσεις που έχει δηλώσει ο χρήστης και την INITIAL Μετά από την παράθεση των user-defined καταστάσεων (conditions), ακολουθεί η κανονική έκφραση η οποία όταν ικανοποιηθεί ενεργοποιεί τον κανόνα Η κανονική έκφραση μπορεί να περιλαμβάνει ή να αποτελείται αποκλειστικά από τα macros που έχουν δηλωθεί στο τμήμα ορισμών, τα οποία θα πρέπει να περικλείονται στα σύμβολα {, }, πχ. {comment} Το ειδικό σύμβολο <<EOF>> ικανοποιείται όταν τελειώσει η ανάγνωση του τρέχοντος αρχείου

31/42 32/42 Τμήμα κανόνων (4/8) Τμήμα κανόνων (5/8) Τέλος, όταν ικανοποιηθεί η δήλωση των καταστάσεων ΚΑΙ η κανονική έκφραση που ακολουθεί, ο κανόνας ενεργοποιείται. Αυτό σημαίνει ότι εκτελείται ο κώδικας που υπάρχει δεξιά της κανονικής έκφρασης Εάν ο κώδικας καταλαμβάνει πάνω από μία γραμμή, θα πρέπει να περικλείεται σε {, } Οι κυριότερες συναρτήσεις και μεταβλητές του παραγόμενου λεξικογραφικού αναλυτή που είναι διαθέσιμα και μπορούν να χρησιμοποιηθούν από τους κανόνες είναι: yytext ένας pointer σε char (ή char array στον κλασσικό lex) που περιέχει το κομμάτι του κειμένου που έχει ικανοποιήσει την κανονική έκφραση yyleng ένας ακέραιος που δηλώνει το μέγεθος του yytext BEGIN(condition_name) αναγκάζει τον λεξικογραφικό αναλυτή να μεταβεί στην κατάσταση που έχει ορίσει ο χρήστης με το όνομα condition_name ECHO αντιγράφει τα περιεχόμενα του yytext στην έξοδο REJECT εξαναγκάζει τον λεξικογραφικό αναλυτή να ενεργοποιήσει τον δεύτερο καλύτερο κανόνα Προσοχή: ΗχρήσητουREJECT σε οποιονδήποτε κανόνα κάνει πολύ πιο αργό ολόκληρο τον λεξικογραφικό αναλυτή input() διαβάζει και επιστρέφει τον επόμενο χαρακτήρα από την ακολουθία εισόδου (look-ahead) unput(c) τοποθετεί τον χαρακτήρα c στην ακολουθία εισόδου. Έτσιοεπόμενοςχαρακτήραςπουθαδιαβάσειολεξικογραφικός αναλυτής, θα είναι ο c 29/42 30/42 Τμήμα κανόνων (6/8) Τμήμα κανόνων (7/8) Όταν παραπάνω από ένας κανόνας ικανοποιείται τότε επιλέγεται αυτός που καταναλώνει τους περισσότερους χαρακτήρες. Παράδειγμα Εάν βρεθούν δύο ή παραπάνω κανόνες που καταναλώνουν τον ίδιο αριθμό χαρακτήρων, τότε επιλέγεται αυτός που έχει δηλωθεί πρώτος στο lex αρχείο.

35/42 36/42 Τμήμα κανόνων (8/8) Τμήμα κώδικα χρήστη (1/2) Παράδειγμα Το τμήμα κώδικα χρήστη είναι προαιρετικό Όταν αυτό παραλειφθεί, μπορεί να παραλειφθεί και το δεύτερο σύμβολο %% Σκοπός της είναι μόνο η εύκολη και άμεση προσθήκη υλοποιήσεων των συναρτήσεων που χρησιμοποιούνται στον παραγόμενο λεξικογραφικό αναλυτή Ό, τι προστίθεται σε αυτό το τμήμα, αντιγράφεται χωρίς αλλαγές στο παραγόμενο αρχείο.c που περιέχει τον κώδικα του λεξικογραφικού αναλυτή 33/42 34/42 Τμήμα κώδικα χρήστη (1/2) Ένας ολοκληρωμένος λεξικογραφικός αναλυτής Παράδειγμα αρχείο scanner.l

Διαδικασία για την παραγωγή του τελικού προγράμματος Είσοδος από c strings και char buffers scanner.l Meta compiler για λεξικογραφικούς αναλυτές (flex/lex) scanner.c Ο παραγόμενος λεξικογραφικός αναλυτής, διαβάζει την ακολουθία χαρακτήρων εξ' ορισμού από τον global FILE* pointer με το όνομα yyin (και μπορούμε να τον κατευθύνουμε με τον τρόπο που φαίνεται στην main() του αρχείου scanner.l του προηγούμενου σχήματος) βιβλιοθήκες εκτελέσιμο: scanner C/C++ Compiler 37/42 38/42 Είσοδος από c strings και char buffers Πολλές φορές όμως δε θέλουμε να διαβάζουμε την ακολουθία χαρακτήρων προς επεξεργασία από αρχεία (FILE* pointers) Θέλουμε να διαβάζουμε χαρακτήρες από το δίκτυο Θέλουμε να διαβάζουμε χαρακτήρες που υπάρχουν σε memory buffers Έτσι, για να διαβάσει ο παραγόμενος λεξικογραφικός αναλυτής μία ακολουθία από χαρακτήρες που βρίσκονται στη μνήμη (NULL terminated char* pointers, buffers) 39/42 Είσοδος από c strings και char buffers Πριν καλέσουμε τη συνάρτηση yylex(), θα πρέπει να καλέσουμε Την συνάρτηση yy_scan_string(const char* str) για να διαβάσουμε από το string str Την συνάρτηση yy_scan_bytes(char* buffer, size_t size) για να διαβάσουμε από ένα buffer μεγέθους size Οι συναρτήσεις αυτές επιστρέφουν ένα handle τύπου YY_BUFFER_STATE το οποίο θα πρέπει να ελευθερώσουμε όταν θα έχει ολοκληρωθεί το scanning, μέσω της συνάρτησης yy_delete_buffer(yy_buffer_state buffer) 40/42

Παράδειγμα Παραπομπές Προσοχή Τι θα γινόταν εάν η σειρά των κανόνων ήταν διαφορετική; Flex Home Page http://www.gnu.org/software/flex Flex Manual http://www.gnu.org/software/flex/manual/ 41/42 42/42