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

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


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

Υλοποίηση ΣΑ με το 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)

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

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

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.

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

ISTORIKH KATASKEUH PRAGMATIKWN ARIJMWN BIBLIOGRAFIA

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

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

Eisagwg sthn KosmologÐa

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

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

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

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

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

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

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

Statistik gia QhmikoÔc MhqanikoÔc EKTIMHSH PARA

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

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

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

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

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

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

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

Ergasthriak 'Askhsh 2

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

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

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

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

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

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


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

Mègisth ro - elˆqisth tom

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

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

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

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

APEIROSTIKOS LOGISMOS I

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

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

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

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

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

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

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

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

GENIKEUMENA OLOKLHRWMATA

Υποπρογράμματα (Subroutines)

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στο 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

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

Upologistik Fusik Exetastik PerÐodoc IanouarÐou 2013

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

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

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

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΙΙ Εργαστήριο 2 ο ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ- ΨΕΥΔΟΕΝΤΟΛΕΣ ΜΑΚΡΟΕΝΤΟΛΕΣ- ΔΙΑΔΙΚΑΣΙΕΣ (ΕΙΣΑΓΩΓΗ)

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

Transcript:

apait seic: Basikèc leitourgeð swst Na 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 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 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 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Ð thc metagl ttishc F seic an lush Lektik Eisagwg Eisagwg UlopoÐhsh glwss n programmatismoô Metaglwttistèc PapaspÔrou NÐkoc 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. (program generators) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 3/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 2/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 1/202 Kataskeu metaglwttist Kataskeu metaglwttist 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 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 4/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 5/202

ulopoðhshc Jèmata se per smata Org nwsh diagnwstik n mhnum twn kai an nhyh EÐdh (internal) Eswterik (errors) Sf lmata mhnômata (warnings) Proeidopoihtik perðptwsh: gl ssec pou par goun thn Eidik sumboloseir ken EkkÐnhsh bootstrapping αρχικό πρόγραµµα Λεκτική ανάλυση F seic kai pro ìnta λεκτικές µονάδες B ma 1: Metaglwttist c gia S A sthn T. συντακτικό δέντρο se emprìsjio kai opðsjio tm ma Org nwsh / back-end) (front-end Συντακτική Ανάλυση B ma 2: Metaglwttist c gia thn A sthn S. Σηµασιολογική Ανάλυση B ma 3: Metaglwttist c gia thn A sthn A. συντακτικό δέντρο Πίνακας συµβόλων Παραγωγή ενδιάµεσου κώδικα Χειριστής σφαλµάτων A T A T 'Elegqoc orjìthtac ενδιάµεσος κώδικας Βελτιστοποίηση ενδιάµεσου κώδικα A T A A T T ενδιάµεσος κώδικας Παραγωγή τελικού κώδικα S S T T τελικός κώδικας Βελτιστοποίηση τελικού κώδικα T τελικό πρόγραµµα Apl mhnômata (messages) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 9/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 8/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 7/202 Εµπρόσθιο τµήµα Λεκτικός αναλυτής Org nwsh se èna pèrasma Συντακτικός αναλυτής Σηµασιολογικός αναλυτής Γεννήτορας ενδιάµεσου κώδικα Βελτιστοποιητής ενδιάµεσου κώδικα Χειριστής σφαλµάτων gl ssec Tupikèc G =(T,N,P,S) Grammatik : termatik sômbola T : mh termatik sômbola N : kanìnec paragwg c P : arqikì sômbolo S a A α β 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) IerarqÐa Chomsky Πίνακας συµβόλων Γεννήτορας τελικού κώδικα Βελτιστοποιητής τελικού κώδικα an α, β, γ, δ (T N) Paragwgèc: (α β) P kai γαδ γβδ tìte 3: kanonikèc grammatikèc (regular) TÔpou A ab A a Οπίσθιο τµήµα Gl ssa: L(G) ={ α T S α } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 10/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 11/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 12/202

gl ssec Kanonikèc ekfr seic (regular expressions) Kanonikèc SuntomografÐec: peritt n parenjèsewn apaloif an lush Lektik mon dec (tokens) Lektikèc me peperasmèna autìmata AnagnwrÐzontai pou: endeqomènwc perissìterouc diab zoun qarakt rec an qreiasteð opisjodromoôn èxodo pou qrhsimopoieðtai sth diajètoun autìmata Peperasmèna kai metab seic Katast seic (NPA), mh nteterministik Nteterministik kai MPA me kenèc metab seic (MPA-ɛ) (MPA) gl ssa twn sumboloseir n pou H apì 0 kai 1 kai perièqoun rtio apoteloôntai Anagnwristèc 0: mhqan Turing TÔpou 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 sumboloseir : ɛ Ken sômbolo: a Σ K je dôo kanonik n ekfr sewn: Par jesh dôo kanonik n ekfr sewn: Di zeuxh KleÐsimo ( stro) Kleene: (r ) r [a 1, a 2,,a n ] r?. (rs) (r s) A 0 0 1 1 B arijmì 1 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 13/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 14/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 15/202 kai isodunamðec Anagwgèc grammatik MPA-ɛ kanonik MPA-ɛ kanonik grammatik Diagr mmata met bashc Anagnwristik thc Pascal L èkfrash kanonik MPA-ɛ MPA-ɛ kanonik èkfrash 0 L 1 D MPA-ɛ NPA suntaktik an lush L L όχι L/D 0 1 2 (T_id) ElaqistopoÐhsh NPA Eidikìc sumbolismìc: diagr mmata met bashc D N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 18/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 16/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 17/202

SqedÐash sunolikoô kai taxinìmhsh lektik n mon dwn Katagraf lektik n mon dwn KwdikopoÐhsh trìpoi ulopoðhshc: EnallaktikoÐ Qeirwnaktik 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 metaprìgramma pou perigr fei tic EÐsodoc: mon dec lektikèc sun rthsh yylex ulopoieð to LA H ton kwdikì thc lektik c mon dac Epistrèfei anagnwrðsthke, 0 sto tèloc thc pou eisìdou sumboloseir c sth metablht yytext thn TopojeteÐ akoloujða qarakt rwn (lexeme) antðstoiqh Diagr mmata met bashc Telestèc > kai >= Kataskeu tou LA Kataskeu tou LA 0 > 1 = 2 kai taxinìmhsh qarakt rwn Katagraf mapping : (ASCII {EOF }) Σ όχι = 2 (T_gt) AkoloujÐa qarakt rwn (lexeme) 0 > 1 SqedÐash tou diagr mmatoc met bashc UlopoÐhsh tou lektikoô analut = 3 (T_ge) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 19/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 21/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 20/202 (iii) (iv) UlopoÐhsh LA me to flex W Kataskeu tou LA Kataskeu tou LA 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) MetaergaleÐo flex: genn torac LA : < > / 1 2 3 4 5 diagr mmatoc = = όχι = = met bashc όχι = όχι = = όχι = όχι 24 40 25 41 27 42 28 43 29 44 pðnaka metab sewn Me to metaergaleðo flex Me 'Exodoc: prìgramma se C (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. Ε όχι D Ε D D 7. 8 E - 9 10 D 11 όχι D 46 D Ε D D (T_const) { 12 } 0 όχι } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 24/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 22/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 23/202

