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



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

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

Παρουσίαση του εργαλείου FLEX

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

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Τι είναι το yacc. Δομή ενός αρχείου yacc. Πρόλογος. ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο. Ο yacc είναι ένας γενικού σκοπού parser generator.

Υλοποίηση ΛΑ με το flex

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Γλωσσική Τεχνολογία. String Handling Regular Expressions

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εργαστήριο 08 Εισαγωγή στo Yacc

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec04 19/02/2019

Λεκτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Regular Expressions ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Slide 6 / 43. Slide 5 / 43. Α. Σαββίδης. Α. Σαββίδης. Slide 8 / 43. Slide 7 / 43. Α. Σαββίδης. Α. Σαββίδης HY340, 2009 HY340, 2009 HY340, 2009

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Λεκτική Ανάλυση

Προγραμματισμός Ι (ΗΥ120)

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

Προγραµµατισµός Ι (ΗΥ120)

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Επεξεργασία Αρχείων Κειµένου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Η γλώσσα προγραμματισμού C

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Δομημένος Προγραμματισμός

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Παρουσίαση του εργαλείου BISON

ΗΥ-150. Προγραμματισμός

ΚΕΦΑΛΑΙΟ 3. Εκφράσεις, τελεστές, σχόλια. 3.1 Εισαγωγή

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

Προγραμματισμός Ι (ΗΥ120)

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Εισαγωγή στον Προγραμματισμό με C++

Παρουσίαση του εργαλείου BISON

