Παραγωγή Ενδιάμεσου Κώδικα. Διαλζξεις στο μάθημα: Μεταφραστζς Γιώργος Μανής

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Παραγωγή Ενδιάµεσου Κώδικα. Γιώργος Μανής

Παραγωγή Ενδιάµεσου Κώδικα

Συντακτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Γλώσσες Προγραμματισμού Μεταγλωττιστές

3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Η γλώσσα προγραμματισμού EEL

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

Η γλώσσα προγραμματισμού Strange

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ.

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

16. Πίνακεσ και Συναρτήςεισ

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

Μεταγλωττιστές Βελτιστοποίηση

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Σχεδίαση Γλωσσών & Μεταγλωττιστζς

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

Θεςιακά ςυςτιματα αρίκμθςθσ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΣΗΜΑΤΩΝ & ΣΥΣΤΗΜΑΤΩΝ. ΜΕΤΑΣΦΗΜΑΤΙΣΜΟΣ Laplace

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

Μεταγλωττιστές. Παραγωγή Ενδιάμεσου Κώδικα. Εργαστήριο 8. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Δξγαιεία Καηαζθεπέο 1 Σάμε Σ Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ. ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Φαθόο κε ζσιήλα.

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. Διαφάνειεσ: Βαςικζσ Αρχζσ Προγραμματιςμοφ Α.Π.Θ. Δθμιτρθσ Βράκασ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

Έωρ και 28% η αύξηζη ηων ειζθοπών από ηο 2019!

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ ΚΑΗ ΔΠΑΛ ΣΔΣΑΡΣΖ 25 ΜΑΨΟΤ 2016 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΑΡΥΔ ΟΗΚΟΝΟΜΗΚΖ ΘΔΧΡΗΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ - ΔΠΗΛΟΓΖ

Μεταγλωττιστές Βελτιστοποίηση

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

EL Eνωμένη στην πολυμορυία EL A8-0046/319. Τροπολογία

Η γλώςςα προγραμματιςμού C

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

2 ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ. Η πιο απλι μορφι ςφγκριςθσ εντολισ ελζγχου ζχει τθ μορφι : if (<ζπλζήθε>) εληνιή; if(<ζπλζήθε>){ block εληνιώλ; }

HY437 Αλγόριθμοι CAD

ΓΗΜΟΙΑ ΟΙΚΟΝΟΜΙΚΗ ΣΟΜΟ Γ

ΓΔΧΜΔΣΡΙΑ ΓΙΑ ΟΛΤΜΠΙΑΓΔ

Εξγαζηήξην Πιεξνθνξηθήο

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

ΔΝΓΔΙΚΤΙΚΔΣ ΛΥΣΔΙΣ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΔΥΘΥΝΣΗΣ Γ ΛΥΚΔΙΟΥ ΓΔΥΤΔΡΑ 27 ΜΑΪΟΥ 2013

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΠΔΡΗΓΡΑΦΖ ΛΔΗΣΟΤΡΓΗΚΟΣΖΣΑ ΥΔΓΗΟΤ ΑΡΗΘΜ. 1

ΜΑΘΗΜΑΤΙΚΑ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΦΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ Β ΛΥΚΔΙΟΥ ΤΔΣΤ(1) ΣΤΑ ΓΙΑΝΥΣΜΑΤΑ

x x x x tan(2 x) x 2 2x x 1

Ενδεικτικά Θέματα Στατιστικής ΙΙ

Σημεία Ασύπματηρ Ππόσβασηρ (Hot-Spots)

Ανάπηςξη Δθαπμογών ζε Ππογπαμμαηιζηικό Πεπιβάλλον

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

17. Πολυδιάςτατοι πίνακεσ

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

Φυτοχημική Ανάλυση - 4 η άσκηση

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