LeitourgÐa: to makrôtero prìjema thc Diab zetai eisìdou pou mporeð na sumboloseir c apì k poia kanonik èkfrash anagnwristeð ekfr sewn kanonik n arqik n katast sewn Dhl seic kanonik èkfrash r. Oi parenjèseic qrhsimopoioôntai H gia omadopoðhsh. UlopoÐhsh LA me to flex UlopoÐhsh LA me to flex (iii) UlopoÐhsh LA me to flex (iv) 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 A, perièqei Mèroc ìpwc sth C Sqìlia, C, mèsa se %{ kai %} K dika onìmata wc suntomografðec Mnhmonik 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 25/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 26/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 27/202 UlopoÐhsh LA me to flex (v) UlopoÐhsh LA me to flex (vi) UlopoÐhsh LA me to flex (vii) Mèroc B, perièqei kanìnec thc morf c èkfrash enèrgeia kanonik enèrgeia eðnai mia entol thc C K je EkteleÐtai h antðstoiqh enèrgeia 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 alli c Ðdioc qarakt rac ìpwc o x. o C, O oktadik tim 123. qarakt rac me O me dekaexadik tim qarakt rac 3F. H sumboloseir abc. 'Enac c. apì touc qarakt rec a, 'Enac èwc z. apì touc qarakt rec touc qarakt rec a, èwc 'Enac f, s. apì \123 ASCII \x3f ASCII "abc" [abc] b [a-z] a [ac-fs] c 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 28/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 29/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 30/202

