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

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

ΘΠ06 - Μεταγλωττιστές Ενδιάμεσος Κώδικας – Μεταφραστικά Σχήματα.

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


Παρουσίαση με θέμα: "ΘΠ06 - Μεταγλωττιστές Ενδιάμεσος Κώδικας – Μεταφραστικά Σχήματα."— Μεταγράφημα παρουσίασης:

1 ΘΠ06 - Μεταγλωττιστές Ενδιάμεσος Κώδικας – Μεταφραστικά Σχήματα

2 Βασικές Τετράδες (I)  unit I, -, -και endu, I, -, -  η αρχή και το τέλος του ενδιάμεσου κώδικα μιας δομικής μονάδας, I είναι το όνομα της δομικής μονάδας  op, x, y, z  πράξεις ανάμεσα στα x και y με αριθμητικό τελεστή op (+, -, *, /, %)  πράξεις ανάμεσα στα x και y με λογικό τελεστή op (, ==, =) στις οποίες αν η συνθήκη (x op y) είναι αληθής ο έλεγχος μεταφέρεται στην τετράδα με ετικέτα z  =, x, -, z  ανάθεση της τιμής του x στο z

3 Βασικές Τετράδες (II)  array, x, y, z  αναφορά σε στοιχείο πίνακα (z), το x είναι ο πίνακας, το y η σχετική απόσταση από τη διεύθυνση του x[0]  if, x, true, z  αν η τιμή του x (boolean) είναι αληθής ο έλεγχος μεταφέρεται στην τετράδα με ετικέτα z  jump, -, -, z  άλμα στην τετράδα με ετικέτα z

4 Βασικές Τετράδες (IIΙ)  call, -, -, I  κλήση υποπρογράμματος με όνομα I  par, x, m, -  πέρασμα ορισμάτων υποπρογράμματος, x είναι η παράμετρος και m ο τρόπος περάσματος  ret, -, -, -  επιστροφή απο την εκτέλεση μιας δομικής μονάδος

5 Στοιχεία Πίνακα (Ι)  Τα στοιχεία ενός πίνακα αποθηκεύονται συνεχόμενα σε ένα μπλοκ διευθύνσεων  Για να προσπελάσουμε το στοιχείο i ενός πίνακα Α τύπου w  βάση + i ×w -- για πίνακα μιας διάστασης  βάση + i 1 × w 1 + i 2 × w 2 + … + i n × w n -- για πίνακα n διαστάσεων Α[0,0] Α[0,1] Α[0,2] Α[1,0] Α[1,1] Α[1,2] Ενας πίνακας Α διαστάσεων 2 × 3 αποθηκέυεται σε row-major format 1 η γραμμή 2 η γραμμή

6 Στοιχεία Πίνακα (ΙΙ)  Παράδειγμα int a[x], b[y]; …. x = a[i] + b[j]; 1: mul, i, 4, t 1 2: array, a, t 1, t 2 3: mul, j, 4, t 3 4: array, b, t 3, t 4 5: add, t 2, t 4, t 5 6: assign, t 5, -, x int a[2][3]; …. x = c + a[i][j] ; 1: mul, i, 12, t 1 2: mul, j, 4, t 2 3: add, t 1, t 2, t 3 4: array, a, t 3, t 4 5: add, c, t 4, t 5 5: assign, t 5, -, x W 1 = 4 (int) w 2 = 3 × 4 (δεύτερη διάσταση × w 1 )

7 Εντολή if (I)  if (expr) stmt Ενδιάμεσος κώδικας για το expr if, t expr, true, l 1 Ενδιάμεσος κώδικας για το stmt l 1 : … jump, -, -, l 2 l 2 : … if (a+b > c-d) x = a+b; 1: add, a, b, t 1 2: sub, c, d, t 2 3: great, t 1, t 2, 6 4: assign, false, -, t 3 5: jump, -, -, 7 6: assign, true, -, t 3 7, if, t 3, true, 9 8: jump, -, -, 11 9: add, a, b, t4 10: assign, t4, -, x 11: … expr quads (1 – 6) if quads (7 – 8) stmt quads (9 – 10)

8 Εντολή if (II) if_stmt:TK_IF ‘(‘ cond ‘)’ { c 1 } stmt { c 2 } c 1 : $3.truelist = emit(“if”, $3.place, “true”, L 1 ); $3.falselist = emit(“jump”, “-”, “-”, L 2 ) backpatch($3.truelist, nextquad()); c 2 : backpatch($3.falselist, nextquad());

9 Εντολή if – else (I)  if (expr) stmt 1 else stmt 2 Ενδιάμεσος κώδικας για το expr if, t expr, true, l 1 Ενδιάμεσος κώδικας για το stmt 1 l 1 : … jump, -, -, l 2 l 2 : … jump, -, -, l 3 Ενδιάμεσος κώδικας για το stmt 2 l 3 : … if (x > y) a = x; else a = y; 1: great, x, y, 4 2: assign, false, -, t 1 3: jump, -, -, 5 4: assign, true, -, t 1 5, if, t 1, true, 7 6: jump, -, -, 9 7: assign, a, -, x 8: jump, -, -, 10 9: assign, a, -, y 10: … expr quads (1 – 4) if quads (5 – 6) stmt 1 quad stmt 2 quad

