HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Από τη C στη C++ Hy240b project 2014 Phase 1.
Advertisements

Βασικές έννοιες αλγορίθμων
Το αλφαριθμητικό (string)
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11.
Βασικές Συναρτήσεις Πινάκων
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 1ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 5 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Προγραμματισμός Ι Πίνακες •Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται.
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Εκτέλεση Αλγορίθμων σε ψευδογλώσσα
ΜΑΘ 3122 (106) Γλώσσα προγραμματισμού
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
Προγραμματισμός στο ΜatLab
Γλωσσική Τεχνολογία String Handling – Regular Expressions.
Regular Expressions. Regular Expressions - γενικά  Βασική ιδέα: έχουμε ένα pattern και ένα κείμενο εισόδου. Εφαρμόζουμε το pattern στο κείμενο και μπορούμε:
Κεφάλαιο 2ο Πεπερασμένα αυτόματα.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
1 Ολυμπιάδα Πληροφορικής Μάθημα 7. 2 Στόχοι μαθήματος Δημιουργία συναρτήσεων από το χρήστη Δομή προγράμματος με συναρτήσεις Συναρτήσεις και παράμετροι.
Ολυμπιάδα Πληροφορικής
Ολυμπιάδα Πληροφορικής
ΣΥΝΑΡΤΗΣΕΙΣ.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
Μοντέλα Συστημάτων Παρουσιάσεις των συστημάτων των οποίων οι απαιτήσεις αναλύονται.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
AWK Μία εξαιρετικά δυναμική συμβολική γλώσσα προγραμματισμού και ταυτόχρονα ένα εργαλείο διαχείρισης δεδομένων. Αναζητά, τροποποιεί αρχεία, δημιουργεί.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 30/03/2009.
Ενότητα Α.4. Δομημένος Προγραμματισμός
ΘΠ06 - Μεταγλωττιστές Συντακτική Ανάλυση, Bison 1.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής,
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Βάσεις Δεδομένων Εργαστήριο ΙΙ Τμήμα Πληροφορικής ΑΠΘ
Slide 1/42 ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Εισαγωγή στο Flex.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
1 Βάσεις Δεδομένων ΙI Επιμέλεια: ΘΟΔΩΡΗΣ ΜΑΝΑΒΗΣ SQL (3 από 3) T Manavis.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Slide 1/52 ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Yacc.
Βασικά στοιχεία της Java
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Ξεχωριστή Μεταγλώττιση & Χώροι Ονομάτων Αντικειμενοστραφής Προγραμματισμός.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος
Εισαγωγή στην Πληροφορική μεγάλου όγκου δεδομένων
Κεφάλαιο 10 Streams.
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης

Α. Σαββίδης HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 1ο Εισαγωγή στο FLEX Slide 2 / 26 HY340, 2012

Α. Σαββίδης Flex Μια γεννήτρια λεξικογραφικών αναλυτών για τις γλώσσες C/C++ Μια γεννήτρια λεξικογραφικών αναλυτών για τις γλώσσες C/C++ Για την περιγραφή του λεξικογραφικού αναλυτή χρησιμοποιούνται: Για την περιγραφή του λεξικογραφικού αναλυτή χρησιμοποιούνται: Regular expressions, που περιγράφουν τα πρότυπα της γλώσσας Regular expressions, που περιγράφουν τα πρότυπα της γλώσσας Actions, δηλαδή ενέργειες που πρέπει να πραγματοποιηθούν όταν αναγνωριστεί κάποιο συγκεκριμένο regular expression Actions, δηλαδή ενέργειες που πρέπει να πραγματοποιηθούν όταν αναγνωριστεί κάποιο συγκεκριμένο regular expression Slide 3 / 26 HY340, 2012