UlopoÐhsh LA me to flex (viii) UlopoÐhsh LA me to flex (ix) UlopoÐhsh LA me to flex (x) 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 mia for ). mhdèn 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 forèc. H ^r all mìno sthn arq miac gramm c. r H r$ all mìno sto tèloc miac gramm c. r 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. r se opoiad pote arqik kat stash. H tèloc tou arqeðou eisìdou. To 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 31/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 32/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 33/202 UlopoÐhsh LA me to flex (xi) UlopoÐhsh LA me to flex (xii) UlopoÐhsh LA me to flex (xiii) Par deigma void ERROR (const char msg []) { fprintf(stderr, "ERROR: %s\n", msg); exit(1); } (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; 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); } Mèroc G, perièqei k dika C Prìblhma: L joc arðjmhsh se sqìlia N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 36/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 34/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 35/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 ::= 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 UlopoÐhsh LA me to flex 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) (xiv) kat stash kat thn ènarxh leitourgðac Arqik LA: INITIAL tou UlopoÐhsh LA me to flex ArÐjmhsh gramm n (diìrjwsh) Par deigma: %x COMMENT "(" { BEGIN(COMMENT); } <COMMENT>")" { BEGIN(INITIAL); } <COMMENT>\n { lineno; } <COMMENT>"" { / nothing / } <COMMENT>[^\n] { / nothing / } (xv) qwrðc sumfrazìmena Gl ssec qwrðc sumfrazìmena: A α Grammatikèc / dexiìterh paragwg Aristerìterh (leftmost / derivation) rightmost dèntra Suntaktik trees) (parse 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 S a A B c c A S ε B a b a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 37/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 38/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 39/202 DiforoÔmenec grammatikèc grammatikèc DiforoÔmenec stmt BNF/EBNF Sumbolismìc Backus-Naur Form dèntra gia thn Ðdia paragìmenh sumboloseir kai gl ssec eggen c diforoômenec Grammatikèc ambiguous) (inherently if cond stmt c1 if cond stmt c2 s1 else stmt s2 stmt if c1 ( if c2 s1 else s2 ) p.q. expr parenjèseic, gia di zeuxh SÔmbolo Extended Backus-Naur Form stmt if cond stmt else stmt if cond stmt s1 s2 cond c1 c2 if c1 ( if c2 s1 ) else s2 if cond stmt c1 if cond stmt else stmt s2 if c1 if c2 s1 else s2 c2 s1 kai h sumboloseir : N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 42/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 40/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 41/202

an lush Suntaktik dèntro (parse tree) Suntaktikì me dôo trìpouc: Kataskeu zetai p nw proc ta k tw (top-down) Apì xekin ntac apì th rðza kai dhlad proc ta fôlla proqwr ntac k tw proc ta p nw (bottom-up) Apì xekin ntac apì ta fôlla kai dhlad ta termatik sômbola pou mporoôn perièqei akoloujoôn to A sth di rkeia miac na paragwg c to A mporeð na eðnai to teleutaðo An Top-down kai bottom-up από πάνω προς τα κάτω (top-down) 1 S από κάτω προς τα πάνω (bottom-up) 12 S Bohjhtikèc ènnoiec SÔnola FIRST sumboloseir α (T N) 'Estw sônolo FIRST(α) (T {ɛ }) perièqei To 2 3 11 a A B c 4 A b 12 10 a 13 10 a A B c 1 8 6 A b 7 9 a 11 termatik sômbola apì ta opoða ta oi sumboloseirèc pou par gontai arqðzoun thn α apì α ɛ, tìte ɛ FIRST(α) An proqwr ntac proc th rðza 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 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 43/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 45/202 Upologismìc FIRST Upologismìc FIRST Bohjhtikèc ènnoiec SÔnola FOLLOW mh termatikì sômbolo A 'Estw sônolo FOLLOW(A) (T {EOF }) To se mia paragwg, tìte sômbolo EOF FOLLOW(A) FIRST(ɛ) ={ ɛ } FIRST(aβ) ={ a } an tìte an ɛ FIRST(A) FIRST(Aβ) =FIRST(A) ɛ FIRST(A) tìte FIRST(Aβ) =(FIRST(A) {ɛ }) FIRST(β) 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 k je kanìna A α, prèpei gia FIRST(α) FIRST(A) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 48/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 46/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 47/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 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 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 (reducing): h epilog twn kìmbwn El ttwsh ja apotelèsoun ta paidi enìc nèou pou Upologismìc FOLLOW Upologismìc FOLLOW SA bottom-up EOF FOLLOW(S) k je kanìna A αbβ gia (FIRST(β) {ɛ }) FOLLOW(B) an tìte ɛ FIRST(β) FOLLOW(A) FOLLOW(B) 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 H suntaktik an lush xekin apì ta fôlla Epanalamb nei mèqri na kataskeuasteð h rðza kìmbou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 50/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 49/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 51/202 SA bottom-up SA bottom-up (iii) SA bottom-up (iv) B B r D D a. b r a. b r S D D a. b 0 ɛ ra,b 2 ra,b D a 1 r, b 3 r D,b B D 4 r B,b shift/reduce conflict S r B B B (ìqi el ttwsh me S r B) B D B, D D a b B D D B D D olðsjhsh el ttwsh me el ttwsh me 6 r B,b ɛ D b 5 r B, b 7 r B, D ɛ B B, D r a. b r a. b el ttwsh (ìqi me D) el ttwsh me anagn rish B 8 r B ɛ S r B 9 S ɛ reduce/reduce conflict N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 52/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 53/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 54/202

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 metaprìgramma pou perigr fei th EÐsodoc: kai tic shmasiologikèc routðnec sôntaxh sun rthsh yyparse ulopoieð to SA H 0 an anagnwristeð h Epistrèfei eisìdou 1 se perðptwsh sumboloseir sf lmatoc suntaktikoô me to lektikì analut Sunerg zetai yylex) (sun rthsh SA bottom-up (v) UlopoÐhsh SA me to bison UlopoÐhsh SA me to bison LR(k) συµβολοσειρά εισόδου MetaergaleÐo bison: genn torac SA LALR(1) Dom tou metaprogr mmatoc LR(0) SLR(1) LALR(1) LR(1) s m x m κορυφή a 1 a 2 a n EOF επόµενο σύµβολο Πίνακες ελέγχου συντακτικής ανάλυσης LR(1) 'Exodoc: prìgramma se C A Mèroc %% B Mèroc %% Mèroc G s 1 ACTION NEXT x 1 Συντακτικός Αναλυτής LR(1) Kai ta trða mèrh mporoôn na eðnai ken s 0 στοίβα N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 55/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 56/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 57/202 UlopoÐhsh SA me to bison(iii) UlopoÐhsh SA me to bison(iv) UlopoÐhsh SA me to bison(v) A, perièqei Mèroc ìpwc sth C Sqìlia, C, mèsa se %{ kai %} K dika lektik n mon dwn Dhl seic 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 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 sumbìlou N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 58/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 59/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 60/202

routðnec pou ekteloôntai shmasiologikèc th suntaktik an lush kat metaprìgramma tou bison analamb nei ton To èlegqo tou metaglwttist pou kentrikì me th sunergasða twn epitugq netai parak tw: lektikoô analut tou suntaktikoô analut tou pðnaka sumbìlwn tou shmasiologikoô analut tou na kataskeuasteð SA pou na ZhtoÔmeno: thn tim miac arijmhtik c èkfrashc upologðzei UlopoÐhsh SA me to bison(vi) B, perièqei: Mèroc kanìnec paragwg c se morf BNF touc 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 ; UlopoÐhsh SA me to bison(vii) Mèroc G, perièqei k dika C tou genn tora endi mesou k dika UlopoÐhsh SA me to bison(viii) B, par deigma Mèroc program : { count=0; } block_list { printf("counted %d block(s)\n", count); } ; block_list : / nothing / block_list block { count; } ; block : "begin" block_list "end" ; N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 61/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 62/202 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(); } 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 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 64/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 65/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 66/202

