HY 340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

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

description

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ. HY 340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ. ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης. HY 340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ. Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Μια γεννήτρια λεξικογραφικών αναλυτών για τις γλώσσες C/C++ - PowerPoint PPT Presentation

Transcript of HY 340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

Page 1: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HYHY340340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ,

ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ,ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ,

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

ΔΙΔΑΣΚΩΝΔΙΔΑΣΚΩΝΑντώνιος ΣαββίδηςΑντώνιος Σαββίδης

Page 2: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

HYHY340340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

Φροντιστήριο 1οΦροντιστήριο 1οΕισαγωγή στο Εισαγωγή στο FLEXFLEX

Slide 2 / 26

Page 3: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

FlexFlex

Μια γεννήτρια λεξικογραφικών αναλυτών Μια γεννήτρια λεξικογραφικών αναλυτών για τις γλώσσες για τις γλώσσες C/C++C/C++

Για την περιγραφή του λεξικογραφικού Για την περιγραφή του λεξικογραφικού αναλυτή χρησιμοποιούνται:αναλυτή χρησιμοποιούνται:Regular expressionsRegular expressions, , που περιγράφουν τα που περιγράφουν τα

πρότυπα της γλώσσαςπρότυπα της γλώσσαςActionsActions, , δηλαδή ενέργειες που πρέπει να δηλαδή ενέργειες που πρέπει να

πραγματοποιηθούν όταν αναγνωριστεί κάποιο πραγματοποιηθούν όταν αναγνωριστεί κάποιο συγκεκριμένο συγκεκριμένο regular expression regular expression

Slide 3 / 26

Page 4: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Regular Expressions (1/Regular Expressions (1/44))

xx – – αναγνωρίζει το χαρακτήρα αναγνωρίζει το χαρακτήρα xx ““abcd”abcd” - - αναγνωρίζει την ακολουθίααναγνωρίζει την ακολουθία abcdabcd .. ( (τελεία) - αναγνωρίζει οποιοδήποτε χαρακτήρα τελεία) - αναγνωρίζει οποιοδήποτε χαρακτήρα

ή σύμβολο εκτός από το ή σύμβολο εκτός από το newnew lineline [xyz][xyz] – – αναγνωρίζει ένα από τους χαρακτήρες αναγνωρίζει ένα από τους χαρακτήρες

μέσα στο σύνολο, δηλαδή το μέσα στο σύνολο, δηλαδή το xx, , το το y y ή το ή το zz [ab-eg][ab-eg] – – αναγνωρίζει τους χαρακτήρες αναγνωρίζει τους χαρακτήρες aa, , bb έως έως

e e και και gg [^ab-e][^ab-e] – – αναγνωρίζει οποιοδήποτε χαρακτήρα ή αναγνωρίζει οποιοδήποτε χαρακτήρα ή

σύμβολο δεν ανήκει στο σύνολο σύμβολο δεν ανήκει στο σύνολο [[abab--ee] ] (δηλαδή (δηλαδή οτιδήποτε εκτός από οτιδήποτε εκτός από a, b, c, d, e)a, b, c, d, e)

Slide 4 / 26

Page 5: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Regular Expressions (2/Regular Expressions (2/44))

r*r* - - αναγνωρίζει καμία ή περισσότερες αναγνωρίζει καμία ή περισσότερες επαναλήψεις του επαναλήψεις του rr a* a* περιγράφει τα ε, περιγράφει τα ε, a, aa, aaa, …a, aa, aaa, …

r+r+ - - αναγνωρίζει μια ή περισσότερες αναγνωρίζει μια ή περισσότερες επαναλήψεις του επαναλήψεις του rr aa++ περιγράφει τα περιγράφει τα a, aa, aaa, …a, aa, aaa, …, αλλά όχι το ε, αλλά όχι το ε

rr?? - - αναγνωρίζει καμία ή μια επανάληψη του αναγνωρίζει καμία ή μια επανάληψη του rr (διαβάζεται και προαιρετικό (διαβάζεται και προαιρετικό rr))

