Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Ενδιάμεσος κώδικας - Backpatching.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Ενδιάμεσος κώδικας - Backpatching."— Μεταγράφημα παρουσίασης:

1 ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Ενδιάμεσος κώδικας - Backpatching

2 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 2 Runtime Checking (1/3) Η γλώσσα alpha είναι μια dynamic typing γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται σε αυτήν) επομένως δεν μπορούμε κατά την μεταγλώττιση να εφαρμόσουμε έλεγχο τύπων. if (x > 12) a = false; else a = 3.33; b = (a and c);// ? x = input(); y = !x;// ?

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

4 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 4 Runtime Checking (3/3)  Run-time Warnings / Run-time Errors l-value = r-value +,-,*,%,++,--,- &&, ||, ! >,>=,<,<= ==, != … (see Lecture 9)

5 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 5 Alpha i-code (1/3) enum iopcode { assign, add, sub, mul, div, mod, not, if_eq, if_noteq, … }; struct quad { iopcodeop; expr*res; expr*arg1; expr*arg2; unsignedlabel; unsignedline; }; quad*quads = (quad *) 0; quads[quadNo].label = …

6 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 6 Alpha i-code (2/3) enum expr_t { var_e, tableitem_e, programfunc_e, libraryfunc_e, … }; struct expr { expr_t type; symbol* sym; expr* index; double numConst; char* strConst; unsigned char boolConst; expr* next; }; Σε ένα quad μπορούμε δώσουμε τις παρακάτω τιμές: - σταθερή τιμή (string, number, boolean) - τιμή συνάρτησης βιβλιοθήκης (όνομα) - τιμή συνάρτησης προγράμματος (διεύθυνση) - κρυφή μεταβλητή - μεταβλητή προγράμματος

7 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 7 Alpha i-code (3/3)  Ο πίνακας για τα quads είναι δυναμικός, επομένως δεν έχουμε δείκτες σε quads αλλά χρησιμοποιούμε το index του κάθε quad για να αναφερθούμε σε αυτό. … if (a > b) c = true; else c = false; … indexOpArg1Arg 2 Result / Label … 10IF_GREATERab13 11ASSIGNfalsec 12JUMP14 13ASSIGNtruec 14 …

8 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 8 Backpatching  Για την αποτίμηση των λογικών εκφράσεων (boolean expressions) υπάρχουν δύο τεχνικές: Ολική αποτίμηση (total boolean evaluation)  Αποτιμάται ολόκληρη η έκφραση. Μερική αποτίμηση (short circuit / jumping code)  Αποτιμάται μόνο το ελάχιστο αναγκαίο τμήμα της έκφρασης από το οποίο μπορεί να εξαχθεί συμπέρασμα για την τιμή της.

9 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 9 Ολική αποτίμηση έκφρασης  Παράδειγμα a < b or c < d  Ο ενδιάμεσος κώδικας που αντιστοιχεί σε αυτή την έκφραση είναι:

10 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 10 Μερική αποτίμηση έκφρασης  Προσθέτοντας τα συντιθέμενα γνωρίσματα (synthesized attributes) truelist και falselist. Καθώς παράγεται ο ενδιάμεσος κώδικας οι JUMP εντολές δεν συμπληρώνονται. Τα labels που αντιστοιχούν σε αυτές τις εντολές προστίθενται στην κατάλληλη από τις δύο λίστες.

11 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 11 Γραμματική  Η γραμματική είναι η εξής: Π.χ. από τον 1 ο κανόνα παρατηρούμε ότι εάν το Ε1 είναι true τότε και το Ε θα είναι true, άρα η λίστα Ε1.truelist γίνεται μέρος της Ε.truelist. Εάν το Ε1 είναι false, τότε πρέπει να εξεταστεί το Ε2.

12 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 12 Συναρτήσεις χειρισμού λίστας  makelist(i): Δημιουργεί μία νέα λίστα  merge(p1, p2): Συνενώνει τις λίστες p1 και p2.  backpatch(p, i): Εισάγει το i ως το target label όλων των JUMP εντολών που είναι καταχωρημένα στην p.

13 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 13 Σημασιολογικοί κανόνες

14 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 14 Παράδειγμα (1/5)  a < b or c < d and e < f Ο ενδιάμεσος κώδικας που παράγεται είναι:  1 ο Βήμα: Γινεται reduce το a id1 relop id2.  2 ο Βήμα: Γίνεται reduce το c id1 relop id2. 1: IF_LESSab_ 2: JUMP_ 3: IF_LESScd_ 4: JUMP_

15 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 15 Παράδειγμα (2/5)  3 ο Βήμα: Γίνεται reduce το e id1 relop id2.  4 ο Βήμα: Από τον κανόνα Ε -> Ε1 and M E2 γίνεται reduce. Εκτελείται ο σημασιολογικός κανόνας backpatch({3}, 5). 5: IF_LESSef_ 6: JUMP_ 1: IF_LESSab_ 2: JUMP_ 3: IF_LESScd5 4: JUMP_ 5: IF_LESSef_ 6: JUMP_

16 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 16 Παράδειγμα (3/5)  5 ο Βήμα: Από τον κανόνα Ε -> Ε1 or M E2 γίνεται reduce. Εκτελείται ο σημασιολογικός κανόνας backpatch({2}, 3). 1: IF_LESSab_ 2: JUMP3 3: IF_LESScd5 4: JUMP_ 5: IF_LESSef_ 6: JUMP_

17 Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 17 Παράδειγμα (4/5)

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


Κατέβασμα ppt "ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο Ενδιάμεσος κώδικας - Backpatching."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google