Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Μεταγλωττιστές Ενδιάμεσος Κώδικας Νίκος Παπασπύου, Κωστής Σαγώνας

Σχετικά έγγραφα
Ãëþóóá ôåôñüäùí. ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ:

Συντακτική ανάλυση. Μεταγλωττιστές. (μέρος 3ον) Νίκος Παπασπύου, Κωστής Σαγώνας

Τυπικές Γλώσσες. Μεταγλωττιστές. (μέρος 1ο) Νίκος Παπασπύου, Κωστής Σαγώνας

Τυπικές Γλώσσες. Μεταγλωττιστές. (μέρος 2ο) Νίκος Παπασπύου, Κωστής Σαγώνας

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Εισαγωγή. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

ÌåôáãëùôôéóôÝò. ÅéóáãùãÞ. ÅéóáãùãÞ (ii) Íßêïò Ðáðáóðýñïõ ÊùóôÞò Óáãþíáò. Áñ éêþ ãëþóóá L A A T ÔåëéêÞ ãëþóóá L T Y

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

Ç ãëþóóá Grace. ÌåôáãëùôôéóôÝò 2009 ÈÝìá åñãáóßáò

Ç ãëþóóá Tony. ÌåôáãëùôôéóôÝò 2010 ÈÝìá åñãáóßáò

Ç ãëþóóá Alan. ÌåôáãëùôôéóôÝò 2011 ÈÝìá åñãáóßáò

16. ÌåëÝôç ôùí óõíáñôþóåùí y=çìx, y=óõíx êáé ôùí ìåôáó çìáôéóìþí ôïõò.

ÓÕÍÄÕÁÓÔÉÊÇ É, ÓÅÐÔÅÌÂÑÉÏÓ ÏÌÁÄÁ ÈÅÌÁÔÙÍ Á

ÓÕÍÄÕÁÓÔÉÊÇ É, ÓÅÐÔÅÌÂÑÉÏÓ ÏÌÁÄÁ ÈÅÌÁÔÙÍ B

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

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Τελικός Κώδικας. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

ÊåöÜëáéï 4 ÄÉÁÍÕÓÌÁÔÁ. 4.1 ÅéóáãùãÞ (ÃåùìåôñéêÞ)

Προέλευση της Pazcal ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ÏñãÜíùóç ÐñïãñÜììáôïò

Προχωρημένες έννοιες προγραμματισμού σε C

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

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

ÊåöÜëáéï 3 ÏÑÉÆÏÕÓÅÓ. 3.1 ÅéóáãùãÞ

( ) ξî τέτοιο, + Ý åé ìßá ôïõëü éóôïí ñßæá óôï äéüóôçìá ( ) h x =,να δείξετε ότι υπάρχει ( α,β) x ΕΦΑΡΜΟΓΕΣ ΣΤΙΣ ΠΑΡΑΓΩΓΟΥΣ

ÄéáêñéôÝò êáé óõíå åßò ôõ áßåò ìåôáâëçôýò ÁóêÞóåéò

ÊåöÜëáéï 5 ÄÉÁÍÕÓÌÁÔÉÊÏÉ ÙÑÏÉ. 5.1 ÅéóáãùãÞ. 56 ÊåöÜëáéï 5. ÄÉÁÍÕÓÌÁÔÉÊÏÉ ÙÑÏÉ

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

3.1 Íá âñåèåß ôï ðåäßï ïñéóìïý ôçò óõíüñôçóçò f: 4 x. (iv) f(x, y, z) = sin x 2 + y 2 + 3z Íá âñåèïýí ôá üñéá (áí õðüñ ïõí): lim

Ç ãëþóóá Dana. ÌåôáãëùôôéóôÝò 2008 ÈÝìá åñãáóßáò

ÓÕÍÈÇÊÇ ÁÌÅÔÁÈÅÔÏÔÇÔÁÓ ÓÕÓÔÇÌÁÔÏÓ ÔÏÉ ÙÌÁÔÙÍ ÐÁÑÁÑÔÇÌÁ Â

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Λεκτική Ανάλυση. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

Σημασιολογική ανάλυση

Óõíå Þ êëüóìáôá & Áöáéñåôéêüò Åõêëåßäåéïò áëãüñéèìïò

¼ñãáíá Èåñìïêñáóßáò - ÓõóêåõÝò Øõêôéêþí Ìç áíçìüôùí

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