r{i, j}r{i, j} - - αναγνωρίζει αναγνωρίζει ii έως έως jj επαναλήψεις του επαναλήψεις του rr (όπου (όπου i, j > 0 i, j > 0 και και i < j)i < j)

r{i}r{i} – – αναγνωρίζει ακριβώς αναγνωρίζει ακριβώς ii επαναλήψεις του επαναλήψεις του rr r{ir{i,,}} – – αναγνωρίζει αναγνωρίζει ii ή περισσότερες επαναλήψεις ή περισσότερες επαναλήψεις

του του rr

Slide 5 / 26

Page 6: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Regular Expressions (3/Regular Expressions (3/44))

rsrs – – αναγνωρίζει τις ακολουθίες που αναγνωρίζει η αναγνωρίζει τις ακολουθίες που αναγνωρίζει η συνένωση των συνένωση των rr και και ss (concatenation)(concatenation)

(r)(r) – – αναγνωρίζει την ακολουθία αναγνωρίζει την ακολουθία rr ((χρησιμοποιείται για να χρησιμοποιείται για να καθορίσει την προτεραιότητα)καθορίσει την προτεραιότητα) abcabc++ αναγνωρίζει τα αναγνωρίζει τα abc, abcc, abccc, …abc, abcc, abccc, … (abc)+ (abc)+ αναγνωρίζει τα αναγνωρίζει τα abcabc, , abcabc, …abcabc, …

r|sr|s – – αναγνωρίζει το αναγνωρίζει το rr ή το ή το ss ^r^r – – αναγνωρίζει το αναγνωρίζει το rr αλλάαλλά μόνο όταν βρίσκεται στην μόνο όταν βρίσκεται στην

αρχή της γραμμήςαρχή της γραμμής rr$$ – – αναγνωρίζει το αναγνωρίζει το rr αλλάαλλά μόνο όταν βρίσκεται στο τέλος μόνο όταν βρίσκεται στο τέλος

της γραμμήςτης γραμμής \\, \”, \(, \), \*, \+, \[, \], \$, \^, \{, \}, ...\\, \”, \(, \), \*, \+, \[, \], \$, \^, \{, \}, ... – αναγνωρίζει τους – αναγνωρίζει τους