3 ΑΠΙΔ ΑΘΖΔΗ ΘΟΚΟΙΟΓΗΑ ΠΟΤ ΑΛΣΗΚΔΣΩΠΗΕΟΛΣΑΗ ΚΔ ΦΤΗΘΖ ΘΑΗ ΚΑΘΖΚΑΣΗΘΑ ΙΤΘΔΗΟΤ

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

ΕΞΙΣΩΣΕΙΣ. Α. Πρωτοβάθμιεσ Εξιςώςεισ. Β. Διερεφνηςη Εξιςώςεων. 1x είναι αδφνατθ. x 1 x 1. Άλγεβρα Α Λυκείου

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

ΑΠΟ ΤΟ ΕΠΙΜΕΛΗΤΗΡΙΟ Έρευνα αξιολόγησης για τις Β2Β συναντήσεις.

Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη

ιαφάνειες παρουσίασης #3

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

EL Eνωμένη στην πολυμορυία EL A8-0249/119. Τροπολογία. Mireille D'Ornano εμ νλόκαηνο ηεο Οκάδαο ENF

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

Γ ΣΑΞΖ ΔΝΗΑΗΟΤ ΛΤΚΔΗΟΤ ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΘΔΣΗΚΩΝ ΚΑΗ ΟΗΚΟΝΟΜΗΚΩΝ ΠΟΤΓΩΝ ΤΝΑΡΣΖΔΗ ΟΡΗΑ ΤΝΔΥΔΗΑ (έως Θ.Bolzano) ΘΔΜΑ Α

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

ΑΚΗΕΙ ΠΡΟΒΛΕΨΕΩΝ ΠΡΟΒΛΕΨΕΙ

Ιςοηυγιςμζνα δζντρα και Β- δζντρα. Δομζσ Δεδομζνων

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

Εγχειρίδιο Χρήςησ Support

Transcript:

Παραγωγή Ενδιάμεσου Κώδικα Διαλζξεις στο μάθημα: Μεταφραστζς Γιώργος Μανής

Οι Φάςεισ τησ Μεταγλώττιςησ λεκτική ανάλυση ςυντακτικι ανάλυςθ Πίνακασ Συμβόλων ςθμαςιολογικι ανάλυςθ παραγωγι ενδιάμεςου κώδικα Διαχείριςθ λακών βελτιςτοποίθςθ ενδιάμεςου κώδικα παραγωγι τελικοφ κώδικα βελτιςτοποίθςθ τελικοφ κώδικα

Παραγωγή Ενδιάμεςου Κώδικα Συντακτικό δζντρο Παραγωγι Ενδιάμεςου Κώδικα Ενδιάμεςοσ Κώδικασ

Παραγωγή Ενδιάμεςου Κώδικα Κώδηθαο ζε αξρηθή γιώζζα Κώδικασ ςε ενδιάμεςθ γλώςςα Κώδηθαο ζε γιώζζα κεραλήο (assembly)

Ενδιάμεςη Γλώςςα Ο ενδιάμεςοσ κώδικασ είναι ζνα ςφνολο από τετράδεσ ζνασ τελεςτισ τρία τελοφμενα π.χ. +, a,b,t_1 *, t_1,2,t_2 :=,t_2,_,c Οι τετράδεσ είναι αρικμθμζνεσ. Κάκε τετράδα ζχει μπροςτά τθσ ζναν μοναδικό αρικμό που τθ χαρακτθρίηει. Μόλισ τελειώςει θ εκτζλεςθ μίασ τετράδασ εκτελείται θ τετράδα που ζχει τον αμζςωσ μεγαλφτερο αρικμό, εκτόσ εάν θ τετράδα που μόλισ εκτελζςτθκε υποδείξει κάτι διαφορετικό. π.χ.: 100: +,a,b,c 110: +,d,e,f

Οι τελεςτζσ αριθμητικών πράξεων τετράδεσ τθσ μορφισ: οp, x, y, z όπου το op μπορεί να είναι ζνα εκ των: +, -, *, / τα τελοφμενα x,y μπορεί να είναι: ονόματα μεταβλθτών αρικμθτικζσ ςτακερζσ το τελοφμενο z μπορεί να είναι: όνομα μεταβλθτισ