sun rthsh yylex (pijan c se xeqwristì h an qrhsimopoihjeð to flex) arqeðo, 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; } ; UlopoÐhsh SA me to bison(xiii) (sunèqeia) Par deigma factor : ( expression ) { $$ = $2; } T_num { $$ = $1; } ; %% ParaleÐpontai sto Mèroc G: oi sunart seic yyerror kai main 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 67/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 68/202 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; } thc tou SA AutomatopoÐhsh metagl ttishc mytest1: mytest1.y Makefile bison mytest1.y gcc -o mytest1 mytest1.tab.c UlopoÐhsh SA me to bison(xvi) UlopoÐhsh LA me to flex Par deigma %{ #include "mytest2.tab.h" %} mytest2.l %% [0-9] { yylval = atoi(yytext); return T_num; } \( \) \ \ { return yytext[0]; } [ \t\n] { / nothing / }. { yyerror("illegal character"); } %% 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 sto bison EpÐlush sugkroôsewn reduce p nta shift-reduce: reduce-reduce: o pr toc kanìnac N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 70/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 71/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 72/202

for, anazht : K je mh termatikì sômbolo pou ja to mèqri na exantlhjoôn ta mh Epanalamb netai termatik proôpojèseic: AparaÐthtec arister c anadrom c ( meshc ApousÐa èmmeshc) koinoô projèmatoc se ApousÐa for exet zetai h koruf thc stoðbac: K je eðnai termatikì sômbolo kai eðnai to Ðdio An 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 h stoðba kai h sumboloseir eisìdou EpituqÐa: deiec eðnai algìrijmoc O tou kataskeu c M orðzei pðnaka oikogèneia thn SA top-down Grammatikèc LL(1) Metasqhmatismìc se LL(1) H suntaktik an lush xekin apì th rðza Antikat stash α A 1 α n B β 1 Aβ 2 A α 1 α n B β 1 α 1 β 2 β 1 α n β 2 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) forèc eðnai dunatìc o Merikèc miac grammatik c se metasqhmatismìc LL(1) isodônamh enallaktikoôc kanìnec Arister paragontopoðhsh αβ A 1 αβ n αb A β B 1 β n apaloif arister c anadrom c arister paragontopoðhsh β A 1 β B m B α B 1 α B n ɛ B meshc arister c anadrom c Apaloif Aα A 1 Aα n β 1 β m N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 74/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 73/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 75/202 SA LL(1) SA LL(1) anadromik c kat bashc SA α A 1 α n mia stoðba ìpou topojetoôn QrhsimopoioÔn thc grammatik c arqik mìno to S sômbola συµβολοσειρά εισόδου a 1 a 2 a n EOF 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 glwss n twn LL(1) x m κορυφή επόµενο σύµβολο Πίνακας M συντακτικής ανάλυσης LL(1) x 2 suntaktikì sf lma alli c an token FOLLOW(A) tìte suntaktikì sf lma eisìdou efarmìzetai k poioc kanìnac x 1 στοίβα Συντακτικός Αναλυτής LL(1) tèloc an N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 78/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 76/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 77/202

sumbìlwn PÐnakac plhroforðec gia ta onìmata pou Sugkentr nei 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 grammatik (attribute grammar): Kathgorik qwrðc sumfrazìmena ìpou k je grammatik 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 k je kìmbou paidi n kathgor mata: oi timèc KlhronomoÔmena exart ntai mìno apì kathgor mata touc fipatèrafl kai twn fiadelf nfl k je kìmbou tou onom twn Qarakthristik apoj keushc (storage class) KathgorÐa metablhtèc (global variables) Kajolikèc stoðbac (stack variables) Metablhtèc 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) anagn rish 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 idideof T ɛ 5 E idideof 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 LeitourgÐa SA LL(1) Kathgorikèc grammatikèc sômbolo fèrei èna sônolo kathgorhm twn N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 79/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 80/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 81/202 grammatikèc Kathgorikèc E E T { E 1.val := E 2.val T.val } 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 } emfanðzontai sto arqikì prìgramma Statikèc metablhtèc (static variables) Embèleia (scope) Oratìthta (visibility) Di rkeia zw c (lifetime) ShmasiologikoÐ kanìnec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 82/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 83/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 84/202