Α. Σαββίδης Regular Expressions (1/4) x – αναγνωρίζει το χαρακτήρα x x – αναγνωρίζει το χαρακτήρα x “abcd” - αναγνωρίζει την ακολουθία abcd “abcd” - αναγνωρίζει την ακολουθία abcd. (τελεία) - αναγνωρίζει οποιοδήποτε χαρακτήρα ή σύμβολο εκτός από το new line. (τελεία) - αναγνωρίζει οποιοδήποτε χαρακτήρα ή σύμβολο εκτός από το new line [xyz] – αναγνωρίζει ένα από τους χαρακτήρες μέσα στο σύνολο, δηλαδή το x, το y ή το z [xyz] – αναγνωρίζει ένα από τους χαρακτήρες μέσα στο σύνολο, δηλαδή το x, το y ή το z [ab-eg] – αναγνωρίζει τους χαρακτήρες a, b έως e και g [ab-eg] – αναγνωρίζει τους χαρακτήρες a, b έως e και g [^ab-e] – αναγνωρίζει οποιοδήποτε χαρακτήρα ή σύμβολο δεν ανήκει στο σύνολο [ab-e] (δηλαδή οτιδήποτε εκτός από a, b, c, d, e) [^ab-e] – αναγνωρίζει οποιοδήποτε χαρακτήρα ή σύμβολο δεν ανήκει στο σύνολο [ab-e] (δηλαδή οτιδήποτε εκτός από a, b, c, d, e) Slide 4 / 26 HY340, 2012

Α. Σαββίδης Regular Expressions (2/4) r* - αναγνωρίζει καμία ή περισσότερες επαναλήψεις του r r* - αναγνωρίζει καμία ή περισσότερες επαναλήψεις του r a* περιγράφει τα ε, a, aa, aaa, … a* περιγράφει τα ε, a, aa, aaa, … r+ - αναγνωρίζει μια ή περισσότερες επαναλήψεις του r r+ - αναγνωρίζει μια ή περισσότερες επαναλήψεις του r a+ περιγράφει τα a, aa, aaa, …, αλλά όχι το ε a+ περιγράφει τα a, aa, aaa, …, αλλά όχι το ε r? - αναγνωρίζει καμία ή μια επανάληψη του r (διαβάζεται και προαιρετικό r) r? - αναγνωρίζει καμία ή μια επανάληψη του r (διαβάζεται και προαιρετικό r) r{i, j} - αναγνωρίζει i έως j επαναλήψεις του r r{i, j} - αναγνωρίζει i έως j επαναλήψεις του r (όπου i, j > 0 και i 0 και i < j) r{i} – αναγνωρίζει ακριβώς i επαναλήψεις του r r{i} – αναγνωρίζει ακριβώς i επαναλήψεις του r r{i,} – αναγνωρίζει i ή περισσότερες επαναλήψεις του r r{i,} – αναγνωρίζει i ή περισσότερες επαναλήψεις του r Slide 5 / 26 HY340, 2012