Οι τελεςτζσ αριθμητικών πράξεων τετράδεσ τθσ μορφισ: οp, x, y, z εφαρμόηεται ο τελεςτισ op ςτα τελοφμενα x και y και το αποτζλεςμα τοποκετείται ςτο τελοφμενο z π.χ.: +,a,b,c /,a,b,c αντιςτοιχεί ςτθν πράξθ c=a+b αντιςτοιχεί ςτθν πράξθ c=a/b

Ο τελεςτήσ εκχώρηςησ τετράδεσ τθσ μορφισ: :=, x, _, z το τελοφμενο x μπορεί να είναι: όνομα μεταβλθτισ αρικμθτικι ςτακερά το τελοφμενο z μπορεί να είναι: όνομα μεταβλθτισ θ τιμι του x εκχωρείται ςτθ μεταβλθτι z αντιςτοιχεί ςτθ εκχώρθςθ z:=x

Παράδειγμα r:=4 pi:=3.14 area = pi * r * r κα μποροφςε ιςοδφναμα να είχαμε: χωρίσ να ςθμαίνει ότι αυτό ακριβώσ κα βγάλει και ο μεταγλωττιςτισ 100: :=,4,_,r 110: :=,3.14,_,pi 120: *,pi,r,t_1 130: *,Τ_1,r,area

Τελεςτήσ άλματοσ χωρίσ ςυνθήκη jump, _, _, z μεταπιδθςθ χωρίσ όρουσ ςτθ κζςθ z π.χ. 100: :=,1,_x 110: jump 130 120: :=,2,_x 130 όταν φτάςουμε ςτο 130 θ τιμι του x κα είναι 1 και όχι 2

Τελεςτήσ άλματοσ χωρίσ ςυνθήκη relop, x, y, z όπου relop ζνασ από τουσ τελεςτζσ =, >, <, <>, >=, <= μεταπιδθςθ ςτθ κζςθ z αν ιςχφει θ x relop y π.χ. 100: =,a,4,120 110: jump,_,_,140 120: :=,1,_b 130: jump 150 140: :=,2,_,b 150: το b κα ζχει τθν τιμι 1 αν ιςχφει θ ςυνκικθ a=4 και 2 αν δεν ιςχφει

Αρχή και τζλοσ ενότητασ begin_block, name, _, _ αρχι υποπρογράμματοσ ι προγράμματοσ με το όνομα name end_block, name, _, _ τζλοσ υποπρογράμματοσ ι προγράμματοσ με το όνομα name halt, _, _, _ τερματιςμόσ προγράμματοσ

Αρχή και τζλοσ ενότητασ Παράδειγμα begin_block - end_block, name - halt 100: begin_block, add, _, _ 110: :=, 1, _, x 120: :=, 2, _, y 130: +, x, y, z 140: halt, _, _, _ 150: end_block, add, _, _

Συναρτήςεισ - Διαδικαςίεσ par, x, m, _ όπου x παράμετροσ ςυνάρτθςθσ και m ο τρόποσ μετάδοςθσ CV : μετάδοςθ με τιμι REF: μετάδοςθ με αναφορά RET: επιςτροφι τιμισ ςυνάρτθςθσ call, name, _, _ κλιςθ ςυνάρτθςθσ name ret, x, _, _ επιςτροφι τιμισ ςυνάρτθςθσ

Παράδειγμα κλήςησ ςυνάρτηςησ x := foo (in a, inout b) κα μποροφςε ιςοδφναμα να είχαμε: 100: par, a, cv, _ χωρίσ να ςθμαίνει ότι αυτό ακριβώσ κα βγάλει και ο μεταγλωττιςτισ 110: par, b, ref, _ 120: par, T_1, ret, _ 130: call, foo, _, _, _ 140: τιμι ςτο x