pðnaka sumbìlwn Perieqìmena (èmmesa) Embèleia kai shmasiologða SÔntaxh morf kai dom twn kal c SÔntaxh: ermhneða twn kal c ShmasiologÐa: programm twn sqhmatismènwn shmasiologða: entopismìc Statik sfalm twn kat th shmasiologik n thc metagl ttishc di rkeia shmasiologða: apìdosh ermhneðac Dunamik pðnaka sumbìlwn Org nwsh leitourgðec Basikèc onìmatoc Prosj kh onìmatoc Anaz thsh prosj khc anaz thshc an loga me Kìstoc ulopoðhsh: thn antistoðqish tôpwn me kanìnec tôpwn H se ìla ta tm mata progr mmatoc epekteðnetai UlopoÐhsh me PK Oratìthta (èmmesa) b 0 c εµβέλεια 3 1 x zw c Di rkeia TÔpoc (dieôjunsh mn mhc, kataqwrht c, ) Jèsh paramètrwn upoprogr mmatoc Arijmìc paramètrwn upoprogr mmatoc TÔpoc per smatoc paramètrwn upoprogr mmatoc Trìpoc apotelèsmatoc sun rthshc TÔpoc Diagraf onìmatoc om dac onom twn lðsta O(n) grammik dèntro anaz thshc O(log n) duadikì katakermatismoô O(n/k) pðnakac 2... k 2 k 1 πίνακας κατακερµατισµού a aa y c b a στοίβα αποθήκευσης εµβέλεια 2 εµβέλεια 1 3 2 1 στοίβα εµβελειών N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 85/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 87/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 86/202 Statik shmasiologða Statik shmasiologða sqhmatismènwn programm twn tôpwn Perib llonta Γ 1 = { i integer, x real } antistoðqishc tôpwn Sqèsh Γ E : τ tôpwn Paragwgèc Γ 1 i : integer Γ 1 1 : integer Γ 1 i1 : integer Γ 1 (i1)x : real Γ 1 x : real tôpwn Kanìnec Γ E 1 : integer Γ E 2 : integer Γ E 1 E 2 : integer Γ E : boolean Γ S : stmt Γ while E do S : stmt sta progr mmata kat thn ektèles touc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 88/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 89/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 90/202

eisìdou sto pedðo twn dedomènwn apotelesm twn prot sewn pou perigr foun logik n tou progr mmatoc idiìthtec tôpoi SÔnjetoi (arrays) PÐnakec (products) kai plei dec (tuples) ZeÔgh (records) Eggrafèc (pointers) DeÐktec (functions) Sunart seic èlegqoc Shmasiologikìc tôpwn 'Elegqoc èlegqoc tôpwn Dunamikìc ìtan up rqei Epib lletai forèc ìmwc apaiteðtai kai se Pollèc antistoðqish tôpwn, p.q. èlegqoc statik alli c ektèleshc sf lma Dunamik shmasiologða Dunamik shmasiologða H entol an jeshc I=E shmasiologða (operational semantics) Leitourgik akoloujða upologistik n bhm twn shmasiologða (denotational semantics) Dhlwtik majhmatik sun rthsh apì to pedðo twn shmasiologða Leitourgik E,σ v I=E,σ σ[i v] 'Elegqoc ro c 'Elegqoc Ôparxhc onom twn 'Elegqoc monadikìthtac shmasiologða Dhlwtik C[[ I=E ]](s) = s[i E[[ E ]](s)] 'Elegqoc sunèpeiac shmasiologða (axiomatic semantics) Axiwmatik h ermhneða kajorðzetai èmmesa mèsw shmasiologða Axiwmatik { P [I E] } I=E { P } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 91/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 92/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 93/202 SÔsthma tôpwn SÔsthma tôpwn BasikoÐ tôpoi (integer, boolean, real, char, ) Metatropèc tôpwn (type casting) dunamik antistoðqish tôpwn 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 (polymorphic systems) type orðwn se arrays thc Pascal: a[i] := 42 i 0 kai i 100 tìte an gia thn an jesh tou 42 sto a[i] k dikac TÔpoi pr thc t xhc (first class) kai dunamik antistoðqish tôpwn Statik binding) (type tèloc an Exagwg tôpwn (type inference) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 94/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 95/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 96/202

