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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

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

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

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

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

ΚΕΦΑΛΑΙΟ 6: Γλώσσες. 6.1 Ιστορική εξέλιξη 6.4 Υλοποίηση γλώσσας. Κεφάλαιο 6: «Γλώσσες Προγραµµατισµού»

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

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

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

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

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

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

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

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

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

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

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

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

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

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

Σχεδίαση Γλωσσών Προγραμματισμού Συντακτική Ανάλυση ΙII. Εαρινό Εξάμηνο Lec 11 26/03/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

Θέματα Μεταγλωττιστών

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

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

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

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

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Υπολογισμός - Εντολές Ελέγχου

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

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

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

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

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Transcript:

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

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

Παράδειγμα Είναι ουσιαστικά η διαδικασία κατά την οποία αναλύεται μία σειρά από tokens ώστε να καθορίσει την δομή της γραμματικής. Τα συντακτικά λάθη προσδιορίζονται σε αυτό το στάδιο. Lex Foo Token type Variable = Assignment operator 1 Number - Subtraction operator 3 Number ** Power operator 2 Number

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

Τι κάνει το bison Εργαλείο παραγωγής συντακτικού αναλυτή. Default LALR(1) γραμματικές. Περιέχει σημασιολογικές ρουτίνες. Παράγει ένα C αρχείο από ένα.y αρχείο που κατασκευάζουμε εμείς. Συνοπτικά χρησιμοποιείται για: Αναγνώριση ή απόρριψη συμβολοσειρών της γλώσσας. Την παραγωγή ενδιάμεσου κώδικα. Την παραγωγή δένδρου συντακτικής ανάλυσης.

Bison Μετά-εργαλείο παραγωγή συντακτικών αναλυτών. Open-source. Linux OS. Download address: http://www.gnu.org/software/bison Windows OS. Διατίθεται μαζί με το περιβάλλον του Cygwin http://www.cygwin.com

Δομή Αρχείου Εισόδου Το Bison λαμβάνει ως είσοδο ένα μοναδικό αρχείο προγράμματος με κατάληξη.y που αποτελείται από 3 μέρη(όπως και το flex). Ορισμοί. Κανόνες. Συναρτήσεις. Δομή: /*Statements block*/ %% /*Rules block*/ %% /*User Functions*/

Επιλογές του εργαλείου. Τμήμα Ορισμών Δηλώσεις τερματικών συμβόλων. %token. Δηλώσεις προτεραιότητας και προσεταιριστικότητας τελεστών. %left, %right, %nonassoc. Δήλωση του YYSTYPE. Δηλώσεις των τύπων των μη τερματικών συμβόλων. %type<type_val>, η type_val δηλώνετε στο union YYSTYPE. Literal block- περικλείεται εντός %{ %} και περιλαμβάνει C κώδικα.

Δήλωση τερματικών: Τμήμα Ορισμών Μόνο κωδικοποιημένες λεκτικές μονάδων. Στην περίπτωση που έχουν δηλωθεί οι λεκτικές μονάδες στο flex(με defines) πρέπει να τις μεταφέρουμε στο bison χωρίς των κωδικό τους. Προσεταιριστικότητες: %nonassoc: καμία προσεταιριστικότητα. %left: αριστερή προσεταιριστικότητα. %right: δεξιά προσεταιριστικότητα. Η προτεραιότητα καθορίζεται από τη σειρά που δηλώνουμε τις προσεταιριστικότητες με την πρώτη να έχει την μικρότερη σημασία. Δήλωση αρχικού συμβόλου: %start symbol_name

Τμήμα κανόνων Περιλαμβάνει τους κανόνες της γραμματικής της γλώσσας σε μορφή BNF. Μορφή: rule {C code}; Παράδειγμα Date: month SPACE day SPACE year {printf( date found );} Ο κώδικας των ενεργειών εκτελείται όταν ο αναλυτής φθάσει σε εκείνο το σημείο της γραμματικής. Περιέχονται σημασιολογικές ρουτίνες γραμμένες σε C

Τμήμα Συναρτήσεων Χρήστη Περιλαμβάνει τις οριζόμενες από τον χρήστη συναρτήσεις. Αντιγράφεται αυτούσιο στο παραγόμενο αρχείο. Παραδείγματα: main() void yyerror(const char *message) Άλλες συναρτήσεις σημασιολογικής ανάλυσης.

Χρήσιμες Συναρτήσεις και Μεταβλητές int yypasre() Υλοποιεί τον συντακτικό αναλυτή. Επιστρέφει 1 εάν υπάρξει συντακτικό σφάλμα και 0 αλλιώς void yyerror(cosnt char* message) Πρέπει να υλοποιηθεί υποχρεωτικά. Καλείται αυτόματα σε περίπτωση συντακτικού λάθους. yyerror( An error occured ); YYSTYPE yylval Μεταβλητή για την επικοινωνία λεκτικού-συντακτικού. Περιέχει την σημασιολογική τιμή της λεκτικής μονάδας. Παράδειγμα ορισμού τύπου yylval typedef int YYSTYPE; (στο πρώτο μέρος). yyloc: Μεταβλητή που αποθηκεύτεται η θέση κάθε συμβόλου.

