Σχετικά έγγραφα
(i) morf (relocatable, linkable)

Υλοποίηση ΣΑ με το bison

(i) (ii) (interpreters) (linkers) (loaders) (decompilers) (meta-compilers) (preprocessors) (assemblers) (program generators)

Υλοποίηση ΣΑ με το bison

Υλοποίηση ΛΑ με το flex

JewrÐa UpologismoÔ. Grammatikèc QwrÐc Sumfrazìmena kai Autìmata StoÐbac

Στοιχεία από Assembly Γιώργος Μανής

Diakritˆ Majhmatikˆ I. Leutèrhc KuroÔshc (EÔh Papaðwˆnnou)

PANEPISTHMIO DUTIKHS ATTIKHS SQOLH MHQANIKWN TMHMA POLITIKWN MHQANIKWN ANWTERA MAJHMATIKA II DIAFORIKES EXISWSEIS DEUTERHS KAI ANWTERHS TAXHS

25 OktwbrÐou 2012 (5 h ebdomˆda) S. Malefˆkh Genikì Tm ma Majhmatikˆ gia QhmikoÔc

SUNARTHSEIS POLLWN METABLHTWN. 5h Seirˆ Ask sewn. Allag metablht n sto diplì olokl rwma

PANEPISTHMIO DUTIKHS ATTIKHS SQOLH MHQANIKWN TMHMA POLITIKWN MHQANIKWN ANWTERA MAJHMATIKA II DIAFORIKES EXISWSEIS.

Τίτλος Μαθήματος: Γραμμική Άλγεβρα Ι

Κεφάλαιο 2: Τυπικές γλώσσες

Κεφάλαιο 2: Τυπικές γλώσσες. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος / 216

Jerinì SqoleÐo Fusik c sthn EkpaÐdeush 28 IounÐou - 1 IoulÐou 2010 EstÐa Episthm n Pˆtrac

Ανάλυση ις. συστήματα

9. α 2 + β 2 ±2αβ. 10. α 2 ± αβ + β (1 + α) ν > 1+να, 1 <α 0, ν 2. log α. 14. log α x = ln x. 19. x 1 <x 2 ln x 1 < ln x 2

Diˆsthma empistosônhc thc mèshc tim c µ. Statistik gia Hlektrolìgouc MhqanikoÔc EKTIMHSH EKTIMHSH PARAMETRWN - 2. Dhm trhc Kougioumtz c.

ISTORIKH KATASKEUH PRAGMATIKWN ARIJMWN BIBLIOGRAFIA

11 OktwbrÐou S. Malefˆkh Genikì Tm ma Majhmatikˆ gia QhmikoÔc

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

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

Eisagwg sthn KosmologÐa

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

Ãëþóóá ôåôñüäùí. ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ:

Statistik gia PolitikoÔc MhqanikoÔc EKTIMHSH PAR

PANEPISTHMIO DUTIKHS ATTIKHS SQOLH MHQANIKWN TMHMA POLITIKWN MHQANIKWN ANWTERA MAJHMATIKA II DIAFORIKES EXISWSEIS.

JEMATA EXETASEWN Pragmatik Anˆlush I

Statistik gia PolitikoÔc MhqanikoÔc ELEGQOS UPOJ

Anaplhrwt c Kajhght c : Dr. Pappˆc G. Alèxandroc PANEPISTHMIO DUTIKHS ATTIKHS SQOLH MHQANIKWN TMHMA POLITIKWN MHQANIKWN ANWTERA MAJHMATIKA I

Τίτλος Μαθήματος: Γραμμική Άλγεβρα ΙΙ

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

Statistik gia QhmikoÔc MhqanikoÔc EKTIMHSH PARA

Εισαγωγή. Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα και ιστορική αναδρομή

Εφαρμοσμένα Μαθηματικά για Μηχανικούς

Τίτλος Μαθήματος: Γραμμική Άλγεβρα ΙΙ

Στατιστική για Χημικούς Μηχανικούς

1 η Σειρά Ασκήσεων Θεόδωρος Αλεξόπουλος. Αναγνώριση Προτύπων και Νευρωνικά Δίκτυα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Μηχανική Μάθηση. Ενότητα 10: Θεωρία Βελτιστοποίησης. Ιωάννης Τσαμαρδίνος Τμήμα Επιστήμης Υπολογιστών

Παρουσίαση του εργαλείου BISON

Ergasthriak 'Askhsh 2

Pragmatik Anˆlush ( ) TopologÐa metrik n q rwn Ask seic

Εφαρμοσμένα Μαθηματικά για Μηχανικούς

Εφαρμοσμένα Μαθηματικά για Μηχανικούς

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΛΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Εξετάσεις Ιουνίου 2002

PANEPISTHMIO DUTIKHS ATTIKHS SQOLH MHQANIKWN TMHMA POLITIKWN MHQANIKWN ANWTERA MAJHMATIKA II SUNARTHSEIS POLLWN METABLHTWN.

Θεωρία Πιθανοτήτων και Στατιστική

5. (12 i)(3+4i) 6. (1 + i)(2+i) 7. (4 + 6i)(7 3i) 8. (1 i)(2 i)(3 i)

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Συντακτική Ανάλυση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Anagn rish ProtÔpwn & Neurwnikˆ DÐktua Probl mata 2

Ανάλυση ασκήσεις. συστήματα

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

2 PerÐlhyh Se aut n thn ergasða, parousi zoume tic basikìterec klassikèc proseggðseic epðlushc Polu-antikeimenik n Problhm twn BeltistopoÐhshs(PPB) ka

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ


Mègisth ro - elˆqisth tom

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

APEIROSTIKOS LOGISMOS I

στο Αριστοτέλειο υλικού.

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΚΕΦΑΛΑΙΟ 6: Γλώσσες. 6.1 Ιστορική εξέλιξη 6.4 Υλοποίηση γλώσσας. Κεφάλαιο 6: «Γλώσσες Προγραµµατισµού»

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

Κλασσική Ηλεκτροδυναμική II

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Λογισμικό Συστήματος. Κλειώ Σγουροπούλου

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Σύγχρονα ακολουθιακά κυκλώματα. URL:

Autìmath Exagwg Peril yewn kai h Axiolìghs touc

GENIKEUMENA OLOKLHRWMATA

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

Ανάλυση. σήματα και συστήματα

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

Αρχιτεκτονική Υπολογιστών

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

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

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

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

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

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

10/2013. Mod: 02D-EK/BT. Production code: CTT920BE

Αρχιτεκτονική Υπολογιστών

Εργαστήριο 08 Εισαγωγή στo Yacc

AM = 1 ( ) AB + AΓ BΓ+ AE = AΔ+ BE. + γ =2 β + γ β + γ tìte α// β. OΓ+ OA + OB MA+ MB + M Γ+ MΔ =4 MO. OM =(1 λ) OA + λ OB

Top Down Bottom Up. Συντακτική Ανάλυση. Συντακτική Ανάλυση για Γραµµατικές χωρίς Συµφραζόµενα (top-down - Earley)

Παρουσίαση του εργαλείου BISON

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

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο

Upologistik Fusik Exetastik PerÐodoc IanouarÐou 2013

Στατιστική για Χημικούς Μηχανικούς

Τι είναι το yacc. Δομή ενός αρχείου yacc. Πρόλογος. ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο. Ο yacc είναι ένας γενικού σκοπού parser generator.

Κεφάλαιο 3 : Σύνταξη Γλωσσών Προγραμματισμού

1, 3, 5, 7, 9,... 2, 4, 6, 8, 10,... 1, 4, 7, 10, 13,... 2, 5, 8, 11, 14,... 3, 6, 9, 12, 15,...

f(x) =x x 2 = x x 2 x =0 x(x 1) = 0,

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

2+sin^2(x+2)+cos^2(x+2) Δ ν =[1 1 2 ν 1, ν ) ( ( π (x α) ημ β α π ) ) +1 + a 2

Transcript:

Metaglwttistèc NÐkoc PapaspÔrou nickie@softlab.ntua.gr Ejnikì Metsìbio PoluteqneÐo Sqol Hlektrolìgwn Mhq. kai Mhq. Upologist n Ergast rio TeqnologÐac LogismikoÔ PoluteqneioÔpolh, 15780 Zwgr fou. N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 1/202

Eisagwg metaglwttist n: EÐdh AploÐ (decompilers) AntÐstrofoi (meta-compilers) Meta-metaglwttistèc peript seic metaglwttist n: Eidikèc (preprocessors) Proepexergastèc (assemblers) Sumbolometafrastèc programm twn Genn torec (i) UlopoÐhsh glwss n programmatismoô (program generators) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 2/202

