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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

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

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

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

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

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

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

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

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

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

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

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

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

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

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

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

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

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

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

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

ιορθώσεις επί της 2 ης έκδοσης εκτύπωσης 2002

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

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

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

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

ASPA: A translator from ASP to PHP

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

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

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

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

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

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

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

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

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

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

ΚΕΦΑΛΑΙΟ 2. Τιμές, τύποι, μεταβλητές, λέξεις-κλειδιά, εντολές. 2.1 Εισαγωγή

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

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

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

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

Δομές Δεδομένων (Data Structures)

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Δεδομένα, Τύποι και Τιμές

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

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ

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

Παίρνοντας Αποφάσεις 1

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

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

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

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

Transcript:

HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 4ο Παραγωγή Ενδιάμεσου Κώδικα ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης HY340, 2009 Α. Σαββίδης Slide 2 / 143 Κώδικας τριών διευθύνσεων Περιγραφή ραφή ενός πολύπλοκου λο ο προγράμματος ρά ος με μία ακολουθία απλών εντολών Οι εντολές είναι συνήθως λίγες Έχουν πανομοιότυπη μορφή Εντολή, αποτέλεσμα, τελεστής 1, τελεστής 2 Είναι πολύ κοντά στην γλώσσα μηχανής Σε πολλές από τις εντολές η αντιστοίχηση με τις τελικές εντολές μηχανής είναι 1 1 Απλός υπολογιστής Έστω ότι θέλουμε, στο calculator, αντί να υπολογίζουμε άμεσα το αποτέλεσμα, των πράξεών μας Να παράγουμε σαν έξοδο ένα ισοδύναμο πρόγραμμα που θα περιγράφεται από μια ακολουθία εντολών κώδικα τριών διευθύνσεων Το πρόγραμμα εξόδου θα μπορεί να εκτελεστεί από ένα πολύ απλό πρόγραμμα (virtual machine) Θα μπορούμε να εκτελούμε το πρόγραμμα και να παίρνουμε αποτελέσματα πολύ πιο γρήγορα HY340, 2009 Α. Σαββίδης Slide 3 / 143 HY340, 2009 Α. Σαββίδης Slide 4 / 143

Εντολές (1/2) ADD $1, $2, $3 Προσθέτει το $2 με το $3 και αποθηκεύει το αποτέλεσμα στο $1 SUB $1, $2, $3 Αφαιρεί το $3 από το $2 και αποθηκεύει το αποτέλεσμα στο $1 MUL $1, $2, $3 Πολλαπλασιάζει το $2 με το $3 και αποθηκεύει το αποτέλεσμα στο $1 DIV $1, $2, $3 Διαιρεί το $3 από το $2 και αποθηκεύει το αποτέλεσμα στο $1 Εντολές (2/2) NEG $1 $2 Αποθηκεύει στο $1 τον αντίθετο του $2 RES $1 Τυπώνει το $1 στην οθόνη ASS $1 $2 Αναθέτει την τιμή του $2 στο $1 Επίσης Οι τελεστές των εντολών, μπορούν να είναι Μεταβλητές (που υπάρχουν στο symbol table του calculator) Σταθερές τιμές HY340, 2009 Α. Σαββίδης Slide 5 / 143 HY340, 2009 Α. Σαββίδης Slide 6 / 143 Μορφή ενδιάμεσου κώδικα (1/4) Μορφή ενδιάμεσου κώδικα (2/4) Όλες οι εντολές μας δέχονται το ΠΟΛΥ 2 τελεστές Επομένως θα πρέπει να τεμαχίζουμε τις εντολές της μορφής x = 5 + 4 * 3 / 2 8 σε ακολουθίες των προηγούμενων εντολών οι οποίες θα παράγουν τελικά ακριβώς το ίδιο αποτέλεσμα Θα πρέπει να αποθηκεύουμε κάπου τα ενδιάμεσα αποτελέσματα Θα πρέπει να εισάγουμε προσωρινές μεταβλητές για μπορούμε να περιγράψουμε την παραπάνω έκφραση με κώδικα τριών διευθύνσεων Παράδειγμα α x = 5 + 4 * 3 / 2 8 MUL x, 4, 3 DIV x, x, 2 ADD x, x, 5 SUB x, x, 8 x=5+4*3/2 8 MUL tmp1, 4, 3 DIV tmp1, tmp1, 2 ADD tmp1, tmp1, 5 SUB tmp1, tmp1, 8 ASS x, tmp1 ADD res, arg1, arg2 SUB res, arg1, arg2 MUL res, arg1, arg2 DIV res, arg1, arg2 NEG res, arg1 RES arg1 ASS res, arg1 HY340, 2009 Α. Σαββίδης Slide 7 / 143 HY340, 2009 Α. Σαββίδης Slide 8 / 143