Κανόνες Γραμματική Bison set κανόνων. To LHS έχει ένα μη τερματικό σύμβολο της γραμματικής. Το RHS μπορεί να περιέχει τερματικά και μη τερματικά σύμβολα. Σε περίπτωση που αντιστοιχούν περισσότεροι από ένας κανόνες για το ίδιο LHS, χρησιμοποιούμε τον τελεστή. Για παραγωγή της κενής συμβολοσειράς ε, αφήνουμε κενό RHS.

Παραδείγματα Μπορούν να αντιστοιχούν περισσότερη κανόνες σε κάθε περίπτωση. Expression : expression OPER expression expression UNOPER expression; Παραγωγή κενής συμβολοσειράς Expession_list: general_expression ;

Κατηγορήματα Κάθε σύμβολο στο Bison συνοδεύεται και από μία τιμή. Δήλωση του τύπου του κατηγορήματος με χρήση %type για μη τερματικά σύμβολα. Kαι τα τερματικά σύμβολα έχουν τιμές. Οι τιμές των συντιθέμενων κατηγορημάτων Ν συμβόλων του RHS προσπελαύνονται μέσω των $1-$Ν. Ένα κατηγόρημα για κάθε σύμβολο. Τα κατηγορήματα του LHS προσπελαύνονται μέσω του $$.

Παραδείγματα Υπάρχει δυνατότητα για πρόσβαση και στα κληρονομούμενα κατηγορήματα. Πρόσβαση μέσω των $0,$-1. Παράδειγμα: Declaration : class type nanelist; class: GLOBAL {$$=1;} LOCAL {$$=2;} ; type: REAL {$$=1;} INTEGER {$$=2;} ; namelist : NAME {mksymbol($0,$-1,$1);} namelist NAME {mksymbol($0,$-1,$2);} ;

Συγκρούσεις Το Bison μπορεί να δημιουργεί LALR(1) συντακτικούς αναλυτές. Δεν μπορούν να χειριστούν διφορούμενες γραμματικές. Το Bison μπορεί Shift-Reduce collision -> Shift Reduce-Reduce -> Προτιμάται ο κανόνας που έχει γραφτεί πρώτος Ούτε γραμματικές που απαιτούν περισσότερα του ενός lookahead symbols. Χειροκίνητη επίλυση συγκρούσεων. Με την χρήση των δηλώσεων προτεραιότητας προσεταιριστικότητας.

Παράδειγμα: exp: exp + exp exp - exp exp * exp, Παράδειγμα Συγκρούσεων 3*4+5(3*4)+5 ή 3*(4+5)? Επίλυση με χρήση προτεραιότητας και προσαιτεριστικότητας. Χρήση των %left, %right, %nonassoc στις δηλώσεις του πρώτου μέρους. %left +, - %left *, / %right = Χρήση του %prec για την προτεραιότητα των κανόνων.

Κανόνας γραμματικής: Dangling Else stmt: IF cond stmt IF cond stmt ELSE stmt Μια δομή else αντιστοιχεί στην πιο κοντινή δομή if. Επιβολή αυτής της κατεύθυνσης στον ΣΑ. Τροποποίηση της γραμματικής Χρήση του THEN Χρήση ενός fake token

Επίλυση με fake token: Dangling Else %nonassoc LOWER_THAN_ELSE %nonassoc ELSE stmt : IF cond stmt %prec LOWER_THAN_ELSE IF cond stmt ELSE stmt

Ανάνηψη Λαθών Το Bison προσφέρει έναν αποδοτικό μηχανισμό για ανάνηψη από λάθη. Χρήση του ειδικού error token. Σύμβολα που ακολουθούν το error αποτελούν σημεία συγχρονισμού. Μόλις βρεθεί ένα λάθος, αφαίρεση συμβόλων από τη στοίβα. Μέχρι να μπορεί να εισαχθεί το σύμβολο error. Έπειτα, αναζητείται ένα σημείο συγχρονισμού και συνεχίζεται η κανονική διαδικασία ανάλυση.

Ανάνηψη Λαθών yyerrok: Επαναφέρει τον αναλυτή στην κανονική κατάσταση αναφοράς λαθών. yyerror(): Συνάρτηση εκτύπωσης μηνύματος σφάλματος. YYRECOVERING: Επιστρέφει μη μηδενική τιμή όταν ο αναλυτής βρίσκεται σε κατάσταση ανάνηψης από σφάλμα. yyclearin: Macro το οποίο αγνοεί το πιο πρόσφατο lookahead token. Χρησιμοποιείται κυρίως σε interactive ΣΑ.

Σημεία Συγχρονισμού Που τοποθετούνται τα error token? Tradeoff μεταξύ ακρίβειας και πλήθους συμβόλων που αγνοούνται. Καταλληλότερα τα σημεία όπου τερματίζονται λίστες εντολών. Παράδειγμα: loop_statement : DO ID ASSIGN iter_space body ENDDO DO error ENDDO {yyerrok;} ;

Compilation Όνομα αρχείου file_name.y Εντολές μεταγλώττισης bison v d file_name.y Παράγονται file_name.tab.c και file_name.tab.h Include στον λεκτικό αναλυτή. Compile του παραγόμενου αρχείου gcc lex.yy.c file_name.tab.c o desired_executable_name lfl

Compilation Flow

ΕΡΩΤΗΣΕΙΣ / ΑΠΟΡΙΕΣ