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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Υλοποίηση ΣΑ με το bison

Υλοποίηση ΣΑ με το bison

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

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

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

Εργαστήριο 08 Δημιουργία 1 ου Συντακτικού Αναλυτή

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

Συναρτήσεις και διαδικασίες

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

Εργασία Προγραµµατισµού

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

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

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

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

Βασικές Αρχές Προγραμματισμού

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Εργασία Προγραµµατισµού

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

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Τύποι Δεδομένων Είσοδος/Έξοδος

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Διαδικασιακός Προγραμματισμός

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

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

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

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

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

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Λεκτική Ανάλυση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Πρόλογος. if (παράσταση) εντολή1 else εντολή2. Από εδώ και πέρα θα αναφέρεται ως K&R.

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχανικών & Μηχανικών Υπολογιστών Τομέας Πληροφορικής

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

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

είκτες και Πίνακες (2)

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

Επανάληψη. Εντολές while, for, do-while

B. Ενσωμάτωση Ιθαγενών Μεθόδων

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

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

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

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

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

Διαδικασιακός Προγραμματισμός

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

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

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

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

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

Γλώσσα Προγραμματισμού C

Transcript:

Παρουσίαση του εργαλείου FLEX Γεννήτρια Λεκτικών Αναλυτών Α Φάση Λεκτική Ανάλυση

Χαρακτηριστικά του flex Γεννήτρια λεκτικών αναλυτών σε C/C++ (fast lexical analyzer generator). Βασισµένο στο εργαλείο του Unix lex. Σχετικά εύκολο στη χρήση. Υψηλές επιδόσεις. Μεγάλη ευελιξία και εκφραστικότητα. Συνεργασία µε γεννήτριες συντακτικών αναλυτών.

Συνήθης λειτουργία του flex Περιγραφή λεκτικού αναλυτή flex Λεκτικός αναλυτής σε C/C++ Βιβλιοθήκη -lfl Μεταγλωττιστής C/C++ Κατασκευή λεκτικού αναλυτή Χρήση λεκτικού αναλυτή Αρχικό πρόγραµµα Λεκτικός αναλυτής Λεκτικές µονάδες

Μορφή αρχείου περιγραφής Μέρος Α %% Μέρος Β %% Μέρος Γ