Eisagwg ergaleða Sunaf (interpreters) DiermhneÐc bibliojhk n (library managers) Diaqeiristèc (linkers) Sundètec (loaders) Fortwtèc programm twn (program editors) Ekdìtec sfalm twn (debuggers) Entopistèc analutèc (profilers) StatistikoÐ (ii) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 3/202

apait seic: Basikèc leitourgeð swst Na Kataskeu metaglwttist (i) summorf netai me tic prodiagrafèc thc Na kai thc telik c gl ssac arqik c metaglwttðzei progr mmata Na megèjouc k je N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 4/202

apait seic: Epiprìsjetec par gei apodotikì k dika Na èqei mikrì qrìno metagl ttishc Na èqei mikrèc apait seic mn mhc kat th Na metagl ttish dðnei kal diagnwstik mhnômata Na suneqðzei Ôstera apì l jh Na eðnai metafèrsimoc Na Kataskeu metaglwttist (ii) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 5/202

F seic thc metagl ttishc Lektik an lush Suntaktik an lush Shmasiologik an lush Paragwg endi mesou k dika BeltistopoÐhsh Paragwg telikoô k dika N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 6/202

F seic kai pro ìnta αρχικό πρόγραµµα Λεκτική ανάλυση λεκτικές µονάδες Συντακτική Ανάλυση συντακτικό δέντρο Σηµασιολογική Ανάλυση συντακτικό δέντρο Πίνακας συµβόλων Παραγωγή ενδιάµεσου κώδικα ενδιάµεσος κώδικας Χειριστής σφαλµάτων Βελτιστοποίηση ενδιάµεσου κώδικα ενδιάµεσος κώδικας Παραγωγή τελικού κώδικα τελικός κώδικας Βελτιστοποίηση τελικού κώδικα τελικό πρόγραµµα N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 7/202

Jèmata ulopoðhshc diagnwstik n mhnum twn kai an nhyh EÐdh (internal) Eswterik (errors) Sf lmata mhnômata (warnings) Proeidopoihtik Org nwsh se per smata se emprìsjio kai opðsjio tm ma Org nwsh / back-end) (front-end 'Elegqoc orjìthtac Apl mhnômata (messages) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 8/202

EkkÐnhsh bootstrapping B ma 1: Metaglwttist c gia S A sthn T. B ma 2: Metaglwttist c gia thn A sthn S. B ma 3: Metaglwttist c gia thn A sthn A. A T A T A T A A T T S S T T T N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 9/202

se èna pèrasma Εµπρόσθιο τµήµα Org nwsh Συντακτικός αναλυτής Λεκτικός αναλυτής Σηµασιολογικός αναλυτής Γεννήτορας ενδιάµεσου κώδικα Βελτιστοποιητής ενδιάµεσου κώδικα Χειριστής σφαλµάτων Πίνακας συµβόλων Γεννήτορας τελικού κώδικα Βελτιστοποιητής τελικού κώδικα Οπίσθιο τµήµα N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 10/202

Tupikèc gl ssec Grammatik G =(T,N,P,S) : termatik sômbola T : mh termatik sômbola N : kanìnec paragwg c P : arqikì sômbolo S an α, β, γ, δ (T N) Paragwgèc: (α β) P kai γαδ γβδ tìte a A α β Gl ssa: L(G) ={ α T S + α } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 11/202

α β IerarqÐa Chomsky TÔpou 0: ìlec oi grammatikèc, 1: grammatikèc me sumfrazìmena TÔpou α β me α β (context-sensitive), 2: grammatikèc qwrðc sumfrazìmena TÔpou A β (context-free) 3: kanonikèc grammatikèc (regular) TÔpou A ab A a perðptwsh: gl ssec pou par goun thn Eidik sumboloseir ken N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 12/202

Anagnwristèc TÔpou 0: mhqan Turing TÔpou 1: grammik periorismènh mhqan Turing 2: autìmata stoðbac TÔpou automata) (push-down Qr sima sth suntaktik an lush 3: peperasmèna autìmata TÔpou automata) (finite Qr sima sth lektik an lush N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 13/202

Kanonikèc gl ssec SuntomografÐec: peritt n parenjèsewn apaloif ekfr seic (regular expressions) Kanonikèc sumboloseir : ɛ Ken sômbolo: a Σ K je dôo kanonik n ekfr sewn: Par jesh dôo kanonik n ekfr sewn: Di zeuxh ( stro) Kleene: (r ) KleÐsimo (rs) (r s) r + [a 1, a 2,...,a n ] r?. N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 14/202

Peperasmèna autìmata Katast seic kai metab seic (NPA), mh nteterministik Nteterministik kai MPA me kenèc metab seic (MPA-ɛ) (MPA) 0 0 A 1 1 B gl ssa twn sumboloseir n pou H apì 0 kai 1 kai perièqoun rtio apoteloôntai arijmì 1 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 15/202

kai isodunamðec Anagwgèc grammatik MPA-ɛ kanonik MPA-ɛ èkfrash kanonik MPA-ɛ MPA-ɛ kanonik grammatik MPA-ɛ kanonik èkfrash NPA ElaqistopoÐhsh NPA N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 16/202

Lektik an lush an qreiasteð opisjodromoôn èxodo pou qrhsimopoieðtai sth diajètoun Lektikèc mon dec (tokens) me peperasmèna autìmata AnagnwrÐzontai pou: endeqomènwc perissìterouc diab zoun qarakt rec suntaktik an lush Eidikìc sumbolismìc: diagr mmata met bashc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 17/202

(i) Diagr mmata met bashc Anagnwristik thc Pascal L 0 L 1 D L 0 1 2 L όχι L/D * (T_id) D N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 18/202

(ii) 0 > 1 = 2 Diagr mmata met bashc Telestèc > kai >= όχι = * 2 (T_gt) 0 > 1 = 3 (T_ge) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 19/202

Kataskeu tou LA kai taxinìmhsh lektik n mon dwn Katagraf lektik n mon dwn KwdikopoÐhsh (i) kai taxinìmhsh qarakt rwn Katagraf mapping : (ASCII {EOF }) Σ AkoloujÐa qarakt rwn (lexeme) SqedÐash tou diagr mmatoc met bashc UlopoÐhsh tou lektikoô analut N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 20/202

jèmata Epimèrouc diaqwrismoô lektik n mon dwn Trìpoc Sqìlia pez n / kefalaðwn gramm twn Di krish mn mh (buffer) Endi mesh apì sf lmata An nhyh Kataskeu tou LA (ii) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 21/202

(iii) W Kataskeu tou LA SqedÐash sunolikoô 0. ; ( ) = + - EOF * 20 21 22 23 26 30 31 45 (T_dot) (T_smcolon) (T_lparen) (T_rparen) (T_eq) (T_plus) (T_minus) (T_eof) : < > / * 1 2 3 4 5 diagr mmatoc = = όχι = = met bashc όχι = όχι = = όχι = * όχι * * * * * * 24 40 25 41 27 42 28 43 29 44 (T_assign) (T_colon) (T_le) (T_lt) (T_ge) (T_gt) (T_ne) (T_div) (T_power) (T_times) * L E 6 όχι L E D _ 45 L E D _ (T_id) D 7 όχι D. Ε. 8 όχι D Ε D E + - 9 10 D 11 όχι D 46 * D Ε D D (T_const) { 12 } 0 όχι } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 22/202

Kataskeu tou LA trìpoi ulopoðhshc: EnallaktikoÐ Qeirwnaktik (iv) pðnaka metab sewn Me to metaergaleðo flex Me N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 23/202

sun rthsh yylex ulopoieð to LA H ton kwdikì thc lektik c mon dac Epistrèfei UlopoÐhsh LA me to flex (i) MetaergaleÐo flex: genn torac LA metaprìgramma pou perigr fei tic EÐsodoc: mon dec lektikèc 'Exodoc: prìgramma se C anagnwrðsthke, 0 sto tèloc thc pou eisìdou sumboloseir c sth metablht yytext thn TopojeteÐ akoloujða qarakt rwn (lexeme) antðstoiqh N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 24/202

UlopoÐhsh LA me to flex (ii) Dom tou metaprogr mmatoc A Mèroc %% B Mèroc %% Mèroc G Kai ta trða mèrh mporoôn na eðnai ken N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 25/202

ekfr sewn kanonik n arqik n katast sewn Dhl seic UlopoÐhsh LA me to flex (iii) A, perièqei Mèroc ìpwc sth C Sqìlia, C, mèsa se %{ kai %} K dika onìmata wc suntomografðec Mnhmonik N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 26/202