Cel animation. ÅöáñìïãÝò ðïëõìýóùí

{ int a = 5; { int b = 7; a = b + 3;

1. Íá ëõèåß ç äéáöïñéêþ åîßóùóç (15 ìïí.) 2. Íá âñåèåß ç ãåíéêþ ëýóç ôçò äéáöïñéêþò åîßóùóçò (15 ìïí.)

Ó ÅÄÉÁÓÌÏÓ - ÊÁÔÁÓÊÅÕÇ ÓÔÏÌÉÙÍ & ÅÉÄÉÊÙÍ ÅÎÁÑÔÇÌÁÔÙÍ ÊËÉÌÁÔÉÓÌÏÕ V X

8. ÅðéëïãÞ êáé åðáíüëçøç

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 7: Οριακή Τιμή Συνάρτησης. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

* ΣΧΕΔΙΟ ΕΚΘΕΣΗΣ. EL Eνωμένη στην πολυμορφία EL 2014/0321(NLE)

9. ÁíÜðôõîç ðñïãñáììüôùí ìå ñïíéêýò ëåéôïõñãßåò.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

ιαδικασία åãêáôüóôáóçò MS SQL Server, SingularLogic Accountant, SingularLogic Accountant Ìéóèïäïóßá

ÖÅÊ 816 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ) ÏÄÇÃÉÅÓ ÐÁ ÔÇ ÓÕÌÐËÇÑÙÓÇ ÔÇÓ ÁÉÔÇÓÇÓ ÅÃÊÅÊÑÉÌÅÍÏÕ ÁÐÏÈÇÊÅÕÔÇ Ï ÇÌÁÔÙÍ 1. ÇÌÅÑÏÌÇÍÉÁ: ÁíáãñÜöåô

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

ÁñéèìçôéêÞ ÁíÜëõóç É - ÓÅÌÖÅ Åñãáóßá 2 ìåóåò êáé åðáíáëçðôéêýò ìýèïäïé

Προτεινόμενα θέματα Πανελλαδικών εξετάσεων. Χημεία Θετικής Κατεύθυνσης ΕΛΛΗΝΟΕΚΔΟΤΙΚΗ

Quicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ÁíÜðôõîç åöáñìïãþí óå ðñïãñáììáôéóôéêü ðåñéâüëëïí

DOS Microsoft Windows... 65

3.1 H Ýííïéá ôçò óõíüñôçóçò ÐÁÑÁÄÅÉÃÌÁÔÁ - ÅÖÁÑÌÏÃÅÓ

ÌÁÈÇÌÁÔÉÊÇ ËÏÃÉÊÇ Ë1 5ï ðáêýôï áóêþóåùí

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Ìáèáßíïõìå ôéò áðïäåßîåéò

Ενότητα 7: Διαδικασιακός Προγραμματισμός

Estimation Theory Exercises*

2.4 ñçóéìïðïéþíôáò ôïí êáíüíá áëõóßäáò íá âñåèåß ç dr

Üóêçóç 15. ÕëéêÜ - åîáñôþìáôá äéêôýïõ ðåðéåóìýíïõ áýñá êáé ðíåõìáôéêýò óõóêåõýò

ÏÑÉÁÊÇ ÔÉÌÇ ÓÕÍÁÑÔÇÓÇÓ

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 11: Διανυσματική Συνάρτηση. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

Λειτουργικά Συστήματα

å) Íá âñåßôå ôï äéüóôçìá ðïõ äéáíýåé ôï êéíçôü êáôü ôï ñïíéêü äéüóôçìá áðü ôï ðñþôï Ýùò ôï Ýâäïìï äåõôåñüëåðôï ôçò êßíçóþò ôïõ.

Union of Pure and Applied Chemistry).

6936 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ)

Επεξεργασία κειμένου και συμβολοσειρών σε C

Υπολογιστικά Συστήματα

Ενότητα 1 Διάλεξη 3. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

ΕΛΕΝΗ ΓΕΡΟΥΛΑΝΟΥ. Εικονογράφηση ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ ΓΙΑ ΠΑΙΔΙΑ ΝΗΠΙΑΓΩΓΕΙΟΥ ΛΗΔΑ ΒΑΡΒΑΡΟΥΣΗ ΕΚΔΟΣΕΙΣ ΠΑΠΑΔΟΠΟΥΛΟΣ

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

3524 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ)

