HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Το αλφαριθμητικό (string)
Advertisements

ΕΙΣΑΓΩΓΗ ΣΤΗΝ PHP. Τι θα μάθουμε;  Να καταλάβουμε τι είναι η PHP και πώς δουλεύουν τα PHP scripts  Τι χρειάζεται για να ξεκινήσουμε με την PHP  Να.
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Δομή του TRN KME Μνήμη Διάδρομος Διευθύνσεων Διάδρομος Δεδομένων
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
Γλώσσα Προγραμματισμού
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες.
ΕΠΛ223 - Θεωρία και Πρακτική Μεταγλωττιστών9-1 Στατικός Έλεγχος Με τον όρο στατικός έλεγχος (static checking) χαρακτηρίζεται ο έλεγχος της συντακτικής.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 5: Επαναληπτικές και εξωτερικές συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
ΜΕΤΑΒΛΗΤΕΣ - ΤΥΠΟΙ ΜΑΘΗΜΑ 3.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Υποθετικός τελεστής Ο υποθετικός τελεστής (?:) αποτελείται από δύο σύμβολα. Ανήκει στην κατηγορία των τελεστών που αποτελούνται από συνδυασμό συμβόλων.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ
HY Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Environment.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Ιόνιο Πανεπιστήμιο ΠΜΣ Επιστήμη της Πληροφορίας Διατύπωση Ερωτημάτων σε XML τεκμήρια με τη γλώσσα XQuery Εργασία για το μάθημα Ηλεκτρονική Δημοσίευση Υπεύθυνος.
ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 30/03/2009.
ΘΠ06 - Μεταγλωττιστές Συντακτική Ανάλυση, Bison 1.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Κεφάλαιο 10 – Υποπρογράμματα
ΗΥ-340 – Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 11: Βελτιστοποίηση Ενδιάμεσου Κώδικα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
HY Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Environment.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Virtual Machine.
ΘΠ06 - Μεταγλωττιστές Ενδιάμεσος Κώδικας – Μεταφραστικά Σχήματα.
Επιστημονικός Υπολογισμός Ι Πρώτο Εργαστήριο Εισαγωγή στο matlab 15 Οκτωβρίου 2010 Γιώργος Δρακόπουλος ΤΜΗΥΠ.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
ΗΥ-340 – Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα.
Βασικά στοιχεία της Java
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Γιώργος Μαγουλάκης Εξάμηνο: Εαρινό 2015 ΤΕΙ Κρήτης Τμ. Μηχανικών Πληροφορικής Τμ. Μηχανικών Πληροφορικής.
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ «Εισαγωγή στον οντοκεντρικό προγραμματισμό (βασική εισαγωγή στο περιβάλλον εργασίας)» Ρουσσάκης Ιωάννης, ΤΕΙ Κρήτης,
Εισαγωγή στον προγραμματισμό Μέρος 3 ο Προγραμματιστικά περιβάλλοντα § 6.7.
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη. Αθήνα, 2015.
Αντικειμενοστραφής Προγραμματισμός Ι
Δομές.
Εφαρμογές Υπολογιστών
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών
Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
Εισαγωγή στον Προγραμματισμό με Python, ΑΠΘ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Εισαγωγή στον Προγραμματισμό με Python Εβδομάδα 1: Βασικά στοιχεία.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
Μεταγράφημα παρουσίασης:

HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης

HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 4ο Παραγωγή Ενδιάμεσου Κώδικα HY340, 2009 Α. Σαββίδης Slide 2 / 143

Κώδικας τριών διευθύνσεων Περιγραφή ενός πολύπλοκου προγράμματος με μία ακολουθία απλών εντολών Περιγραφή ενός πολύπλοκου προγράμματος με μία ακολουθία απλών εντολών Οι εντολές είναι συνήθως λίγες Οι εντολές είναι συνήθως λίγες Έχουν πανομοιότυπη μορφή Έχουν πανομοιότυπη μορφή  Εντολή, αποτέλεσμα, τελεστής 1, τελεστής 2 Είναι πολύ “κοντά” στην γλώσσα μηχανής Είναι πολύ “κοντά” στην γλώσσα μηχανής  Σε πολλές από τις εντολές η αντιστοίχηση με τις τελικές εντολές μηχανής είναι 1 – 1 HY340, 2009 Α. Σαββίδης Slide 3 / 143