10 Εντολή if – else (II) if_stmt:TK_IF ‘(‘ cond ‘)’ { c 1 } stmt TK_ELSE {c 2 } stmt {c 3 } c 1 : $3.truelist = emit(“if”, $3.place, “true”, L 1 ); $3.falselist = emit(“jump”, “-”, “-”, L 2 ) backpatch($3.truelist, nextquad()); c 2 : $5.nextlist = emit(“jump”, “-”, “-”, L 3 ) backpatch($3.falselist, nextquad()); c 3 : backpatch($5.nextlist, nextquad());

11 Εντολή while (I)  while (expr) stmt Ενδιάμεσος κώδικας για το expr if, t expr, true, l 2 Ενδιάμεσος κώδικας για το stmt l 2 : … jump, -, -, l 3 l 3 : … l 1 : … jump, -, -, l 1 while (a > b) a = a + 1; 1: great, a, b, 4 2: assign, false, -, t 1 3: jump, -, -, 5 4: assign, true, -, t 1 5, if, t 1, true, 7 6: jump, -, -, 10 7: add, a, 1, t 2 8: assign, a, t 2 9: jump, -, -, 1 10: … expr quads (1 – 4) while quads (5 – 6, 9) stmt quads (5 – 6)

12 Εντολή while (II) while_stmt: TK_WHILE { c 1 } ‘(‘ cond ‘)’ { c 2 } stmt { c3 } c 1 : l = nextquad(); c 2 : $3.truelist = emit(“if”, $3.place, “true”, L 1 ); $3.falselist = emit(“jump”, “-”, “-”, L 2 ) backpatch($3.truelist, nextquad()); c 3 : emit(“jump”, “-”, “-”, l) backpatch($3.falselist, nextquad())

13 Εντολές break και continue Ενδιάμεσος κώδικας για το expr if, t expr, true, l 2 Ενδιάμεσος κώδικας για το stmt l 2 : … jump, -, -, l 3 l 3 : … l 1 : … jump, -, -, l 1 breakcontinue 1: great, a, b, t 1 2: assign, false, -, t 1 3: jump, -, -, 5 4: assign, true, -, t 1 5, if, true, t1, 7 6: jump, -, -, 15 7: add, a, 1, t 2 8: assign, a, t 2 9: eq, a, 3, t 3 10: assign, false, t 3 11: jump, -, -, 13 12: assign, true, t 3 13: jump, -, -, 15 13: jump, -, -, 1 14: jump, -, -, 1 15: … while (a > b) { a = a + 1; if( a == 3 ) break ; } break quad continue quad

14 Συναρτήσεις (I)  Δήλωση συναρτήσεων  η λίστα τετράδων που προκύπτουν από το το σώμα της συνάρτησης περικλείονται από τις τετράδες  unit, func_name, -, - endu, func_name, -, -  Κλήση συναρτήσεων  πέρασμα παραμέτρων  param, p_name, c_type, -  ανάθεση αποτελέσματος επιστροφής συνάρτησης  param, p_name, RET, -  κλήση συνάρτησης  call, func_name, num_param, -  call, func_name, num_param, RET  call, func_name, num_param, return_param

15 Συναρτήσεις (II) f(a) 1: param, a, V, - 2: call, f, 1, - n = f(a) 1: param, a, V, - 2: param, t 1, RET, - 3: call, f, 1, RET 4: assign, t 1, -, n n = f(a) 1: param, a, V, - 2: call, f, 1, t 1 3: assign, t 1, -, n

16 Αλλαγές στο bison  Στο union προσθέτουμε  την μεταβλητή PLACE η οποία περιέχει την θέση όπου βρίσκεται η τιμή μιας μεταβλητής ή την τιμή της αν είναι σταθερά  την μεταβλητή NEXT (ή NEXTLIST) η οποία περιέχει μια λίστα από ετικέτες τετράδων που έχουν παραχθεί από την μετάφραση του συμβόλου (μόνο για σύμβολα stmt, expr, block κτλ)  τις μεταβλητές TRUE και FALSE (ή TRUELIST, FALSELIST) που περιέχουν λίστες από ετικέτες τετράδων που παράγονται κατά την μετάφραση λογικών συνθηκών και δηλώνουν που θα μεταφερθεί ο έλεγχος αν η συνθήκη είναι αληθής ή ψευδής αντίστοιχα


Κατέβασμα ppt "ΘΠ06 - Μεταγλωττιστές Ενδιάμεσος Κώδικας – Μεταφραστικά Σχήματα."

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


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