S, (5, -3, 34, -23, 7) ( *, _

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

Κλάσεις και Αντικείµενα

Τυχαίοι αριθμοί struct Αρχεία Διαμορφώσεις Συναρτήσεις Χειρισμός σφαλμάτων ΠΕΜΠΤΗ ΔΙΑΛΕΞΗ

Προγραμματισμό για ΗΜΥ

Προγραµµατιστικές Τεχνικές

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΗΥ-150. Προγραμματισμός

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Εισαγωγή στον Προγραμματισμό

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Κανονικές εκφράσεις ή παραστάσεις (Regular Expressions) 3 ο Εργαστήριο ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

Αντικειµενοστρεφής Προγραµµατισµός

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

scanf() scanf() stdin scanf() printf() int float double %lf float

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Βασικά στοιχεία της Java

Μεθόδων Επίλυσης Προβλημάτων

Μεθοδολογία Προγραμματισμού

Προγραμματισμός Ι (ΗΥ120)

a = 10; a = k; int a,b,c; a = b = c = 10;

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Δομημένος Προγραμματισμός (ΤΛ1006)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Η γλώσσα προγραμματισμού Strange

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Προγραμματισμός Η/Υ (ΤΛ2007 )

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Transcript:

HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 1ο Εισαγωγή στο FLEX Ι ΑΣΚΩΝ Αντώνιος Σαββίδης Slide 2 / 26 Flex Regular Expressions (1/4) Μια γεννήτρια λεξικογραφικών αναλυτών για τις γλώσσες C/C++ Για την περιγραφή του λεξικογραφικού αναλυτή χρησιµοποιούνται: Regular expressions, που περιγράφουν τα πρότυπα της γλώσσας Actions, δηλαδή ενέργειες που πρέπει να πραγµατοποιηθούν όταν αναγνωριστεί κάποιο συγκεκριµένο regular expression x αναγνωρίζει το χαρακτήρα x abcd - αναγνωρίζει την ακολουθία abcd. (τελεία) - αναγνωρίζει οποιοδήποτε χαρακτήρα ή σύµβολο εκτός από το new line [xyz] αναγνωρίζει ένα από τους χαρακτήρες µέσα στο σύνολο, δηλαδή το x, το y ή το z [ab-eg] αναγνωρίζει τους χαρακτήρες a, b έως e και g [^ab-e] αναγνωρίζει οποιοδήποτε χαρακτήρα ή σύµβολο δεν ανήκει στο σύνολο [ab-e] (δηλαδή οτιδήποτε εκτός από a, b, c, d, e) Slide 3 / 26 Slide 4 / 26

Regular Expressions (2/4) r* - αναγνωρίζει καµία ή περισσότερες επαναλήψεις του r a* περιγράφει τα ε, a, aa, aaa, r+ - αναγνωρίζει µια ή περισσότερες επαναλήψεις του r a+ περιγράφει τα a, aa, aaa,, αλλά όχι το ε r? - αναγνωρίζει καµία ή µια επανάληψη του r (διαβάζεται και προαιρετικό r) r{i, j} - αναγνωρίζει i έως j επαναλήψεις του r (όπου i, j > 0 και i < j) r{i} αναγνωρίζει ακριβώς i επαναλήψεις του r r{i,} αναγνωρίζει i ή περισσότερες επαναλήψεις του r Regular Expressions (3/4) rs αναγνωρίζει τις ακολουθίες που αναγνωρίζει η συνένωση των r και s (concatenation) (r) αναγνωρίζει την ακολουθία r (χρησιµοποιείται για να καθορίσει την προτεραιότητα) abc+ αναγνωρίζει τα abc, abcc, abccc, (abc)+ αναγνωρίζει τα abc, abcabc, r s αναγνωρίζει το r ή το s ^r αναγνωρίζει το r αλλά µόνο όταν βρίσκεται στην αρχή της γραµµής r$ αναγνωρίζει το r αλλά µόνο όταν βρίσκεται στο τέλος της γραµµής \\, \, \(, \), \*, \+, \[, \], \$, \^, \{, \},... αναγνωρίζει τους ίδιους τους χαρακτήρες \,, (, *, (escaped) Slide 5 / 26 Slide 6 / 26 Regular Expressions (4/4) οµή Προγράµµατος Flex Προσοχή στην προτεραιότητα!! Το foo bar* είναι ισοδύναµο µε (foo) (ba(r*)) Ο τελεστής * έχει µεγαλύτερη προτεραιότητα από την ακολουθία χαρακτήρων Η ακολουθία χαρακτήρων έχει µεγαλύτερη προτεραιότητα από τον τελεστή Αν θέλαµε να αναγνωρίσουµε το foo ή µηδέν ή περισσότερα bar θα γράφαµε foo (bar)* Αν θέλαµε να αναγνωρίσουµε µηδέν ή περισσότερα foo ή bar θα γράφαµε (foo bar)* Τµήµα ορισµών %% Τµήµα κανόνων %% Τµήµα κώδικα χρήστη (προαιρετικό) Slide 7 / 26 Slide 8 / 26

Τµήµα Ορισµών - Γενικά 1. Κώδικας Χρήστη Αντιγράφεται αυτούσιος στο παραγόµενο αρχείο µε τον κώδικα του λεξικογραφικού αναλυτή Πρέπει να βρίσκεται µέσα στα σύµβολα {% /*code*/ %} ή %top{ /*code*/ } 2. Regular expression macros (aliases) Συντάσσονται name regex και βοηθούν στην αναγνωσιµότητα του προγράµµατος Π.χ. string αντί για \"[^\n"]*\" 3. Παράµετροι για τον παραγόµενο λεξικογραφικό αναλυτή %option option_name ή %option option_name=value 4. User-defined conditions Κανόνες που ενεργοποιούνται µε βάση την κατάσταση στην οποία βρίσκεται ο λεξικογραφικός αναλυτής Τµήµα Ορισµών Παράµετροι (1/2) %option header-file=./scanner.h ηµιουργεί ένα header file που περιέχει τις δηλώσεις για τους τύπους και τις συναρτήσεις που χρησιµοποιούνται από τον παραγόµενο λεξικογραφικό αναλυτή %option noyywrap εν χρησιµοποιεί τη συνάρτηση yywrap, που καλείται από τον παραγόµενο λεξικογραφικό αναλυτή όταν τελειώσει το διάβασµα ενός αρχείου (αν αυτή επιστρέψει 0 ο αναλυτής συνεχίσει το scanning από την είσοδο) %option yylineno ηλώνει µια καθολική µεταβλητή µε όνοµα yylineno, που κρατάει τον αριθµό της τρέχουσας γραµµής του αρχείου εισόδου %option case-insensitive Ο παραγόµενος λεξικογραφικός αναλυτής είναι case insensitive. Αυτό σηµαίνει ότι η λέξη ClaSS θα είναι ίδια µε τη λέξη class Slide 9 / 26 Slide 10 / 26 Τµήµα Ορισµών Παράµετροι (2/2) %option reentrant Ο παραγόµενος λεξικογραφικός αναλυτής είναι reentrant (µπορούµε να κάνουµε νέα κλήση στην yylex πριν τελειώσει η προηγουµενη). Προσοχή καθώς αλλάζει ο τρόπος κλήσης της yylex %option prefix="prefix" Εξ ορισµού οι τύποι και οι συναρτήσεις που χρησιµοποιεί ο παραγόµενος λεξικογραφικός αναλυτής έχουν το πρόθεµα yy πχ. yylex, yyin, yylineno, yytext, yywrap,... Αυτή η παράµετρος αλλάζει το πρόθεµα σε PREFIX %option nounistd εν κάνει 'include' το header file unistd.h, το οποίο υπάρχει µόνο στα UNIX συστήµατα Τµήµα Ορισµών User defined conditions Οι κανόνες µπορούν να ενεργοποιούνται υπό συνθήκη µόνο όταν βρισκόµαστε σε συγκεκριµένες καταστάσεις Υπάρχουν δύο είδη conditions Inclusive (start) conditions Ορίζονται µε την εντολή %s condition_name Μπορούν να ενεργοποιούν τους κανόνες που δε βασίζονται σε καµία κατάσταση (είναι χωρίς condition) καθώς και αυτούς που βασίζονται στην κατάσταση <condition_name> Exclusive conditions Ορίζονται µε την εντολή %x condition_name Μπορούν να ενεργοποιήσουν µόνο τους κανόνες που βασίζονται στην κατάσταση <condition_name> Slide 11 / 26 Slide 12 / 26

Τµήµα Ορισµών Παράδειγµα Κώδικας Παράµετροι Ορισµοί regular expressions User defined conditions Τµήµα Κανόνων - Γενικά Το κύριο τµήµα του προγράµµατος περιγραφής του λεξικογραφικού αναλυτή, αφού σε αυτό καθορίζεται η λειτουργικότητά του Σύνταξη: <condition1, condition2,...> Regular expression { action } Όταν παραπάνω από ένας κανόνας ικανοποιείται, τότε επιλέγεται αυτός που καταναλώνει τους περισσότερους χαρακτήρες Αν βρεθούν δύο ή παραπάνω κανόνες που καταναλώνουν τον ίδιο αριθµό χαρακτήρων τότε επιλέγεται αυτός που έχει δηλωθεί πρώτος Slide 13 / 26 Slide 14 / 26 Conditions Τµήµα Κανόνων - Conditions Τα conditions ανάµεσα στα <, > αναφέρονται σε conditions που έχει ορίσει ο χρήστης (µε %s ή %x ) Η παράθεσή τους είναι προαιρετική. Αν παραληφθούν ο κανόνας µπορεί να ενεργοποιηθεί είτε από την default κατάσταση, είτε από τα inclusive conditions Η default κατάσταση στην οποία βρίσκεται στην αρχή ο λεξικογραφικός αναλυτής (και η οποία είναι inclusive), είναι η INITIAL και µπορεί να συµµετέχει κανονικά στη λίστα των conditions που προηγείται της κανονικής έκφρασης Η κατάσταση <*> είναι συντοµογραφία για όλες τις καταστάσεις που έχει δηλώσει ο χρήστης και για την INITIAL Τµήµα Κανόνων Regular Expressions & Actions Regular Expression To regular expression µπορεί να περιλαµβάνει ή να αποτελείται αποκλειστικά από τα macros που έχουν δηλωθεί στο τµήµα ορισµών, τα οποία θα πρέπει να περικλείονται στα σύµβολα {, }, π.χ. {comment} Το ειδικό σύµβολο <<EOF>> ικανοποιείται όταν τελειώσει η ανάγνωση του τρέχοντος αρχείου Action Ενεργοποιείται όταν ικανοποιείτε κάποια από τις καταστάσεις και το regular expression που ακολουθεί Αν ο κώδικάς του είναι πάνω από ένα statement θα πρέπει να περικλείεται σε {, } (µέσα σε block) Ο κώδικας µπορεί να χρησιµοποιεί κάποιες συναρτήσεις και µεταβλητές του παραγόµενου λεξικογραφικού αναλυτή Slide 15 / 26 Slide 16 / 26

Τµήµα Κανόνων ιαθέσιµες µεταβλητές και συναρτήσεις yytext: pointer σε char (ή char array στον κλασσικό lex) που περιέχει το κοµµάτι του κειµένου που έχει ικανοποιήσει το regular expression yyleng: ακέραιος που δηλώνει το µέγεθος του yytext BEGIN(condition): βάζει το λεξικογραφικό αναλυτή να µεταβεί στην κατάσταση µε όνοµα condition ECHO: αντιγράφει τα περιεχόµενα του yytext στην έξοδο. REJECT: βάζει το λεξικογραφικό αναλυτή να ενεργοποιήσει το «δεύτερο καλύτερο» κανόνα Προσοχή:Η χρήση του REJECT σε οποιονδήποτε κανόνα κάνει πολύ πιο αργό ολόκληρο το λεξικογραφικό αναλυτή input(): διαβάζει και επιστρέφει τον επόµενο χαρακτήρα από την ακολουθία εισόδου (look-ahead) unput(c): τοποθετεί το χαρακτήρα c στην ακολουθία εισόδου. Έτσι ο επόµενος χαρακτήρας που θα διαβάσει ο λεξικογραφικός αναλυτής θα είναι ο c Κανόνες χωρίς condition Κανόνες µε condition Τµήµα Κανόνων - Παραδείγµατα Slide 17 / 26 Slide 18 / 26 Τµήµα Κώδικα Χρήστη Το τµήµα κώδικα χρήστη είναι προαιρετικό και όταν παραλειφθεί µπορεί να παραλειφθεί και το δεύτερο σύµβολο %% Σκοπός του είναι µόνο η εύκολη και άµεση προσθήκη υλοποιήσεων των συναρτήσεων που χρησιµοποιούνται από τον παραγόµενο λεξικογραφικό αναλυτή Ό,τι προστίθεται σε αυτό το τµήµα αντιγράφεται χωρίς αλλαγές στο παραγόµενο αρχείο.c που περιέχει τον κώδικα του λεξικογραφικού αναλυτή Παράδειγµα: Ένας ολοκληρωµένος λεξικογραφικός αναλυτής αρχείο scanner.l Ο παραγόµενος λεξικογραφικός αναλυτής, διαβάζει την ακολουθία χαρακτήρων εξ ορισµού από το global FILE* pointer µε όνοµα yyin. Slide 19 / 26 Slide 20 / 26

ιαδικασία για την παραγωγή του τελικού προγράµµατος References Flex Home Page scanner.l Meta compiler για λεξικογραφικούς αναλυτές (flex/lex) scanner.c http://www.gnu.org/software/flex Flex Manual http://www.gnu.org/software/flex/manual/ Flex for Windows http://gnuwin32.sourceforge.net/packages/flex.htm βιβλιοθήκες εκτελέσιµο: scanner C/C++ Compiler Slide 21 / 26 Slide 22 / 26