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

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

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

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

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

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

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Σημασιολογική ανάλυση

Βασικά Στοιχεία της Java

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

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

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

Αντικειμενοστρεφής Προγραμματισμός

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

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

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

Βασικά Στοιχεία της Java

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

Δομές ελέγχου ροής προγράμματος

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

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

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

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

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

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

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

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

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

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

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

Pascal. 15 Νοεμβρίου 2011

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

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Υπολογισμός - Εντολές Επανάληψης

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Στοιχειώδης προγραμματισμός σε C++

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

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

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

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

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

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

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

3 Αλληλεπίδραση Αντικειμένων

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

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

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

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

Οντοκεντρικός Προγραμματισμός

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

Τύποι Δεδομένων. Κατηγορίες Τύπων Δεδομένων ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός Κων/νος Φλώρος

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

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

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

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

Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

Βασικές Έννοιες Αλγορίθμων Τι είναι αλγόριθμος

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ιαφάνειες παρουσίασης #5

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Transcript:

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

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

Στατική Σημασιολογία Έλεγχος πέρα από τον συντακτικό έλεγχο για την ορθότητα ενός προγράμματος για τον εντοπισμό σημασιολογικών σφαλμάτων. Δήλωση μεταβλητής μια μόνο φορά σε μια εμβέλεια. Ορθή χρήση τελεστών σε σχέση με τον τύπο των ορισμάτων. Ύπαρξη μιας εντολής break εκτός κατάλληλου βρόγχου. κλπ.. Παράδειγμα While E do S boolean Statement

Δυναμική Σημασιολογία Απόδοση ερμηνείας σε προγράμματα που περιγράφει την συμπεριφορά τους. Τρόποι περιγραφής: Λειτουργική Σημασιολογία (operational semantics): περιγράφει συμπεριφορά σαν υπολογιστικά βήματα (π.χ., εντολή ανάθεσης). Δηλωτική Σημασιολογία (denotational semantics): περιγραφή με κάποιοα μαθηματική συνάρτηση (από το πεδίο των δεδομένων εισόδου στο πεδίο των αποτελεσμάτων). Αξιωματική Σημασιολογία (axiomatic semantics): η ερμηνεία καθορίζεται έμμεσα μέσω λογικών προτάσεων που περιγράφουν ιδιότητες του προγράμματος.

Έλεγχοι που διεξάγονται: Σημασιολογική Ανάλυση Έλεγχοι τύπων: τύποι μεταβλητών, συστήματα τύπων, κλπ. Οι τελεστές εφαρμόζονται σε κατάλληλα τελούμενα Έλεγχοι ύπαρξης ονομάτων: η χρήση μιας μεταβλητής επιτρέπεται μετά τη δήλωση της (πίνακας συμβόλων). Έλεγχοι μοναδικότητας: δύο ονόματα ετικετών, συναρτήσεων, κλπ δεν μπορούν να έχουν το ίδιο όνομα (πίνακας συμβόλων). οι σταθερές σε μια δομή case είναι μοναδικές (Pascal) Έλεγχοι συνέπειας: σε εντολές που ξεκινούν και τελειώνουν με το όνομα της δηλωθείσας δομής (begin XYZ end XYZ). Έλεγχοι ροής: π.χ., Όχι continue έξω από βρόχο (C) Οι μεταβλητές αρχικοποιούνται πριν τη χρήση τους (Java)

Υλοποίηση Σημασιολογικής Ανάλυσης Πώς γίνεται η σημασιολογική ανάλυση; Μεταγλωττιστής πολλαπλών περασμάτων: δημιουργία συντακτικού δένδρου και έπειτα έλεγχος. Μεταγλωττιστής απλού περάσματος: Η ανάλυση γίνεται σταδιακά παράλληλα με την συντακτική ανάλυση. Θεωρητικά υπάρχει η ανάγκη για υποστήριξη όλων των παραπάνω από κάποιου είδους γραμματικής.

Συστήματα Τύπων Σύστημα τύπων (type system): διαχείριση και έλεγχος τύπων. Βασικοί τύποι (basic types): πρωταρχικοί τύποι της γλώσσας. integer, boolean, real, char. Σύνθετοι τύποι (composite types): τύποι που προκύπτουν από "κατασκευαστές τύπων" με συνδυασμό άλλων τύπων: Πίνακες, Καρτεσιανά γινόμενα, εγγραφές, δείκτες, συναρτήσεις.

Συστήματα Τύπων Περιορισμοί στη κατασκευή τύπων: πχ. διάσταση πινάκων, επιστροφή τιμών από συναρτήσεις, κλπ. Οι τύποι που δεν υπόκεινται σε περιορισμούς ονομάζονται τύποι πρώτης τάξης (first class types). Τυποκρατική περιγραφή των συστημάτων τύπων περιλαμβάνει την έννοια περιβάλλοντα τύπων (type environments). Εξαγωγή τύπων βάσει κανόνων για εκφράσεις. var x,y : int { x integer, y real}