Αλγόριθμοι Αναζήτησης

4.5 ÁóêÞóåéò çìéêþò éóïññïðßáò ìå åðßäñáóç óôç èýóç éóïññïðßáò

1. i) ÊÜèå üñïò ðñïêýðôåé áðü ôçí ðñüóèåóç ôïõ óôáèåñïý áñéèìïý 3 óôïí ðñïçãïýìåíï, ïðüôå Ý ïõìå áñéèìçôéêþ ðñüïäï á í ìå ðñþôï üñï

1.1 Ïé öõóéêïß áñéèìïß - ÄéÜôáîç öõóéêþí, Óôñïããõëïðïßçóç

Λογιστικές Εφαρμογές Εργαστήριο

ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ(Visual Basic)

ÅÍÏÔÇÔÁ 6ç ÑÏÍÏÓ-ÄÉÁÄÏ Ç

ÓÕÍÁÑÔÇÓÅÉÓ ÐÏËËÙÍ ÌÅÔÁÂËÇÔÙÍ

Αποτελέσματα προόδου

7. ÂáóéêÜ óôïé åßá ðñïãñáììáôéóìïý

ÅñãáóôÞñéï 5. ÄïìÝò ÄåäïìÝíùí. 5.1 Óôü ïé. 5.2 Áðáñáßôçôï Õëéêü. 5.3 Ðñïåôïéìáóßá ôïõ Ç/Õ

e-school EëëçíéêÞ Åôáéñåßá ÌåëÝôçò Ìåôáâïëéóìïý ôùí Ïóôþí Εκπαιδευτικά μαθήματα μýóù δéáäéêôýïõ της Ε.Ε.Μ.Μ.Ο.

Συντακτική ανάλυση. Μεταγλωττιστές. (μέρος 1ον) Νίκος Παπασπύου, Κωστής Σαγώνας

: Ï ïäçãüò áõôüò åîçãåß ôïí ôñüðï áíôéêáôüóôáóçò êáé áíáâüèìéóçò ôçò ìíþìçò óôïí õðïëïãéóôþ.

ÁðáñéèìçôÝò- ÓõãêñéôÝò

Εισαγωγή στον δομημένο προγραμματισμό

Ç íýá Ýííïéá ôïõ ýðíïõ!

ÌåôáãëùôôéóôÝò. Áðñßëéïò 2011

4. ÁíÜðôõîç ðñïãñüììáôïò óå ðñïãñáììáôéæüìåíï ëïãéêü åëåãêôþ.

3 η ΕΝΟΤΗΤΑ Συναρτήσεις στο MATLAB

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 15: Ορισμένο Ολοκλήρωμα Μέρος ΙΙΙ - Εφαρμογές. Αθανάσιος Μπράτσος

Εισαγωγή στους Υπολογιστές

Áóõìðôùôéêïß Óõìâïëéóìïß êáé Éåñáñ ßá ÓõíáñôÞóåùí

Προγραμματισμός και Εφαρμογές Υπολογιστών

J-Y(St)Y Ôçëåöùíéêü êáëþäéï åóùôåñéêïý þñïõ ìå èùñüêéóç êáôü VDE 0815

SPLINES. ÌÜèçìá ÓõíÜñôçóç spline Ïñéóìïß êáé ó åôéêü èåùñþìáôá

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

Äéá åßñéóç äåäïìýíùí

Transcript:

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Μεταγλωττιστές Νίκος Παπασπύου, Κωστής Σαγώνας Ενδιάμεσος Κώδικας

Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.

ÅíäéÜìåóïò êþäéêáò (i) Ëüãïé ýðáñîçò Äéåõêïëýíåé ôï Ýñãï ôçò ìåôüöñáóçò Äéåõêïëýíåé ôç âåëôéóôïðïßçóç Äéåõêïëýíåé ôçí êáôüôìçóç óå åìðñüóèéï êáé ïðßóèéï ôìþìá 3

ÅíäéÜìåóïò êþäéêáò (ii) ÌåôÜöñáóç ïäçãïýìåíç áðü ôç óýíôáîç (syntax-directed translation) Ãéá êüèå äïìþ ôçò ãëþóóáò ðñïóäéïñßæåôáé ï áíôßóôïé ïò åíäéüìåóïò êþäéêáò Äéåõñýíåôáé ï óõíôáêôéêüò áíáëõôþò ìå óçìáóéïëïãéêýò ñïõôßíåò ðïõ ðáñüãïõí åíäéüìåóï êþäéêá 4