Α. Σαββίδης Regular Expressions (3/4) rs – αναγνωρίζει τις ακολουθίες που αναγνωρίζει η συνένωση των r και s (concatenation) rs – αναγνωρίζει τις ακολουθίες που αναγνωρίζει η συνένωση των r και s (concatenation) (r) – αναγνωρίζει την ακολουθία r (χρησιμοποιείται για να καθορίσει την προτεραιότητα) (r) – αναγνωρίζει την ακολουθία r (χρησιμοποιείται για να καθορίσει την προτεραιότητα) abc+ αναγνωρίζει τα abc, abcc, abccc, … abc+ αναγνωρίζει τα abc, abcc, abccc, … (abc)+ αναγνωρίζει τα abc, abcabc, … (abc)+ αναγνωρίζει τα abc, abcabc, … r|s – αναγνωρίζει το r ή το s r|s – αναγνωρίζει το r ή το s ^r – αναγνωρίζει το r αλλά μόνο όταν βρίσκεται στην αρχή της γραμμής ^r – αναγνωρίζει το r αλλά μόνο όταν βρίσκεται στην αρχή της γραμμής r$ – αναγνωρίζει το r αλλά μόνο όταν βρίσκεται στο τέλος της γραμμής r$ – αναγνωρίζει το r αλλά μόνο όταν βρίσκεται στο τέλος της γραμμής \\, \”, \(, \), \*, \+, \[, \], \$, \^, \{, \},... – αναγνωρίζει τους ίδιους τους χαρακτήρες \, “, (, *, … (escaped) \\, \”, \(, \), \*, \+, \[, \], \$, \^, \{, \},... – αναγνωρίζει τους ίδιους τους χαρακτήρες \, “, (, *, … (escaped) Slide 6 / 26 HY340, 2012

Α. Σαββίδης Regular Expressions (4/4) Προσοχή στην προτεραιότητα!! Προσοχή στην προτεραιότητα!! Το foo|bar* είναι ισοδύναμο με (foo)|(ba(r*)) Το foo|bar* είναι ισοδύναμο με (foo)|(ba(r*))  Ο τελεστής ‘*’ έχει μεγαλύτερη προτεραιότητα από την ακολουθία χαρακτήρων  Η ακολουθία χαρακτήρων έχει μεγαλύτερη προτεραιότητα από τον τελεστή ‘|’ Αν θέλαμε να αναγνωρίσουμε το foo ή μηδέν ή περισσότερα bar θα γράφαμε foo|(bar)* Αν θέλαμε να αναγνωρίσουμε το foo ή μηδέν ή περισσότερα bar θα γράφαμε foo|(bar)* Αν θέλαμε να αναγνωρίσουμε μηδέν ή περισσότερα foo ή bar θα γράφαμε (foo|bar)* Αν θέλαμε να αναγνωρίσουμε μηδέν ή περισσότερα foo ή bar θα γράφαμε (foo|bar)* Slide 7 / 26 HY340, 2012

Α. Σαββίδης Προκαθορισμένες Κλάσεις Χαρακτήρων Ο flex ορίζει κάποιες προκαθορισμένες κλάσεις χαρακτήρων για χρήση σε regular expressions Ο flex ορίζει κάποιες προκαθορισμένες κλάσεις χαρακτήρων για χρήση σε regular expressions Συμβολίζονται [:X:] όπου Χ το όνομα της κλάσης Συμβολίζονται [:X:] όπου Χ το όνομα της κλάσης Το Χ μπορεί να είναι: alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit. Το Χ μπορεί να είναι: alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit. Οι κλάσεις αυτές ορίζουν σύνολα χαρακτήρων που αντιστοιχούν στις standard C συναρτήσεις isX(int c) του Οι κλάσεις αυτές ορίζουν σύνολα χαρακτήρων που αντιστοιχούν στις standard C συναρτήσεις isX(int c) του Slide 8 / 26 HY340, 2012

Α. Σαββίδης Δομή Προγράμματος Flex Τμήμα ορισμών % Τμήμα κανόνων % Τμήμα κώδικα χρήστη (προαιρετικό) Slide 9 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Ορισμών - Γενικά 1. Κώδικας Χρήστη Αντιγράφεται αυτούσιος στο παραγόμενο αρχείο με τον κώδικα του λεξικογραφικού αναλυτή Αντιγράφεται αυτούσιος στο παραγόμενο αρχείο με τον κώδικα του λεξικογραφικού αναλυτή Πρέπει να βρίσκεται μέσα στα σύμβολα {% /*code*/ %} ή %top{ /*code*/ } Πρέπει να βρίσκεται μέσα στα σύμβολα {% /*code*/ %} ή %top{ /*code*/ } 2. Regular expression macros (aliases) Συντάσσονται name regex και βοηθούν στην αναγνωσιμότητα του προγράμματος Συντάσσονται name regex και βοηθούν στην αναγνωσιμότητα του προγράμματος Π.χ. string αντί για \"[^\n"]*\" Π.χ. string αντί για \"[^\n"]*\" 3. Παράμετροι για τον παραγόμενο λεξικογραφικό αναλυτή %option option_name ή %option option_name=value %option option_name ή %option option_name=value 4. User-defined conditions Κανόνες που ενεργοποιούνται με βάση την κατάσταση στην οποία βρίσκεται ο λεξικογραφικός αναλυτής Κανόνες που ενεργοποιούνται με βάση την κατάσταση στην οποία βρίσκεται ο λεξικογραφικός αναλυτής Slide 10 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Ορισμών – Παράμετροι (1/2) %option header-file=”./scanner.h” %option header-file=”./scanner.h” Δημιουργεί ένα header file που περιέχει τις δηλώσεις για τους τύπους και τις συναρτήσεις που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτή Δημιουργεί ένα header file που περιέχει τις δηλώσεις για τους τύπους και τις συναρτήσεις που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτή %option noyywrap %option noyywrap Δεν χρησιμοποιεί τη συνάρτηση “yywrap”, που καλείται από τον παραγόμενο λεξικογραφικό αναλυτή όταν τελειώσει το διάβασμα ενός αρχείου (αν αυτή επιστρέψει 0 ο αναλυτής συνεχίσει το scanning από την είσοδο) Δεν χρησιμοποιεί τη συνάρτηση “yywrap”, που καλείται από τον παραγόμενο λεξικογραφικό αναλυτή όταν τελειώσει το διάβασμα ενός αρχείου (αν αυτή επιστρέψει 0 ο αναλυτής συνεχίσει το scanning από την είσοδο) %option yylineno %option yylineno Δηλώνει μια καθολική μεταβλητή με όνομα “yylineno”, που κρατάει τον αριθμό της τρέχουσας γραμμής του αρχείου εισόδου Δηλώνει μια καθολική μεταβλητή με όνομα “yylineno”, που κρατάει τον αριθμό της τρέχουσας γραμμής του αρχείου εισόδου %option case-insensitive %option case-insensitive Ο παραγόμενος λεξικογραφικός αναλυτής είναι case insensitive. Αυτό σημαίνει ότι η λέξη “ClaSS” θα είναι ίδια με τη λέξη “class” Ο παραγόμενος λεξικογραφικός αναλυτής είναι case insensitive. Αυτό σημαίνει ότι η λέξη “ClaSS” θα είναι ίδια με τη λέξη “class” Slide 11 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Ορισμών – Παράμετροι (2/2) %option reentrant %option reentrant Ο παραγόμενος λεξικογραφικός αναλυτής είναι reentrant (μπορούμε να κάνουμε νέα κλήση στην yylex πριν τελειώσει η προηγουμενη). Προσοχή καθώς αλλάζει ο τρόπος κλήσης της yylex Ο παραγόμενος λεξικογραφικός αναλυτής είναι reentrant (μπορούμε να κάνουμε νέα κλήση στην yylex πριν τελειώσει η προηγουμενη). Προσοχή καθώς αλλάζει ο τρόπος κλήσης της yylex %option prefix="PREFIX" %option prefix="PREFIX" Εξ’ ορισμού οι τύποι και οι συναρτήσεις που χρησιμοποιεί ο παραγόμενος λεξικογραφικός αναλυτής έχουν το πρόθεμα “yy” πχ. yylex, yyin, yylineno, yytext, yywrap,... Αυτή η παράμετρος αλλάζει το πρόθεμα σε “PREFIX” Εξ’ ορισμού οι τύποι και οι συναρτήσεις που χρησιμοποιεί ο παραγόμενος λεξικογραφικός αναλυτής έχουν το πρόθεμα “yy” πχ. yylex, yyin, yylineno, yytext, yywrap,... Αυτή η παράμετρος αλλάζει το πρόθεμα σε “PREFIX” %option nounistd %option nounistd Δεν κάνει 'include' το header file “unistd.h”, το οποίο υπάρχει μόνο στα UNIX συστήματα Δεν κάνει 'include' το header file “unistd.h”, το οποίο υπάρχει μόνο στα UNIX συστήματα Slide 12 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Ορισμών – User defined conditions Οι κανόνες μπορούν να ενεργοποιούνται υπό συνθήκη μόνο όταν βρισκόμαστε σε συγκεκριμένες καταστάσεις Οι κανόνες μπορούν να ενεργοποιούνται υπό συνθήκη μόνο όταν βρισκόμαστε σε συγκεκριμένες καταστάσεις Υπάρχουν δύο είδη conditions Υπάρχουν δύο είδη conditions Inclusive (start) conditions Inclusive (start) conditions  Ορίζονται με την εντολή “%s condition_name”  Μπορούν να ενεργοποιούν τους κανόνες που δε βασίζονται σε καμία κατάσταση (είναι χωρίς condition) καθώς και αυτούς που βασίζονται στην κατάσταση “ ” Exclusive conditions Exclusive conditions  Ορίζονται με την εντολή “%x condition_name”  Μπορούν να ενεργοποιήσουν μόνο τους κανόνες που βασίζονται στην κατάσταση “ ” Slide 13 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Ορισμών – Παράδειγμα Κώδικας Παράμετροι Ορισμοί regular expressions User defined conditions Slide 14 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Κανόνων - Γενικά Το κύριο τμήμα του προγράμματος περιγραφής του λεξικογραφικού αναλυτή, αφού σε αυτό καθορίζεται η λειτουργικότητά του Το κύριο τμήμα του προγράμματος περιγραφής του λεξικογραφικού αναλυτή, αφού σε αυτό καθορίζεται η λειτουργικότητά του Σύνταξη: Regular expression { action } Σύνταξη: Regular expression { action } Όταν παραπάνω από ένας κανόνας ικανοποιείται, τότε επιλέγεται αυτός που καταναλώνει τους περισσότερους χαρακτήρες Όταν παραπάνω από ένας κανόνας ικανοποιείται, τότε επιλέγεται αυτός που καταναλώνει τους περισσότερους χαρακτήρες Αν βρεθούν δύο ή παραπάνω κανόνες που καταναλώνουν τον ίδιο αριθμό χαρακτήρων τότε επιλέγεται αυτός που έχει δηλωθεί πρώτος Αν βρεθούν δύο ή παραπάνω κανόνες που καταναλώνουν τον ίδιο αριθμό χαρακτήρων τότε επιλέγεται αυτός που έχει δηλωθεί πρώτος Slide 15 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Κανόνων - Conditions Conditions Conditions Τα conditions ανάμεσα στα “ ” αναφέρονται σε conditions που έχει ορίσει ο χρήστης (με “%s” ή “%x”) Τα conditions ανάμεσα στα “ ” αναφέρονται σε conditions που έχει ορίσει ο χρήστης (με “%s” ή “%x”) Η παράθεσή τους είναι προαιρετική. Αν παραληφθούν ο κανόνας μπορεί να ενεργοποιηθεί είτε από την default κατάσταση, είτε από τα inclusive conditions Η παράθεσή τους είναι προαιρετική. Αν παραληφθούν ο κανόνας μπορεί να ενεργοποιηθεί είτε από την default κατάσταση, είτε από τα inclusive conditions Η default κατάσταση στην οποία βρίσκεται στην αρχή ο λεξικογραφικός αναλυτής (και η οποία είναι inclusive), είναι η INITIAL και μπορεί να συμμετέχει κανονικά στη λίστα των conditions που προηγείται της κανονικής έκφρασης Η default κατάσταση στην οποία βρίσκεται στην αρχή ο λεξικογραφικός αναλυτής (και η οποία είναι inclusive), είναι η INITIAL και μπορεί να συμμετέχει κανονικά στη λίστα των conditions που προηγείται της κανονικής έκφρασης Η κατάσταση “ ” είναι συντομογραφία για όλες τις καταστάσεις που έχει δηλώσει ο χρήστης και για την INITIAL Η κατάσταση “ ” είναι συντομογραφία για όλες τις καταστάσεις που έχει δηλώσει ο χρήστης και για την INITIAL Slide 16 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Κανόνων – Regular Expressions & Actions Regular Expression Regular Expression To regular expression μπορεί να περιλαμβάνει ή να αποτελείται αποκλειστικά από τα macros που έχουν δηλωθεί στο τμήμα ορισμών, τα οποία θα πρέπει να περικλείονται στα σύμβολα “{“, “}”, π.χ. {comment} To regular expression μπορεί να περιλαμβάνει ή να αποτελείται αποκλειστικά από τα macros που έχουν δηλωθεί στο τμήμα ορισμών, τα οποία θα πρέπει να περικλείονται στα σύμβολα “{“, “}”, π.χ. {comment} Το ειδικό σύμβολο “ >” ικανοποιείται όταν τελειώσει η ανάγνωση του τρέχοντος αρχείου Το ειδικό σύμβολο “ >” ικανοποιείται όταν τελειώσει η ανάγνωση του τρέχοντος αρχείου Action Action Ενεργοποιείται όταν ικανοποιείτε κάποια από τις καταστάσεις και το regular expression που ακολουθεί Ενεργοποιείται όταν ικανοποιείτε κάποια από τις καταστάσεις και το regular expression που ακολουθεί Αν ο κώδικάς του είναι πάνω από ένα statement θα πρέπει να περικλείεται σε {, } (μέσα σε block) Αν ο κώδικάς του είναι πάνω από ένα statement θα πρέπει να περικλείεται σε {, } (μέσα σε block) Ο κώδικας μπορεί να χρησιμοποιεί κάποιες συναρτήσεις και μεταβλητές του παραγόμενου λεξικογραφικού αναλυτή Ο κώδικας μπορεί να χρησιμοποιεί κάποιες συναρτήσεις και μεταβλητές του παραγόμενου λεξικογραφικού αναλυτή Slide 17 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Κανόνων – Διαθέσιμες μεταβλητές και συναρτήσεις yytext: pointer σε char (ή char array στον κλασσικό lex) που περιέχει το κομμάτι του κειμένου που έχει ικανοποιήσει το regular expression yytext: pointer σε char (ή char array στον κλασσικό lex) που περιέχει το κομμάτι του κειμένου που έχει ικανοποιήσει το regular expression yyleng: ακέραιος που δηλώνει το μέγεθος του yytext yyleng: ακέραιος που δηλώνει το μέγεθος του yytext BEGIN(condition): βάζει το λεξικογραφικό αναλυτή να μεταβεί στην κατάσταση με όνομα “condition” BEGIN(condition): βάζει το λεξικογραφικό αναλυτή να μεταβεί στην κατάσταση με όνομα “condition” ECHO: αντιγράφει τα περιεχόμενα του yytext στην έξοδο. ECHO: αντιγράφει τα περιεχόμενα του yytext στην έξοδο. REJECT: βάζει το λεξικογραφικό αναλυτή να ενεργοποιήσει το «δεύτερο καλύτερο» κανόνα REJECT: βάζει το λεξικογραφικό αναλυτή να ενεργοποιήσει το «δεύτερο καλύτερο» κανόνα Προσοχή: Η χρήση του REJECT σε οποιονδήποτε κανόνα κάνει πολύ πιο αργό ολόκληρο το λεξικογραφικό αναλυτή Προσοχή: Η χρήση του REJECT σε οποιονδήποτε κανόνα κάνει πολύ πιο αργό ολόκληρο το λεξικογραφικό αναλυτή input(): διαβάζει και επιστρέφει τον επόμενο χαρακτήρα από την ακολουθία εισόδου (look-ahead) input(): διαβάζει και επιστρέφει τον επόμενο χαρακτήρα από την ακολουθία εισόδου (look-ahead) unput(c): τοποθετεί το χαρακτήρα c στην ακολουθία εισόδου. Έτσι ο επόμενος χαρακτήρας που θα διαβάσει ο λεξικογραφικός αναλυτής θα είναι ο c unput(c): τοποθετεί το χαρακτήρα c στην ακολουθία εισόδου. Έτσι ο επόμενος χαρακτήρας που θα διαβάσει ο λεξικογραφικός αναλυτής θα είναι ο c Slide 18 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Κανόνων - Παραδείγματα Κανόνες χωρίς condition Κανόνες με condition Slide 19 / 26 HY340, 2012

