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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

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

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

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

Δομές Δεδομένων και Αλγόριθμοι

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

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

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

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

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

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

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

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

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2: Μεταφραστές

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

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

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

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

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

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

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

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

Προγραμματισμός Δομές Δεδομένων

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

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

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

Transcript:

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

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

Παράδειγμα Είναι ουσιαστικά η διαδικασία κατά την οποία αναλύεται μία σειρά από 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

Προτεραιότητα και Προσεταιριστικότητα Τελεστών Τα %left, %right δηλώνουν τις προσεταιριστικότητες των tokens που τα ακολουθούν. Η σειρά δήλωσής τους καθορίζει την προτεραιότητα των αντίστοιχων τελεστών. Iσχύουν τα εξής: τα tokens που εμφανίζονται στην ίδια γραμμή έχουν την ίδια προτεραιότητα. η προτεραιότητα αυξάνεται από πάνω προς τα κάτω.

Παράδειγμα %left + - %left * / Τα + και - έχουν μικρότερη προτεραιότητα από τα * και /. Η έκφραση a+b+c υπολογίζεται ως (a+b)+c. Το %nonassoc χρησιμοποιείται για τελεστές που δεν μπορούν να συνδυαστούν μεταξύ τους, π.χ., το =.

Τμήμα κανόνων Περιλαμβάνει τους κανόνες της γραμματικής της γλώσσας σε μορφή 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 ;

Παραδείγματα II Γραμματική: E -> T E + T T -> F T * F F -> (E) num Υλοποίηση σε bison %token TK_NUM %left '+ %left '*' %% program :expression ; expression :term expression + term ; term :factor term * factor ; factor : ( expression ) TΚ_num ;

Παραδείγματα III line : expr '\n' { printf ("%d\n", $1 ) ; } expr : expr '+' term { $$ = $1 + $3 ; } term ; term : term '*' factor { $$ = $1 * $3 ; } factor ; factor : '(' expr ')' { $$ = $2 ; } DIGIT ; Στο δεύτερο μέρος γράφουμε την γραμματική. Κάθε κανόνας μπορεί να έχει και σημασιολογικές πράξεις. Η έκφραση $$ αφορά το σύμβολο που είναι στην αριστερή πλευρά ενός κανόνα. Οι εκφράσεις $1, $2, κ.τ.λ. αφορά τα σύμβολα που είναι στην δεξιά πλευρά του κανόνα.

Πίνακας Συμβόλων Συγκεντρώνει πληροφορίες για τα ονόματα (identifiers) που εμφανίζονται στο αρχικό πρόγραμμα. Ονόματα είναι: Πρόγραμμα, μεταβλητές, σταθερές... Η πληροφορία που αποθηκεύεται στον πίνακα συμβόλων χρησιμοποιείται κατά τη σημασιολογική ανάλυση (έλεγχος τύπων) και κατά την παραγωγή κώδικα (πχ. πόσο χώρο στη μνήμη απαιτούν). int x; float y;

Οργάνωση πίνακα συμβόλων Βασικές λειτουργίες: Προσθήκη ονόματος. Αναζήτηση ονόματος. Διαγραφή ονόματος. Κόστος προσθήκης ή αναζήτησης ανάλογα με την υλοποίηση: Γραμμική λίστα O(n) Δυαδικό δέντρο αναζήτησης O(log n) Πίνακας κατακερματισμού O(n/k) (η πιο συμφέρουσα υλοποίηση)

Πίνακες Κατακερματισμού Η αποδοτικότερη των τριών δομών. Βασίζεται στην ύπαρξη δύο πινάκων: του πίνακα αποθήκευσης και του πίνακα κατακερματισμού. Πίνακας κατακερματισμού: Αποτελείται από k θέσεις. Κάθε θέση έχει ένα δείκτη σε μια συνδεδεμένη λίστα. Η συνάρτηση κατακερματισμού (hash function) δίνει σε ποια θέση του πίνακα κατακερματισμού αντιστοιχεί ένα όνομα, και οδηγεί στην αντίστοιχη σειριακή (συνδεδεμένη) λίστα.

Σχηματικά 0 1 2... k-1

Συνάρτηση Κατακερματισμού Σημαντικό ρόλο για την επιτυχία της μεθόδου. Επιθυμητή η ομοιόμορφη κατανομή ονομάτων στη λίστα. Εύκολος υπολογισμός όταν το όνομα είναι ακολουθίες χαρακτήρων. Σ (name) = Άθροισμα ASCII χαρακτήρων ονόματος hash(name) = Σ mod k

Εμβέλεια Ένας τρόπος διαχείρισης της εμβέλειας είναι να αντιστοιχίσουμε σε κάθε εμβέλεια μοναδικό αριθμό εμβέλειας. Μια καθολική μεταβλητή μπορεί να δείχνει την τρέχουσα εμβέλεια. η μεταβλητή αυτή θα πρέπει να αυξάνεται / μειώνεται στις ενέργειες (actions) των γραμματικών κανόνων Μόλις κλείσει μια εμβέλεια όλες οι καταχωρήσεις με τον αριθμό που αντιστοιχεί στην εμβέλεια εξαλείφονται.

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

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