ÅíäéÜìåóïò êþäéêáò (ii) ÌåôÜöñáóç ïäçãïýìåíç áðü ôç óýíôáîç (syntax-directed translation) Ãéá êüèå äïìþ ôçò ãëþóóáò ðñïóäéïñßæåôáé ï áíôßóôïé ïò åíäéüìåóïò êþäéêáò Äéåõñýíåôáé ï óõíôáêôéêüò áíáëõôþò ìå óçìáóéïëïãéêýò ñïõôßíåò ðïõ ðáñüãïõí åíäéüìåóï êþäéêá Ó Ýäéï ðáñáãùãþò åíäéüìåóïõ êþäéêá 5

ÅíäéÜìåóïò êþäéêáò (ii) ÌåôÜöñáóç ïäçãïýìåíç áðü ôç óýíôáîç (syntax-directed translation) Ãéá êüèå äïìþ ôçò ãëþóóáò ðñïóäéïñßæåôáé ï áíôßóôïé ïò åíäéüìåóïò êþäéêáò Äéåõñýíåôáé ï óõíôáêôéêüò áíáëõôþò ìå óçìáóéïëïãéêýò ñïõôßíåò ðïõ ðáñüãïõí åíäéüìåóï êþäéêá Ó Ýäéï ðáñáãùãþò åíäéüìåóïõ êþäéêá ÌåôáâëçôÝò éäéïôþôùí (attributes) ãéá êüèå óýìâïëï ôçò ãñáììáôéêþò 6

ÅíäéÜìåóç ãëþóóá (i) ÔåôñÜäåò (quadruples) n: op, x, y, z 7

ÅíäéÜìåóç ãëþóóá (i) ÔåôñÜäåò (quadruples) n: op, x, y, z ÐáñÜäåéãìá: b*b-4*a*c 1:, b, b, $1 2:, 4, a, $2 3:, $2, c, $3 4:, $1, $3, $4 8

ÅíäéÜìåóç ãëþóóá (ii) ÔñéÜäåò (triples) n: op, x, y 9

ÅíäéÜìåóç ãëþóóá (ii) ÔñéÜäåò (triples) n: op, x, y ÐáñÜäåéãìá: 1:, b, b 2:, 4, a 3:, (2), c 4:, (1), (3) b*b-4*a*c 10

ÅíäéÜìåóç ãëþóóá (iii) ÁöçñçìÝíá óõíôáêôéêü äýíôñá (abstract syntax trees) 11

ÅíäéÜìåóç ãëþóóá (iii) ÁöçñçìÝíá óõíôáêôéêü äýíôñá (abstract syntax trees) ÐáñÜäåéãìá: b*b-4*a*c * * b b * c 4 a 12

ÅíäéÜìåóç ãëþóóá (iv) Ðñïèåìáôéêüò êáé åðéèåìáôéêüò êþäéêáò (prex/postx code) 13

ÅíäéÜìåóç ãëþóóá (iv) Ðñïèåìáôéêüò êáé åðéèåìáôéêüò êþäéêáò (prex/postx code) ÐáñÜäåéãìá: b b 4 a c b b 4 a c b*b-4*a*c ðñïèåìáôéêüò åðéèåìáôéêüò 14

ÅíäéÜìåóç ãëþóóá (v) Êáôåõèõíüìåíïé áêõêëéêïß ãñüöïé (directed acyclic graphs) 15

ÅíäéÜìåóç ãëþóóá (v) Êáôåõèõíüìåíïé áêõêëéêïß ãñüöïé (directed acyclic graphs) ÐáñÜäåéãìá: b+(a+1)*(a+1)+c-(a+1)*(a+1)+2/(a+1) 16

ÅíäéÜìåóç ãëþóóá (v) Êáôåõèõíüìåíïé áêõêëéêïß ãñüöïé (directed acyclic graphs) ÐáñÜäåéãìá: b+(a+1)*(a+1)+c-(a+1)*(a+1)+2/(a+1) + / + * 2 + + c + + a 1 b * a 1 a 1 + + a 1 a 1 17