UlopoÐhsh LA me to flex (iv) A, par deigma Mèroc %{ #define T_eof 0 #define T_id 1... #define T_while 52 void ERROR (const char msg []); %} L [A-Za-z] /* letters */ D [0-9] /* digits */ W [ \t\n] /* white space */ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 27/202

LeitourgÐa: to makrôtero prìjema thc Diab zetai UlopoÐhsh LA me to flex (v) Mèroc B, perièqei kanìnec thc morf c enèrgeia enèrgeia eðnai mia entol thc C K je kanonik èkfrash eisìdou pou mporeð na sumboloseir c apì k poia kanonik èkfrash anagnwristeð EkteleÐtai h antðstoiqh enèrgeia N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 28/202

UlopoÐhsh LA me to flex (vi) Kanonikèc ekfr seic a O qarakt rac a.. Opoiosd pote qarakt rac ektìc thc allag c gramm c. \x An x èna apì ta a, b, f, n, r, t, v 0, tìte sth C, alli c o Ðdioc o qarakt rac x. ìpwc O qarakt rac \123 me oktadik tim 123. ASCII O qarakt rac \x3f me dekaexadik tim 3F. ASCII "abc" H sumboloseir abc. 'Enac touc a, apì qarakt rec c. touc qarakt rec èwc z. apì 'Enac apì touc qarakt rec 'Enac a, èwc f, s. [abc] b [a-z] a [ac-fs] c N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 29/202

kanonik èkfrash r. Oi parenjèseic qrhsimopoioôntai H gia omadopoðhsh. UlopoÐhsh LA me to flex (vii) Kanonikèc ekfr seic (sunèqeia) [^a-z] 'Enac apì touc qarakt rec ektìc ìswn an koun sthn perioq a èwc z. {name} H kanonik èkfrash me mnhmonikì ìnoma name. rs H par jesh twn r kai s. r s H di zeuxh twn r kai s. r/s H kanonik èkfrash r all mìno an (r) akoloujeð h kanonik èkfrash s. N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 30/202

UlopoÐhsh LA me to flex (viii) Kanonikèc ekfr seic (sunèqeia) r* H r epanalamb netai mhdèn perissìterec forèc. r+ H r epanalamb netai mia perissìterec forèc. r? H r eðnai proairetik (epanalamb netai H r{7} epanalamb netai akrib c r forèc. 7 H r{3,5} epanalamb netai apì r èwc 3 forèc. 5 H r{4,} epanalamb netai r perissìterec 4 mhdèn mia for ). ^r H r$ all mìno sto tèloc miac gramm c. r forèc. H r all mìno sthn arq miac gramm c. N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 31/202

UlopoÐhsh LA me to flex (ix) ekfr seic (sunèqeia) Kanonikèc H <S>r all mìno ìtan h trèqousa arqik r <*>r <<EOF>> kat stash eðnai h S. <S 1,S 2,S 3 >r H r, all mìno ìtan h trèqousa ar- kat stash eðnai mia apì tic S qik 1, S 2 S 3. H r se opoiad pote arqik kat stash. To tèloc tou arqeðou eisìdou. N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 32/202

UlopoÐhsh LA me to flex (x) B, par deigma Mèroc "and" { return T_and; }... "while" { return T_while; } ":=" { return T_assign; } ":" { return T_colon; } {L}({L} {D} _)* { return T_id; } {D}+(\.{D}*(e\-?{D}+)?)? { return T_const; } {W}+ { /* nothing */ } "(*"([^*]+ \*+[^*)])*\*+")" { /* nothing */ }. { ERROR("illegal token"); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 33/202

UlopoÐhsh LA me to flex (xi) Mèroc G, perièqei k dika C Par deigma void ERROR (const char msg []) { fprintf(stderr, "ERROR: %s\n", msg); exit(1); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 34/202

UlopoÐhsh LA me to flex (xii) (sunèqeia) Par deigma int main () { int token; do { token = yylex(); printf("token=%d, lexeme=\"%s\"\n", token, yytext); } while (token!= T_eof); } return 0; N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 35/202

UlopoÐhsh LA me to flex (xiii) ArÐjmhsh gramm n Par deigma: int lineno = 1; [ \t]+ { /* nothing */ } \n { lineno++; } void ERROR (const char msg []) { fprintf(stderr, "ERROR, line %d: %s\n", lineno, msg); exit(1); } Prìblhma: L joc arðjmhsh se sqìlia N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 36/202

UlopoÐhsh LA me to flex (xiv) katast seic Arqikèc %s Koinèc: %x Apokleistikèc: EnergoÐ kanìnec se k poia kat stash Met bash metaxô katast sewn: BEGIN(s) kat stash kat thn ènarxh leitourgðac Arqik LA: INITIAL tou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 37/202

UlopoÐhsh LA me to flex (xv) ArÐjmhsh gramm n (diìrjwsh) Par deigma: %x COMMENT "(*" { BEGIN(COMMENT); } <COMMENT>"*)" { BEGIN(INITIAL); } <COMMENT>\n { lineno++; } <COMMENT>"*" { /* nothing */ } <COMMENT>[^*\n]+ { /* nothing */ } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 38/202

A α Gl ssec qwrðc sumfrazìmena Grammatikèc qwrðc sumfrazìmena: / dexiìterh paragwg Aristerìterh (leftmost / derivation) rightmost dèntra Suntaktik trees) (parse S S L aabc L aabbc L acsbbbc L acbbbc L acabbc L acabac S R aabc R aaac R aabac R acsbbac R acsabac R acabac a A B c A b a c S B ε a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 39/202

grammatik eðnai diforoômenh (ambiguous) Mia up rqoun dôo perissìtera suntaktik ìtan diforoômenhc grammatik c: Par deigma if (dangling if) xekrèmasto DiforoÔmenec grammatikèc (i) dèntra gia thn Ðdia paragìmenh sumboloseir kai gl ssec eggen c diforoômenec Grammatikèc ambiguous) (inherently stmt if cond stmt else stmt if cond stmt s1 s2 cond c1 c2 if c1 if c2 s1 else s2 kai h sumboloseir : N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 40/202

(ii) stmt grammatikèc DiforoÔmenec if cond stmt c1 if cond stmt else stmt if c1 ( if c2 s1 else s2 ) c2 s1 s2 stmt if c1 ( if c2 s1 ) else s2 if cond stmt c1 if cond stmt else stmt s2 c2 s1 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 41/202

::= stouc kanìnec SÔmbolo termatik sômbola se gwniakèc Mh sômbola se eisagwgik Termatik gia omadopoðhsh Parenjèseic gia proairetik tm mata AgkÔlec kai + gia epan lhyh SÔmbola BNF/EBNF Backus-Naur Form Sumbolismìc p.q. expr parenjèseic, gia di zeuxh SÔmbolo Extended Backus-Naur Form N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 42/202

Suntaktik an lush me dôo trìpouc: Kataskeu zetai p nw proc ta k tw (top-down) Apì Suntaktikì dèntro (parse tree) dhlad xekin ntac apì th rðza kai proqwr ntac proc ta fôlla Apì k tw proc ta p nw (bottom-up) dhlad xekin ntac apì ta fôlla kai proqwr ntac proc th rðza N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 43/202

Top-down kai bottom-up από πάνω προς τα κάτω (top-down) 1 S από κάτω προς τα πάνω (bottom-up) 12 S 2 3 11 a A B c 13 10 a A B c 1 8 11 4 A b 10 12 a 6 A b 7 9 a 5 6 c S 8 B 2 c 5 S B 4 7 ε 9 a ε a 3 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 44/202

Bohjhtikèc ènnoiec SÔnola FIRST (i) sumboloseir α (T N) 'Estw sônolo FIRST(α) (T {ɛ }) perièqei To termatik sômbola apì ta opoða ta oi sumboloseirèc pou par gontai arqðzoun thn α apì An α ɛ, tìte ɛ FIRST(α) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 45/202

paragwg c to A mporeð na eðnai to teleutaðo An Bohjhtikèc ènnoiec SÔnola FOLLOW mh termatikì sômbolo A 'Estw sônolo FOLLOW(A) (T {EOF }) To (ii) ta termatik sômbola pou mporoôn perièqei akoloujoôn to A sth di rkeia miac na se mia paragwg, tìte sômbolo EOF FOLLOW(A) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 46/202

Upologismìc FIRST (i) FIRST(ɛ) ={ ɛ } FIRST(aβ) ={ a } ɛ FIRST(A) an FIRST(Aβ) =FIRST(A) tìte ɛ FIRST(A) an FIRST(Aβ) =(FIRST(A) {ɛ }) tìte FIRST(β) k je kanìna A α, prèpei gia FIRST(α) FIRST(A) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 47/202

Upologismìc FIRST (ii) Par deigma FIRST(E) = { id, ( } FIRST(T) = { id, ( } FIRST(F) = { id, ( } FIRST(E ) = { +,ɛ} FIRST(T ) = { *,ɛ} E TE E ɛ E + TE T FT T ɛ T * FT F ( E ) F id N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 48/202

Upologismìc FOLLOW (i) EOF FOLLOW(S) k je kanìna A αbβ gia (FIRST(β) {ɛ }) FOLLOW(B) an tìte ɛ FIRST(β) FOLLOW(A) FOLLOW(B) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 49/202

Upologismìc FOLLOW (ii) Par deigma FOLLOW(E) = { ), EOF } FOLLOW(T) = { +, ), EOF } FOLLOW(F) = { *, +, ), EOF } FOLLOW(E ) = { ), EOF } FOLLOW(T ) = { +, ), EOF } FIRST(E ) FIRST(T ) = { +,ɛ} = { *,ɛ} E TE E ɛ E + TE T FT T ɛ T * FT F ( E ) F id N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 50/202