Α. Σαββίδης Τμήμα Κώδικα Χρήστη Το τμήμα κώδικα χρήστη είναι προαιρετικό και όταν παραλειφθεί μπορεί να παραλειφθεί και το δεύτερο σύμβολο “%” Το τμήμα κώδικα χρήστη είναι προαιρετικό και όταν παραλειφθεί μπορεί να παραλειφθεί και το δεύτερο σύμβολο “%” Σκοπός του είναι μόνο η εύκολη και άμεση προσθήκη υλοποιήσεων των συναρτήσεων που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτή Σκοπός του είναι μόνο η εύκολη και άμεση προσθήκη υλοποιήσεων των συναρτήσεων που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτή Ό,τι προστίθεται σε αυτό το τμήμα αντιγράφεται χωρίς αλλαγές στο παραγόμενο αρχείο.c που περιέχει τον κώδικα του λεξικογραφικού αναλυτή Ό,τι προστίθεται σε αυτό το τμήμα αντιγράφεται χωρίς αλλαγές στο παραγόμενο αρχείο.c που περιέχει τον κώδικα του λεξικογραφικού αναλυτή Παράδειγμα: Παράδειγμα: Slide 20 / 26 HY340, 2012

Α. Σαββίδης Ένας ολοκληρωμένος λεξικογραφικός αναλυτής αρχείο scanner.l Slide 21 / 26 HY340, 2012