ÅíäéÜìåóç ãëþóóá (v) Êáôåõèõíüìåíïé áêõêëéêïß ãñüöïé (directed acyclic graphs) ÐáñÜäåéãìá: b+(a+1)*(a+1)+c-(a+1)*(a+1)+2/(a+1) + + / / + * 2 + + 2 + c + + a 1 + c b * a 1 a 1 b * + + + a 1 a 1 a 1 18

Ãëþóóá ôåôñüäùí ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ: n: åôéêýôá ôåôñüäáò (öõóéêüò áñéèìüò) op: ôåëåóôþò x, y, z: ôåëïýìåíá ÁíÜëïãá ìå ôï åßäïò ôïõ ôåëåóôþ, êüðïéá ôåëïýìåíá åíäå ïìýíùò ðáñáëåßðïíôáé 19

Ôåëïýìåíá (i) ÓôáèåñÜ áêýñáéá, ðñáãìáôéêþ, ëïãéêþ áñáêôþñáò, óõìâïëïóåéñü, nil ¼íïìá ìåôáâëçôþ, ðáñáìýôñïò, õðïðñüãñáììá ÐñïóùñéíÞ ìåôáâëçôþ: $n ÁðïôÝëåóìá óõíüñôçóçò: $$ Áðïäåéêôïäüôçóç: [x] x áðëü ôåëïýìåíï Äéåýèõíóç: {x} x áðëü ôåëïýìåíï 20

Ôåëïýìåíá (ii) ÅôéêÝôá åíôïëþò óôï áñ éêü ðñüãñáììá ôåôñüäáò Ôñüðïò ðåñüóìáôïò V : êáô' áîßá R : êáô' áíáöïñü RET : èýóç áðïôåëýóìáôïò óõíüñôçóçò Êåíü : ÐñïóùñéíÜ êåíü : * (ãéá backpatching) 21

ÔåëåóôÝò (i) unit, I,, endu, I,, áñ Þ êáé ôýëïò äïìéêþò ìïíüäáò op, x, y, z op {+, -, *, /, %} z := x op y :=, x,, z z := x array, x, y, z z := ç äéåýèõíóç ôïõ óôïé åßïõ x[y] 22

ÔåëåóôÝò (ii) op, x, y, z op {=, <>, >, <, >=, <=} áí x op y ôüôå ðþãáéíå óôçí ôåôñüäá z ifb, x,, z áí ç ëïãéêþ ôéìþ x åßíáé áëçèþò ôüôå ðþãáéíå óôçí ôåôñüäá z jump,,, z ðþãáéíå óôçí ôåôñüäá z label, I,, jumpl,,, I ïñéóìüò åôéêýôáò êáé Üëìá ðñïò áõôþí 23

ÔåëåóôÝò (iii) call,,, I êüëåóå ôç äïìéêþ ìïíüäá I par, x, m, ðýñáóå ôçí ðñáãìáôéêþ ðáñüìåôñï x ìå ôñüðï ðåñüóìáôïò m ret,,, åðéóôñïöþ áðü ôçí ôñý ïõóá äïìéêþ ìïíüäá 24

ÌåôáâëçôÝò éäéïôþôùí PLACE: èýóç üðïõ âñßóêåôáé áðïèçêåõìýíç ç ôéìþ ìéáò l-value Þ ìéáò r-value TYPE: ôýðïò ìéáò l-value Þ ìéáò r-value NEXT : ëßóôá áðü åôéêýôåò ôåôñüäùí ðïõ ðåñéý ïõí Üëìáôá óôçí åðüìåíç åíôïëþ TRUE, FALSE: ëßóôåò áðü åôéêýôåò ôåôñüäùí ðïõ ðåñéý ïõí Üëìáôá óôïí êþäéêá ðïõ ðñýðåé íá åêôåëåóôåß áí ìéá óõíèþêç åßíáé áëçèþò Þ øåõäþò 25

ÂïçèçôéêÝò õðïñïõôßíåò (i) NEXTQUAD() ÅðéóôñÝöåé ôïí áñéèìü ôçò åðüìåíçò ôåôñüäáò GENQUAD(op, x, y, z) ÃåííÜ ôçí åðüìåíç ôåôñüäá op, x, y, z NEWTEMP(t) Äçìéïõñãåß ìéá íýá ðñïóùñéíþ ìåôáâëçôþ ôýðïõ t EMPTYLIST() Äçìéïõñãåß ìéá êåíþ ëßóôá åôéêåôþí ôåôñüäùí 26