kai exagwg tôpwn 'Elegqoc tôpwn (type checking) 'Elegqoc tôpwn (type substitution): Antikat stash metablht n tôpwn se tôpouc apeikìnish antikat stashc tôpwn: tautìqrona Efarmog mða for kai Exagwg tôpwn Exagwg tôpwn Γ, E, τ DÐnontai: h paragwg Γ E : τ ZhteÐtai: TÐ gðnetai an den up rqei? 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 : τ twn tôpwn me metablhtèc tôpwn Epèktash τ ::= int bool τ τ α tôpwn (type inference) Exagwg Γ, E DÐnontai: τ kai h paragwg Γ E : τ ZhteÐtai: gðnetai an den up rqoun? TÐ den up rqei τ tètoio ste Diaforetik Γ E : τ σ = [α int,β bool α] σ(α) = int σ(β) = bool α σ(β γ) = (bool α) γ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 97/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 98/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 99/202 (iii) (iv) (v) 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 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 gia ìlh thn èkfrash: Γ= Perib llon (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 Exagwg tôpwn Exagwg tôpwn Exagwg tôpwn gðnetai: let f (g : @1) (x : @2) : @3 = g x (x 1) and m (a : @4) (b : @5) : @6 = a b Perib llon gia to s ma f m 6: Γ b = { f @1 @2 @3, m @4 @5 @6 } oi lôseic den eðnai monadikèc! Genik let f (x : @1) : @2 = x N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 100/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 101/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 102/202

Ôparxhc Lìgoi to èrgo thc met frashc DieukolÔnei th beltistopoðhsh DieukolÔnei thn kat tmhsh se emprìsjio DieukolÔnei 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 idiot twn (attributes) gia k je Metablhtèc thc grammatik c sômbolo (vi) (vii) (viii) P c brðsketai h lôsh? Periorismìc (constraint): exðswsh tôpwn τ 1 = τ 2 Prìblhma 1: eôresh sunìlou periorism n C tôpwn me periorismoôc Paragwg Γ E : τ C unify( ) =σ 0 unify({ τ 1 = τ 2 } C) = Exagwg tôpwn Exagwg tôpwn Exagwg tôpwn EnopoÐhsh: epðlush sunìlou periorism n {h ken antikat stash} 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 } 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 τ = σ(τ ) τ 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 103/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 104/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 105/202 Endi mesoc k dikac Endi mesoc k dikac Endi mesh gl ssa kai opðsjio tm ma odhgoômenh apì th sôntaxh Met frash translation) (syntax-directed endi meso k dika Sqèdio paragwg c endi mesou k dika (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 bb-4ac N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 106/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 107/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 108/202

tetr dwn Gl ssa tetr dac: Morf ìpou: etikèta tetr dac (fusikìc arijmìc) n: me to eðdoc tou telest, k poia An loga endeqomènwc paraleðpontai teloômena Stajer pragmatik, logik akèraia, 'Onoma paramètroc, upoprìgramma metablht, (iii) (iv) (triples) Tri dec n: op, x, y Par deigma: 1:, b, b 2:, 4, a 3:, (2), c 4:, (1), (3) bb-4ac suntaktik dèntra Afhrhmèna (abstract trees) syntax Endi mesh gl ssa Par deigma: bb-4ac b b c kai epijematikìc k dikac Projematikìc code) (prefix/postfix Par deigma: bb 4ac bb 4a c bb-4ac projematikìc epijematikìc Endi mesh gl ssa Endi mesh gl ssa 4 a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 109/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 111/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 110/202 (v) Endi mesh gl ssa TeloÔmena akuklikoð gr foi Kateujunìmenoi (directed graphs) acyclic n: op, x, y, z qarakt rac, sumboloseir, nil Par deigma: b(a1)(a1)c-(a1)(a1)2/(a1) / / Proswrin metablht : $n 2 2 op: telest c x, y, z: teloômena Apotèlesma sun rthshc: $$ c a 1 c b a 1 a 1 b [x] Apodeiktodìthsh: {x} DieÔjunsh: aplì teloômeno x aplì teloômeno x a 1 a 1 a 1 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 114/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 112/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 113/202

Etikèta sto arqikì prìgramma entol c ektelesteð an mia sunj kh eðnai alhj c na yeud c TeloÔmena tetr dac per smatoc Trìpoc : kat' axða V : kat' anafor R : jèsh apotelèsmatoc sun rthshc RET Kenì : Proswrin kenì : 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] Telestèc 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 (gia backpatching) orismìc etikètac kai lma proc aut n N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 115/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 116/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 117/202 call,,, I Telestèc k lese th domik mon da I par, x, m, (iii) thn pragmatik par metro x me trìpo pèrase m per smatoc ret,,, epistrof apì thn trèqousa domik mon da idiot twn Metablhtèc : jèsh ìpou brðsketai apojhkeumènh h PLACE miac l-value miac r-value tim TYPE : tôpoc miac l-value miac r-value : lðsta apì etikètec tetr dwn pou NEXT lmata sthn epìmenh entol perièqoun, TRUE : lðstec apì etikètec tetr dwn FALSE perièqoun lmata ston k dika pou prèpei pou 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 118/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 119/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 120/202

se ìlec tic tetr dec pou Antikajist sthn l thn gnwsth etikèta perièqontai ekfr seic Arijmhtikèc stajerèc Akèraiec 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) tetr dac me th z (backpatching) r-value ::= integer-const {P 1 } P 1 : { r-value.place = integer-const ; } me dôo teloômena Telestèc 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 ; } <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 121/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 123/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 122/202 (iii) (iv) Logikèc ekfr seic Logikèc ekfr seic Logikèc ekfr seic ekfr seic se sumbolismì 0/1 Logikèc cond ::= expr <cond> <expr> ifb, <expr>.place,, ju mp,,, 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,,, ); } 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 FALSE TRUE N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 124/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 126/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 125/202

entolèc Aplèc entol Ken (v) (vi) (vii) Logikèc ekfr seic Logikèc ekfr seic Logikèc ekfr seic Telestèc sôgkrishc cond ::= expr 1 relop expr 2 { P 23 } 'Arnhsh cond ::= not cond SÔzeuxh cond ::= cond 1 and cond 2 P 23 : { cond.true = MAKELIST(NEXTQUAD()); GENQUAD( relop.name, expr 1.PLACE, expr 2.PLACE, ); cond.false = MAKELIST(NEXTQUAD()); GENQUAD(jump,,, ); } FALSE <cond> TRUE <cond> FALSE TRUE <cond> FALSE FALSE <cond> 1 <cond> 2 TRUE TRUE FALSE TRUE N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 128/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 127/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 129/202 (viii) Logikèc ekfr seic SÔnjeth entol 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; } stmt ::= ɛ { P 29 } P 29 : { stmt.next = EMPTYLIST(); } an jeshc Entol stmt ::= l-value := expr {P 30 } P 30 : { GENQUAD( :=, expr.place,, l-value.place ); stmt.next = EMPTYLIST(); } stmt ::= block block ::= begin stmt ( ; stmt ) end <block> NEXT <stmt> 1 NEXT <stmt> 2 NEXT N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 130/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 131/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 132/202