for, anazht : K je aristerìtero kìmbo tou dèntrou ton den èqei akìma kataskeuasteð pou ìla ta paidi tou èqoun kataskeuasteð en SA bottom-up (i) H suntaktik an lush xekin apì ta fôlla Epanalamb nei mèqri na kataskeuasteð h rðza (reducing): h epilog twn kìmbwn El ttwsh ja apotelèsoun ta paidi enìc nèou pou kìmbou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 51/202

SA bottom-up (ii) B B D D D D r a. b r a. b r a. b S S r B B B B D B, D B B D a b D D D D r a. b r a. b N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 52/202

olðsjhshs-el ttwshc (shift-reduce) SA mia (arqik ken ) stoðba QrhsimopoioÔn topojetoôn sômbola thc grammatik c ìpou (shift): metafor enìc sumbìlou OlÐsjhsh thn eðsodo sthn koruf thc stoðbac apì (reduce): afaðresh apì thn El ttwsh SA bottom-up (iii) thc stoðbac tou dexioô mèlouc enìc koruf kai prìsjesh tou aristeroô mèlouc kanìna h stoðba perièqei mìno to S kai EpituqÐa: sômbola thc eisìdou èqoun exantlhjeð ta N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 53/202

SA bottom-up (iv) 0 ɛ ra,b 2 ra,b D a 1 r, b 3 r D,b B D 4 r B,b shift/reduce conflict el ttwsh (ìqi me B) olðsjhsh me el ttwsh me el ttwsh S r 6 r B,b ɛ D b 5 r B, b 7 r B, D ɛ B B, D el ttwsh B D) (ìqi me 8 r B ɛ el ttwsh me S r B reduce/reduce 9 S anagn rish ɛ conflict N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 54/202

SA bottom-up (v) LR(k) συµβολοσειρά εισόδου LR(0) SLR(1) LALR(1) LR(1) s m x m... κορυφή a 1 a 2... a n EOF επόµενο σύµβολο Πίνακες ελέγχου συντακτικής ανάλυσης LR(1) s 1 ACTION NEXT x 1 Συντακτικός Αναλυτής LR(1) s 0 στοίβα N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 55/202

sun rthsh yyparse ulopoieð to SA H 0 an anagnwristeð h Epistrèfei UlopoÐhsh SA me to bison(i) MetaergaleÐo bison: genn torac SA LALR(1) metaprìgramma pou perigr fei th EÐsodoc: kai tic shmasiologikèc routðnec sôntaxh 'Exodoc: prìgramma se C eisìdou 1 se perðptwsh sumboloseir sf lmatoc suntaktikoô me to lektikì analut Sunerg zetai yylex) (sun rthsh N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 56/202

UlopoÐhsh SA me to bison(ii) Dom tou metaprogr mmatoc A Mèroc %% B Mèroc %% Mèroc G Kai ta trða mèrh mporoôn na eðnai ken N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 57/202

UlopoÐhsh SA me to bison(iii) A, perièqei Mèroc ìpwc sth C Sqìlia, C, mèsa se %{ kai %} K dika lektik n mon dwn Dhl seic telest n thc arqik c gl ssac Dhl seic prosetairistikìthta) (proteraiìthta, tou sunìlou shmasiologik n tim n D lwsh YYSTYPE me qr sh tou %union) (tôpoc tou D lwsh thc shmasiologik c tim c k je tôpou sumbìlou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 58/202

UlopoÐhsh SA me to bison(iv) A, par deigma Mèroc %{ void ERROR (const char msg []); %} %token T_program "program" %token T_div T_mod %token T_if T_then T_else %nonassoc = < > %left + - %left * / T_div T_mod N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 59/202

UlopoÐhsh SA me to bison(v) A, par deigma (sunèqeia) Mèroc %union{ int i; double f; char str[80]; } %token<str> T_id %token<i> T_int_const %token<f> T_float_const %type<f> expression N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 60/202

UlopoÐhsh SA me to bison(vi) B, perièqei: Mèroc kanìnec paragwg c se morf BNF touc routðnec pou ekteloôntai shmasiologikèc th suntaktik an lush kat kanìnec èqoun th morf : Oi A : x 1 1 x 1 2... x 1 m 1 x 2 1 x2 2... x2 m 2... x n 1 x n 2... x n m n ; N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 61/202

lektikoô analut tou suntaktikoô analut tou pðnaka sumbìlwn tou shmasiologikoô analut tou UlopoÐhsh SA me to bison(vii) Mèroc G, perièqei k dika C metaprìgramma tou bison analamb nei ton To èlegqo tou metaglwttist pou kentrikì me th sunergasða twn epitugq netai parak tw: tou genn tora endi mesou k dika N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 62/202

program : { count=0; } block_list { printf("counted %d block(s)\n", count); } ; UlopoÐhsh SA me to bison(viii) Mèroc B, par deigma block_list : /* nothing */ block_list block { count++; } ; block : "begin" block_list "end" ; N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 63/202

UlopoÐhsh SA me to bison(ix) Mèroc G, par deigma void yyerror (const char * msg) { fprintf(stderr, "syntax error in line %d: %s\n", linecount, msg); exit(1); } int main () { return yyparse(); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 64/202

UlopoÐhsh SA me to bison(x) me shmasiologikèc timèc Par deigma E T E E + T T F T T * F F ( E ) F num na kataskeuasteð SA pou na ZhtoÔmeno: thn tim miac arijmhtik c èkfrashc upologðzei N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 65/202

UlopoÐhsh SA me to bison(xi) (sunèqeia) Par deigma %{ typedef int YYSTYPE; %} %token T_num %% program : expression { printf("value: %d\n", $1); } ; N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 66/202

UlopoÐhsh SA me to bison(xii) (sunèqeia) Par deigma expression : term { $$ = $1; } expression + term { $$ = $1 + $3; } ; term : factor { $$ = $1; } term * factor { $$ = $1 * $3; } ; N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 67/202

UlopoÐhsh SA me to bison(xiii) (sunèqeia) Par deigma factor : ( expression ) { $$ = $2; } T_num { $$ = $1; } ; %% ParaleÐpontai sto Mèroc G: sun rthsh yylex (pijan c se xeqwristì h an qrhsimopoihjeð to flex) arqeðo, oi sunart seic yyerror kai main N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 68/202

UlopoÐhsh SA me to bison(xiv) UlopoÐhsh LA qeirwnaktik Par deigma int yylex () { int c; while (isspace(c = fgetc(stdin))); if (isdigit(c)) { yylval = c - 0 ; while (isdigit(c = fgetc(stdin))) yylval = yylval * 10 + c - 0 ; ungetc(c, stdin); return T_num; Sto mèroc G } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 69/202

UlopoÐhsh SA me to bison(xv) (sunèqeia) Par deigma if (strchr("+*()", c)) return c; if (c!= EOF) fprintf(stderr, "Illegal character: %c\n", c); return 0; } mytest1: mytest1.y bison mytest1.y gcc -o mytest1 mytest1.tab.c Makefile AutomatopoÐhsh thc metagl ttishc tou SA N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 70/202

UlopoÐhsh SA me to bison(xvi) UlopoÐhsh LA me to flex Par deigma %{ #include "mytest2.tab.h" %} %% [0-9]+ { yylval = atoi(yytext); return T_num; } \( \) \+ \* { return yytext[0]; } [ \t\n]+ { /* nothing */ }. { yyerror("illegal character"); } %% mytest2.l N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 71/202

UlopoÐhsh SA me to bison(xvii) AutomatopoÐhsh thc metagl ttishc LA kai SA mytest2: mytest2.l mytest2.y bison -d mytest2.y Makefile flex -s mytest2.l gcc -o mytest2 mytest2.tab.c lex.yy.c \ -lfl EpÐlush sugkroôsewn sto bison shift-reduce: p nta reduce reduce-reduce: o pr toc kanìnac N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 72/202

for, anazht : K je mh termatikì sômbolo pou ja to SA top-down (i) H suntaktik an lush xekin apì th rðza antikatastajeð sun jwc epilègetai to aristerìtero kanìna paragwg c pou ja efarmosteð ton b sei twn epìmenwn lektik n mon dwn k sth sumboloseir eisìdou: LL(k) mèqri na exantlhjoôn ta mh Epanalamb netai termatik N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 73/202

proôpojèseic: AparaÐthtec arister c anadrom c ( meshc ApousÐa èmmeshc) koinoô projèmatoc se ApousÐa Grammatikèc LL(1) enallaktikoôc kanìnec forèc eðnai dunatìc o Merikèc miac grammatik c se metasqhmatismìc LL(1) isodônamh apaloif arister c anadrom c arister paragontopoðhsh N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 74/202

Metasqhmatismìc se LL(1) Antikat stash α A 1... α n B β 1 Aβ 2 A α 1... α n B β 1 α 1 β 2... β 1 α n β 2 Arister paragontopoðhsh αβ A 1... αβ n αb A β B 1... β n meshc arister c anadrom c Apaloif Aα A 1... Aα n β 1... β m β A 1... β B m B α B 1... α B n ɛ B N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 75/202

α 1... α n SA anadromik c kat bashc A metatrèpetai se k dika thc morf c: token FIRST(α an 1 tìte ) gia thn anagn rish thc α k dikac 1... alli c an token FIRST(α n ) tìte k dikac gia thn anagn rish thc α n alli c an ɛ FIRST(α 1 )... FIRST(α n ) tìte suntaktikì sf lma alli c an token FOLLOW(A) tìte suntaktikì sf lma tèloc an N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 76/202

for exet zetai h koruf thc stoðbac: K je eðnai termatikì sômbolo kai eðnai to Ðdio An SA LL(1) (i) mia stoðba ìpou topojetoôn QrhsimopoioÔn thc grammatik c arqik mìno to S sômbola to epìmeno thc sumboloseir c eisìdou, me afairoôntai kai ta dôo tìte eðnai mh termatikì sômbolo, tìte An me to epìmeno thc sumboloseir c an loga eisìdou efarmìzetai k poioc kanìnac h stoðba kai h sumboloseir eisìdou EpituqÐa: deiec eðnai N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 77/202

SA LL(1) (ii) συµβολοσειρά εισόδου algìrijmoc O tou kataskeu c M orðzei pðnaka oikogèneia thn a 1 a 2... a n EOF επόµενο σύµβολο glwss n twn LL(1) x m... κορυφή Πίνακας M συντακτικής ανάλυσης LL(1) x 2 x 1 στοίβα Συντακτικός Αναλυτής LL(1) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 78/202

E TE E + TE ɛ T FT T * FT ɛ F ( E ) id FIRST(E) = FIRST(T) = FIRST(F) = { id, ( } FIRST(E ) = { +,ɛ} FIRST(T ) = { *,ɛ} FOLLOW(E) = FOLLOW(E ) = { ), EOF } FOLLOW(T) = FOLLOW(T ) = { +, ), EOF } FOLLOW(F) = { *, +, ), EOF } Kataskeu SA LL(1) id + * ( ) EOF E E TE E TE E E +TE E ɛ E ɛ T T FT T FT T T ɛ T *FT T ɛ T ɛ F F id F (E) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 79/202

SA LeitourgÐa anagn rish LL(1) 0 E id + id * id EOF E TE 1 E T id + id * id EOF T FT 2 E T F id + id * id EOF F id 3 E T id id + id * id EOF 4 E T +id*ideof T ɛ 5 E +id*ideof E + TE 6 E T + + id * id EOF 7 E T id * id EOF T FT 8 E T F id * id EOF F id 9 E T id id * id EOF 10 E T *ideof T * FT 11 E T F * * id EOF 12 E T F id EOF F id 13 E T id id EOF 14 E T EOF T ɛ 15 E EOF E ɛ 16 ɛ EOF N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 80/202

k je kìmbou paidi n kathgor mata: oi timèc KlhronomoÔmena Kathgorikèc grammatikèc (i) grammatik (attribute grammar): Kathgorik qwrðc sumfrazìmena ìpou k je grammatik sômbolo fèrei èna sônolo kathgorhm twn timèc twn kathgorhm twn upologðzontai Oi tou suntaktikoô dèntrou: b sei kathgor mata: oi timèc touc Sunjetik mìno apì kathgor mata twn exart ntai exart ntai mìno apì kathgor mata touc fipatèrafl kai twn fiadelf nfl k je kìmbou tou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 81/202

(ii) E E + T { E 1.val := E 2.val + T.val } grammatikèc Kathgorikèc E T { E.val := T.val } T T * F { T 1.val := T 2.val F.val } T F { T.val := F.val } F ( E ) { F.val := E.val } F num { F.val := num.val } ShmasiologikoÐ kanìnec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 82/202

PÐnakac sumbìlwn eðnai: Onìmata prìgramma to metablhtèc oi upoprogr mmata (diadikasðec, sunart seic) ta par metroi twn upoprogramm twn oi etikèttec entol n oi stajerèc oi tôpoi dedomènwn oi plhroforðec gia ta onìmata pou Sugkentr nei sto arqikì prìgramma emfanðzontai N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 83/202

Qarakthristik onom twn apoj keushc (storage class) KathgorÐa metablhtèc (global variables) Kajolikèc stoðbac (stack variables) Metablhtèc metablhtèc (static variables) Statikèc Embèleia (scope) Oratìthta (visibility) Di rkeia zw c (lifetime) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 84/202

Perieqìmena pðnaka sumbìlwn Embèleia (èmmesa) Oratìthta (èmmesa) Di rkeia zw c TÔpoc Jèsh (dieôjunsh mn mhc, kataqwrht c,...) Arijmìc paramètrwn upoprogr mmatoc TÔpoc paramètrwn upoprogr mmatoc Trìpoc per smatoc paramètrwn upoprogr mmatoc TÔpoc apotelèsmatoc sun rthshc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 85/202

Org nwsh pðnaka sumbìlwn leitourgðec Basikèc onìmatoc Prosj kh onìmatoc Anaz thsh onìmatoc om dac onom twn Diagraf prosj khc anaz thshc an loga me Kìstoc ulopoðhsh: thn O(n) lðsta grammik dèntro anaz thshc O(log n) duadikì katakermatismoô O(n/k) pðnakac N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 86/202

UlopoÐhsh me PK b 0 c εµβέλεια 3 1 x 2... k 2 a aa y c b εµβέλεια 2 εµβέλεια 1 3 2 k 1 a 1 πίνακας κατακερµατισµού στοίβα αποθήκευσης στοίβα εµβελειών N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 87/202

SÔntaxh kai shmasiologða thc metagl ttishc di rkeia shmasiologða: apìdosh ermhneðac Dunamik morf kai dom twn kal c SÔntaxh: programm twn sqhmatismènwn ermhneða twn kal c ShmasiologÐa: programm twn sqhmatismènwn shmasiologða: entopismìc Statik sfalm twn kat th shmasiologik n sta progr mmata kat thn ektèles touc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 88/202

Statik shmasiologða (i) tôpwn Perib llonta Γ 1 = { i integer, x real } antistoðqishc tôpwn Sqèsh Γ E : τ tôpwn Kanìnec Γ E 1 : integer Γ E 2 : integer Γ E 1 +E 2 : integer N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 89/202

Statik shmasiologða (ii) Γ 1 i : integer Γ 1 1 : integer Γ 1 i+1 : integer Γ 1 (i+1)*x : real Γ 1 x : real Paragwgèc tôpwn antistoðqish tôpwn me kanìnec tôpwn H se ìla ta tm mata progr mmatoc epekteðnetai Γ E : boolean Γ S : stmt Γ while E do S : stmt N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 90/202

Dunamik shmasiologða (i) shmasiologða (operational semantics) Leitourgik akoloujða upologistik n bhm twn shmasiologða (denotational semantics) Dhlwtik majhmatik sun rthsh apì to pedðo twn eisìdou sto pedðo twn dedomènwn apotelesm twn shmasiologða (axiomatic semantics) Axiwmatik h ermhneða kajorðzetai èmmesa mèsw prot sewn pou perigr foun logik n tou progr mmatoc idiìthtec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 91/202

(ii) Dunamik shmasiologða H entol an jeshc I=E shmasiologða Leitourgik E,σ v I=E,σ σ[i v] shmasiologða Dhlwtik C[[ I=E ]](s) = s[i E[[ E ]](s)] shmasiologða Axiwmatik { P [I E] } I=E { P } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 92/202

Shmasiologikìc èlegqoc 'Elegqoc tôpwn 'Elegqoc ro c 'Elegqoc Ôparxhc onom twn 'Elegqoc monadikìthtac 'Elegqoc sunèpeiac N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 93/202

SÔsthma tôpwn tôpoi SÔnjetoi (arrays) PÐnakec (products) kai plei dec (tuples) ZeÔgh (records) Eggrafèc (pointers) DeÐktec (functions) Sunart seic (i) BasikoÐ tôpoi (integer, boolean, real, char,...) TÔpoi pr thc t xhc (first class) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 94/202

SÔsthma tôpwn (ii) Metatropèc tôpwn (type casting) Uperfìrtwsh telest n (operator overloading) PolumorfikoÐ telestèc (polymorphic operators) UposÔnola tôpwn kai upo-tôpoi (subtypes) sust mata tôpwn Polumorfik (polymorphictypesystems) kai dunamik antistoðqish tôpwn Statik binding) (type Exagwg tôpwn (type inference) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 95/202

Dunamikìc èlegqoc tôpwn ìtan up rqei Epib lletai antistoðqish tôpwn dunamik forèc ìmwc apaiteðtai kai se Pollèc antistoðqish tôpwn, p.q. èlegqoc statik orðwn se arrays thc Pascal: a[i] := 42 an i 0 kai i 100 tìte k dikac gia thn an jesh tou 42 sto a[i] alli c ektèleshc sf lma an tèloc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 96/202

'Elegqoc kai exagwg tôpwn tôpwn (type checking) 'Elegqoc Γ, E, τ DÐnontai: h paragwg Γ E : τ ZhteÐtai: gðnetai an den up rqei? TÐ tôpwn (type inference) Exagwg Γ, E DÐnontai: τ kai h paragwg Γ E : τ ZhteÐtai: gðnetai an den up rqoun? TÐ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 97/202

Exagwg tôpwn (i) metasqhmatismìc tou probl matoc Idèa: Γ :?se èna sônolo exis sewn E autì èqei lôsh, brðskoume èna τ tètoio ste An Γ E : τ den up rqei τ tètoio ste Diaforetik Γ E : τ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 98/202

Exagwg tôpwn (ii) twn tôpwn me metablhtèc tôpwn Epèktash τ ::= int bool τ τ α tôpwn (type substitution): Antikat stash metablht n tôpwn se tôpouc apeikìnish σ = [α int,β bool α] antikat stashc tôpwn: tautìqrona Efarmog mða for kai σ(α) = int σ(β) = bool α σ(β γ) = (bool α) γ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 99/202

Exagwg tôpwn (iii) antikatast sewn σ SÔnjesh 1 σ 2 ste ètsi (σ 1 σ 2 )(τ) =σ 1 (σ 2 (τ)) paraleðpontai oi tôpoi sto arqikì 'Opou sumplhr noume me frèskec prìgramma, tôpwn, èstw @1, @2,... metablhtèc let f g x = g x (x + 1) and m a b = a * b gðnetai: let f (g : @1) (x : @2) : @3 = g x (x + 1) and m (a : @4) (b : @5) : @6 = a * b N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 100/202

Exagwg tôpwn (iv) prìblhma Γ E :?an getai sthn eôresh To antikat stashc σ kai enìc tôpou τ ste miac σ(γ) σ(e) :τ Par deigma let f (g : @1) (x : @2) : @3 = g x (x + 1) and m (a : @4) (b : @5) : @6 = a * b in f m 6 Perib llon gia ìlh thn èkfrash: Γ= Perib llon gia to s ma f m 6: Γ b = { f @1 @2 @3, m @4 @5 @6 } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 101/202

Exagwg tôpwn (v) (sunèqeia) Par deigma let f (g : @1) (x : @2) : @3 = g x (x + 1) and m (a : @4) (b : @5) : @6 = a * b in f m 6 lôsh (h monadik ) Mia σ = [ @1 int int int, @2 int, @3 int, @4 int, @5 int, @6 int ] τ = int oi lôseic den eðnai monadikèc! Genik let f (x : @1) : @2 = x N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 102/202

Exagwg tôpwn (vi) P c brðsketai h lôsh? Periorismìc (constraint): exðswsh tôpwn τ 1 = τ 2 1: eôresh sunìlou periorism n C Prìblhma let f (g : @1) (x : @2) : @3 = g x (x + 1) and m (a : @4) (b : @5) : @6 = a * b in f m 6 sto sônolo periorism n: odhgeð C = { @1 = @2 int @3, @2 = int, @4 = int, @5 = int, @6 = int, @1 = @4 @5 @6, @2 = int } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 103/202

Exagwg tôpwn (vii) tôpwn me periorismoôc Paragwg Γ E : τ C Prìblhma 2: epðlush sunìlou periorism n antikat stash σ lègetai enopoiht c Mia gia ton periorismì τ (unifier) 1 = τ 2 oi tôpoi an σ(τ 1 kai ) σ(τ 2 tautðzontai ) σ(τ 1 ) σ(τ 2 ) gia to prìblhma thc exagwg c tôpwn: LÔsh enopoiht c σ gia k je periorismì tou C ènac o tôpoc τ = σ(τ ) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 104/202

Exagwg tôpwn (viii) unify( ) =σ 0 unify({ τ 1 = τ 2 } C) = {h ken antikat stash} EnopoÐhsh: epðlush sunìlou periorism n τ an 1 τ 2 tìte unify(c) an τ alli c 1 kai den emfanðzetai sto α τ 2 tìte unify([α τ 2 ]C) [α τ 2 ] an τ alli c 2 kai den emfanðzetai sto α τ 1 tìte unify([α τ 1 ]C) [α τ 1 ] an τ alli c 1 τ 11 τ 12 τ kai 2 τ 21 τ 22 tìte unify(c {τ 11 = τ 21,τ 12 = τ 22 }) alli c h enopoðhsh apotugq nei N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 105/202

Endi mesoc k dikac Ôparxhc Lìgoi to èrgo thc met frashc DieukolÔnei th beltistopoðhsh DieukolÔnei thn kat tmhsh se emprìsjio DieukolÔnei (i) kai opðsjio tm ma N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 106/202

Endi mesoc k dikac (ii) odhgoômenh apì th sôntaxh Met frash translation) (syntax-directed k je dom thc gl ssac prosdiorðzetai Gia antðstoiqoc endi mesoc k dikac o o suntaktikìc analut c me DieurÔnetai routðnec pou par goun shmasiologikèc endi meso k dika Sqèdio paragwg c endi mesou k dika idiot twn (attributes) gia k je Metablhtèc thc grammatik c sômbolo N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 107/202

Endi mesh gl ssa (i) (quadruples) Tetr dec n: op, x, y, z Par deigma: 1:, b, b, $1 2:, 4, a, $2 3:, $2, c, $3 4:, $1, $3, $4 b*b-4*a*c N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 108/202

Endi mesh gl ssa (ii) (triples) Tri dec n: op, x, y Par deigma: 1:, b, b 2:, 4, a 3:, (2), c 4:, (1), (3) b*b-4*a*c N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 109/202

Endi mesh gl ssa (iii) suntaktik dèntra Afhrhmèna (abstract trees) syntax Par deigma: b*b-4*a*c * * b b * c 4 a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 110/202

Endi mesh gl ssa (iv) kai epijematikìc k dikac Projematikìc code) (prefix/postfix Par deigma: bb 4ac bb 4a c b*b-4*a*c projematikìc epijematikìc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 111/202

Endi mesh gl ssa (v) akuklikoð gr foi Kateujunìmenoi (directed graphs) acyclic Par deigma: 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 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 112/202

Gl ssa tetr dwn ìpou: etikèta tetr dac (fusikìc arijmìc) n: tetr dac: Morf n: op, x, y, z op: telest c x, y, z: teloômena me to eðdoc tou telest, k poia An loga endeqomènwc paraleðpontai teloômena N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 113/202

TeloÔmena Stajer pragmatik, logik akèraia, 'Onoma paramètroc, upoprìgramma metablht, (i) qarakt rac, sumboloseir, nil Proswrin metablht : $n Apodeiktodìthsh: [x] DieÔjunsh: {x} x aplì teloômeno x aplì teloômeno Apotèlesma sun rthshc: $$ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 114/202

TeloÔmena Etikèta sto arqikì prìgramma entol c (ii) tetr dac per smatoc Trìpoc : kat' axða V : kat' anafor R : jèsh apotelèsmatoc sun rthshc RET Kenì : Proswrin kenì : * (gia backpatching) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 115/202

(i) unit, I,, Telestèc endu, I,, arq kai tèloc domik c mon dac op, x, y, z op {+, -, *, /, %} z := x op y :=, x,, z z := x array, x, y, z z := h dieôjunsh tou stoiqeðou x[y] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 116/202

Telestèc (ii) op, x, y, z op {=, <>, >, <, >=, <=} an x op y tìte p gaine sthn tetr da z ifb, x,, z h logik tim x eðnai alhj c tìte p gaine an tetr da z sthn jump,,, z p gaine sthn tetr da z label, I,, jumpl,,, I orismìc etikètac kai lma proc aut n N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 117/202

(iii) call,,, I Telestèc k lese th domik mon da I par, x, m, thn pragmatik par metro x me trìpo pèrase m per smatoc ret,,, epistrof apì thn trèqousa domik mon da N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 118/202

: lðsta apì etikètec tetr dwn pou NEXT lmata sthn epìmenh entol perièqoun ektelesteð an mia sunj kh eðnai alhj c na yeud c idiot twn PLACE Metablhtèc jèsh ìpou brðsketai apojhkeumènh h : miac l-value miac r-value tim TYPE : tôpoc miac l-value miac r-value, TRUE : lðstec apì etikètec tetr dwn FALSE perièqoun lmata ston k dika pou prèpei pou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 119/202

(i) NEXTQUAD() Bohjhtikèc uporoutðnec ton arijmì thc epìmenhc tetr dac Epistrèfei GENQUAD(op, x, y, z) thn epìmenh tetr da op, x, y, z Genn NEWTEMP(t) mia nèa proswrin metablht DhmiourgeÐ t tôpou EMPTYLIST() DhmiourgeÐ mia ken lðsta etiket n tetr dwn N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 120/202

(ii) MAKELIST(x) Bohjhtikèc uporoutðnec mia lðsta etiket n tetr dwn pou DhmiourgeÐ mìno to stoiqeðo x perièqei MERGE(l 1,...,l n ) twn list n etiket n tetr dwn Sunènwsh l 1...l n BACKPATCH(l, z) se ìlec tic tetr dec pou Antikajist sthn l thn gnwsth etikèta perièqontai tetr dac me th z (backpatching) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 121/202

Arijmhtikèc ekfr seic Akèraiec stajerèc r-value ::= integer-const {P 1 } P 1 : { r-value.place = integer-const ; } Telestèc me dôo teloômena 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 ; } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 122/202