Μορφή ενδιάμεσου κώδικα (3/4) Ή εάν δεν προσπαθήσουμε να ελαχιστοποιήσουμε τη χρήση προσωρινών μεταβλητών x = 5 + 4 * 3 / 2 8 MUL tmp1, 4, 3 DIV tmp2, tmp1, 2 ADD tmp3, tmp2, 5 SUB tmp4, tmp3, 8 ASS x, tmp4 Μορφή ενδιάμεσου κώδικα (4/4) Είμαστε σίγουροι όμως ότι όα όταντελειώσουμε ε τον υπολογισμό μιας συγκεκριμένης έκφρασης και αποθηκεύσουμε το αποτέλεσμα στην κατάλληλη μεταβλητή, οι προσωρινές μεταβλητές μπορούν να επανα-χρησιμοποιηθούν. Στην πράξη δεν είναι εύκολο να ξέρουμε πότε μπορούμε optimally να επανα-χρησιμοποιήσουμε μία προσωρινή μεταβλητή HY340, 2009 Α. Σαββίδης Slide 9 / 143 HY340, 2009 Α. Σαββίδης Slide 10 / 143 Βοηθητικές η δομές Αλλαγές στο union του yacc Διαφορετικές εντολές ενδιάμεσου δά κώδικα Εντολή Μεταβλητή αποτελέσματος Τλ Τελεστές HY340, 2009 Α. Σαββίδης Slide 11 / 143 Θέλουμε να κρατάμε πληροφορία για το πού έχει αποθηκευτεί το ενδιάμεσο αποτέλεσμα ενός epression expression HY340, 2009 Α. Σαββίδης Slide 12 / 143

Βοηθητικές η συναρτήσεις (1/2) Βοηθητικές η συναρτήσεις (2/2) Λίστα με εντολές ενδιάμεσου κώδικα Δημιουργία μίας εντολής ενδιάμεσου κώδικα (όλες τις εντολές τις κρατάμε σε μία λίστα) HY340, 2009 Α. Σαββίδης Slide 13 / 143 HY340, 2009 Α. Σαββίδης Slide 14 / 143 Παράδειγμα σε κανόνες (1/4) Παράδειγμα σε κανόνες (2/4) a = 5 + 4 * 2; a + 55; Δημιουργούμε δομές Expr στη μνήμη, ανάλογα με την εντολή HY340, 2009 Α. Σαββίδης Slide 15 / 143 HY340, 2009 Α. Σαββίδης Slide 16 / 143

Παράδειγμα σε κανόνες (3/4) Παράδειγμα σε κανόνες (4/4) a = 5 + 4 * 2; a + 55; a = 5 + 4 * 2; a + 55; HY340, 2009 Α. Σαββίδης Slide 17 / 143 HY340, 2009 Α. Σαββίδης Slide 18 / 143 Runtime Checking (1/3) Runtime Checking (2/3) Η γλώσσα alpha είναι μια dynamically typed γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται σε αυτήν) επομένως δεν μπορούμε κατά την μεταγλώττιση να εφαρμόσουμε έλεγχο τύπων. Δεν μπορούμε να υλοποιήσουμε πλήρη έλεγχο at compile time, για το λόγο αυτό ο έλεγχος θα γίνει at runtime. if (x > 12) a = false; else a = 3.33; 33; b = (a and c); //? x = input(); y =!x; //? Στην περίπτωση των σταθερών εκφράσεων προαιρετικά ο έλεγχος μπορεί να γίνει at compile time. a = true + 12; // Boolean + Number Error b = str1 + false; // String + Boolean Error HY340, 2009 Α. Σαββίδης Slide 19 / 143 HY340, 2009 Α. Σαββίδης Slide 20 / 143

Runtime Checking (3/3) Alpha i-code (1/3) enum iopcode { assign, add, sub, mul, div, mod, not, if_eq, if_noteq,, }; struct quad { iopcode expr* expr* expr* unsigned unsigned struct op; res; ///< result temporary (e.g. add, sub, etc) arg1; ///< first operant (e.g. add, sub, etc) arg2; ///< second operant (e.g. add, sub, etc) g label; ///< target label (e.g. jump, if _ eq, etc) line;}; struct quad quads[max_quads]; κάθε quad μπορεί να έχει label ίδιο με τη θέση του στον πίνακα HY340, 2009 Α. Σαββίδης Slide 21 / 143 HY340, 2009 Α. Σαββίδης Slide 22 / 143 Alpha i-code (2/3) enum expr_t { var_e, tableitem_e, programfunc_e, libraryfunc_e, }; struct expr { expr_t symbol* expr* double char* char }; type; sym; index; numconst; strconst; boolconst; Σε ένα quad μπορούμε δώσουμε τις παρακάτω τιμές: -τιμή συνάρτησης βιβλιοθήκης (όνομα) - τιμή συνάρτησης προγράμματος (διεύθυνση) - κρυφή μεταβλητή - μεταβλητή προγράμματος - σταθερή τιμή (string, number, boolean) HY340, 2009 Α. Σαββίδης Slide 23 / 143 Alpha i-code (3/3) Ο πίνακας για τα quads είναι δυναμικός, επομένως δεν έχουμε δείκτες ες σε quads αλλά χρησιμοποιούμε ο ούμε το index του κάθε quad για να αναφερθούμε σε αυτό. if (a > b) c = true; else c = false; index Op Result / Label Arg1 10 IF_GREATER 13 a b 11 ASSIGN c false 12 JUMP 14 13 ASSIGN c true 14 Arg2 HY340, 2009 Α. Σαββίδης 24/143

HY - 340 Γλώσσες και Μεταφραστές Φροντιστήριο if (expr) stmt if statement Intermediate Code go if skip if HY340, 2009 Α. Σαββίδης Slide 26 / 143 if..else statement while statement if (expr) stmt else stmt while (expr) stmt break list continue list HY340, 2009 Α. Σαββίδης Slide 27 / 143 HY340, 2009 Α. Σαββίδης Slide 28 / 143

for statement Ενδεικτικό παράδειγμα for (elist1; expr; elist2) stmt loop true false break list continue list closure HY340, 2009 Α. Σαββίδης Slide 29 / 143 HY340, 2009 Α. Σαββίδης Slide 30 / 143