Entol if Entol if 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; } SÔnjeth entol stmt ::= if cond then stmt [ else stmt ] <stmt> FALSE <cond> TRUE <stmt> <stmt> 1 NEXT TRUE FALSE <cond> jump,,, NEXT NEXT <stmt> 1 <stmt> 2 NEXT NEXT 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 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 134/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 133/202 stmt ::= while cond do stmt Entol while <stmt> Entol while stmt ::= while { P 43 } cond do { P 44 } stmt 1 { P 45 } P 43 : { Q = NEXTQUAD(); } P 44 : { BACKPATCH( cond.true, NEXTQUAD()); } upoprogramm twn Kl sh call ::= id ( [ expr (, expr ) ] ) r-value ::= call stmt ::= call FALSE <cond> <stmt> 1 ju mp,,, TRUE NEXT P 45 : { BACKPATCH( stmt 1.NEXT, Q); GENQUAD(jump,,, Q); stmt.next = cond.false ; } 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 NEXT N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 138/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 136/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 137/202

jewrhtik c poyhc, to prìblhma thc Apì bèltistou telikoô k dika den èqei kataskeu c telikoô k dika: Morfèc mhqan c se apìluth morf (absolute) Gl ssa mhqan c se epanatopojet simh kai Gl ssa morf (relocatable, linkable) diasundèsimh gl ssa (assembly) Sumbolik gl ssa qamhloô epipèdou 'Allh probl mata: Epimèrouc entol n Epilog entol n thc mn mhc sto qrìno ektèleshc DiaqeÐrish upoprogramm twn Kl sh 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; } upoprogramm twn (iii) Kl sh call ::= id ( { P 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 ); } Kl sh upoprogramm twn (iv) sun rthshc Kl sh r-value ::= call {P 50 } P 50 : { r-value.place = call.place; } diadikasðac Kl sh stmt ::= call {P 51 } P 51 : { stmt.next = EMPTYLIST(); } N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 139/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 140/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 141/202 Kl sh upoprogramm twn (v) apì upoprìgramma Epistrof stmt ::= return [ expr {P 52 } ] { P 53 } P 52 : { GENQUAD(retv, expr.place,, ); } P 53 : { GENQUAD(ret,,, ); } lôsh (undecidable) P c metafr zetai k je entol tou k dika endi mesou P c metafr zontai akoloujðec tètoiwn Telikìc k dikac Telikìc k dikac upoprogr mmatoc D lwsh body ::= ( local ) { P 56 } block ; { P 57 } P 56 : { GENQUAD(unit, I,, ); } P 57 : { BACKPATCH( block.next, NEXTQUAD()); GENQUAD(endu, I,, ); } 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 142/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 143/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 144/202

Qarakthristik : Intel 8086 Epexergast c: deðktec: sp (deðkthc stoðbac) Kataqwrhtèc bp (deðkthc b shc) kai Telikìc upologist c 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 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. 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Ð Telikìc upologist c DieujÔnseic: address = segment 16 offset Morf entol c: [ label ] opname [ operand 1 [, operand 2 ]] (iii) pointer) kai kataqwrht c shmai n (flags) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 145/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 146/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 147/202 Telikìc upologist c Entolèc: mov, lea Metafor c: (iv) 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) metafor c Entolèc mov destination, source 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 megèjouc dedomènwn Kajorismìc mov ax, word ptr [bp 6] mov al, byte ptr [bp 6] (move) (load effective address) pr xeic Arijmhtikèc add op 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 148/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 149/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 150/202

pr xeic Logikèc and op 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 lmatoc Entolèc jmp address jz address je address jnz address jne address jl address jle address jg address jge address sunj kh qwrðc / Ðso mhdèn mhdèn / di foro ìqi mikrìtero Ðso mikrìtero megalôtero Ðso megalôtero stoðbac Entolèc push op pop op sth stoðba prìsjesh sp := sp 2, [sp] :=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 151/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 152/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 153/202 kl sh call address sp := sp 2, [sp] :=ip, ip := address Entolèc upoprogramm twn ret epistrof ip := [sp], sp := sp 2 H tim tou pou topojeteðtai sth stoðba apì ip call eðnai h dieôjunsh thc entol c pou thn akoloujeð thn call x87 FPU Entolèc Eidik stoðba 8 kataqwrht n: ST(0), ST(7) fld source (load real & push) fld tbyte ptr @real1 fild source (load integer & push) fild word ptr [bp 2] fstp destination (pop & store real) fld tbyte ptr [bp 10] fistp destination (pop & store integer) fild word ptr [bp 2] faddp ST(1), ST(0) Entolèc x87 FPU 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 154/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 155/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 156/202