(i) <cond>... jump,,, 31... jump,,, 42... jump,,, 31... jump,,, 31... jump,,, 42... Logikèc ekfr seic <cond>.false <cond>.true N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 123/202

Logikèc ekfr seic (ii) ekfr seic se sumbolismì 0/1 Logikèc cond ::= expr <cond> <expr> ifb, <expr>.place,, * ju mp,,, * FALSE TRUE N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 124/202

Logikèc ekfr seic (iii) ekfr seic se sumbolismì 0/1 Logikèc cond ::= expr {P 21 } P 21 : { cond.true = MAKELIST(NEXTQUAD()); GENQUAD(ifb, expr.place,, ); cond.false = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 125/202

Logikèc ekfr seic (iv) Telestèc sôgkrishc cond ::= expr 1 relop expr 2 <cond> <expr> 1 <expr> 2 relop, <expr> 1.PLAC E, <expr> 2.PLAC E, * ju mp,,, * FALSE TRUE N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 126/202

Logikèc ekfr seic (v) Telestèc sôgkrishc 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,,, ); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 127/202

Logikèc ekfr seic (vi) 'Arnhsh cond ::= not cond <cond> TRUE <cond> FALSE FALSE TRUE N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 128/202

Logikèc ekfr seic (vii) SÔzeuxh cond ::= cond 1 and cond 2 <cond> FALSE <cond> 1 TRUE FALSE <cond> 2 TRUE FALSE TRUE N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 129/202