Α. Σαββίδης Διαδικασία για την παραγωγή του τελικού προγράμματος scanner.l Meta compiler για λεξικογραφικούς αναλυτές (flex/lex) scanner.c C/C++ Compilerεκτελέσιμο:scanner βιβλιοθήκες Slide 22 / 26 HY340, 2012

Α. Σαββίδης Είσοδος από c strings και char buffers (1/3) Ο παραγόμενος λεξικογραφικός αναλυτής, διαβάζει την ακολουθία χαρακτήρων εξ’ ορισμού από το global FILE* pointer με όνομα “yyin” (που μπορούμε να αλλάξουμε όπως φαίνεται στη main() που είδαμε πιο πριν) Ο παραγόμενος λεξικογραφικός αναλυτής, διαβάζει την ακολουθία χαρακτήρων εξ’ ορισμού από το global FILE* pointer με όνομα “yyin” (που μπορούμε να αλλάξουμε όπως φαίνεται στη main() που είδαμε πιο πριν) Πολλές φορές όμως δε θέλουμε να διαβάζουμε την ακολουθία χαρακτήρων προς επεξεργασία από αρχεία (FILE* pointers) Πολλές φορές όμως δε θέλουμε να διαβάζουμε την ακολουθία χαρακτήρων προς επεξεργασία από αρχεία (FILE* pointers) Θέλουμε να διαβάσουμε χαρακτήρες από το δίκτυο Θέλουμε να διαβάσουμε χαρακτήρες από το δίκτυο Θέλουμε να διαβάσουμε χαρακτήρες που υπάρχουν σε memory buffers Θέλουμε να διαβάσουμε χαρακτήρες που υπάρχουν σε memory buffers Ο flex παρέχει συναρτήσεις με τις οποίες μπορούμε να τον βάλουμε να διαβάσει από μια ακολουθία από χαρακτήρες που βρίσκονται στη μνήμη (NULL terminated char* pointers, buffers) Ο flex παρέχει συναρτήσεις με τις οποίες μπορούμε να τον βάλουμε να διαβάσει από μια ακολουθία από χαρακτήρες που βρίσκονται στη μνήμη (NULL terminated char* pointers, buffers) Slide 23 / 26 HY340, 2012