ÂïçèçôéêÝò õðïñïõôßíåò (ii) MAKELIST(x) Äçìéïõñãåß ìéá ëßóôá åôéêåôþí ôåôñüäùí ðïõ ðåñéý åé ìüíï ôï óôïé åßï x MERGE(l 1,..., l n ) ÓõíÝíùóç ôùí ëéóôþí åôéêåôþí ôåôñüäùí l 1... l n BACKPATCH(l, z) ÁíôéêáèéóôÜ óå üëåò ôéò ôåôñüäåò ðïõ ðåñéý ïíôáé óôçí l ôçí Üãíùóôç åôéêýôá ôåôñüäáò ìå ôç z (backpatching) 27

ÁñéèìçôéêÝò åêöñüóåéò ÁêÝñáéåò óôáèåñýò r-value ::= integer-const { P 1 } P 1 : { r-value.place = integer-const ; } 28

ÁñéèìçôéêÝò åêöñüóåéò ÁêÝñáéåò óôáèåñýò r-value ::= integer-const { P 1 } P 1 : { r-value.place = integer-const ; } ÔåëåóôÝò ìå äýï ôåëïýìåíá r-value ::= expr binop expr { P 14 } P 14 : { W = NEWTEMP( r-value.type); GENQUAD( binop.name, expr 1.PLACE, expr 2.PLACE, W ); r-value.place = W ; } 29

ËïãéêÝò åêöñüóåéò (i) <cond>... jump,,, 31... jump,,, 42... jump,,, 31... jump,,, 31... jump,,, 42... <cond>.false <cond>.true 30

ËïãéêÝò åêöñüóåéò (ii) ËïãéêÝò åêöñüóåéò óå óõìâïëéóìü 0/1 cond ::= expr <cond> <expr> ifb, <expr>.place,, * jump,,, * FALSE TRUE 31

ËïãéêÝò åêöñüóåéò (iii) ËïãéêÝò åêöñüóåéò óå óõìâïëéóìü 0/1 cond ::= expr { P 21 } P 21 : { cond.true = MAKELIST(NEXTQUAD()); GENQUAD(ifb, expr.place,, ); cond.false = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); } 32

ËïãéêÝò åêöñüóåéò (iv) ÔåëåóôÝò óýãêñéóçò cond ::= expr 1 relop expr 2 <cond> <expr> 1 <expr> 2 relop, <expr> 1.PLACE, <expr> 2.PLACE, * jump,,, * FALSE TRUE 33

ËïãéêÝò åêöñüóåéò (v) ÔåëåóôÝò óýãêñéóçò cond ::= expr 1 relop expr 2 { P 23 } P 23 : { cond.true = MAKELIST(NEXTQUAD()); GENQUAD( relop.name, expr 1.PLACE, expr 2.PLACE, ); cond.false = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); } 34

ËïãéêÝò åêöñüóåéò (vi) ñíçóç cond ::= \not" cond <cond> TRUE <cond> FALSE FALSE TRUE 35

ËïãéêÝò åêöñüóåéò (vii) Óýæåõîç cond ::= cond 1 \and" cond 2 <cond> FALSE <cond> 1 TRUE FALSE <cond> 2 TRUE FALSE TRUE 36

ËïãéêÝò åêöñüóåéò (viii) Óýæåõîç cond ::= cond 1 \and" { P 25 } cond 2 { P 26 } P 25 : { BACKPATCH( cond 1.TRUE, NEXTQUAD()); } P 26 : { cond.false = MERGE( cond 1.FALSE, cond 2.FALSE); cond.true = cond 2.TRUE; } 37

ÁðëÝò åíôïëýò ÊåíÞ åíôïëþ stmt ::= ɛ { P 29 } P 29 : { stmt.next = EMPTYLIST(); } 38

ÁðëÝò åíôïëýò ÊåíÞ åíôïëþ stmt ::= ɛ { P 29 } P 29 : { stmt.next = EMPTYLIST(); } ÅíôïëÞ áíüèåóçò stmt ::= l-value \:=" expr { P 30 } P 30 : { GENQUAD(\:=", expr.place,, l-value.place); stmt.next = EMPTYLIST(); } 39

Óýíèåôç åíôïëþ (i) stmt ::= block block ::= \begin" stmt ( \;" stmt ) \end" <block> <stmt> 1 NEXT <stmt> 2 NEXT NEXT 40

