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

Σχετικά έγγραφα
Παρουσίαση του εργαλείου BISON

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

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

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

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

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

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

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

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

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

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

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

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

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

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

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

Το μεταεργαλείο yacc. Διαδικασία χρήσης. Αρχείο εισόδου

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

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

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

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

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

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

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

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

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

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

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

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

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

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

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

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Λογισμικό Συστήματος. Κλειώ Σγουροπούλου

3. Εκφράσεις και έλεγχος ροής

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

Σύνταξη & Συντακτική Ανάλυση

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009

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

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

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

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

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

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

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

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

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση

Η τιµή εξόδου κάποιας συνάρτησης µπορεί να είναι δείκτης, π.χ.

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

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

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

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

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

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαµήνου: Υλοποίηση ενός Μεταγλωττιστή για τη γλώσσα προγραµµατισµού Robin

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

Ποιές οι θεµελιώδεις δυνατότητες και ποιοί οι εγγενείς περιορισµοί των υπολογιστών ; Τί µπορούµε και τί δε µπορούµε να υπολογίσουµε (και γιατί);

Στοιχεία Θεωρίας Υπολογισµού (1): Τυπικές Γλώσσες, Γραµµατικές

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

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

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

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

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

Κεφάλαιο : Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Περιεχόμενα. Πρόλογος... 21

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

οµές Επιλογής Εντολές if και switch

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Εισαγωγή στον δομημένο προγραμματισμό

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

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

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

Σύνταξη & Συντακτική Ανάλυση

Transcript:

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

Χαρακτηριστικά του bison Γεννήτρια συντακτικών αναλυτών σε C/C++. Συµβατό µε το εργαλείο του Unixyacc. Σχετικά εύκολο στη χρήση. Υψηλές επιδόσεις. υνατότητα δηµιουργίας συντακτικών αναλυτών από γραµµατικές χωρίς συµφραζόµενα (context free) τύπου LALR(1). υνατότητα περιγραφής σηµασιολογίας.

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

Μορφή αρχείου περιγραφής %{ ηλώσεις C/C++ %} ηλώσεις bison %% Κανόνες γραµµατικής %% Επιπρόσθετος κώδικας C/C++

ηλώσεις bison ηλώσεις τερµατικών συµβόλων, π.χ. %token TK_void %token TK_PLUS 43 ήλωση αρχικού συµβόλου %start program ηλώσεις προτεραιότητας και προσεταιριστικότητα τελεστών, π.χ. %left TK_PLUS TK_MINUS %left TK_TIMES TK_DIV TK_MOD %right TK_EXPON %nonassoc TK_EQ

Κανόνες γραµµατικής Γενική µορφή: αριστερό_µέλος: δεξιό_µέλος ; Το αριστερό µέλος είναι ένα µη τερµατικό σύµβολο. Το δεξιό µέλος µπορεί να περιέχει µηδέν ή περισσότερα τερµατικά και µη τερµατικά σύµβολα, π.χ. expression: term TK_PLUS expression ;

Κανόνες γραµµατικής Επίσης µπορούν να δίνονται σηµασιολογικές ρουτίνες. Ιδιαίτερα χρήσιµες είναι αυτές στο τέλος ενός δεξιού µέλους, π.χ. statement: TK_STOP { } printf("stop requested.\n"); exit(0);

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

Ένα απλό παράδειγµα %token TK_NUM %left '+' %left '*' %right '^' %% input: /* empty */ '\n' input expression '\n' input ; expression: TK_NUM '(' expression ')' expression '+' expression expression '*' expression expression '^' expression ; %%

int main () { if (yyparse() == 0) printf("accepted\n"); else printf("rejected\n"); return 0; } int yylex () {... if (isdigit(ch)) {... return TK_NUM; } else if (strchr("\n+*^()", ch)!= NULL) return ch; else... }

Επίδειξη του παραδείγµατος > bison -o example1.c example1.y > gcc -o example1 example1.c > example1 < example1.tst example1.tst 5+3*2 2^ 7^ 3+5*( 3+2) ^ 2 example1 Ac c e pt e d

