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

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

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

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

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

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

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

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

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

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

Συντακτική ανάλυση. Μεταγλωττιστές. (μέρος 1ον) Νίκος Παπασπύου, Κωστής Σαγώνας

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στην γλώσσα προγραμματισμού C

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

Στοιχεία και έγγραφα που απαιτούνται για την εγγραφή στο ΓΕΜΗ

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

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

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

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

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

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

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

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

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

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

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΕΡΙΦΕΡΕΙΑ ΗΠΕΙΡΟΥ ΔΗΜΟΣ ΙΩΑΝΝΙΤΩΝ Δ/ΝΣΗ ΤΕΧΝΙΚΩΝ ΥΠΗΡΕΣΙΩΝ. Προμήθεια συστήματος υπόγειας αποθήκευσης απορριμμάτων

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

ιαφάνειες παρουσίασης #6 (β)

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

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

15PROC

Προγραμματική Περίοδος

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

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

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

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

ΙΑΓΡΑΜΜΑ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

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

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

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

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

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

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

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

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

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

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

πρακτικού συνεδριάσεως ιοικητικού ΗΜΟΣ ΠΑΤΜΟΥ

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

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

ΕΠΛ232: Εργαστήριο 2

Συναρτήσεις. Εισαγωγή

Διάλεξη 22η: Επιπλέον στοιχεία της C

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

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

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

Προγραμματισμός Συστημάτων

Προαιρετική Εργασία στο μάθημα Σχεδίαση Γλωσσών και Μεταγλωττιστών

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

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

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

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

PECOS4SMEs Δξσηεκαηνιόγην Καηαλαισηώλ

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

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

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

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

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

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

Transcript:

(i) 69 / 216 Μεταεργαλείο bison: γεννήτορας ΣΑ LALR(1) Είσοδος: μεταπρόγραμμα που περιγράφει τη σύνταξη και τις σημασιολογικές ρουτίνες Έξοδος: πρόγραμμα σε C Η συνάρτηση yyparse υλοποιεί το ΣΑ Επιστρέφει 0 αν αναγνωριστεί η συμβολοσειρά εισόδου ή 1 σε περίπτωση συντακτικού σφάλματος Συνεργάζεται με το λεκτικό αναλυτή (συνάρτηση yylex)

(ii) 70 / 216 Δομή του μεταπρογράμματος Μέρος Α %% Μέρος Β %% Μέρος Γ Και τα τρία μέρη μπορούν να είναι κενά

(iii) 71 / 216 Μέρος Α, περιέχει Σχόλια, όπως στη C Κώδικα C, μέσα σε %{ και %} Δηλώσεις λεκτικών μονάδων Δηλώσεις τελεστών της αρχικής γλώσσας (προτεραιότητα, προσεταιριστικότητα) Δήλωση του συνόλου σημασιολογικών τιμών (τύπος YYSTYPE ή με χρήση του %union) Δήλωση του τύπου της σημασιολογικής τιμής κάθε συμβόλου

(iv) 72 / 216 Μέρος Α, παράδειγμα %{ void ERROR (const char msg []); %} %token T_program program %token T_div T_mod %token T_if T_then T_else %nonassoc = < > %left + - %left * / T_div T_mod

(v) 73 / 216 Μέρος Α, παράδειγμα (συνέχεια) %union{ int i; double f; char str[80]; } %token<str> T_id %token<i> T_int_const %token<f> T_float_const %type<f> expression

(vi) 74 / 216 Μέρος Β, περιέχει: τους κανόνες παραγωγής σε μορφή BNF σημασιολογικές ρουτίνες που εκτελούνται κατά τη συντακτική ανάλυση Οι κανόνες έχουν τη μορφή: : ;

(vii) 75 / 216 Μέρος Β, παράδειγμα program : { count=0; } block_list { printf( Counted %d block(s)\n, count); } ; block_list : /* nothing */ block_list block { count++; } ; block : begin block_list end ;

(viii) 76 / 216 Μέρος Γ, περιέχει κώδικα C Το μεταπρόγραμμα του bison αναλαμβάνει τον κεντρικό έλεγχο του μεταγλωττιστή που επιτυγχάνεται με τη συνεργασία των παρακάτω: του λεκτικού αναλυτή του συντακτικού αναλυτή του πίνακα συμβόλων του σημασιολογικού αναλυτή του γεννήτορα ενδιάμεσου κώδικα

(ix) 77 / 216 Μέρος Γ, παράδειγμα void yyerror (const char * msg) { fprintf(stderr, syntax error in line %d: %s\n, linecount, msg); exit(1); } int main () { return yyparse(); }

78 / 216 (x) Παράδειγμα με σημασιολογικές τιμές E T E E + T T F T T * F F ( E ) F num Ζητούμενο: να κατασκευαστεί ΣΑ που να υπολογίζει την τιμή μιας αριθμητικής έκφρασης

(xi) 79 / 216 Παράδειγμα (συνέχεια) %{ typedef int YYSTYPE; %} %token T_num %% program : expression { printf( Value: %d\n, $1); } ;

(xii) 80 / 216 Παράδειγμα (συνέχεια) expression : term { $$ = $1; } expression + term { $$ = $1 + $3; } ; term : factor { $$ = $1; } term * factor { $$ = $1 * $3; } ;

(xiii) 81 / 216 Παράδειγμα (συνέχεια) factor : ( expression ) { $$ = $2; } T_num { $$ = $1; } ; %% Παραλείπονται στο Μέρος Γ: η συνάρτηση yylex (πιθανώς σε ξεχωριστό αρχείο, αν χρησιμοποιηθεί το flex) οι συναρτήσεις yyerror και main

(xiv) 82 / 216 Παράδειγμα Υλοποίηση ΛΑ χειρωνακτικά int yylex () { int c; while (isspace(c = fgetc(stdin))); if (isdigit(c)) { yylval = c - 0 ; while (isdigit(c = fgetc(stdin))) yylval = yylval * 10 + c - 0 ; ungetc(c, stdin); return T_num; } Στο μέρος Γ

(xv) 83 / 216 Παράδειγμα (συνέχεια) } if (strchr( +*(), c)) return c; if (c!= EOF) fprintf(stderr, Illegal character: %c\n, c); return 0; Αυτοματοποίηση της μεταγλώττισης του ΣΑ mytest1: mytest1.y bison mytest1.y gcc -o mytest1 mytest1.tab.c Makefile

(xvi) 84 / 216 Παράδειγμα Υλοποίηση ΛΑ με το flex %{ #include mytest2.tab.h %} %% [0-9]+ { yylval = atoi(yytext); return T_num; } \( \) \+ \* { return yytext[0]; } [ \t\n]+ { /* nothing */ }. { yyerror( illegal character ); } %% mytest2.l

(xvii) 85 / 216 Αυτοματοποίηση της μεταγλώττισης ΛΑ και ΣΑ mytest2: mytest2.l mytest2.y bison -d mytest2.y flex -s mytest2.l gcc -o mytest2 mytest2.tab.c lex.yy.c \ -lfl Επίλυση συγκρούσεων στο bison shift-reduce: πάντα shift reduce-reduce: ο πρώτος κανόνας Makefile