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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός

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

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Οντοκεντρικός Προγραμματισμός

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

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

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

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

Δομές Δεδομένων Ενότητα 3

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

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

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

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

Ηλεκτρονικοί Υπολογιστές

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

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

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

Οντοκεντρικός Προγραμματισμός

Δομημένος Προγραμματισμός

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

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

Á~/99) , Ã2/2864/ êáé Ã2/3850/

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

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

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

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

Τεχνικές βασισμένες στα Δίκτυα Αναμονής Εισαγωγικά Επιχειρησιακοί νόμοι

Αλγόριθμοι και Δομές Δεδομένων(Θ) Ευάγγελος Γ. Ούτσιος

Δομές Δεδομένων Ενότητα 4

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2014

Προσομοίωση Δημιουργία τυχαίων αριθμών

Εισαγωγή στην πληροφορική

Ονόματα και Εμβέλεια. Wassily Kandinsky, Black lines, 1913

ÓõíåñãÜæïìáé ìå ôïõò Üëëïõò

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Σημασιολογική Ανάλυση

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

Αντικειμενοστραφής Προγραμματισμός

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

ÅÍÏÔÇÔÁ 5ç ÔÁ Ó ÇÌÁÔÁ

Αντικειμενοστραφής Προγραμματισμός

245/Á/1977). 2469/1997 (ÖÅÊ 36/Á/1997). 1484/Â/ ).

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

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

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Μεταγλωττιστές 2019 Θέμα εργασίας

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

Προγραμματισμός PASCAL

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

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

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

ÕÄÑÏËÇØÉÅÓ ÔÕÐÏÕ Á2 - Á4 ÌÅ ÁÍÔÉÐÁÃÅÔÉÊÇ ÐÑÏÓÔÁÓÉÁ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

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

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

Σχεδίαση Ψηφιακών Συστημάτων

Κεφάλαιο 5: Τύποι εδοµένων. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήµιο Πατρών

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