Óýíèåôç åíôïëþ (ii) stmt ::= block { P 34 } P 34 : { stmt.next = block.next ; } block ::= \begin" stmt 1 { P 35 } ( \;" { P 36 } stmt 2 { P 37 } ) \end" { P 38 } P 35 : { L = stmt 1.NEXT ; } P 36 : { BACKPATCH(L, NEXTQUAD()); } P 37 : { L = stmt 2.NEXT ; } P 38 : { block.next = L; } 41

ÅíôïëÞ if (i) stmt ::= \if " cond \then" stmt [ \else" stmt ] <stmt> FALSE <cond> TRUE <stmt> TRUE <cond> <stmt> 1 FALSE NEXT <stmt> 1 jump,,, * <stmt> 2 NEXT NEXT NEXT NEXT 42

ÅíôïëÞ if (ii) stmt ::= \if " cond { P 39 } \then" stmt 1 [ \else" { P 40 } stmt 2 { P 41 } ] { P 42 } P 39 : { BACKPATCH( cond.true, NEXTQUAD()); L 1 = cond.false; L 2 = EMPTYLIST(); } P 40 : { L 1 = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); BACKPATCH( cond.false, NEXTQUAD()); } P 41 : { L 2 = stmt 2.NEXT ; } P 42 : { stmt.next = MERGE(L 1, stmt 1.NEXT, L 2 ); } 43

ÅíôïëÞ while (i) stmt ::= \while" cond \do" stmt <stmt> FALSE <cond> TRUE <stmt> 1 jump,,, * NEXT NEXT 44

ÅíôïëÞ while (ii) stmt ::= \while" { P 43 } cond \do" { P 44 } stmt 1 { P 45 } P 43 : { Q = NEXTQUAD(); } P 44 : { BACKPATCH( cond.true, NEXTQUAD()); } P 45 : { BACKPATCH( stmt 1.NEXT, Q); GENQUAD(jump,,, Q); stmt.next = cond.false; } 45

ÊëÞóç õðïðñïãñáììüôùí (i) call ::= id \(" [ expr ( \," expr ) ] \)" r-value ::= call stmt ::= call ÐÝñáóìá ðáñáìýôñùí ìå ôåôñüäåò par ÐÝñáóìá èýóçò áðïôåëýóìáôïò ìå ôåôñüäá par áí ðñüêåéôáé ãéá óõíüñôçóç ÊëÞóç ìå ôåôñüäá call 46

ÊëÞóç õðïðñïãñáììüôùí (ii) call ::= id \(" { P 46 } [ expr 1 { P 47 } ( \," expr 2 { P 48 } ) ] \)" { P 49 } P 46 : { N = 1; } P 47 : { GENQUAD(\par", expr 1.PLACE, PARAMMODE( id, N ), ); N = N + 1; } P 48 : { GENQUAD(\par", expr 2.PLACE, PARAMMODE( id, N ), ); N = N + 1; } 47

ÊëÞóç õðïðñïãñáììüôùí (iii) call ::= id \(" { P 46 } [ expr 1 { P 47 } ( \," expr 2 { P 48 } ) ] \)" { P 49 } (óõíý åéá) P 49 : { if (ISFUNCTION( id )) { W = NEWTEMP(FUNCRESULT( id )); GENQUAD(par, RET, W, ); call.place = W ; } GENQUAD(call,,, id ); } 48

ÊëÞóç õðïðñïãñáììüôùí (iv) ÊëÞóç óõíüñôçóçò r-value ::= call { P 50 } P 50 : { r-value.place = call.place; } 49

ÊëÞóç õðïðñïãñáììüôùí (iv) ÊëÞóç óõíüñôçóçò r-value ::= call { P 50 } P 50 : { r-value.place = call.place; } ÊëÞóç äéáäéêáóßáò stmt ::= call { P 51 } P 51 : { stmt.next = EMPTYLIST(); } 50

ÊëÞóç õðïðñïãñáììüôùí (v) ÅðéóôñïöÞ áðü õðïðñüãñáììá stmt ::= \return" [ expr { P 52 } ] { P 53 } P 52 : { GENQUAD(retv, expr.place,, ); } P 53 : { GENQUAD(ret,,, ); } 51

