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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μεταβλητές. Έστω η μεταβλητή

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

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

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

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

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

Εισαγωγή στην πληροφορική

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

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

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

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

Προγραμματισμός Ι. Θεματική ενότητα 8: Δημιουργία προγραμμάτων

Προγραμματισμός Υπολογιστών με C++

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

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

Επανάληψη για τις Τελικές εξετάσεις

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

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

Transcript:

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

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

Συνήθης λειτουργία του bison ÐåñéãñáöÞ ëåêôéêïý áíáëõôþ fle x Ëåêôéêüò áíáëõôþò óå C/C++ ÐåñéãñáöÞ óõíôáêôéêïý áíáëõôþ bis o n Óõíôáêôéêüò áíáëõôþò óå 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

Κανόνες γραµµατικής Γενική µορφή: αριστερό_µέλος: δεξιό_µέλος ; Το αριστερό µέλος είναι ένα µη τερµατικό σύµβολο. Το δεξιό µέλος µπορεί να περιέχει µηδέν ή περισσότερα τερµατικά και µη τερµατικά σύµβολα, π.χ. 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 e xa mple 1.ts t 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> %token<string> %type<number> TK_NUMCONST TK_STRCONST 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; }

Επίδειξη του παραδείγµατος > bison -d example2.y > flex example2.l > gcc -o example2 example2.tab.c lex.yy.c -lfl >./example2 < example1.tst e xa mple 1.ts t 5 +3 * 2 2 ^ 7 ^ 3 +5 * ( 3 +2 ) ^ 2 example 2 Ex p r e s s i o n ( 1 ) = 1 1 Ex p r e s s i o n ( 2 ) = 1. 7 9 1 8 e +1 0 3

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

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