Απλός υπολογιστής Έστω ότι θέλουμε, στο calculator, αντί να υπολογίζουμε άμεσα το αποτέλεσμα, των πράξεών μας Έστω ότι θέλουμε, στο calculator, αντί να υπολογίζουμε άμεσα το αποτέλεσμα, των πράξεών μας Να παράγουμε σαν έξοδο ένα ισοδύναμο πρόγραμμα που θα περιγράφεται από μια ακολουθία εντολών κώδικα τριών διευθύνσεων Να παράγουμε σαν έξοδο ένα ισοδύναμο πρόγραμμα που θα περιγράφεται από μια ακολουθία εντολών κώδικα τριών διευθύνσεων  Το πρόγραμμα εξόδου θα μπορεί να εκτελεστεί από ένα πολύ απλό πρόγραμμα (virtual machine)  Θα μπορούμε να εκτελούμε το πρόγραμμα και να παίρνουμε αποτελέσματα πολύ πιο γρήγορα HY340, 2009 Α. Σαββίδης Slide 4 / 143

Εντολές (1/2) ADD $1, $2, $3 ADD $1, $2, $3 Προσθέτει το $2 με το $3 και αποθηκεύει το αποτέλεσμα στο $1 Προσθέτει το $2 με το $3 και αποθηκεύει το αποτέλεσμα στο $1 SUB $1, $2, $3 SUB $1, $2, $3 Αφαιρεί το $3 από το $2 και αποθηκεύει το αποτέλεσμα στο $1 Αφαιρεί το $3 από το $2 και αποθηκεύει το αποτέλεσμα στο $1 MUL $1, $2, $3 MUL $1, $2, $3 Πολλαπλασιάζει το $2 με το $3 και αποθηκεύει το αποτέλεσμα στο $1 Πολλαπλασιάζει το $2 με το $3 και αποθηκεύει το αποτέλεσμα στο $1 DIV $1, $2, $3 DIV $1, $2, $3 Διαιρεί το $3 από το $2 και αποθηκεύει το αποτέλεσμα στο $1 Διαιρεί το $3 από το $2 και αποθηκεύει το αποτέλεσμα στο $1 HY340, 2009 Α. Σαββίδης Slide 5 / 143

Εντολές (2/2) NEG $1 $2 NEG $1 $2 Αποθηκεύει στο $1 τον αντίθετο του $2 Αποθηκεύει στο $1 τον αντίθετο του $2 RES $1 RES $1 Τυπώνει το $1 στην οθόνη Τυπώνει το $1 στην οθόνη ASS $1 $2 ASS $1 $2 Αναθέτει την τιμή του $2 στο $1 Αναθέτει την τιμή του $2 στο $1 Επίσης Επίσης Οι τελεστές των εντολών, μπορούν να είναι Οι τελεστές των εντολών, μπορούν να είναι  Μεταβλητές (που υπάρχουν στο symbol table του calculator)  Σταθερές τιμές HY340, 2009 Α. Σαββίδης Slide 6 / 143

Μορφή ενδιάμεσου κώδικα (1/4) Όλες οι εντολές μας δέχονται το ΠΟΛΥ 2 τελεστές Όλες οι εντολές μας δέχονται το ΠΟΛΥ 2 τελεστές Επομένως θα πρέπει να τεμαχίζουμε τις εντολές της μορφής x = * 3 / 2 – 8 σε ακολουθίες των προηγούμενων εντολών οι οποίες θα παράγουν τελικά ακριβώς το ίδιο αποτέλεσμα Επομένως θα πρέπει να τεμαχίζουμε τις εντολές της μορφής x = * 3 / 2 – 8 σε ακολουθίες των προηγούμενων εντολών οι οποίες θα παράγουν τελικά ακριβώς το ίδιο αποτέλεσμα Θα πρέπει να αποθηκεύουμε κάπου τα “ενδιάμεσα” αποτελέσματα Θα πρέπει να αποθηκεύουμε κάπου τα “ενδιάμεσα” αποτελέσματα  Θα πρέπει να εισάγουμε προσωρινές μεταβλητές για μπορούμε να περιγράψουμε την παραπάνω έκφραση με κώδικα τριών διευθύνσεων HY340, 2009 Α. Σαββίδης Slide 7 / 143