Τύποι και Έλεγχοι Δύο είδη μετατροπών: ρητή μετατροπή τύπου (type casting): ο προγραμματιστής δηλώνει ρητά την μετατροπή. έμμεση μετατροπή τύπου (type coersion): που η μετατροπή αποφασίζεται από το μεταγλωττιστή αν είναι επιτρεπτή. Υπερφόρτωση τελεστών: τελεστής διεξάγει δύο παρεμφερείς αλλά διαφορετικές πράξεις. Μεταγλωττιστής πρέπει να ελέγξει την σωστή χρήση υπερφόρτωσης. Παράδειγμα τελεστής "+"

Τύποι και Έλεγχοι Πολυμορφικοί τελεστές: υλοποιούν την ίδια πράξη αλλά με διαφορετικού τύπου ορίσματα. πχ. τελεστής αποδεικτοδότητησης (dereferencing) Αν Ε είναι δείκτης σε τύπο τ, τότε ^Ε είναι τύπου τ. Συνώνυμα τύπων Ισοδυναμία τύπων (χρήση χωρίς μετατροπή) Δομική ισοδυναμία (σχηματίζονται με τον ίδιο κατασκευαστή) Ονομαστική Ισοδυναμία Υποσύνολα τύπων πχ. var i : 1..100 (υποσύνολο τύπου integer)

Παραδείγματα: απλές εκφράσεις βασικοί έλεγχοι Σημασιολογική Ανάλυση στο bison Παράδειγμα: Υπολογισμός του πεδίου type %{typedef enum { TY_int, TY_real, TY_bool } Type;%} %union{char * n; Type t; struct { Type type; /* other fields */ } v; } %type<n> T_id %type<t> typename %type<v> expression expression : T_intconst { $$.type = TY_int; } expression : T_id T_realconst { $$.type = TY_real;} ( expression ) { $$.type = $2.type; } ; Έλεγχοι: 1- έχει δηλωθεί το T_id στον πίνακα συμβόλων? 2- τι τύπο έχει?

Παραδείγματα: Βασικοί έλεγχοι expression : T_id expression : T_id { Entry * id = lookup($1); if (id!= NULL && id->kind == K_variable) $$.type = id->type; else yyerror("identifier not found"); } ;

Παραδείγματα: Βασικοί έλεγχοι expression : expression "mod" expression { if ($1.type == TY_int && $3.type == TY_int) $$.type = TY_int; Έλεγχος συμβατότητας μεταβλητών else yyerror("type mismatch"); } ; statement : "while" expression "do" statement { if ($2.type!= TY_bool) } ; yyerror("condition type mismatch") Θα πρέπει το expression να είναι τύπου bool

Παραδείγματα: Μετατροπή τύπων /*Type casting */ expression : '(' typename ')' expression { if (iscastallowed($2, $4.type)) $$.type = $2; else yyerror("illegal type cast"); } ; Συνάρτηση ελέγχου

Παραδείγματα: Υπερφόρτωση Τελεστών Ε = Ε1 + Ε2 expression : expression '+' expression { if ($1.type == TY_int) if ($3.type == TY_int) $$.type = TY_int; else if ($3.type == TY_real) $$.type = TY_real; else yyerror("type mismatch"); else if ($1.type == TY_real) if ($3.type == TY_int) $$.type = TY_real; else if ($3.type == TY_real) $$.type = TY_real; else yyerror("type mismatch"); else yyerror("type mismatch"); } ;

Παράδειγμα: Αποδοτική υλοποίηση var x : int; var_decl: "var" T_id ':' T_type ';' {if (!addvar($2, $4)) { printf("variable:: %s on line %d. ",$2,line); yyerror("var already defined");} } ;/* addvar προσθέτει μια μεταβλητή στο πίνακα συμβόλων. */ expr: term { $$.type = $1.type; } expr '+' term {$$.type = typedefinition($1.type, $3.type);} ; term: factor { $$.type = $1.type; } term '*' factor { $$.type = typedefinition($1.type, $3.type);} ;

Εργαστηριακή Άσκηση 9 Γράψτε την συνάρτηση typedefinition η οποία ελέγχει τους τύπους των μεταβλητών στο αριστερό μέρος και επιστρέφει τον τύπο του δεξιού μέρος. Δίνεται η παρακάτω δήλωση τύπων των tokens ParType typedefinition(partype, ParType); %union { int i_val; double f_val; char * id; ParType tokentype; struct { int i_value; ParType type; } se; } Επίσης, πώς μπορεί να ενσωματωθεί η συντακτική ανάλυση έτσι ώστε να χρησιμοποιεί την δομή του Αφηρημένου Συντακτικού Δέντρου?