Logikèc ekfr seic (viii) SÔzeuxh 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; } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 130/202

Aplèc entolèc Ken entol stmt ::= ɛ { P 29 } P 29 : { stmt.next =EMPTYLIST(); } Entol an jeshc stmt ::= l-value := expr {P 30 } P 30 : { GENQUAD( :=, expr.place,, l-value.place ); stmt.next = EMPTYLIST(); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 131/202

(i) stmt ::= block SÔnjeth entol block ::= begin stmt ( ; stmt ) end <block> <stmt> 1 NEXT <stmt> 2 NEXT NEXT N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 132/202

(ii) stmt ::= block {P 34 } SÔnjeth entol 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; } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 133/202

Entol if (i) stmt ::= if cond then stmt [ else stmt ] <stmt> FALSE <cond> TRUE <stmt> TRUE <cond> FALSE <stmt> 1 jump,,, * NEXT <stmt> 1 NEXT <stmt> 2 NEXT NEXT NEXT N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 134/202

Entol 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 ); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 135/202

Entol while (i) stmt ::= while cond do stmt <stmt> FALSE <cond> TRUE <stmt> 1 ju mp,,, * NEXT NEXT N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 136/202

Entol 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 ; } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 137/202

(i) call ::= id ( [ expr (, expr ) ] ) upoprogramm twn Kl sh r-value ::= call stmt ::= call Pèrasma paramètrwn me tetr dec par jèshc apotelèsmatoc me tetr da par Pèrasma prìkeitai gia sun rthsh an Kl sh me tetr da call N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 138/202