Μορφή ενδιάμεσου κώδικα (2/4) Παράδειγμα Παράδειγμα x = * 3 / 2 – 8 x = * 3 / 2 – 8  MULx, 4, 3  DIVx, x, 2  ADDx, x, 5  SUBx, x, 8 x = * 3 / 2 – 8 x = * 3 / 2 – 8  MULtmp1, 4, 3  DIVtmp1, tmp1, 2  ADDtmp1, tmp1, 5  SUBtmp1, tmp1, 8  ASSx, 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 8 / 143

Μορφή ενδιάμεσου κώδικα (3/4 ) Ή εάν δεν προσπαθήσουμε να ελαχιστοποιήσουμε τη χρήση προσωρινών μεταβλητών Ή εάν δεν προσπαθήσουμε να ελαχιστοποιήσουμε τη χρήση προσωρινών μεταβλητών x = * 3 / 2 – 8 x = * 3 / 2 – 8  MULtmp1, 4, 3  DIVtmp2, tmp1, 2  ADDtmp3, tmp2, 5  SUBtmp4, tmp3, 8  ASSx, tmp4 Στην πράξη δεν είναι εύκολο να ξέρουμε πότε μπορούμε optimally να επανα-χρησιμοποιήσουμε μία προσωρινή μεταβλητή Στην πράξη δεν είναι εύκολο να ξέρουμε πότε μπορούμε optimally να επανα-χρησιμοποιήσουμε μία προσωρινή μεταβλητή HY340, 2009 Α. Σαββίδης Slide 9 / 143

Μορφή ενδιάμεσου κώδικα (4/4) Είμαστε σίγουροι όμως ότι όταν τελειώσουμε τον υπολογισμό μιας συγκεκριμένης έκφρασης και αποθηκεύσουμε το αποτέλεσμα στην κατάλληλη μεταβλητή, οι προσωρινές μεταβλητές μπορούν να επανα-χρησιμοποιηθούν. Είμαστε σίγουροι όμως ότι όταν τελειώσουμε τον υπολογισμό μιας συγκεκριμένης έκφρασης και αποθηκεύσουμε το αποτέλεσμα στην κατάλληλη μεταβλητή, οι προσωρινές μεταβλητές μπορούν να επανα-χρησιμοποιηθούν. HY340, 2009 Α. Σαββίδης Slide 10 / 143

Βοηθητικές δομές HY340, 2009 Α. Σαββίδης Slide 11 / 143

Αλλαγές στο union του yacc HY340, 2009 Α. Σαββίδης Slide 12 / 143

Βοηθητικές συναρτήσεις (1/2) HY340, 2009 Α. Σαββίδης Slide 13 / 143

Βοηθητικές συναρτήσεις (2/2) HY340, 2009 Α. Σαββίδης Slide 14 / 143

Παράδειγμα σε κανόνες (1/4) HY340, 2009 Α. Σαββίδης Slide 15 / 143

Παράδειγμα σε κανόνες (2/4) a = * 2; a + 55; HY340, 2009 Α. Σαββίδης Slide 16 / 143

Παράδειγμα σε κανόνες (3/4) a = * 2; a + 55; HY340, 2009 Α. Σαββίδης Slide 17 / 143

Παράδειγμα σε κανόνες (4/4) a = * 2; a + 55; HY340, 2009 Α. Σαββίδης Slide 18 / 143

Runtime Checking (1/3) Η γλώσσα alpha είναι μια dynamically typed γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται σε αυτήν) επομένως δεν μπορούμε κατά την μεταγλώττιση να εφαρμόσουμε έλεγχο τύπων. Η γλώσσα alpha είναι μια dynamically typed γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται σε αυτήν) επομένως δεν μπορούμε κατά την μεταγλώττιση να εφαρμόσουμε έλεγχο τύπων. if (x > 12) a = false; else a = 3.33; b = (a and c);// ? x = input(); y = !x;// ? HY340, 2009 Α. Σαββίδης Slide 19 / 143