ÊëÞóç õðïðñïãñáììüôùí (v) ÅðéóôñïöÞ áðü õðïðñüãñáììá stmt ::= \return" [ expr { P 52 } ] { P 53 } P 52 : { GENQUAD(retv, expr.place,, ); } P 53 : { GENQUAD(ret,,, ); } ÄÞëùóç õðïðñïãñüììáôïò body ::= ( local ) { P 56 } block \;" { P 57 } P 56 : { GENQUAD(unit, I,, ); } P 57 : { BACKPATCH( block.next, NEXTQUAD()); GENQUAD(endu, I,, ); } 52

(i) 53 procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; quicksort(a, m, j); quicksort(a, i, n) end;

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 54

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 55

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 56

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 3: jump,,, 57

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 3: jump,,, 4: ret,,, 58

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 4: ret,,, 59

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 5 4: ret,,, 60

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 5 4: ret,,, 5: :=, m,, i 61

(ii) procedure quicksort (var a : array of integer; m, n : integer); var i, j, temp : integer; begin if n <= m then return; i := m; j := n; 62 1: unit, quicksort,, 2: <=, n, m, 4 3: jump,,, 5 4: ret,,, 5: :=, m,, i 6: :=, n,, j

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 63

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 64

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 8: jump,,, 65

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 66

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 67

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 68

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 69

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 70

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 71

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 14: jump,,, 72

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 73

(iii) 74 while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 15: +, i, 1, $5

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 75 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 15: +, i, 1, $5 16: :=, $5,, i

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 76 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 77 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 78 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 79 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 80 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 81 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 82 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9],

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 83 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 23: jump,,,

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 84 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,,

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 85 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 24:, j, 1, $10

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 86 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 24:, j, 1, $10 25: :=, $10,, j

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 87 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 24:, j, 1, $10 25: :=, $10,, j 26: jump,,, 18

(iii) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; 88 7: <=, i, j, 9 8: jump,,, 9: array, a, i, $1 10: +, m, n, $2 11: /, $2, 2, $3 12: array, a, $3, $4 13: <, [$1], [$4], 15 14: jump,,, 18 15: +, i, 1, $5 16: :=, $5,, i 17: jump,,, 9 18: array, a, j, $6 19: +, m, n, $7 20: /, $7, 2, $8 21: array, a, $8, $9 22: >, [$6], [$9], 24 23: jump,,, 27 24:, j, 1, $10 25: :=, $10,, j 26: jump,,, 18

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 89

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 90

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 28: jump,,, 91

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 92

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 93

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 94

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 95

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 96

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 97 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12]

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 98

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 99

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 100

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 37: :=, $15,, i 101

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 37: :=, $15,, i 38:, j, 1, $16 102

(iv) if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end 103 27: <=, i, j, 29 28: jump,,, 29: array, a, i, $11 30: :=, [$11],, temp 31: array, a, i, $12 32: array, a, j, $13 33: :=, [$13],, [$12] 34: array, a, j, $14 35: :=, temp,, [$14] 36: +, i, 1, $15 37: :=, $15,, i 38:, j, 1, $16 39: :=, $16,, j

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; 104

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; 7: <=, i, j, 9 8: jump,,, 105

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; 7: <=, i, j, 9 8: jump,,,... 27: <=, i, j, 29 28: jump,,, 106

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; 107 7: <=, i, j, 9 8: jump,,,... 27: <=, i, j, 29 28: jump,,,... 40: jump,,, 7

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; 108 7: <=, i, j, 9 8: jump,,,... 27: <=, i, j, 29 28: jump,,, 7... 40: jump,,, 7

(v) while i <= j do begin while a[i] < a[(m+n) div 2] do i := i+1; while a[j] > a[(m+n) div 2] do j := j-1; if i <= j then begin temp := a[i]; a[i] := a[j]; a[j] := temp; i := i+1; j := j-1 end end; 109 7: <=, i, j, 9 8: jump,,, 41... 27: <=, i, j, 29 28: jump,,, 7... 40: jump,,, 7

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 110

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 111

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 112

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 43: par, j, V, 113

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 114

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 115

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 116

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 47: par, n, V, 117

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 47: par, n, V, 48: call,,, quicksort 118

(vi) quicksort(a, m, j); quicksort(a, i, n) end; 119 41: par, a, R, 42: par, m, V, 43: par, j, V, 44: call,,, quicksort 45: par, a, R, 46: par, i, V, 47: par, n, V, 48: call,,, quicksort 49: endu, quicksort,,

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.