Παράδειγμα κλήςησ διαδικαςίασ call foo (in a, inout b) κα μποροφςε ιςοδφναμα να είχαμε: 100: par, a, cv, _ χωρίσ να ςθμαίνει ότι αυτό ακριβώσ κα βγάλει και ο μεταγλωττιςτισ 110: par, b, ref, _ 120: call, foo, _, _, _ 130

Βοηθητικζσ Υπορουτίνεσ nextquad() επιςτρζφει τον αρικμό τθσ επόμενθσ τετράδασ που πρόκειται να παραχκεί genquad(op, x, y, z) δθμιουργεί τθν επόμενθ τετράδα (op, x, y, z) newtemp() δθμιουργεί και επιςτρζφει μία νζα προςωρινι μεταβλθτι οι προςωρινζσ μεταβλθτζσ είναι τθσ μορφισ T_1, T_2, T_3

Βοηθητικζσ Υπορουτίνεσ emptylist() δθμιουργεί μία κενι λίςτα ετικετών τετράδων makelist(x) δθμιουργεί μία λίςτα ετικετών τετράδων που περιζχει μόνο το x merge(list 1, list 2 ) δθμιουργεί μία λίςτα ετικετών τετράδων από τθ ςυνζνωςθ των λιςτών list 1, list 2 backpatch(list,z) θ λίςτα list αποτελείται από δείκτεσ ςε τετράδεσ των οποίων το τελευταίο τελοφμενο δεν είναι ςυμπλθρωμζνο θ backpatch επιςκζπτεται μία μία τισ τετράδεσ αυτζσ και τισ ςυμπλθρώνει με τθν ετικζτα z

Αρχή και Τζλοσ Block <PROGRAM> <PROGRAMBLOCK (name) > ::= ::= program ID <PROGRAMBLOCK (ID) <DECLARATIONS> <SUBPROGRAMS> genquad( begin_block,name, _, _ ) <BLOCK> if (this is the main program block) genquad( halt, _, _, _ ) genquad( end_block,name, _, _ )

Αριθμητικζσ Παραςτάςεισ Παράδειγμα: x+(y+z) w ενδιάμεςοσ κώδικασ: 1: +,y,z,t_1 2:,T_1,w,T_2 3: +, x, T_2, T_3

Αριθμητικζσ Παραςτάςεισ Ε -> T 1 ( + T 2 {P 1 })* {P 2 } {P 1 }: w = newtemp() Νέα πξνζωξηλή κεηαβιεηή πνπ ζα θξαηήζεη ην κέρξη ζηηγκήο απνηέιεζκα genquad( +,T 1.place,T 2.place,w) T 1.place=w Παξαγωγή ηεηξάδαο πνπ πξνζζέηεη ην κέρξη ζηηγκήο απνηέιεζκα ζην λέν Τ 2 {P 2 }: E.place=T 1.place Τν κέρξη ζηηγκήο απνηέιεζκα ηνπνζεηείηαη ζηελ T 1 ώζηε λα ρξεζηκνπνηεζεί αλ ππάξμεη επόκελν T 2 Όηαλ δελ ππάξρεη άιιν T 2 ην απνηέιεζκα είλαη ζην Τ 1

Αριθμητικζσ Παραςτάςεισ T -> F 1 ( F 2 {P 1 })* {P 2 } {P 1 }: w = newtemp() genquad(,f 1.place,F 2.place,w) F 1.place=w {P 2 }: T.place=F 1.place Αλάινγε ινγηθή κε ηνλ θαλόλα Δ

Αριθμητικζσ Παραςτάςεισ F -> ( E ) {P 1 } Απιή κεηαθνξά από ην Δ.place ζην F.place {P 1 }: F.place=E.place F -> id {P 1 } Απιή κεηαθνξά από ην id.place ζην F.place {P 1 }: F.place=id.place