(ii) call ::= id ( { P Kl sh upoprogramm twn 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; } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 139/202

(iii) call ::= id ( { P Kl sh upoprogramm twn 46 } [ expr 1 { P 47 } (, expr 2 { P 48 } ) ] ) { P 49 } (sunèqeia) P 49 : { if (ISFUNCTION( id )) { W = NEWTEMP(FUNCRESULT( id )); GENQUAD(par, RET, W, ); call.place = W ; } GENQUAD(call,,, id ); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 140/202

Kl sh upoprogramm twn (iv) Kl sh sun rthshc r-value ::= call {P 50 } P 50 : { r-value.place = call.place; } Kl sh diadikasðac stmt ::= call {P 51 } P 51 : { stmt.next =EMPTYLIST(); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 141/202

Kl sh upoprogramm twn (v) Epistrof apì upoprìgramma stmt ::= return [ expr {P 52 } ] { P 53 } P 52 : { GENQUAD(retv, expr.place,, ); } P 53 : { GENQUAD(ret,,, ); } D lwsh upoprogr mmatoc body ::= ( local ) { P 56 } block ; { P 57 } P 56 : { GENQUAD(unit, I,, ); } P 57 : { BACKPATCH( block.next, NEXTQUAD()); GENQUAD(endu, I,, ); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 142/202

telikoô k dika: Morfèc mhqan c se apìluth morf (absolute) Gl ssa gl ssa (assembly) Sumbolik gl ssa qamhloô epipèdou 'Allh Telikìc k dikac (i) jewrhtik c poyhc, to prìblhma thc Apì bèltistou telikoô k dika den èqei kataskeu c lôsh (undecidable) mhqan c se epanatopojet simh kai Gl ssa morf (relocatable, linkable) diasundèsimh N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 143/202

Telikìc k dikac probl mata: Epimèrouc entol n Epilog entol n thc mn mhc sto qrìno ektèleshc DiaqeÐrish (ii) P c metafr zetai k je entol tou k dika endi mesou P c metafr zontai akoloujðec tètoiwn PoÔ apojhkeôontai ta dedomèna P c gðnetai h epikoinwnða an mesa stic domikèc mon dec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 144/202

Qarakthristik : Intel 8086 Epexergast c: Telikìc upologist c (i) sôsthma: MS-DOS Leitourgikì mn mhc: COM / tiny Montèlo Sunolik mn mh 64 K Org nwsh se èna segment Arqik dieôjunsh tou progr mmatoc h 100h gl ssa: sumbat me to Sumbolik MASM (Microsoft sumbolometafrast assembler) macro N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 145/202

(ii) Telikìc upologist c Kataqwrhtèc, megèjouc 16 bit Genik c fôshc: ax, bx, cx, dx se zeôgh twn 8 bit: ah, al, k.lp. deðktec: sp (deðkthc stoðbac) Kataqwrhtèc bp (deðkthc b shc) kai anafor c: si kai di Kataqwrhtèc tmhm twn: cs (code), ds Kataqwrhtèc ss (stack) kai es (extra) (data), kataqwrhtèc: ip (instruction EidikoÐ pointer) kai kataqwrht c shmai n (flags) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 146/202

Telikìc upologist c (iii) DieujÔnseic: address = segment 16 + offset Morf entol c: [ label ] opname [ operand 1 [, operand 2 ]] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 147/202

Telikìc upologist c (iv) Entolèc: mov, lea Metafor c: pr xewn: add, sub, neg, imul, Arijmhtik n cmp, cwd idiv, pr xewn: and, or, xor, not, test Logik n jmp, jz, jnz, jl, jle, jg, jge 'Almatoc: stoðbac: push, pop DiaqeÐrishc call, ret Upoprogramm twn: Pr xewn kinht c upodiastol c (x87 FPU) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 148/202

metafor c mov destination, source Entolèc mov ax, 42 mov ax, bx mov ax, [1000h] mov ax, [si] mov ax, [si + 6] mov ax, [bp + 6] mov ax, [si + bp + 6] lea destination, source (move) (load effective address) megèjouc dedomènwn Kajorismìc mov ax, word ptr [bp + 6] mov al, byte ptr [bp + 6] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 149/202

pr xeic add op Arijmhtikèc 1, op 2 op 1 := op 1 + op 2 sub op 1, op 2 op 1 := op 1 op 2 neg op imul op idiv op cwd op := op (dx, ax) :=ax op ax := (dx, ax) div op dx := (dx, ax) mod op cmp op 1, op 2 sôgkrine ta op 1 kai op 2 epèktash pros mou tou ax ston dx enhmèrwse tic shmaðec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 150/202

pr xeic and op Logikèc 1, op 2 op 1 := op 1 and op 2 or op 1, op 2 op 1 := op 1 or op 2 not op op := not op xor op 1, op 2 op 1 := op 1 xor op 2 test op 1, op 2 op 1 and op 2 enhmèrwse tic shmaðec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 151/202

lmatoc jmp address Entolèc jz address je address jnz address jne address jl address jle address jg address jge address / Ðso mhdèn mhdèn / di foro ìqi mikrìtero Ðso mikrìtero megalôtero qwrðc sunj kh megalôtero Ðso N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 152/202

stoðbac push op Entolèc sth stoðba prìsjesh sp := sp 2, [sp] :=op pop op afaðresh apì th stoðba op := [sp], sp := sp +2 H stoðba aux nei proc ta k tw, dhlad proc mikrìterec dieujônseic N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 153/202

call address Entolèc upoprogramm twn sp := sp 2, [sp] :=ip, ip := address kl sh ret epistrof ip := [sp], sp := sp +2 H tim tou ip pou topojeteðtai sth stoðba apì call eðnai h dieôjunsh thc entol c pou thn thn call akoloujeð N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 154/202

Entolèc x87 FPU (i) Eidik stoðba 8 kataqwrht n: ST(0),... ST(7) fld source fld tbyte ptr @real1 fild source fild word ptr [bp 2] fstp destination fld tbyte ptr [bp 10] fistp destination (load real & push) (load integer & push) (pop & store real) (pop & store integer) fild word ptr [bp 2] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 155/202

Entolèc x87 FPU (ii) faddp ST(1), ST(0) fsubp ST(1), ST(0) fmulp ST(1), ST(0) fdivp ST(1), ST(0) fchs fcompp fstsw destination fstsw ax fstsw word ptr [bp 2] ST(1) :=ST(1) +ST(0) &pop ST(1) :=ST(1) ST(0) &pop ST(1) :=ST(1) ST(0) &pop ST(1) :=ST(1)/ST(0) &pop ST(0) := ST(0) ST(1) ST(0) &popboth (store x87 FPU flags) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 156/202

DiaqeÐrish mn mhc enot twn (block structure) Dom topik dedomèna Mh Par metroi Apotèlesma kat stashc mhqan c PlhroforÐec metablhtèc Topikèc (i) drasthriopoðhshc (activation Eggr fhma record) Proswrinèc metablhtèc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 157/202

(ii)... bp+8 Παράµετρος 1 DiaqeÐrish mn mhc Παράµετρος 2... Παράµετρος n Παράµετρος 1 Παράµετρος 2... Παράµετρος n Παράµετροι αρχή bp+6 ιεύθυνση αποτελέσµατος ιεύθυνση αποτελέσµατος bp+4 bp+2 bp bp-2 bp-4... Σύνδεσµος προσπέλασης ιεύθυνση επιστροφής Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2... Τοπική µεταβλητή m ιεύθυνση επιστροφής Προηγούµενο display Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2... Τοπική µεταβλητή m Σταθερό Τµήµα Τοπικές µεταβλητές βάση Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινές µεταβλητές τέλος α) Σύνδεσµοι προσπέλασης β) Πίνακας δεικτών N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 158/202

(iii) Ε κύριου προγράµµατος Ε υποπρογράµµατος 1... Ε υποπρογράµµατος m DiaqeÐrish mn mhc στοίβα εκτέλεσης ελεύθερη µνήµη δυναµικό δεδοµένο k... σωρός δυναµικό δεδοµένο 1 µνήµη για αποθήκευση δεδοµένων συνολική διαθέσιµη µνήµη 64Κ µεταφρασµένος κώδικας µνήµη για αποθήκευση του κώδικα του προγράµµατος 0Κ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 159/202

drasthriopoðhshc ìpou ta eggraf matoc eðnai topik dedomèna prìblhma an getai ston entopismì tou To eggraf matoc drasthriopoðhshc antðstoiqou pou basðzontai sto b joc fwli smatoc: LÔseic prospèlashc (access links) SÔndesmoi onom twn Prospèlash [bp + offset] Topik : Mh topik : [si + offset] o si prèpei na deðqnei sth b sh tou PÐnakec deikt n (link tables / displays) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 160/202

leitourgðac Arq ìti h domik mon da p brðsketai 'Estw SÔndesmoi prospèlashc (i) fwliasmènh mèsa sth domik mon da q Sto ED thc p topojeteðtai èna sôndesmoc th b sh tou ED thc pio prìsfathc proc thc q kl shc thn kl sh upoprogramm twn, apaiteðtai Kat k dikac gia thn enhmèrwsh twn telikìc sundèsmwn prospèlashc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 161/202

qr shc Trìpoc ìti zhteðtai to dedomèno a pou eðnai 'Estw SÔndesmoi prospèlashc (ii) se mia domik mon da me b joc topikì n fwli smatoc a ìti briskìmaste se mia domik 'Estw p me b joc fwli smatoc n mon da p n a AkoloujoÔme n p n a sundèsmouc prospèlashc thn prospèlash onom twn, apaiteðtai Kat k dikac gia thn ulopoðhsh twn parap nw telikìc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 162/202

Pèrasma paramètrwn kat' axða Kl sh kat' anafor Kl sh kat' ìnoma Kl sh kat' an gkh Kl sh (call by value) (call reference) by (call name) by (call need) by kat' axða kai apotèlesma Kl sh (call value-result) by Trìpoc ulopoðhshc kajenìc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 163/202

Dèsmeush kataqwrht n (i) 1: epilog teloumènwn pou ja Prìblhma se kataqwrhtèc apojhkeutoôn 2: epilog kataqwrht n ìpou ja Prìblhma ta teloômena apojhkeutoôn prìblhma thc bèltisthc qr shc To eðnai NP-complete, akìma kai kataqwrht n qwrðc eidikoôc periorismoôc lôsh tou an getai sthn kataskeu tou H allhlepidr sewn metaxô twn gr fou kai sto qrwmatismì autoô me tìsa metablht n ìsoi oi kataqwrhtèc qr mata N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 164/202

Dèsmeush kataqwrht n Par deigma: 1:, b, b, $1 2:, 4, a, $2 3:, $2, c, $3 4:, $1, $3, $4 5: :=, $4,, d $1 (ii) d := b*b-4*a*c $2 ax $3 $4 bx N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 165/202

prosèggish: plakìstrwsh (tiling) KalÔterh tou endi mesou k dika se temaqismìc tm mata tm ma antistoiqeð se mia entol k je Epilog entol n (i) all kak prosèggish: eniaðo sq ma Apl telikoô k dika gia k je dom tou paragwg c endi mesou k dika all qronobìra prosèggish: Bèltisth programmatismìc (dynamic dunamikìc programming) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 166/202

Epilog entol n (ii) d := b*b-4*a*c := Par deigma: mem := + * * d bp offset d mem * mem * * + 4 mem + b b * c bp offset b + bp offset c 4 a bp offset a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 167/202