Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο



Σχετικά έγγραφα
HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

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

a = false; else a = 3.33; b = (a and c); //?

Φροντιστήριο 3 ο Παραγωγή Ενδιάμεσου Κώδικα. Σημασιολογία της γλώσσας alpha (1/7) Type Checking

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Φροντιστήριο 5 ο Τελικός κώδικας και εικονική μηχανή. Μέρος 1 ο Περιβάλλον εκτέλεσης HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ

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

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

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

Προγραμματισμός Ι (HY120)

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

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

a = 10; a = k; int a,b,c; a = b = c = 10;

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

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

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

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

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

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

Τύποι δεδομένων, τελεστές, μεταβλητές

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

Τι είναι ο Symbol Table. ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο. Περιεχόμενη Πληροφορία. Table. Πίνακας Συμβόλων

Εντολές επιλογής Επαναλήψεις (if, switch, while)

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Προγραμματισμός Ι (HY120)

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

Εισαγωγή στον Προγ/μό Υπολογιστών

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Slide 6 / 43. Slide 5 / 43. Α. Σαββίδης. Α. Σαββίδης. Slide 8 / 43. Slide 7 / 43. Α. Σαββίδης. Α. Σαββίδης HY340, 2009 HY340, 2009 HY340, 2009

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

Μεταγλωττιστές Βελτιστοποίηση

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

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

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

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

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

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 8/11/07

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

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

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

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

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

PHP 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

Δομημένος Προγραμματισμός

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

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

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

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

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

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

Προγραμματισμός PASCAL

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

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

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

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

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

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

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

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

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

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

Θέματα Προγραμματισμού Η/Υ

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

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

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Λύσεις Σειράς Ασκήσεων 5

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

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

Εντολές γλώσσας μηχανής

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

Μεταγλωττιστές Βελτιστοποίηση

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

Λύσεις Σειράς Ασκήσεων 5

Transcript:

ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Checking (1/3) Η γλώσσα alpha είναι μια dynamic typing γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται σε αυτήν) επομένως δεν μπορούμε κατά την μεταγλώττιση να εφαρμόσουμε έλεγχο τύπων. Ενδιάμεσος κώδικας -Backpatching if (x > 12) a = false; else a = 3.33; b = (a and c);//? x = input(); y =!x; //? 2 Runtime Checking (2/3) Δεν μπορούμε να υλοποιήσουμε πλήρη έλεγχο at compile time, για το λόγο αυτό ο έλεγχος θα γίνει at runtime. Στην περίπτωση των σταθερών εκφράσεων προαιρετικά ο έλεγχος μπορεί να γίνει at compile time. a = true + 12; // Boolean + Number Error b = str1 + false; // String + Boolean Error Runtime Checking (3/3) Run-time Warnings / Run-time Errors l-value = r-value +,-,*,%,++,--,- &&,,! >,>=,<,<= ==,!= (see Lecture 9) 3 4