Α. Σαββίδης Είσοδος από c strings και char buffers (2/3) Αρχικά δημιουργούμε ένα handle τύπου YY_BUFFER_STATE που θα περιέχει την είσοδο του λεξικογραφικού αναλυτή Αρχικά δημιουργούμε ένα handle τύπου YY_BUFFER_STATE που θα περιέχει την είσοδο του λεξικογραφικού αναλυτή Χρησιμοποιούμε τη yy_scan_string(const char* str) αν θέλουμε να διαβάσουμε από το string str Χρησιμοποιούμε τη yy_scan_string(const char* str) αν θέλουμε να διαβάσουμε από το string str Χρησιμοποιούμε τη yy_scan_bytes(char* buffer, size_t size) αν θέλουμε να διαβάσουμε από ένα buffer μεγέθους size Χρησιμοποιούμε τη yy_scan_bytes(char* buffer, size_t size) αν θέλουμε να διαβάσουμε από ένα buffer μεγέθους size Κατόπιν καλούμε κανονικά τη συνάρτηση yylex() για να πραγματοποιηθεί η λεξικογραφική ανάλυση Κατόπιν καλούμε κανονικά τη συνάρτηση yylex() για να πραγματοποιηθεί η λεξικογραφική ανάλυση Αφού έχει ολοκληρωθεί η λεξικογραφική ανάλυση, αποδεσμεύουμε τη μνήμη που αντιστοιχεί στο handle που έχουμε κρατήσει καλώντας την yy_delete_buffer(YY_BUFFER_STATE buffer) Αφού έχει ολοκληρωθεί η λεξικογραφική ανάλυση, αποδεσμεύουμε τη μνήμη που αντιστοιχεί στο handle που έχουμε κρατήσει καλώντας την yy_delete_buffer(YY_BUFFER_STATE buffer) Slide 24 / 26 HY340, 2012

Α. Σαββίδης Είσοδος από c strings και char buffers (3/3) Συναρτήσεις για είσοδο από strings και buffers Slide 25 / 26 HY340, 2012

Α. Σαββίδης References Flex Home Page Flex Home Page Flex Manual Flex Manual Flex for Windows Flex for Windows Slide 26 / 26 HY340, 2012