enot twn (block structure) Dom topik dedomèna Mh Par metroi Apotèlesma kat stashc mhqan c PlhroforÐec metablhtèc Topikèc 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 leitourgðac Arq ìti h domik mon da p brðsketai 'Estw thn kl sh upoprogramm twn, apaiteðtai Kat k dikac gia thn enhmèrwsh twn telikìc qr shc Trìpoc ìti zhteðtai to dedomèno a pou eðnai 'Estw thn prospèlash onom twn, apaiteðtai Kat k dikac gia thn ulopoðhsh twn parap nw telikìc (iii) DiaqeÐrish mn mhc drasthriopoðhshc (activation Eggr fhma record) Proswrinèc metablhtèc bp8 bp6 bp4 bp2 bp bp-2 bp-4 Παράµετρος 1 Παράµετρος 2 Παράµετρος n ιεύθυνση αποτελέσµατος Σύνδεσµος προσπέλασης ιεύθυνση επιστροφής Προηγούµενο bp DiaqeÐrish mn mhc Τοπική µεταβλητή 1 Τοπική µεταβλητή 2 Τοπική µεταβλητή m Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2 Προσωρινή µεταβλητή k Παράµετρος 1 Παράµετρος 2 Παράµετρος n ιεύθυνση αποτελέσµατος ιεύθυνση επιστροφής Προηγούµενο display Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2 Τοπική µεταβλητή m Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2 Προσωρινή µεταβλητή k α) Σύνδεσµοι προσπέλασης β) Πίνακας δεικτών Παράµετροι Σταθερό Τµήµα Τοπικές µεταβλητές Προσωρινές µεταβλητές αρχή βάση τέλος Ε κύριου προγράµµατος Ε υποπρογράµµατος 1 Ε υποπρογράµµατος m DiaqeÐrish mn mhc µεταφρασµένος κώδικας στοίβα εκτέλεσης ελεύθερη µνήµη δυναµικό δεδοµένο k σωρός δυναµικό δεδοµένο 1 µνήµη για αποθήκευση δεδοµένων µνήµη για αποθήκευση του κώδικα του προγράµµατος συνολική διαθέσιµη µνήµη 64Κ 0Κ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 157/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 158/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 159/202 onom twn Prospèlash [bp offset] Topik : Mh topik : [si offset] o si prèpei na deðqnei sth b sh tou SÔndesmoi prospèlashc 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 SÔndesmoi prospèlashc 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 sundèsmwn prospèlashc PÐnakec deikt n (link tables / displays) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 160/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 161/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 162/202

all kak prosèggish: eniaðo sq ma Apl telikoô k dika gia k je dom tou paragwg c 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 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 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 paramètrwn Pèrasma kat' axða (call by value) Kl sh Kl sh kat' anafor Kl sh kat' ìnoma Kl sh kat' an gkh (call by reference) (call by name) (call by need) kat' axða kai apotèlesma Kl sh (call value-result) by Trìpoc ulopoðhshc kajenìc Dèsmeush kataqwrht n qwrðc eidikoôc periorismoôc 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 d := bb-4ac $2 ax $3 $4 bx N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 165/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 164/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 163/202 Epilog entol n Epilog entol n d := bb-4ac Epilog entol n (iii) endi mesou k dika all qronobìra prosèggish: Bèltisth programmatismìc (dynamic dunamikìc programming) mem := mem R 1 mem := ax ax Par deigma: tiling me entolèc tou 8086 ax bx d := bp offset d mem 4 mem mem CONST R bi mov R 1,[R bi CONST] ax bp offset d ax ax mem ax bx 4 mem bx mem b b c bp offset b bp offset c ax R 1 bp offset b bp offset c 4 a bp offset a imul R 1 bp offset a Par deigma: N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 168/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 166/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 167/202

(iv) Par deigma: tiling me entolèc tou 80386 mem R bi CONST 1 ax R 1 mem ax CONST 2 ax ax bp offset d mem 4 mem := bx mem Skeletìc: xseg segment public code assume cs : xseg, ds : xseg, ss : xseg org 100h main proc near call near ptr program mov ax, 4C00h int 21h main endp telikìc k dikac pou par getai qrìnou ektèleshc (run-time library) Biblioj kh extrn function : proc sumboloseirèc kai kinht c Stajerèc upodiastol c @str1 db this is db 10 db an example db 0 imul R 1,[R bi CONST 1 ],CONST 2 bp offset b bp offset a bp offset c xseg ends end main @real1 dt 1e 10 @real2 dt 2.0 Epilog entol n To telikì prìgramma To telikì prìgramma N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 169/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 170/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 171/202 getar(a) Bohjhtikèc routðnec mov si, word ptr [bp 4] mov si, word ptr [si 4] mov si, word ptr [si 4] updateal() dieôjunshc ED) (fìrtwsh } (n cur n a 1 forèc) sundèsmwn (enhmèrwsh prospèlashc) an (a) push bp n p <n x push word ptr [bp 4] n p = n x mov si, word ptr [bp 4] n p >n } x mov si, word ptr [si 4] (n p n x 1 forèc) mov si, word ptr [si 4] push word ptr [si 4] load(r, a) Bohjhtikèc routðnec EÐdoc tou a mov R, a true mov R, 1 false mov R, 0 (fìrtwsh teloumènou) K dikac pou par getai mov R, ASCII(a) nil mov R, 0 mov R, size ptr [bp offset] (b1) (b2) topik ontìthta: metablht, par metroc kat' axða, proswrin metablht topik ontìthta: par metroc kat' anafor mov si, word ptr [bp offset] mov R, size ptr [si] load(r, a) Bohjhtikèc routðnec (g1) EÐdoc tou a mh topik ontìthta: metablht, par metroc kat' axða, proswrin metablht (iii) (fìrtwsh teloumènou) getar(a) mov R, size ptr [si offset] K dikac pou par getai mh ontìthta: topik (g2) par metroc kat' anafor (d) (e) getar(a) mov si, word ptr [si offset] mov R, size ptr [si] [x] load(di, x) mov R, size ptr [di] {x} loadaddr(r, x) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 172/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 173/202 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 174/202