Alpha i-code (1/3) enum iopcode { assign, add, sub, mul, div, mod, not, if_eq, if_noteq, struct quad { iopcode unsigned unsigned op; res; arg1; arg2; label; line; quad* quads = (quad *) 0; quads[quadno].label = Alpha i-code (2/3) enum expr_t { var_e, tableitem_e, programfunc_e, libraryfunc_e, Σε ένα quad μπορούμε struct expr { δώσουμε τις παρακάτω expr_t type; τιμές: symbol* sym; - σταθερή τιμή index; (string, number, boolean) double numconst; - τιμή συνάρτησης βιβλιοθήκης char* strconst; (όνομα) unsigned char boolconst; - τιμή συνάρτησης προγράμματος next; (διεύθυνση) - κρυφή μεταβλητή - μεταβλητή προγράμματος 5 6 Alpha i-code (3/3) Οπίνακαςγιαταquads είναι δυναμικός, επομένως δεν έχουμε δείκτες σε quads αλλά χρησιμοποιούμε το index του κάθε quad για να αναφερθούμε σε αυτό. if (a > b) c = true; else c = false; index 10 11 12 Op IF_GREATER ASSIGN JUMP ASSIGN Arg1 a false true Arg 2 b Result / Label c c Backpatching Για την αποτίμηση των λογικών εκφράσεων (boolean expressions) υπάρχουν δύο τεχνικές: Ολική αποτίμηση (total boolean evaluation) Αποτιμάται ολόκληρη η έκφραση. Μερική αποτίμηση (short circuit / jumping code) Αποτιμάται μόνο το ελάχιστο αναγκαίο τμήμα της έκφρασης από το οποίο μπορεί να εξαχθεί συμπέρασμα για την τιμή της. 7 8

Ολική αποτίμηση έκφρασης Παράδειγμα a < b or c < d Ο ενδιάμεσος κώδικας που αντιστοιχεί σε αυτή την έκφραση είναι: Μερική αποτίμηση έκφρασης Προσθέτοντας τα συντιθέμενα γνωρίσματα (synthesized attributes) truelist και falselist. Καθώς παράγεται ο ενδιάμεσος κώδικας οι JUMP εντολές δεν συμπληρώνονται. Τα labels που αντιστοιχούν σε αυτές τις εντολές προστίθενται στην κατάλληλη από τις δύο λίστες. 9 10 Γραμματική Ηγραμματικήείναιηεξής: Π.χ. από τον 1 ο κανόνα παρατηρούμε ότι εάν το Ε1 είναι true τότε και το Ε θα είναι true, άρα η λίστα Ε1.truelist γίνεται μέρος της Ε.truelist. Εάν το Ε1 είναι false, τότε πρέπει να εξεταστεί το Ε2. Συναρτήσεις χειρισμού λίστας makelist(i): Δημιουργεί μία νέα λίστα merge(p1, p2): Συνενώνει τις λίστες p1 και p2. backpatch(p, i): Εισάγει το i ως το target label όλων των JUMP εντολών που είναι καταχωρημένα στην p. 11 12

Σημασιολογικοί κανόνες Παράδειγμα (1/5) a < b or c < d and e < f Ο ενδιάμεσος κώδικας που παράγεται είναι: 1 ο Βήμα: Γινεται reduce το a < b από τον κανόνα 2: JUMP _ 2 ο Βήμα: Γίνεται reduce το c < d από τον κανόνα 3: IF_LESS c d _ Παράδειγμα (2/5) Παράδειγμα (3/5) 3 ο Βήμα: Γίνεται reduce το e < f από τον κανόνα 4 ο Βήμα: Από τον κανόνα Ε -> Ε1 and M E2 γίνεται reduce. Εκτελείται ο σημασιολογικός κανόνας backpatch({3}, 5). 2: JUMP _ 3: IF_LESS c d 5 5 ο Βήμα: Από τον κανόνα Ε -> Ε1 or ME2γίνεται reduce. Εκτελείται ο σημασιολογικός κανόνας backpatch({2}, 3). 2: JUMP 3 3: IF_LESS c d 5 15 16

Παράδειγμα (4/5) Παράδειγμα (5/5) Η έκφραση είναι αληθής, εάν εκτελεστούν οι JUMP εντολές με label 1 ή 5. Αντίθετα, η έκφραση είναι ψευδής, εάν εκτελεστούν οι JUMP εντολές με label 4 ή 6. Ποιος όμως θα συμπληρώσει τα target labels αυτών των JUMP εντολών? Στην 11 η διάλεξη (9 η διαφάνεια) παρουσιάστηκε η συνάρτηση patchlabel, η οποία συμπληρώνει το target label μίας JUMP εντολής. Θα πρέπει να τροποποιηθεί αυτή η συνάρτηση, ώστε να συμπληρώνει τα target codes όλων των JUMP εντολών που βρίσκονται στο truelist και στο falselist.. 17 18