Αριθμητικζσ Παραςτάςεισ procedure E (E.place) begin T ( T 1.place ) while token=plustk do begin lex(); T (T 2.place) w:=newtemp() genquad( +, T 1.place, T 2.place, w) T 1.place :=w end E.place := T 1.place end

Λογικζσ Παραςτάςεισ Ζστω η γραμματική B --> Q ( or Q )* Q --> R ( and R )* R --> ( B ) R --> E relop E

Λογικζσ Παραςτάςεισ - OR Παράδειγμα: B = x > y or x <w 100: >, x, y, _ 101: jump, _, _, 102 B.true 102: <, x, w, _ 103: jump, _, _, _ B.false

Λογικζσ Παραςτάςεισ - OR Παράδειγμα: B = x > y or x <w 100: <=, x, y, _ 101: >=, x, w, _ B.true 102: jump, _, _, _ B.false

Λογικζσ Παραςτάςεισ - OR Παράδειγμα: B = x > y or x < w or a > c 100: <=, x, y, _ B.true 101: >=, x, w, _ 102: <=, a, c, _ 103: jump, _, _, _ B.false

Λογικζσ Παραςτάςεισ - OR B -> Q 1 {P 1 } ( or {P 2 } Q 2 {P 3 })* {P 1 }: B.true = Q 1.true Μεηαθνξά ηωλ ηεηξάδωλ από ηε ιίζηα Q 1 ζηε ιίζηα Β B.false = Q 1.false {P 2 }: backpatch(b.false, nextquad()) Σπκπιήξωζε όζωλ ηεηξάδωλ κπνξνύλ λα ζπκπιεξωζνύλ κέζα ζηνλ θαλόλα {P 3 }: B.true = merge(b.true, Q 2.true) B.false = Q 2.false Η ιίζηα false πεξηέρεη ηελ ηεηξάδα ε νπνία αληηζηνηρεί ζε ζηε κε αιεζή απνηίκεζε ηεο ινγηθήο παξάζηαζεο Σπζζώξεπζε ζηε ιίζηα true ηωλ ηεηξάδωλ πνπ δελ κπνξνύλ λα ζπκπιεξωζνύλ θαη αληηζηνηρνύλ ζε αιεζή απνηίκεζε ινγηθήο παξάζηαζεο

Λογικζσ Παραςτάςεισ - AND Παράδειγμα: B = x > y and x <w 100: >, x, y, 102 101: jump, _, _, _ B.true 102: <, x, w, _ 103: jump, _, _, _ B.false

Λογικζσ Παραςτάςεισ - AND Q -> R 1 {P 1 } ( and {P 2 } R 2 {P 3 })* {P 1 }: Q.true = R 1.true Μεηαθνξά ηωλ ηεηξάδωλ από ηε ιίζηα R 1 ζηε ιίζηα Q Q.false = R 1.false {P 2 }: backpatch(q.true, nextquad()) Σπκπιήξωζε όζωλ ηεηξάδωλ κπνξνύλ λα ζπκπιεξωζνύλ κέζα ζηνλ θαλόλα {P 3 }: Q.false = merge(q.false, R 2.false) Q.true = R 2.true Η ιίζηα true πεξηέρεη ηελ ηεηξάδα ε νπνία αληηζηνηρεί ζε ζηεn αιεζή απνηίκεζε ηεο ινγηθήο παξάζηαζεο Σπζζώξεπζε ζηε ιίζηα false ηωλ ηεηξάδωλ πνπ δελ κπνξνύλ λα ζπκπιεξωζνύλ θαη αληηζηνηρνύλ ζε κε αιεζή απνηίκεζε ινγηθήο παξάζηαζεο

Λογικζσ Παραςτάςεισ R -> ( B ) {P 1 } {P 1 }: R.true=B.true Μεηαθνξά ηωλ ηεηξάδωλ από ηε ιίζηα B ζηε ιίζηα R R.false=B.false