Περιγραφή µέρους Α Σχόλια ανάµεσα σε /* και */ Κώδικας C/C++ που θα ενσωµατωθεί όπως είναι, ανάµεσα σε %{ και %}, π.χ. %{ #include <math.h> #define TK_EOF 0 #define TK_ID 1 int linecount = 0; %}

Περιγραφή µέρους Α Ορισµοί µνηµονικών ονοµάτων για οικογένειες χαρακτήρων ή κανονικές εκφράσεις, π.χ. letter [A-Za-z] digit [0-9] identifier {letter}({letter} {digit})* Ορισµοί αρχικών καταστάσεων. Οδηγίες προς το flex, π.χ. %option noyywrap

Περιγραφή µέρους Β Περιέχει κανόνες της µορφής: κανονική-έκφραση ενέργεια εν µπορούν να παρεµβάλλονται σχόλια. Η σύνταξη είναι αυστηρή και µικρές απροσεξίες καταλήγουν σε διαφορετικά αποτελέσµατα.

Περιγραφή µέρους Β Κώδικας C/C++ ανάµεσα σε %{ και %} στην αρχή του µέρους Β χρησιµεύει για τη δήλωση τοπικών µεταβλητών στη συνάρτηση του λεκτικού αναλυτή yylex(). Default κανόνας ισχύει ακόµη κι αν δεν υπάρχει κανείς άλλος.

Περιγραφή µέρους Γ Προαιρετικό (όπως και ο διαχωριστής %%). Περιέχει κώδικα C/C++ που ενσωµατώνεται όπως είναι. Χρησιµεύει συνήθως για τον ορισµό βοηθητικών συναρτήσεων που πρέπει να καλούνται από το λεκτικό αναλυτή (στις ενέργειες του µέρους Β).

Κανονικές εκφράσεις 1 Έκφραση Ταιριάζει µε (matches) x το χαρακτήρα x \x αν x είναι ένας από τους χαρακτήρες a, b, f, n, r, t, v, την ANSI ερµηνεία του, αλλιώς τον ίδιο το χαρακτήρα x (χρησιµοποιείται για τους ειδικούς χαρακτήρες) \123 το χαρακτήρα µε οκταδική τιµή 123 \x2a το χαρακτήρα µε δεκαεξαδική τιµή 2a. Οποιονδήποτε χαρακτήρα εκτός του (new line). [xyz] έναν από τους χαρακτήρες x, y, z. (κλάση χαρακτήρων) [abm-sx] έναν από τους χαρακτήρες a, b, m ως s, x.(εµβέλεια m s) [^A-Z] Οποιονδήποτε χαρακτήρα εκτός από τους A ως Z. Συµπεριλαµβανοµένου και του \n.

Κανονικές εκφράσεις 2 Έκφραση Ταιριάζει µε (matches) r* καµιά ή περισσότερες εµφανίσεις της κανονικής έκφρασης r r+ µια ή περισσότερες εµφανίσεις της κανονικής έκφρασης r r? καµιά ή µια εµφάνιση της κανονικής έκφρασης r (προαιρετικά r) r{2,5} 2 µέχρι 5 εµφανίσεις της κανονικής έκφρασης r. r{2,} 2 ή περισσότερες εµφανίσεις της κανονικής έκφρασης r. r{2} 2 ακριβώς εµφανίσεις της κανονικής έκφρασης r. {name} την επέκταση του µνηµονικού ονόµατος name όπως αυτό ορίζεται στο µέρος Α. "[ab]\"c" τη συµβολοσειρά [ab]"c (r) την κανονική έκφραση r (παράκαµψη προτεραιότητας).

Κανονικές εκφράσεις 3 Έκφραση Ταιριάζει µε (matches) r s την κανονική έκφραση r ή την s rs Την κανονική έκφραση r ακολουθούµενη από την κανοκή έκφραση s (παράθεση). r/s την κανονική έκφραση r αλλά µόνο όταν ακολουθείται από την κανονική έκφραση s (η οποία δε διαβάζεται στη µεταβλητή yytext). ^r την κανονική έκφραση r αλλά µόνο στην αρχή µιας γραµµής. r$ την κανονική έκφραση r αλλά µόνο στο τέλος µιας γραµµής. <s>r την κανονική έκφραση r αλλά µόνο µε αρχική κατάσταση s. <s1,s2>r την κανονική έκφραση r αλλά µόνο µε αρχική κατάσταση s1 ή s2. <*>r την κανονική έκφραση r µε οποιαδήποτε αρχική κατάσταση. <<EOF>> το τέλος του αρχείου. <s1,s2><<eof>> το τέλος του αρχείου αλλά µόνο µε αρχική κατάσταση s1 ή s2.

Ειδικές ενέργειες Ενέργεια ECHO REJECT Σηµασιολογία Εκτυπώνει το τµήµα του αρχείου εισόδου που αναγνωρίστηκε. Απορρίπτει την αναγνώριση που συνέβη και προχωράει στην αµέσως επόµενη δυνατή αναγνώριση.

Ένα απλό παράδειγµα %{ %} #define TK_EOF 0 #define TK_ID 1 #define TK_INT 2 #define TK_FLOAT 3 #define TK_ASSGN 4 white [ \n\t] letter [A-Za-z] digit [0-9] dot [\.] sign [\+\-] exp [Ee]{sign}?{digit}{1,3} %%

{white}* { /* nothing */ } {letter}({letter} {digit})* { return TK_ID; } ":=" { return TK_ASSGN; } {sign}?{digit}+ { return TK_INT; } {sign}?{digit}+{dot}{digit}*{exp}? {sign}?{digit}*{dot}{digit}+{exp}? { return TK_FLOAT; } %% int main () { int token; } while ((token = yylex())!= TK_EOF) printf("token %d: %s\n", token, yytext);

Επίδειξη του παραδείγµατος > flex example1.l > gcc -o example1 lex.yy.c -lfl > example1 < example1.tst example1.tst i : = 0 a bc : = - 5 e 10 : = 0. 1 i 4i : = - 6. 3e - 4 j j 1 : = 4. e +2 123 : =. 1e - 198 example1 Toke n 1: i Toke n 4: : = Toke n 2: 0 Toke n 1: a bc Toke n 4: : = Toke n 2: - 5 Toke n 1: e 10 Toke n 4: : = Toke n 3: 0. 1 Toke n 1: i 4i Toke n 4: : = Toke n 3: - 6. 3e - 4 Toke n 1: j j 1 Toke n 4: : = Toke n 3: 4. e +2 Toke n 2: 123 Toke n 4: : = Toke n 3:. 1e - 198

Περισσότερες πληροφορίες και τεκµηρίωση του flex Για περισσότερες πληροφορίες σχετικά µε το flex χρήστης παραπέµπεται στo manual που βρίσκεται στην ιστοσελίδα του µαθήµατος: http://www.intelligence.tuc.gr/~theory/

Μεταβλητές και συναρτήσεις του λεκτικού αναλυτή Σύµβολο Περιγραφή int yylex() char * yytext int yyleng void yymore() void yyless(n) int n; FILE * yyin FILE * yyout void yyrestart(f) FILE * f; int input() void unput(c) char c; Macro yyterminate() int yywrap() Η κύρια συνάρτηση του λεκτικού αναλυτή που παράγεται βάσει του αρχείου περιγραφής. Επιστρέφει έναν ακέραιο αριθµό, που συνήθως αντιστοιχεί σε µια λεκτική µονάδα. Περιέχει το τµήµα του αρχείου εισόδου που αναγνωρίστηκε κατά την τελευταία κλήση της yylex. Περιέχει το πλήθος των χαρακτήρων που περιέχονται στο yytext. ιατηρεί το yytext µεταξύ διαδοχικών κλήσεων της yylex. ιατηρεί στο yytext τους αρχικούς n χαρακτήρες και επιστρέφει τους υπόλοιπους στο αρχείο εισόδου. Το τρέχον αρχείο εισόδου. Το τρέχον αρχείο εξόδου. Χρησιµοποιεί ως τρέχον αρχείο εισόδου το f. ιαβάζει ένα χαρακτήρα από το τρέχον αρχείο εισόδου. Επιστρέφει το χαρακτήρα c στο τρέχον αρχείο εισόδου. Τερµατίζει τη λειτουργία της συνάρτησης yylex επιστρέφοντας 0. Καλείται κάθε φορά που συναντάται τέλος αρχείου. Αν επιστραφεί 1, η λεκτική ανάλυση τερµατίζεται, ενώ αν επιστραφεί 0 συνεχίζει.

Αρχικές καταστάσεις Επιτρέπουν τον ορισµό ειδικής συµπεριφοράς, ανάλογα µε το τι έχει προηγηθεί κατά την αναγνώριση του αρχείου εισόδου. ιακρίνονται σε εγκλειστικές (inclusive) %s και αποκλειστικές (exclusive) %x. ηλώνονται στο µέρος Α, µε τις οδηγίες: %s SPECIAL %x COMMENTS

Αρχικές καταστάσεις Στην πραγµατικότητα δεν πρόκειται για ονόµατα αλλά για macros που αντιστοιχούν σε ακέραιες τιµές. Η αρχική κατάσταση ονοµάζεται INITIAL και αντιστοιχεί στην τιµή 0. Η τρέχουσα κατάσταση είναι γνωστή µέσω του macro YY_START. Η τρέχουσα κατάσταση µπορεί να αλλάξει µε την εκτέλεση του macro BEGIN(SPECIAL). Κανόνες που εξαρτώνται από την τρέχουσα κατάσταση: <SPECIAL>[A-Za-z]+ { ECHO; } ιαφορά εγκλειστικών αποκλειστικών καταστάσεων.