ίδιους τους χαρακτήρες ίδιους τους χαρακτήρες \, \, “, (, *, …“, (, *, … ( (escaped)escaped)

Slide 6 / 26

Page 7: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Regular Expressions (Regular Expressions (44//44))

Προσοχή στην προτεραιότητα!!Προσοχή στην προτεραιότητα!!Το Το foo|bar*foo|bar* είναι ισοδύναμο με είναι ισοδύναμο με ((foo)|(ba(r*))foo)|(ba(r*))

επειδή ο τελεστής ‘*’ έχει μεγαλύτερη επειδή ο τελεστής ‘*’ έχει μεγαλύτερη προτεραιότητα από την παρένθεση και αυτή προτεραιότητα από την παρένθεση και αυτή από τον τελεστή ‘|’από τον τελεστή ‘|’

Αν θέλαμε να αναγνωρίσουμε το Αν θέλαμε να αναγνωρίσουμε το foo foo ή μηδέν ή ή μηδέν ή περισσότερα περισσότερα bar bar θα γράφαμε θα γράφαμε foo|(bar)*foo|(bar)*

Αν θέλαμε να αναγνωρίσουμε μηδέν ή Αν θέλαμε να αναγνωρίσουμε μηδέν ή περισσότερα περισσότερα foo foo ή ή bar bar θα γράφαμε θα γράφαμε ((foo|bar)*foo|bar)*

Slide 7 / 26

Page 8: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Προκαθορισμένες Κλάσεις ΧαρακτήρωνΠροκαθορισμένες Κλάσεις Χαρακτήρων

Ο Ο flex flex ορίζει κάποιες προκαθορισμένες ορίζει κάποιες προκαθορισμένες κλάσεις χαρακτήρων για χρήση σε κλάσεις χαρακτήρων για χρήση σε regular regular expressionsexpressions

Συμβολίζονται [Συμβολίζονται [:X:] :X:] όπου Χ το όνομα της όπου Χ το όνομα της κλάσηςκλάσηςΤο Χ μπορεί να είναι: alnum, alpha, blank, Το Χ μπορεί να είναι: alnum, alpha, blank,

cntrl, digit, graph, lower, print, punct, space, cntrl, digit, graph, lower, print, punct, space, upper, xdigit.upper, xdigit.

Οι κλάσεις αυτές ορίζουν σύνολα χαρακτήρων Οι κλάσεις αυτές ορίζουν σύνολα χαρακτήρων που αντιστοιχούν στις που αντιστοιχούν στις standard C standard C συναρτήσεις συναρτήσεις isX(int c) isX(int c) του του <ctype.h><ctype.h>

Slide 8 / 26

Page 9: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Δομή Προγράμματος Δομή Προγράμματος FlexFlex

Τμήμα ορισμώνΤμήμα ορισμών

%%%%

Τμήμα κανόνωνΤμήμα κανόνων

%%%%

Τμήμα κώδικα χρήστη (προαιρετικό)Τμήμα κώδικα χρήστη (προαιρετικό)

Slide 9 / 26

Page 10: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Ορισμών - ΓενικάΤμήμα Ορισμών - Γενικά

1.1. Κώδικας ΧρήστηΚώδικας Χρήστη Αντιγράφεται αυτούσιος στο παραγόμενο αρχείο με τον Αντιγράφεται αυτούσιος στο παραγόμενο αρχείο με τον

κώδικα του λεξικογραφικού αναλυτήκώδικα του λεξικογραφικού αναλυτή Πρέπει να βρίσκεται μέσα στα σύμβολα {% /*Πρέπει να βρίσκεται μέσα στα σύμβολα {% /*code*/code*/ %} %} ή ή

%top{ /*code*/ }%top{ /*code*/ }

2.2. Regular expression macros (aliases)Regular expression macros (aliases) Συντάσσονται Συντάσσονται name regexname regex και βοηθούν στην και βοηθούν στην

αναγνωσιμότητα του προγράμματοςαναγνωσιμότητα του προγράμματος Π.χ. Π.χ. string string αντί για \"[^\n"]*\"αντί για \"[^\n"]*\"

3.3. Παράμετροι για τον παραγόμενο λεξικογραφικό Παράμετροι για τον παραγόμενο λεξικογραφικό αναλυτήαναλυτή

%%option optionoption option__name name ή %ή %option optionoption option==valuevalue

4.4. User-defined conditionsUser-defined conditions Κανόνες που ενεργοποιούνται με βάση την κατάσταση Κανόνες που ενεργοποιούνται με βάση την κατάσταση

στην οποία βρίσκεται ο λεξικογραφικός αναλυτήςστην οποία βρίσκεται ο λεξικογραφικός αναλυτής

Slide 10 / 26

Page 11: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Ορισμών – Παράμετροι (1/2)Τμήμα Ορισμών – Παράμετροι (1/2)

%option header-file=”./scanner.h”%option header-file=”./scanner.h” Δημιουργεί ένα Δημιουργεί ένα header file header file που περιέχει τις δηλώσεις για τους που περιέχει τις δηλώσεις για τους

τύπους και τις συναρτήσεις που χρησιμοποιούνται από τον τύπους και τις συναρτήσεις που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτήπαραγόμενο λεξικογραφικό αναλυτή

%option noyywrap%option noyywrap Δεν χρησιμοποιεί τη συνάρτηση Δεν χρησιμοποιεί τη συνάρτηση “yywrap”, “yywrap”, που καλείται από τον που καλείται από τον

παραγόμενο λεξικογραφικό αναλυτή όταν τελειώσει το διάβασμα παραγόμενο λεξικογραφικό αναλυτή όταν τελειώσει το διάβασμα ενός αρχείουενός αρχείου ( (αν αυτή επιστρέψει 0 ο αναλυτής συνεχίσει το αν αυτή επιστρέψει 0 ο αναλυτής συνεχίσει το scanning scanning από την είσοδοαπό την είσοδο))

%option yylineno%option yylineno Δηλώνει μια καθολική μεταβλητή με όνομα Δηλώνει μια καθολική μεταβλητή με όνομα “yylineno”, “yylineno”, που που

κρατάει τον αριθμό της τρέχουσας γραμμής του αρχείου εισόδουκρατάει τον αριθμό της τρέχουσας γραμμής του αρχείου εισόδου %option case-insensitive%option case-insensitive

Ο Ο παραγόμενος λεξικογραφικός αναλυτής είναι παραγόμενος λεξικογραφικός αναλυτής είναι case insensitive.case insensitive. Αυτό Αυτό σημαίνει ότι σημαίνει ότι η η λέξηλέξη “ClaSS” “ClaSS” θα είναι ίδια με τη λέξηθα είναι ίδια με τη λέξη “class” “class”

Slide 11 / 26

Page 12: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Ορισμών – Παράμετροι (2/2)Τμήμα Ορισμών – Παράμετροι (2/2)

%option reentrant%option reentrant Ο Ο παραγόμενος λεξικογραφικός αναλυτής είναι παραγόμενος λεξικογραφικός αναλυτής είναι

reentrant (reentrant (μπορούμε να κάνουμε νέα κλήση στην μπορούμε να κάνουμε νέα κλήση στην yylexyylex πριν τελειώσει η προηγουμενη)πριν τελειώσει η προηγουμενη). . ΠροσοχήΠροσοχή καθώς καθώς αλλάζει ο τρόπος κλήσης της αλλάζει ο τρόπος κλήσης της yylexyylex

%option prefix="PREFIX"%option prefix="PREFIX" Εξ’ ορισμού οι τύποι και οι συναρτήσεις που Εξ’ ορισμού οι τύποι και οι συναρτήσεις που

χρησιμοποιεί ο παραγόμενος λεξικογραφικός χρησιμοποιεί ο παραγόμενος λεξικογραφικός αναλυτής έχουν το πρόθεμα αναλυτής έχουν το πρόθεμα “yy” πχ. yylex, yyin, “yy” πχ. yylex, yyin, yylineno, yytext, yywrap, ... yylineno, yytext, yywrap, ... Αυτή η παράμετρος Αυτή η παράμετρος αλλάζει το πρόθεμα σε αλλάζει το πρόθεμα σε “PREFIX”“PREFIX”

%option nounistd%option nounistd Δεν κάνει Δεν κάνει 'include' 'include' το το header file header file “unistd.h”, “unistd.h”, το οποίο το οποίο

υπάρχει μόνο στα υπάρχει μόνο στα UNIX UNIX συστήματασυστήματα

Slide 12 / 26

Page 13: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Ορισμών – Τμήμα Ορισμών – User defined conditionsUser defined conditions

Οι κανόνες μπορούν να ενεργοποιούνται υπό Οι κανόνες μπορούν να ενεργοποιούνται υπό συνθήκη μόνο όταν βρισκόμαστε σε συνθήκη μόνο όταν βρισκόμαστε σε συγκεκριμένες καταστάσειςσυγκεκριμένες καταστάσεις

Υπάρχουν δύο είδη Υπάρχουν δύο είδη conditionsconditions Inclusive (start) conditionsInclusive (start) conditions

Ορίζονται με την εντολήΟρίζονται με την εντολή “%s condition_name” “%s condition_name” Μπορούν να ενεργοποιούν τους κανόνες που δε Μπορούν να ενεργοποιούν τους κανόνες που δε

βασίζονται σε καμία κατάσταση (είναι χωρίς βασίζονται σε καμία κατάσταση (είναι χωρίς conditioncondition) ) καθώς και αυτούς που βασίζονται στην κατάσταση καθώς και αυτούς που βασίζονται στην κατάσταση “<condition_name>”“<condition_name>”

Exclusive conditionsExclusive conditions Ορίζονται με την εντολήΟρίζονται με την εντολή “%x condition_name” “%x condition_name” Μπορούν να ενεργοποιήσουνΜπορούν να ενεργοποιήσουν μόνο τους κανόνες που μόνο τους κανόνες που

βασίζονται στην κατάσταση βασίζονται στην κατάσταση “<condition_name>”“<condition_name>”

Slide 13 / 26

Page 14: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Ορισμών – ΠαράδειγμαΤμήμα Ορισμών – Παράδειγμα

ΚώδικαςΚώδικας

ΠαράμετροιΠαράμετροι

Ορισμοί Ορισμοί regular expressionsregular expressions

User defined conditionsUser defined conditions

Slide 14 / 26

Page 15: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Κανόνων - ΓενικάΤμήμα Κανόνων - Γενικά

Το κύριο τμήμα του προγράμματος περιγραφής Το κύριο τμήμα του προγράμματος περιγραφής του λεξικογραφικού αναλυτή, αφού σε αυτό του λεξικογραφικού αναλυτή, αφού σε αυτό καθορίζεται η λειτουργικότητά τουκαθορίζεται η λειτουργικότητά του

ΣύνταξηΣύνταξη: : <condition1, condition2, ...> Regular <condition1, condition2, ...> Regular expression { action }expression { action }

Όταν παραπάνω από ένας κανόνας Όταν παραπάνω από ένας κανόνας ικανοποιείται, τότε επιλέγεται αυτός που ικανοποιείται, τότε επιλέγεται αυτός που καταναλώνει τους καταναλώνει τους περισσότερους χαρακτήρεςπερισσότερους χαρακτήρες

Αν βρεθούν δύο ή παραπάνω κανόνες που Αν βρεθούν δύο ή παραπάνω κανόνες που καταναλώνουν τον ίδιο αριθμό χαρακτήρων τότε καταναλώνουν τον ίδιο αριθμό χαρακτήρων τότε επιλέγεται αυτός που έχει δηλωθεί επιλέγεται αυτός που έχει δηλωθεί πρώτοςπρώτος

Slide 15 / 26

Page 16: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Κανόνων -Τμήμα Κανόνων - Conditions Conditions

ConditionsConditions ΤαΤα conditions conditions ανάμεσα στα ανάμεσα στα “<”, “>” “<”, “>” αναφέρονται αναφέρονται σσεε

conditions conditions που έχει ορίσει ο χρήστηςπου έχει ορίσει ο χρήστης ( (μεμε “%s” ή “%x”) “%s” ή “%x”) Η Η παράθεσή τους είναι προαιρετικήπαράθεσή τους είναι προαιρετική. . Αν παραληφθούν Αν παραληφθούν

ο κανόνας μπορεί να ενεργοποιηθεί είτε από την ο κανόνας μπορεί να ενεργοποιηθεί είτε από την defaultdefault κατάσταση κατάσταση, , είτε από τα είτε από τα inclusive conditionsinclusive conditions

Η Η default default κατάσταση στην οποία βρίσκεται στην αρχή κατάσταση στην οποία βρίσκεται στην αρχή ο λεξικογραφικός αναλυτής (και η οποία είναιο λεξικογραφικός αναλυτής (και η οποία είναι inclusive), inclusive), είναι η είναι η INITIALINITIAL και μπορεί να συμμετέχει και μπορεί να συμμετέχει κανονικά στη λίστα των κανονικά στη λίστα των conditions conditions που προηγείται της που προηγείται της κανονικής έκφρασηςκανονικής έκφρασης

Η Η κατάσταση κατάσταση “<*>” “<*>” είναι συντομογραφία για είναι συντομογραφία για όλεςόλες τις τις καταστάσεις που έχει δηλώσει ο χρήστης και για την καταστάσεις που έχει δηλώσει ο χρήστης και για την INITIALINITIAL

Slide 16 / 26

Page 17: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Κανόνων Τμήμα Κανόνων – – Regular Expressions & ActionsRegular Expressions & Actions

Regular ExpressionRegular Expression To regular expression To regular expression μπορεί να περιλαμβάνει ή να μπορεί να περιλαμβάνει ή να

αποτελείται αποκλειστικά από τα αποτελείται αποκλειστικά από τα macros macros που έχουν που έχουν δηλωθεί στο τμήμα ορισμώνδηλωθεί στο τμήμα ορισμών, , τα οποία θα πρέπει να τα οποία θα πρέπει να περικλείονται στα σύμβολαπερικλείονται στα σύμβολα “{“, “}”, π “{“, “}”, π..χ. {comment}χ. {comment}

Το ειδικό σύμβολο Το ειδικό σύμβολο “<<EOF>>” “<<EOF>>” ικανοποιείται όταν ικανοποιείται όταν τελειώσει η ανάγνωση του τρέχοντος αρχείουτελειώσει η ανάγνωση του τρέχοντος αρχείου

ActionAction Ενεργοποιείται όταν ικανοποιείτε κάποια από τις Ενεργοποιείται όταν ικανοποιείτε κάποια από τις

καταστάσειςκαταστάσεις καικαι το το regular expressionregular expression που ακολουθείπου ακολουθεί Αν ο κώδικάς του είναι πάνω από ένα Αν ο κώδικάς του είναι πάνω από ένα statement statement θα θα

πρέπει να περικλείεται σε {, } (μέσα σε πρέπει να περικλείεται σε {, } (μέσα σε block)block) Ο κώδικας μπορεί να χρησιμοποιεί κάποιες Ο κώδικας μπορεί να χρησιμοποιεί κάποιες

συναρτήσεις και μεταβλητές του παραγόμενου συναρτήσεις και μεταβλητές του παραγόμενου λεξικογραφικού αναλυτήλεξικογραφικού αναλυτή

Slide 17 / 26

Page 18: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα ΚανόνωνΤμήμα Κανόνων – – Διαθέσιμες μεταβλητές και συναρτήσεις Διαθέσιμες μεταβλητές και συναρτήσεις

yytextyytext:: pointer pointer σε σε char (ή char array char (ή char array στον κλασσικό στον κλασσικό lex) lex) που περιέχει το κομμάτι του κειμένου που έχει που περιέχει το κομμάτι του κειμένου που έχει ικανοποιήσει το ικανοποιήσει το regular expressionregular expression

yylengyyleng: : ακέραιος που δηλώνει το μέγεθος του ακέραιος που δηλώνει το μέγεθος του yytextyytext BEGIN(condition)BEGIN(condition):: βάζει το λεξικογραφικό αναλυτή να βάζει το λεξικογραφικό αναλυτή να

μεταβεί στην κατάσταση με όνομα μεταβεί στην κατάσταση με όνομα “condition”“condition” ECHOECHO:: αντιγράφει τα περιεχόμενα του αντιγράφει τα περιεχόμενα του yytext yytext στην έξοδο.στην έξοδο. REJECTREJECT:: βάζει το λεξικογραφικό αναλυτή να βάζει το λεξικογραφικό αναλυτή να

ενεργοποιήσει το «δεύτερο καλύτερο» κανόναενεργοποιήσει το «δεύτερο καλύτερο» κανόνα ΠροσοχήΠροσοχή:: Η χρήση του Η χρήση του REJECT REJECT σε οποιονδήποτε κανόνα κάνει σε οποιονδήποτε κανόνα κάνει

πολύ πιο αργό ολόκληρο το πολύ πιο αργό ολόκληρο το λεξικογραφικό αναλυτήλεξικογραφικό αναλυτή input()input():: διαβάζει και επιστρέφει τον επόμενο χαρακτήρα διαβάζει και επιστρέφει τον επόμενο χαρακτήρα

από την ακολουθία εισόδουαπό την ακολουθία εισόδου (look-ahead) (look-ahead) unput(c)unput(c):: τοποθετεί το χαρακτήρα τοποθετεί το χαρακτήρα cc στην ακολουθία στην ακολουθία

εισόδου. Έτσι ο επόμενος χαρακτήρας που θα διαβάσει ο εισόδου. Έτσι ο επόμενος χαρακτήρας που θα διαβάσει ο λεξικογραφικός αναλυτής θα είναι ο λεξικογραφικός αναλυτής θα είναι ο cc

Slide 18 / 26

Page 19: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Κανόνων - ΠαραδείγματαΤμήμα Κανόνων - Παραδείγματα

Κανόνες χωρίς Κανόνες χωρίς conditioncondition

Κανόνες με Κανόνες με conditioncondition

Slide 19 / 26

Page 20: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Τμήμα Κώδικα ΧρήστηΤμήμα Κώδικα Χρήστη

Το τμήμα κώδικα χρήστη είναι προαιρετικό και όταν Το τμήμα κώδικα χρήστη είναι προαιρετικό και όταν παραλειφθεί μπορεί να παραλειφθεί και το δεύτερο παραλειφθεί μπορεί να παραλειφθεί και το δεύτερο σύμβολοσύμβολο “%%” “%%”

Σκοπός του είναι μόνο η εύκολη και άμεση προσθήκη Σκοπός του είναι μόνο η εύκολη και άμεση προσθήκη υλοποιήσεων των συναρτήσεων που χρησιμοποιούνται υλοποιήσεων των συναρτήσεων που χρησιμοποιούνται από τον παραγόμενο λεξικογραφικό αναλυτήαπό τον παραγόμενο λεξικογραφικό αναλυτή

Ό,τι προστίθεται σε αυτό το τμήμα αντιγράφεται χωρίς Ό,τι προστίθεται σε αυτό το τμήμα αντιγράφεται χωρίς αλλαγές στο παραγόμενο αρχείο αλλαγές στο παραγόμενο αρχείο .c .c που περιέχει τον που περιέχει τον κώδικα του λεξικογραφικού αναλυτήκώδικα του λεξικογραφικού αναλυτή

Παράδειγμα:Παράδειγμα:

Slide 20 / 26

Page 21: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Ένας ολοκληρωμένος λεξικογραφικός Ένας ολοκληρωμένος λεξικογραφικός αναλυτήςαναλυτής

αρχείο αρχείο scanner.lscanner.l

Slide 21 / 26

Page 22: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Διαδικασία για την παραγωγή του τελικού Διαδικασία για την παραγωγή του τελικού προγράμματοςπρογράμματος

scanner.lscanner.lMeta compiler

για λεξικογραφικούςαναλυτές (flex/lex)

scanner.cscanner.c

C/C++ Compilerεκτελέσιμο:εκτελέσιμο:scannerscanner

βιβλιοθήκες

Slide 22 / 26

Page 23: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Είσοδος από Είσοδος από cc stringsstrings και και char bufferschar buffers (1/3) (1/3)

Ο παραγόμενος λεξικογραφικός αναλυτήςΟ παραγόμενος λεξικογραφικός αναλυτής, , διαβάζει την διαβάζει την ακολουθία χαρακτήρων εξ’ ορισμού από το ακολουθία χαρακτήρων εξ’ ορισμού από το globalglobal global global FILE* pointer FILE* pointer με όνομα με όνομα “yyin” (“yyin” (και μπορούμε να τον και μπορούμε να τον «κατευθύνουμε» όπως φαίνεται στη«κατευθύνουμε» όπως φαίνεται στη main() main() που είδαμε που είδαμε πιο πρινπιο πριν))

Πολλές φορές όμως δε θέλουμε να διαβάζουμε την Πολλές φορές όμως δε θέλουμε να διαβάζουμε την ακολουθία χαρακτήρων προς επεξεργασία από αρχεία ακολουθία χαρακτήρων προς επεξεργασία από αρχεία (FILE* pointers)(FILE* pointers) Θέλουμε να διαβάσουμε χαρακτήρες από το δίκτυοΘέλουμε να διαβάσουμε χαρακτήρες από το δίκτυο Θέλουμε να διαβάσουμε χαρακτήρεςΘέλουμε να διαβάσουμε χαρακτήρες πουπου υπάρχουν σε υπάρχουν σε memory memory

buffersbuffers Ο Ο flex flex παρέχει συναρτήσεις με τις οποίες μπορούμε να παρέχει συναρτήσεις με τις οποίες μπορούμε να

τον βάλουμε να διαβάσει από μια ακολουθία από τον βάλουμε να διαβάσει από μια ακολουθία από χαρακτήρες που βρίσκονται στη μνήμηχαρακτήρες που βρίσκονται στη μνήμη (NULL terminated (NULL terminated char* pointers, buffers)char* pointers, buffers)

Slide 23 / 26

Page 24: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Είσοδος από Είσοδος από cc stringsstrings και και char bufferschar buffers (2/3) (2/3)

Αρχικά δημιουργούμε ένα Αρχικά δημιουργούμε ένα handle handle τύπου τύπου YY_BUFFER_STATEYY_BUFFER_STATE που θα περιέχει την είσοδο του που θα περιέχει την είσοδο του λεξικογραφικού αναλυτήλεξικογραφικού αναλυτή Χρησιμοποιούμε τη Χρησιμοποιούμε τη yy_scan_string(const char* str)yy_scan_string(const char* str) αν θέλουμε αν θέλουμε

να διαβάσουμε από να διαβάσουμε από ττοο string string strstr Χρησιμοποιούμε τη Χρησιμοποιούμε τη yy_scan_bytes(char* buffer, size_t size) yy_scan_bytes(char* buffer, size_t size)

αν θέλουμε να διαβάσουμε από ένα αν θέλουμε να διαβάσουμε από ένα buffer buffer μεγέθους μεγέθους sizesize Κατόπιν καλούμε κανονικά τη συνάρτηση Κατόπιν καλούμε κανονικά τη συνάρτηση yylex() yylex() για να για να

πραγματοποιηθεί η λεξικογραφική ανάλυσηπραγματοποιηθεί η λεξικογραφική ανάλυση Αφού έχει ολοκληρωθεί η λεξικογραφική ανάλυση, Αφού έχει ολοκληρωθεί η λεξικογραφική ανάλυση,

αποδεσμεύουμε τη μνήμη που αντιστοιχεί στο αποδεσμεύουμε τη μνήμη που αντιστοιχεί στο handle handle που που έχουμε κρατήσει καλώντας την έχουμε κρατήσει καλώντας την yy_delete_buffer(YY_BUFFER_STATE buffer)yy_delete_buffer(YY_BUFFER_STATE buffer)

Slide 24 / 26

Page 25: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

Είσοδος από Είσοδος από cc stringsstrings και και char bufferschar buffers (3/3) (3/3)

Συναρτήσεις γιαΣυναρτήσεις γιαείσοδο από είσοδο από stringsstringsκαι και buffersbuffers

Slide 25 / 26

Page 26: HY 340  : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

HY340, 2010 Α. Σαββίδης

ReferencesReferences

Flex Home PageFlex Home Pagehttp://www.gnu.org/software/flexhttp://www.gnu.org/software/flex

Flex ManualFlex Manualhttp://www.gnu.org/software/flex/manual/http://www.gnu.org/software/flex/manual/

Flex for WindowsFlex for Windows http://gnuwin32.sourceforge.net/packages/flex.htmhttp://gnuwin32.sourceforge.net/packages/flex.htm

Slide 26 / 26