Λογικζσ Παραςτάςεισ R -> E 1 relop E 2 {P 1 } {P 1 }: R.true=makelist(nextquad()) genquad(relop, E 1.place, E 2.place, _ ) R.false=makelist(nextquad()) genquad( jump, _, _, _ ) Γεκηνπξγία κε ζπκπιεξωκέλεο ηεηξάδαο θαη εηζαγωγή ζηε ιίζηα κε ζπκπιεξωκέλωλ ηεηξάδωλ γηα tελ αιεζή απνηίκεζε ηεο relop Γεκηνπξγία κε ζπκπιεξωκέλεο ηεηξάδαο θαη εηζαγωγή ζηε ιίζηα κε ζπκπιεξωκέλωλ ηεηξάδωλ γηα tε κε αιεζή απνηίκεζε ηεο relop

Κλήςη Υποπρογραμμάτων Κλήση διαδικασίας: call assign_v (in a, inout b) par, a, CV, _ par, b, REF, _ call, assign_v, _, _

Κλήςη Υποπρογραμμάτων Κλήση συνάρτησης: error = assign_v (in a, inout b) par, a, CV, _ par, b, REF, _ w = newtemp() par, w, RET, _ call, assign_v, _, _

Εντολή return S -> return (E) {P1} {P1}: genquad( retv,e.place, _, _ )

Εκχώρηςη S -> id := E {P1}; {P1} : genquad( :=,E.place, _,id)

Δομή while S -> while {P1} B do {P2} S 1 {P3} {P1}: {P2}: {P3}: Bquad:=nextquad() backpatch(b.true,nextquad()) genquad( jump, _, _,Bquad) backpatch(b.false,nextquad()) Σπκπιήξωζε ηωλ ηεηξάδωλ πνπ έρνπλ κείλεη αζπκπιήξωηεο θαη θαη γλωξίδνπκε ηώξα όηη πξέπεη λα ζπκπιεξωζνύλ κε ηελ επόκελε ηεηξάδα, ην true πάλω ζηελ S θαη ην false έμω από ηε δνκή Μεηάβαζε ζηελ αξρή ηεο ζπλζήθεο ώζηε λα μαλαγίλεη έιεγρνο

Δομή Repeat Until S -> repeat {P1} S 1 until (cond) {P2} {P1}: squad:=nextquad() {P2}: backpatch(cond.false,squad) backpatch(cond.true,nextquad()) Οη ηεηξάδεο απηέο πξέπεη λα κεηαβνύλ ζηελ αξρή ηεο ζπλζήθεο γηα λα επαλειεγρζεί Σπκπιήξωζε ηωλ ηεηξάδωλ πνπ έρνπλ κείλεη αζπκπιήξωηεο θαη θαη γλωξίδνπκε ηώξα όηη πξέπεη λα ζπκπιεξωζνύλ κε ηελ επόκελε ηεηξάδα, δειαδή έμω από ηε δνκή

Δομή if S -> if B then {P1} S 1 {P2} TAIL {P3} {P1}: backpatch(b.true,nextquad()) {P2}: iflist=makelist(nextquad()) genquad( jump, _, _, _ ) backpatch(b.false,nextquad()) {P3}: backpatch(iflist,nextquad()) TAIL -> else S 2 TAIL -> ε Σπκπιήξωζε ηωλ ηεηξάδωλ πνπ έρνπλ κείλεη αζπκπιήξωηεο θαη θαη γλωξίδνπκε ηώξα όηη πξέπεη λα ζπκπιεξωζνύλ κε ηελ επόκελε ηεηξάδα, ζην if θαη else αληίζηνηρα Δμαζθαιίδνπκε όηη εάλ εθηειεζηνύλ νη εληνιέο ηνπ if δε ζα εθηειεζηνύλ ζηε ζπλέρεηα νη εληνιέο ηνπ else

Είςοδοσ - Ζξοδοσ S -> input (id) {P1} {P1}: genquad( inp,id.place, _, _ ) S -> print (E) {P2} {P2}: genquad( out,e.place, _, _ )