Σηµασιολογία Σε κάθε σύµβολο της γραµµατικής µπορεί να αποδοθεί µια σηµασιολογική τιµή. Ο τύπος των σηµασιολογικών τιµών καθορίζεται από το macro YYSTYPE, π.χ. #define YYSTYPE double Οι σηµασιολογικές τιµές µπορούν να είναι διαφορετικού τύπου για διαφορετικά σύµβολα. Οι τύποι αυτοί δε δηλώνονται µε ορισµό του YYSTYPE, αλλά στο πρώτο µέρος ως εξής: %union{ double number; char * string; }

Σηµασιολογία Ο τύπος των συµβόλων καθορίζεται επίσης στο πρώτο µέρος της περιγραφής µε δηλώσεις όπως: %token<number> TK_NUMCONST %token<string> TK_STRCONST %type<number> expression Το σύµβολο $$ στη σηµασιολογική ρουτίνα ενός κανόνα παριστάνει την σηµασιολογική τιµή του αριστερού µέλους του κανόνα. Το σύµβολα $n, όπου n θετικός ακέραιος αριθµός, παριστάνει τη σηµασιολογική τιµή του n-οστού συµβόλου του δεξιού µέλους του κανόνα. Το πρώτο σύµβολο αντιστοιχεί στο $1, κ.ο.κ. Οι σηµασιολογικές τιµές των τερµατικών συµβόλων συνήθως καθορίζονται από το λεκτικό αναλυτή και τοποθετούνται στη µεταβλητή yylval.

Ένα πιο σύνθετο παράδειγµα (αρχείο flex) %{ #include <math.h> #include "example2.tab.h" %} digit [0-9] %% [ \t]+ { /* nothing */} \n{ return '\n'; } \+{ return '+'; } \*{ return '*'; } \^{ return '^'; } \({ return '('; } \){ return ')'; } {digit}+(\.{digit}+)?([ee](\+ \-)?{digit}+)? { yylval = atof(yytext); return TK_NUM; }

Ένα πιο σύνθετο παράδειγµα (αρχείο bison - 1) %{ %} #include <math.h> #define YYSTYPE double int count = 0; %token TK_NUM %left '+' %left '*' %right '^ %%

Ένα πιο σύνθετο παράδειγµα (αρχείο bison - 1) input: /*empty*/ input '\n' input expression '\n' { printf("expression(%d) = %lg\n", ++count, $2); } ; expression: TK_NUM {$$ = $1;} '(' expression ') {$$ = $2;} expression '+' expression {$$ = $1 + $3;} expression '*' expression {$$ = $1 * $3;} expression '^' expression {$$ = pow($1, $3);} ;

Ένα πιο σύνθετο παράδειγµα (αρχείο bison - 1) %% int main () { yyparse(); return 0; } yyerror (s) char *s; { printf("line %d: %s\n", count, s); }

Επίδειξη του παραδείγµατος > bison -o example2.c -d example2.y > flex example2.l > gcc -o example2 example2.c lex.yy.c -lfl > example2 < example1.tst example1.tst 5+3*2 2^ 7^ 3+5*( 3+2) ^ 2 example2 Expr e s s i on( 1) = 11 Expr e s s i on( 2) = 1. 7918e +103

Κυριότερες συναρτήσεις του παραγόµενου συντακτικού Σύµβολο int yyparse() int yylex() void yyerror(s) const char *s αναλυτή Περιγραφή Η κύρια συνάρτηση του συντακτικού αναλυτή, που παράγεται βάσει της περιγραφής. Επιστρέφει 0 αν η συντακτική ανάλυση τελειώσει χωρίς σφάλµατα, 1 αν βρέθηκαν συντακτικά σφάλµατα. Η κύρια συνάρτηση του λεκτικού αναλυτή που πρέπει να δίνεται από το χρήστη. Επιστρέφει έναν ακέραιο αριθµό, που αντιστοιχεί σε ένα τερµατικό σύµβολο. Η συνάρτηση χειρισµού σφαλµάτων που πρέπει να δίνεται από το χρήστη. Η συµβολοσειρά s περιέχει το µήνυµα σφάλµατος που παρουσιάστηκε.

Σύµβολο Τύπος ΥΥSTYPE YYSTYPE yylval Περιγραφή Ο τύπος της σηµασιολογικής τιµής των συµβόλων. Η µεταβλητή όπου η συνάρτηση yylex() πρέπει να τοποθετεί τις σηµασιολογικές τιµές των τερµατικών συµβόλων.