Οντοκεντρικός Προγραμματισμός

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7α: SQL (NULL, Διαίρεση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

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

Οντοκεντρικός Προγραμματισμός

ÂÉÏÊËÉÌÁÔÉÊÏÓ Ó ÅÄÉÁÓÌÏÓ Ó ÏËÉÊÙÍ

Ιστορία της μετάφρασης

ΕΙΣΑΓΩΓΗ ΜΑΘΗΜΑΤΟΣ ΟΙΚΟΝΟΜΙΚΗ ΓΕΩΓΡΑΦΙΑ. Υπεύθυνη μαθήματος Αναστασία Στρατηγέα Αναπλ. Καθηγ. Ε.Μ.Π.

Ενότητα 1 Διάλεξη 2β

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Συμπερασμός Τύπων και Πολυμορφισμός 4

Μικροβιολογία & Υγιεινή Τροφίμων

Transcript:

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

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

Óýíôáîç êáé óçìáóéïëïãßá Óýíôáîç: ìïñöþ êáé äïìþ ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí 3

Óýíôáîç êáé óçìáóéïëïãßá Óýíôáîç: ìïñöþ êáé äïìþ ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí Óçìáóéïëïãßá: åñìçíåßá ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí 4

Óýíôáîç êáé óçìáóéïëïãßá Óýíôáîç: ìïñöþ êáé äïìþ ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí Óçìáóéïëïãßá: åñìçíåßá ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí ÓôáôéêÞ óçìáóéïëïãßá: åíôïðéóìüò óçìáóéïëïãéêþí óöáëìüôùí êáôü ôç äéüñêåéá ôçò ìåôáãëþôôéóçò 5

Óýíôáîç êáé óçìáóéïëïãßá Óýíôáîç: ìïñöþ êáé äïìþ ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí Óçìáóéïëïãßá: åñìçíåßá ôùí êáëþò ó çìáôéóìýíùí ðñïãñáììüôùí ÓôáôéêÞ óçìáóéïëïãßá: åíôïðéóìüò óçìáóéïëïãéêþí óöáëìüôùí êáôü ôç äéüñêåéá ôçò ìåôáãëþôôéóçò ÄõíáìéêÞ óçìáóéïëïãßá: áðüäïóç åñìçíåßáò óôá ðñïãñüììáôá êáôü ôçí åêôýëåóþ ôïõò 6

ÓôáôéêÞ óçìáóéïëïãßá (i) ÐåñéâÜëëïíôá ôýðùí Γ 1 = { i integer, x real } 7

ÓôáôéêÞ óçìáóéïëïãßá (i) ÐåñéâÜëëïíôá ôýðùí Γ 1 = { i integer, x real } Ó Ýóç áíôéóôïß éóçò ôýðùí Γ E : τ 8

ÓôáôéêÞ óçìáóéïëïãßá (i) ÐåñéâÜëëïíôá ôýðùí Γ 1 = { i integer, x real } Ó Ýóç áíôéóôïß éóçò ôýðùí Γ E : τ Êáíüíåò ôýðùí Γ E 1 : integer Γ E 2 : integer Γ E 1 +E 2 : integer 9

ÓôáôéêÞ óçìáóéïëïãßá (ii) ÐáñáãùãÝò ôýðùí Γ 1 i : integer Γ 1 1 : integer Γ 1 i+1 : integer Γ 1 (i+1)*x : real Γ 1 x : real 10

ÓôáôéêÞ óçìáóéïëïãßá (ii) ÐáñáãùãÝò ôýðùí Γ 1 i : integer Γ 1 1 : integer Γ 1 i+1 : integer Γ 1 (i+1)*x : real Γ 1 x : real Ç áíôéóôïß éóç ôýðùí ìå êáíüíåò ôýðùí åðåêôåßíåôáé óå üëá ôá ôìþìáôá ðñïãñüììáôïò Γ E : boolean Γ S : stmt Γ while E do S : stmt 11

ÄõíáìéêÞ óçìáóéïëïãßá (i) ËåéôïõñãéêÞ óçìáóéïëïãßá (operational semantics) 12

ÄõíáìéêÞ óçìáóéïëïãßá (i) ËåéôïõñãéêÞ óçìáóéïëïãßá (operational semantics) áêïëïõèßá õðïëïãéóôéêþí âçìüôùí 13

ÄõíáìéêÞ óçìáóéïëïãßá (i) ËåéôïõñãéêÞ óçìáóéïëïãßá (operational semantics) áêïëïõèßá õðïëïãéóôéêþí âçìüôùí ÄçëùôéêÞ óçìáóéïëïãßá (denotational semantics) 14

ÄõíáìéêÞ óçìáóéïëïãßá (i) ËåéôïõñãéêÞ óçìáóéïëïãßá (operational semantics) áêïëïõèßá õðïëïãéóôéêþí âçìüôùí ÄçëùôéêÞ óçìáóéïëïãßá (denotational semantics) ìáèçìáôéêþ óõíüñôçóç áðü ôï ðåäßï ôùí äåäïìýíùí åéóüäïõ óôï ðåäßï ôùí áðïôåëåóìüôùí 15

ÄõíáìéêÞ óçìáóéïëïãßá (i) ËåéôïõñãéêÞ óçìáóéïëïãßá (operational semantics) áêïëïõèßá õðïëïãéóôéêþí âçìüôùí ÄçëùôéêÞ óçìáóéïëïãßá (denotational semantics) ìáèçìáôéêþ óõíüñôçóç áðü ôï ðåäßï ôùí äåäïìýíùí åéóüäïõ óôï ðåäßï ôùí áðïôåëåóìüôùí ÁîéùìáôéêÞ óçìáóéïëïãßá (axiomatic semantics) 16

ÄõíáìéêÞ óçìáóéïëïãßá (i) ËåéôïõñãéêÞ óçìáóéïëïãßá (operational semantics) áêïëïõèßá õðïëïãéóôéêþí âçìüôùí ÄçëùôéêÞ óçìáóéïëïãßá (denotational semantics) ìáèçìáôéêþ óõíüñôçóç áðü ôï ðåäßï ôùí äåäïìýíùí åéóüäïõ óôï ðåäßï ôùí áðïôåëåóìüôùí ÁîéùìáôéêÞ óçìáóéïëïãßá (axiomatic semantics) ç åñìçíåßá êáèïñßæåôáé Ýììåóá ìýóù ëïãéêþí ðñïôüóåùí ðïõ ðåñéãñüöïõí éäéüôçôåò ôïõ ðñïãñüììáôïò 17

ÄõíáìéêÞ óçìáóéïëïãßá (ii) Ç åíôïëþ áíüèåóçò I=E 18

ÄõíáìéêÞ óçìáóéïëïãßá (ii) Ç åíôïëþ áíüèåóçò I=E ËåéôïõñãéêÞ óçìáóéïëïãßá E, σ v I=E, σ σ[i v] 19

ÄõíáìéêÞ óçìáóéïëïãßá (ii) Ç åíôïëþ áíüèåóçò I=E ËåéôïõñãéêÞ óçìáóéïëïãßá E, σ v I=E, σ σ[i v] ÄçëùôéêÞ óçìáóéïëïãßá C[[I=E ]](s) = s[i E[[E ]](s)] 20

ÄõíáìéêÞ óçìáóéïëïãßá (ii) Ç åíôïëþ áíüèåóçò I=E ËåéôïõñãéêÞ óçìáóéïëïãßá E, σ v I=E, σ σ[i v] ÄçëùôéêÞ óçìáóéïëïãßá C[[I=E ]](s) = s[i E[[E ]](s)] ÁîéùìáôéêÞ óçìáóéïëïãßá { P [I E] } I=E { P } 21

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí 22

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá 23

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò 24

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï (C) 25

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç (C) (Java) 26

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç ëåã ïò ýðáñîçò ïíïìüôùí (C) (Java) 27

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç ëåã ïò ýðáñîçò ïíïìüôùí ð.. ïé ìåôáâëçôýò ïñßæïíôáé ðñéí ôç ñþóç ôïõò (C) (Java) 28

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç ëåã ïò ýðáñîçò ïíïìüôùí ð.. ïé ìåôáâëçôýò ïñßæïíôáé ðñéí ôç ñþóç ôïõò ëåã ïò ìïíáäéêüôçôáò (C) (Java) 29

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç ëåã ïò ýðáñîçò ïíïìüôùí ð.. ïé ìåôáâëçôýò ïñßæïíôáé ðñéí ôç ñþóç ôïõò ëåã ïò ìïíáäéêüôçôáò ð.. ïé óôáèåñýò óå ìßá äïìþ case åßíáé ìïíáäéêýò (C) (Java) (Pascal) 30

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç ëåã ïò ýðáñîçò ïíïìüôùí ð.. ïé ìåôáâëçôýò ïñßæïíôáé ðñéí ôç ñþóç ôïõò ëåã ïò ìïíáäéêüôçôáò ð.. ïé óôáèåñýò óå ìßá äïìþ case åßíáé ìïíáäéêýò ëåã ïò óõíýðåéáò (C) (Java) (Pascal) 31

Óçìáóéïëïãéêüò Ýëåã ïò (i) ëåã ïò ôýðùí ð.. ïé ôåëåóôýò åöáñìüæïíôáé óå êáôüëëçëá ôåëïýìåíá ëåã ïò ñïþò ð.. ü é continue Ýîù áðü âñü ï ð.. ïé ìåôáâëçôýò áñ éêïðïéïýíôáé ðñéí ôç ñþóç ëåã ïò ýðáñîçò ïíïìüôùí ð.. ïé ìåôáâëçôýò ïñßæïíôáé ðñéí ôç ñþóç ôïõò ëåã ïò ìïíáäéêüôçôáò ð.. ïé óôáèåñýò óå ìßá äïìþ case åßíáé ìïíáäéêýò ëåã ïò óõíýðåéáò ð.. óùóôü üíïìá õðïðñïãñüììáôïò óôï end (C) (Java) (Pascal) (Ada) 32

Óçìáóéïëïãéêüò Ýëåã ïò (ii) Áðïõóßá óçìáóéïëïãéêþí óöáëìüôùí áðïõóßá óöáëìüôùí åêôýëåóçò 33

Óçìáóéïëïãéêüò Ýëåã ïò (ii) Áðïõóßá óçìáóéïëïãéêþí óöáëìüôùí áðïõóßá óöáëìüôùí åêôýëåóçò ÌåñéêÝò öïñýò üìùò åßíáé äõíáôü íá ðñïâëåöèïýí óöüëìáôá åêôýëåóçò 34

Óçìáóéïëïãéêüò Ýëåã ïò (ii) Áðïõóßá óçìáóéïëïãéêþí óöáëìüôùí áðïõóßá óöáëìüôùí åêôýëåóçò ÌåñéêÝò öïñýò üìùò åßíáé äõíáôü íá ðñïâëåöèïýí óöüëìáôá åêôýëåóçò program p; var x, y : integer; begin read(x); y := 5/(x-x) end. 35

Óýóôçìá ôýðùí Âáóéêïß ôýðïé (integer, boolean, real, char,...) Óýíèåôïé ôýðïé Ðßíáêåò (arrays) Æåýãç (products) êáé ðëåéüäåò (tuples) ÅããñáöÝò (records) Äåßêôåò (pointers) ÓõíáñôÞóåéò (functions) Ôýðïé êáé ôéìýò ðñþôçò ôüîçò (rst class) 36

ÁðëÝò åêöñüóåéò, âáóéêïß ôýðïé ÓçìáóéïëïãéêÞ áíüëõóç óôï bison Óêïðüò: õðïëïãéóìüò ôïõ ðåäßïõ type (i) 37 %{ typedef enum { TY_int, TY_real, TY_bool } Type; %} %union{ char * n; Type t; struct { Type type; /* other fields */ } v;... } %type<n> T_id %type<t> typename %type<v> expression

ÁðëÝò åêöñüóåéò, âáóéêïß ôýðïé (ii) expression : T_intconst { $$.type = TY_int; } T_realconst { $$.type = TY_real; } '(' expression ')' { $$.type = $2.type; } ; 38

ÁðëÝò åêöñüóåéò, âáóéêïß ôýðïé (ii) expression : T_intconst { $$.type = TY_int; } T_realconst { $$.type = TY_real; } '(' expression ')' { $$.type = $2.type; } ; expression : T_id { Entry * id = lookup($1); if (id!= NULL && id->kind == K_variable) $$.type = id->type; else yyerror("identifier not found"); } ; 39

ÁðëÝò åêöñüóåéò, âáóéêïß ôýðïé (iii) expression : expression "mod" expression { if ($1.type == TY_int && $3.type == TY_int) $$.type = TY_int; else yyerror("type mismatch"); } ; 40

ÁðëÝò åêöñüóåéò, âáóéêïß ôýðïé (iii) expression : expression "mod" expression { if ($1.type == TY_int && $3.type == TY_int) $$.type = TY_int; else yyerror("type mismatch"); } ; statement : "while" expression "do" statement { if ($2.type!= TY_bool) yyerror("condition type mismatch") } ; 41

ÌåôáôñïðÝò ôýðùí ìåóç ìåôáôñïðþ (type casting) expression : '(' typename ')' expression { if (iscastallowed($2, $4.type)) $$.type = $2; else yyerror("illegal type cast"); } ; 42

ÌåôáôñïðÝò ôýðùí ìåóç ìåôáôñïðþ (type casting) expression : '(' typename ')' expression { if (iscastallowed($2, $4.type)) $$.type = $2; else yyerror("illegal type cast"); } ; ììåóç ìåôáôñïðþ { åîáíáãêáóìüò (coercion) 43

Õðåñöüñôùóç ôåëåóôþí expression : expression '+' expression { if ($1.type == TY_int) if ($3.type == TY_int) $$.type = TY_int; else if ($3.type == TY_real) $$.type = TY_real; else yyerror("type mismatch"); else if ($1.type == TY_real) if ($3.type == TY_int) $$.type = TY_real; else if ($3.type == TY_real) $$.type = TY_real; else yyerror("type mismatch"); else yyerror("type mismatch"); } ; 44

Ðïëõìïñöéêïß ôåëåóôýò typedef struct type_str { enum { TY_integer, TY_real, TY_boolean, TY_ptr } code; struct type_str * ptr_type; } Type; 45

Ðïëõìïñöéêïß ôåëåóôýò typedef struct type_str { enum { TY_integer, TY_real, TY_boolean, TY_ptr } code; struct type_str * ptr_type; } Type; expression : expression '^' { if ($1.type.code == TY_ptr) $$.type = *($$.type.ptr_type); else yyerror("type mismatch"); } ; 46

Óõíþíõìá êáé éóïäõíáìßá ôýðùí Óõíþíõìá ôýðùí (type aliases) type complex = record re, im : real end; 47

Óõíþíõìá êáé éóïäõíáìßá ôýðùí Óõíþíõìá ôýðùí (type aliases) type complex = record re, im : real end; Éóïäõíáìßá ôýðùí (type equivalence) ÄïìéêÞ éóïäõíáìßá ÏíïìáóôéêÞ éóïäõíáìßá (ÄçëùôéêÞ éóïäõíáìßá) 48

Õðïóýíïëá ôýðùí êáé õðïôýðïé Γ E : τ τ <: τ Γ E : τ 49

Õðïóýíïëá ôýðùí êáé õðïôýðïé Γ E : τ τ <: τ Γ E : τ var indexsmall : 1..10; indexlarge : 1..1000; indexgeneral : integer; indexgeneral := indexsmall; (* OK: 1..10 <: integer *) 50

Õðïóýíïëá ôýðùí êáé õðïôýðïé Γ E : τ τ <: τ Γ E : τ var indexsmall : 1..10; indexlarge : 1..1000; indexgeneral : integer; indexgeneral := indexsmall; (* OK: 1..10 <: integer *) indexlarge := indexgeneral; (* äõíáìéêüò Ýëåã ïò! *) 51

Õðïóýíïëá ôýðùí êáé õðïôýðïé Γ E : τ τ <: τ Γ E : τ var indexsmall : 1..10; indexlarge : 1..1000; indexgeneral : integer; indexgeneral := indexsmall; (* OK: 1..10 <: integer *) indexlarge := indexgeneral; (* äõíáìéêüò Ýëåã ïò! *) 52 Õðïôýðïé êõñßùò óå áíôéêåéìåíïóôñåöåßò ãëþóóåò

Ðïëõìïñöéêïß ôýðïé Ðáñáìåôñéêüò ðïëõìïñöéóìüò (templates, generics) template <class T> bool exists (int length, T array [], T element) { for (int i=0; i < length; i++) if (array[i] == element) return true; return false; } 53

Ðïëõìïñöéêïß ôýðïé Ðáñáìåôñéêüò ðïëõìïñöéóìüò (templates, generics) template <class T> bool exists (int length, T array [], T element) { for (int i=0; i < length; i++) if (array[i] == element) return true; return false; } ÓõíáñôçóéáêÝò ãëþóóåò 54

Áíôéóôïß éóç ôýðùí ÓôáôéêÞ ñçôþ Ýììåóç 55

Áíôéóôïß éóç ôýðùí ÓôáôéêÞ ñçôþ Ýììåóç ÄõíáìéêÞ x := 5; (* x : integer *) x := "hello"; (* ôþñá üìùò x : string *) 56

ÅîáãùãÞ ôýðùí val pi = 3.14159; (* pi : real *) fun inc x = x + 1; (* inc : int -> int *) fun add x y = x + y; (* add : int -> int -> int *) 57

ÅîáãùãÞ ôýðùí val pi = 3.14159; (* pi : real *) fun inc x = x + 1; (* inc : int -> int *) fun add x y = x + y; (* add : int -> int -> int *) fun add1 (x : real) y = x + y; fun add2 x y : real = x + y; (* add1, add2 : real -> real -> real *) 58

ÅîáãùãÞ ôýðùí val pi = 3.14159; (* pi : real *) fun inc x = x + 1; (* inc : int -> int *) fun add x y = x + y; (* add : int -> int -> int *) fun add1 (x : real) y = x + y; fun add2 x y : real = x + y; (* add1, add2 : real -> real -> real *) fun id x = x; (* id : 'a -> 'a *) 59

Äõíáìéêüò Ýëåã ïò ôýðùí ÅðéâÜëëåôáé üôáí õðüñ åé äõíáìéêþ áíôéóôïß éóç ôýðùí ÐïëëÝò öïñýò üìùò áðáéôåßôáé êáé óå óôáôéêþ áíôéóôïß éóç ôýðùí, ð.. Ýëåã ïò ïñßùí óå arrays: var a : array [0..100] of integer;... a[i] := 42 60

Äõíáìéêüò Ýëåã ïò ôýðùí ÅðéâÜëëåôáé üôáí õðüñ åé äõíáìéêþ áíôéóôïß éóç ôýðùí ÐïëëÝò öïñýò üìùò áðáéôåßôáé êáé óå óôáôéêþ áíôéóôïß éóç ôýðùí, ð.. Ýëåã ïò ïñßùí óå arrays: var a : array [0..100] of integer;... a[i] := 42 if i 0 and i 100 then êþäéêáò ãéá ôçí áíüèåóç ôïõ 42 óôï a[i] else óöüëìá åêôýëåóçò end if 61

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