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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δομές στην C (επανάληψη)
Advertisements

Το αλφαριθμητικό (string)
Πολυδιάστατοι Πίνακες, Δομές, Ενώσεις
Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις
Αντικειμενοστραφής Προγραμματισμός
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 9: Διανύσματα και λίστες.
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
Εντολες Επιλογης (Selection)
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων, Σημασιολογικές Ενέργειες.
ΕΠΛ223 - Θεωρία και Πρακτική Μεταγλωττιστών9-1 Στατικός Έλεγχος Με τον όρο στατικός έλεγχος (static checking) χαρακτηρίζεται ο έλεγχος της συντακτικής.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
Προγραμματισμός στο ΜatLab
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
ΕΠΛ Θεωρία και Πρακτική Μεταγλωττιστών11-1 Παραγωγή Ενδιάμεσου Κώδικα Ο ενδιάμεσος κώδικας αποτελεί τη γλώσσα επικοινωνίας ανάμεσα στο εμπρόσθιο.
Εισαγωγή Ειδικά Θέματα Μεταγγλωτιστών Χειμερινό Εξάμηνο / Κατασκευή compiler για την γλώσσα Minijava.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
HY Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Environment.
ΣΥΝΑΡΤΗΣΕΙΣ.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
ΗΥ – 340 Γλώσσες και Μεταφραστές Φροντιστήριο
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 30/03/2009.
ΘΠ06 - Μεταγλωττιστές Συντακτική Ανάλυση, Bison 1.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 9: Παραγωγή Ενδιάμεσου Κώδικα (Ενδιάμεσες Γλώσσες) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 12: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Β) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
Κεφάλαιο 10 – Υποπρογράμματα
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 10: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Α) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΗΥ-340 – Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 11: Βελτιστοποίηση Ενδιάμεσου Κώδικα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πίνακες.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
HY Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Environment.
Spring 2007 Γ. Γεωργαλής, Σ. Δουμπουλάκης, Μ. Ζηδιανάκης, Θ. Μπουρδένας 1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Virtual Machine.
Επιστημονικός Υπολογισμός Ι Πρώτο Εργαστήριο Εισαγωγή στο matlab 15 Οκτωβρίου 2010 Γιώργος Δρακόπουλος ΤΜΗΥΠ.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
ΗΥ-340 – Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Παραγωγή Ενδιάμεσου Κώδικα Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ «Εισαγωγή στον οντοκεντρικό προγραμματισμό (βασική εισαγωγή στο περιβάλλον εργασίας)» Ρουσσάκης Ιωάννης, ΤΕΙ Κρήτης,
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Αντικειμενοστραφής Προγραμματισμός Ι
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Πίνακας Συμβόλων Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής.
Εισαγωγή στον Προγ/μό Υπολογιστών
Εισαγωγή στον Προγραμματισμό με Python, ΑΠΘ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Εισαγωγή στον Προγραμματισμό με Python Εβδομάδα 1: Βασικά στοιχεία.
Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

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

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

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

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

Στοιχεία Πίνακα (Ι)  Τα στοιχεία ενός πίνακα αποθηκεύονται συνεχόμενα σε ένα μπλοκ διευθύνσεων  Για να προσπελάσουμε το στοιχείο 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 η γραμμή

Στοιχεία Πίνακα (ΙΙ)  Παράδειγμα 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 )

Εντολή 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)

Εντολή 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());

Εντολή 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

Εντολή 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());

Εντολή 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)

Εντολή 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())

Εντολές 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

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

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

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