Runtime Checking (2/3) Δεν μπορούμε να υλοποιήσουμε πλήρη έλεγχο at compile time, για το λόγο αυτό ο έλεγχος θα γίνει at runtime. Δεν μπορούμε να υλοποιήσουμε πλήρη έλεγχο at compile time, για το λόγο αυτό ο έλεγχος θα γίνει at runtime. Στην περίπτωση των σταθερών εκφράσεων προαιρετικά ο έλεγχος μπορεί να γίνει at compile time. Στην περίπτωση των σταθερών εκφράσεων προαιρετικά ο έλεγχος μπορεί να γίνει at compile time. a = true + 12; // Boolean + Number  Error a = true + 12; // Boolean + Number  Error b = “str1” + false;// String + Boolean  Error b = “str1” + false;// String + Boolean  Error HY340, 2009 Α. Σαββίδης Slide 20 / 143

Runtime Checking (3/3) HY340, 2009 Α. Σαββίδης Slide 21 / 143

Alpha i-code (1/3) enum iopcode { assign, add, sub, mul, div, mod, not, if_eq, if_noteq, … }; struct quad { iopcodeop; expr*res;///< result temporary (e.g. add, sub, etc) expr*arg1;///< first operant (e.g. add, sub, etc) expr*arg2;///< second operant (e.g. add, sub, etc) unsignedlabel;///< target label (e.g. jump, if_eq, etc) unsignedline;}; struct quad quads[MAX_QUADS]; κάθε quad μπορεί να έχει label ίδιο με τη θέση του στον πίνακα κάθε quad μπορεί να έχει label ίδιο με τη θέση του στον πίνακα HY340, 2009 Α. Σαββίδης Slide 22 / 143

Alpha i-code (2/3) enum expr_t { var_e, tableitem_e, programfunc_e, libraryfunc_e, … }; struct expr { expr_ttype; symbol*sym; expr* index; doublenumConst; char* strConst; char boolConst; }; Σε ένα quad μπορούμε δώσουμε τις παρακάτω τιμές: -τιμή συνάρτησης βιβλιοθήκης (όνομα) - τιμή συνάρτησης προγράμματος (διεύθυνση) - κρυφή μεταβλητή - μεταβλητή προγράμματος - σταθερή τιμή (string, number, boolean) HY340, 2009 Α. Σαββίδης Slide 23 / 143

Alpha i-code (3/3) Ο πίνακας για τα quads είναι δυναμικός, επομένως δεν έχουμε δείκτες σε quads αλλά χρησιμοποιούμε το index του κάθε quad για να αναφερθούμε σε αυτό. Ο πίνακας για τα quads είναι δυναμικός, επομένως δεν έχουμε δείκτες σε quads αλλά χρησιμοποιούμε το index του κάθε quad για να αναφερθούμε σε αυτό. … if (a > b) c = true; else c = false; … indexOpResult / Label Arg1Arg2 … 10IF_GREATER13ab 11ASSIGNcfalse 12JUMP14 13ASSIGNctrue 14 … HY340, 2009 Α. Σαββίδης24/143

HY Γλώσσες και Μεταφραστές Φροντιστήριο Intermediate Code

if statement if (expr) stmt skip if go if HY340, 2009 Α. Σαββίδης Slide 26 / 143

if..else statement if (expr) stmt else stmt HY340, 2009 Α. Σαββίδης Slide 27 / 143

while statement while (expr) stmt break list continue list HY340, 2009 Α. Σαββίδης Slide 28 / 143

for statement for (elist1; expr; elist2) stmt break list continue list false true loop closure HY340, 2009 Α. Σαββίδης Slide 29 / 143

Ενδεικτικό παράδειγμα Ενδεικτικό παράδειγμα HY340, 2009 Α. Σαββίδης Slide 30 / 143