1 / 15

ΘΠ06 - Μεταγλωττιστές

ΘΠ06 - Μεταγλωττιστές. Ενδιάμεσος Κώδικας – Μεταφραστικά Σχήματα. Βασικές Τετράδες (I). unit I, -, - και endu, I, -, - η αρχή και το τέλος του ενδιάμεσου κώδικα μιας δομικής μονάδας, I είναι το όνομα της δομικής μονάδας op, x, y, z

marva
Download Presentation

ΘΠ06 - Μεταγλωττιστές

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 -- για πίνακα μιας διάστασης • βάση + i1 × w1 + i2 × w2 + … + in × wn-- για πίνακα n διαστάσεων Α[0,0] 1η γραμμή Ενας πίνακας Α διαστάσεων 2 × 3 αποθηκέυεται σε row-major format Α[0,1] Α[0,2] Α[1,0] 2η γραμμή Α[1,1] Α[1,2]

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

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

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

  9. Εντολή if – else (I) • if (expr) stmt1 else stmt2 • if (x > y) • a = x; • else • a = y; • 1: great, x, y, 4 • 2: assign, false, -, t1 • 3: jump, -, -, 5 • 4: assign, true, -, t1 • 5, if, t1, true, 7 • 6: jump, -, -, 9 • 7:assign, a, -, x • 8: jump, -, -, 10 • 9: assign, a, -, y • 10:… Ενδιάμεσος κώδικας για το expr if, texpr, true, l1 jump, -, -, l2 l1: … Ενδιάμεσος κώδικας για το stmt1 expr quads (1 – 4) if quads (5 – 6) jump, -, -, l3 l2: … stmt1 quad Ενδιάμεσος κώδικας για το stmt2 stmt2 quad l3: …

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

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

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

  13. Συναρτήσεις (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

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

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

More Related