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

Σχετικά έγγραφα
Υλοποίηση ΣΑ με το bison

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

Κεφάλαιο 2: Τυπικές γλώσσες. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος / 216

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

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

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

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

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

Κεφάλαιο 4: Συντακτική ανάλυση

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

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Λεκτική Ανάλυση. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

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

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

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

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

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

Επεξεργασία κειμένου και συμβολοσειρών σε C

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

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

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

ΚΑΝΟΝΙΣΜΟΣ (EE) 2019/1238 ΤΟΥ ΕΥΡΩΠΑΪΚΟΥ ΚΟΙΝΟΒΟΥΛΙΟΥ ΚΑΙ ΤΟΥ ΣΥΜΒΟΥΛΙΟΥ

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

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

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

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

Κεφάλαιο 2: Τυπικές γλώσσες

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

Διάλεξη 18η: Διαχείρηση Αρχείων

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

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

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

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

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

Ηλεκτρονικοί Υπολογιστές

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

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

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

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

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

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

TMHMA TEXNΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛ/ΝΙΩΝ Προγραμματισμός Ι ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ , Α ΕΞΑΜΗΝΟ Βασίλης Μποζαντζής. Βασίλης Μποζαντζής

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

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

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

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

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

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Διάλεξη 6: Δείκτες και Πίνακες

Χpήσιµες Βιβλιοθήκες της γλώσσας C

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

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

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

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

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

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

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Transcript:

(i) Μεταεργαλείο flex: γεννήτορας ΛΑ Είσοδος: μεταπρόγραμμα που περιγράφει τις λεκτικές μονάδες Έξοδος: πρόγραμμα σε C Η συνάρτηση yylex υλοποιεί το ΛΑ Επιστρέφει τον κωδικό της λεκτικής μονάδας που αναγνωρίστηκε, ή 0 στο τέλος της συμβολοσειράς εισόδου Τοποθετεί στη μεταβλητή yytext την αντίστοιχη ακολουθία χαρακτήρων (lexeme) Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 33 / 216

(ii) Δομή του μεταπρογράμματος Μέρος Α %% Μέρος Β %% Μέρος Γ Και τα τρία μέρη μπορούν να είναι κενά Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 34 / 216

(iii) Μέρος Α, περιέχει Σχόλια, όπως στη C Κώδικα C, μέσα σε %{ και %} Μνημονικά ονόματα ως συντομογραφίες κανονικών εκφράσεων Δηλώσεις αρχικών καταστάσεων Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 35 / 216

(iv) Μέρος Α, παράδειγμα %{ #define T_eof 0 #define T_id 1... #define T_while 52 void ERROR (const char msg []); %} L [A-Za-z] /* letters */ D [0-9] /* digits */ W [ \t\n] /* white space */ Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 36 / 216

(v) Μέρος Β, περιέχει κανόνες της μορφής κανονική έκφραση ενέργεια Κάθε ενέργεια είναι μια εντολή της C Λειτουργία: Διαβάζεται το μακρύτερο πρόθεμα της συμβολοσειράς εισόδου που μπορεί να αναγνωριστεί από κάποια κανονική έκφραση Εκτελείται η αντίστοιχη ενέργεια Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 37 / 216

(vi) Κανονικές εκφράσεις a Ο χαρακτήρας a.. Οποιοσδήποτε χαρακτήρας εκτός της αλλαγής γραμμής. Αν ένα από τα a, b, f, n, r, t, v ή 0, τότε όπως στη C, αλλιώς ο ίδιος ο χαρακτήρας. 123 Ο χαρακτήρας ASCII με οκταδική τιμή. x3f Ο χαρακτήρας ASCII με δεκαεξαδική τιμή F. abc Η συμβολοσειρά abc. [abc] Ένας από τους χαρακτήρες a, b ή c. [a-z] Ένας από τους χαρακτήρες a έως z. [ac-fs] Ένας από τους χαρακτήρες a, c έως f,ήs. [ˆa-z] Ένας από τους χαρακτήρες εκτός όσων ανήκουν στην περιοχή a έως z. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 38 / 216

(vii) Κανονικές εκφράσεις {name} * +? {7} {3,5} {4,} (συνέχεια) Η κανονική έκφραση με μνημονικό όνομα name. Η παράθεση των και. Η διάζευξη των και. Η κανονική έκφραση. Οι παρενθέσεις χρησιμοποιούνται για ομαδοποίηση. Η επαναλαμβάνεται μηδέν ή περισσότερες φορές. Η επαναλαμβάνεται μια ή περισσότερες φορές. Η είναι προαιρετική (επαναλαμβάνεται μηδέν ή μια φορά). Η επαναλαμβάνεται ακριβώς φορές. Η επαναλαμβάνεται από έως φορές. Η επαναλαμβάνεται ή περισσότερες φορές. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 39 / 216

(viii) Κανονικές εκφράσεις (συνέχεια) ˆ Η αλλά μόνο στην αρχή μιας γραμμής. $ Η αλλά μόνο στο τέλος μιας γραμμής. <<EOF>> Το τέλος του αρχείου εισόδου. / Η κανονική έκφραση αλλά μόνο αν ακολουθεί η κανονική έκφραση. < > <,, > <*> Η αλλά μόνο όταν η τρέχουσα αρχική κατάσταση είναι η. Η, αλλά μόνο όταν η τρέχουσα αρχική κατάσταση είναι μια από τις, ή. Η σε οποιαδήποτε αρχική κατάσταση. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 40 / 216

(ix) Μέρος Β, παράδειγμα and { return T_and; }... while { return T_while; } := { return T_assign; } : { return T_colon; } {L}({L} {D} _)* { return T_id; } {D}+(\.{D}*(e\-?{D}+)?)? { return T_const; } {W}+ { /* nothing */ } (* ([^*]+ \*+[^*)])*\*+ ) { /* nothing */ }. { ERROR( illegal token ); } Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 41 / 216

(x) Μέρος Γ, περιέχει κώδικα C Παράδειγμα void ERROR (const char msg []) { fprintf(stderr, ERROR: %s\n, msg); exit(1); } Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 42 / 216

(xi) Παράδειγμα int main () { int token; (συνέχεια) do { token = yylex(); printf( token=%d, lexeme=\ %s\ \n, token, yytext); } while (token!= T_eof); } return 0; Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 43 / 216

(xii) Παράδειγμα: Αρίθμηση γραμμών int lineno = 1; [ \t]+ { /* nothing */ } \n { lineno++; } void ERROR (const char msg []) { fprintf(stderr, ERROR, line %d: %s\n, lineno, msg); exit(1); } Πρόβλημα: Λάθος αρίθμηση σε σχόλια Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 44 / 216

(xiii) Αρχικές καταστάσεις Κοινές: %s Αποκλειστικές: %x Ενεργοί κανόνες σε κάποια κατάσταση Μετάβαση μεταξύ καταστάσεων: BEGIN(s) Αρχική κατάσταση κατά την έναρξη λειτουργίας του ΛΑ: INITIAL Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 45 / 216

(xiv) Παράδειγμα: Αρίθμηση γραμμών (διόρθωση) %x COMMENT (* { BEGIN(COMMENT); } <COMMENT> *) { BEGIN(INITIAL); } <COMMENT>\n { lineno++; } <COMMENT> * { /* nothing */ } <COMMENT>[^*\n]+ { /* nothing */ } Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 46 / 216