ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 1. Mεταγλωττιστές

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ÈÓÙ Ï II.(168Û.) 22/8/2003 13:52 ÂÏ 1. Mεταγλωττιστές"

Transcript

1 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 1 Mεταγλωττιστές Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα και πληρότητα των συγγραµ- µάτων την αποκλειστική ευθύνη φέρουν οι συγγραφείς, κριτικοί αναγνώστες και ακαδηµαϊκοί υπεύθυνοι που ανέλαβαν το έργο αυτό.

2 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 2

3 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 3 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΠΡΑΚΤΙΚΗ ΕΞΑΣΚΗΣΗ ΣΕ ΘΕΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ Τόµος A' Mεταγλωττιστές ΠΑΝΑΓΙΩΤΗΣ ΠΙΝΤΕΛΑΣ Kαθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών ΠΑΝΑΓΙΩΤΗΣ ΑΛΕΦΡΑΓΚΗΣ ιδάκτωρ Hλεκτρολόγος Mηχανικός & Tεχνολογίας H/Y ΠATPA 2003

4 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 4 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΠΡΑΚΤΙΚΗ ΕΞΑΣΚΗΣΗ ΣΕ ΘΕΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ Τόµος A' MΕΤΑΓΛΩΤΤΙΣΤΕΣ Συγγραφή ΠANAΓIΩTHΣ ΠINTEΛAΣ Kαθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών ΠANAΓIΩTHΣ AΛEΦPAΓKHΣ ιδάκτωρ Hλεκτρολόγος Mηχανικός & Tεχνολογίας H/Y Κριτική Ανάγνωση ΣΩΚΡΑΤΗΣ ΚΑΤΣΙΚΑΣ Kαθηγητής Tµήµατος Mηχανικών Πληροφοριακών και Eπικοινωνιακων Συστηµάτων Πανεπιστηµίου Aιγαίου Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου ΠΑΝΑΓΙΩΤΗΣ ΠΙΝΤΕΛΑΣ Kαθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση ΓEPAΣIMOΣ MΩPAΪTHΣ Γλωσσική Επιµέλεια XPIΣTINA KAPAΓEΩPΓOΠOYΛOY Τεχνική Επιµέλεια EΣΠI EK OTIKH E.Π.E. Καλλιτεχνική Επιµέλεια Σελιδοποίηση TYPORAMA Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων ΟΜΑ Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / ISBN: Kωδικός Έκδοσης: ΠΛH 40/1 Copyright 2003 για την Ελλάδα και όλο τον κόσµο ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Οδός Παπαφλέσσα & Υψηλάντη, Πάτρα Τηλ: , Φαξ: Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη.

5 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 5 ÂÚÈ fiìâó Πρόλογος K º π 1 EÈÛ ÁˆÁ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή H δοµή ενός µεταγλωττιστή O λεκτικός αναλυτής O συντακτικός αναλυτής O σηµασιολογικός αναλυτής O γεννήτορας ενιάµεσου κώδικα Oι βελτιστοποιητές υψηλού και µεσαίου επιπέδου O γεννήτορας τελικού κώδικα O βελτιστοποιητής χαµηλού επιπέδου O πίνακας συµβόλων Eργαλεία ανάπτυξης µεταγλωττιστών Tα Lex & Flex Ta Yacc & Bison To PCCTS To SPIM To WARTS Σύνοψη K º π 2 O ÂÓÓ ÙÔÚ ÂÎÙÈÎÒÓ AÓ Ï ÙÒÓ Lex Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή Προγραµµατίζοντας µε το Lex... 25

6 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 6 6 M ø π 2.3 Γράφοντας κανόνες στο Lex Kλάσεις χαρακτήρων Προαιρετικές εκφράσεις Eπαναληπτικές εκφράσεις Eκφράσεις εναλλαγής Eκφράσεις οµαδοποίησης Eυαισθησία συµφραζοµένων Eπανάληψη και χρήση ορισµών Oι ενέργειες του Lex O µηχανισµός ταύτισης του Lex Oι δοµές και οι συναρτήσεις του Lex Oι αρχικές συνθήκες του Lex Xρησιµοποιώντας το Lex Tο Lex σε συνεργασία µε το Yacc Σύνοψη Bιβλιογραφία Προαιρετική βιβλιογραφία K º π 3 ÓÙ ÎÙÈÎ AÓ Ï ÛË [LL Î È LR] Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Συντακτική ανάλυση Συντακτικοί αναλυτές Top down Γραµµατικές LL(1) Συντακτικοί αναλυτές Bottom up Γραµµατικές LR(1) και γλώσσες Συντακτικοί αναλυτές LR(k) Λειτουργία του συντακτικού αναλυτή LR Kατασκευή του πίνακα συντακτικής ανάλυσης LR Σύγκριση των µεθόδων ανάλυσης LL και LR... 52

7 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 7 EPIEXOMENA Aνάνηψη από λάθη Στρατηγικές ανάνηψης από λάθος Aνάνηψη από λάθος σε συντακτικό αναλυτή LR Σύνοψη K º π 4 O ÂÓÓ ÙÔÚ ÓÙ ÎÙÈÎÒÓ AÓ Ï ÙÒÓ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή Περιγράφοντας µια γραµµατική Προγραµµατίζοντας µε το yacc To τµήµα δηλώσεων του yacc Γράφοντας κανόνες στο yacc ιαχείριση ασαφειών ιαχείριση σφαλµάτων ιασύνδεση µε άλλα προγράµµατα της C Aποσφαλµάτωση της γραµµατικής Xρησιµοποιώντας το yacc Σύνοψη Bιβλιογραφία K º π 5 ËÌÈÔ ÚÁÒÓÙ KÒ ÈÎ ÁÈ ÙÔ Spim Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή O επεξεργαστής MIPS R H σύνταξη του συβολοµεταφραστή του Spim και η επικοινωνία µε το λειτουργικό σύστηµα ιαχείριση µνήµης... 88

8 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 8 8 M ø π 5.5 Eντολές του MIPS Aριθµητικές και λογικές πράξεις Oι βασικές εντολές σύγκρισης Oι βασικές εντολές ελέγχου ροής Oι βασικές εντολές ανάκλησης από µνήµη και αποθήκευσης σε µνήµη Kλήσεις συναρτήσεων Σύνοψη Bιβλιογραφία K º π 6 ÈÂÚÌËÓÂ Ù Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή H δοµή του διερµηνευτή Oι τιµές µέσα στη στοίβα Mετατροπή των εντελών ιαχείριση µνήµης Bοηθήµατα εκσφαλµάτωσης Σύνοψη K º π 7 Â È ÔÓÙ Î È Î Ù ÛÎÂ ÔÓÙ Ó Ó ÌÂÙ ÊÚ ÛÙ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Σχεδιάζοντας ένα µεταγλωττιστή για µια γλώσσα προγραµµατισµού Σύντοµη περιγραφή της Mini C Kατασκευή του πίνακα συµβόλων Oνόµατα και εµβέλεια Kατασκευή του λεκτικού αναλυτή

9 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 9 EPIEXOMENA Aντιµετώπιση λαθών Kατασκευή του συντακτικού & σηµασιολογικού αναλυτή Kατασκευή του ενδιάµεσου κώδικα Kατασκευή της αναπαράστασης τριών διευθύνσεων ηµιουργία ενιδάµεσου κώδικα Eκφράσεις Λογικές εκφράσεις Eντολές ελέγχου ροής Oρισµός και κλήση συναρτήσεων Kατασκευή τελικού κώδικα ή διερµηνεία Mεθοδολογία ανάπτυξης τελικού κώδικα ηµιουργία συµβολικού κώδικα για συναρτήσεις Σύνοψη Bιβλιογραφία Aπαντήσεις Aσκήσεων Aυτοαξιολόγησης Aπαντήσεις ραστηριοτήτων Γενική Bιβλιογραφία

10 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 10

11 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 11 ÚfiÏÔÁÔ Ο τόµος που έχετε στα χέρια σας αποτελεί συνέχεια του τόµου «Μεταγλωττιστές», του οποίου θα πρέπει να έχετε µελετήσει και ολοκληρώσει τις Ασκήσεις Αυτοαξιολόγησης, όπως, φυσικά, και τις ραστηριότητες που περιλαµβάνει. Βασικός στόχος του τόµου είναι να σας βοηθήσει να συµπληρώσετε τις γνώσεις σας στους µεταφραστές γενικότερα, αλλά και να αποκτήσετε πρακτική εµπειρία στην κατασκευή ένος πραγµατικού (αλλά προφανώς µικρού, λόγω όγκου δουλειάς) µεταγλωττιστή ή διερµηνευτή. Ο τόµος αυτός έχει γίνει προσπάθεια να γραφτεί σύµφωνα µε τις οδηγίες και τα πρότυπα του Ελληνικού Ανοικτού Πανεπιστηµίου και προέρχεται από υλικό το οποίο διδάσκεται στο Τµήµα Μηχανικών Η/Υ και Πληροφορικής του Πανεπιστηµίου Πατρών. Για να φτάσει ο τόµος στη µορφή αυτή, βοήθησαν σηµαντικά τόσο τα σχόλια του Κριτικού Αναγνώστη, συνάδελφου Ι. Κοτρώνη, όσο και του επίσης συνάδελφου και Ακαδηµαϊκού Υπεύθυνου της Θεµατικής Ενότητας Σ. Κάτσικα. Με την ευκαιρία αυτή θέλουµε να ευχαριστήσουµε θερµά και τους δύο. Στο Kεφάλαιο 1 θα δείτε την αρχιτεκτονική δοµή ενός µεταγλωττιστή, τις διαδικασίες ανάπτυξής του και θα έρθετε σε µια πρώτη επαφή µε τα εργαλεία που θα χρησιµοποιήσετε, αργότερα για να αναπτύξετε και εσείς έναν τέτοιο µεταφραστή. Στο Kεφάλαιο 2 θα µάθετε πώς µπορείτε να περιγράφετε τις λεκτικές µονάδες (tokens) µιας γλώσσας και πώς µπορείτε να κατασκευάζετε ένα λεκτικό αναλυτή, ο οποίος θα αναγνωρίζει λεκτικές µονάδες από την είσοδό του. Για να επιτύχετε αυτό το σκοπό, θα µάθετε να χρησιµοποιείτε το πιο δηµοφιλές εργαλείο κατασκευής λεκτικών αναλυτών, το lex. Το Kεφάλαιο 3 περιέχει υλικό το οποίο θα σας βοηθήσει στην κατανόηση του τρόπου λειτουργίας των συντακτικών αναλυτών της κατηγορίας LL και (κυρίως) LR, όπως αυτοί οι οποίοι παράγονται από το εργαλείο Yacc, το οποίο και θα χρησιµοποιήσετε για την κατασκευή µεταγλωττιστών. Το Kεφάλαιο 4 θα σας υπενθυµίσει πώς µπορείτε να περιγράφετε τη συντακτική δοµή µιας γλώσσας προγραµµατισµού και πώς µπορείτε να κατασκευάζετε ένα συντακτικό αναλυτή, ο οποίος θα αναγνωρίζει τη συντακτική δοµή από την είσοδό του. Για να επιτύχετε αυτό το σκοπό, θα µάθετε να χρησιµοποιείτε το πιο δηµοφιλές εργαλείο κατασκευής συντακτικών αναλυτών, το Yacc. Στο Kεφάλαιο 5 θα µάθετε την παραγωγή τελικού κώδικα για την αρχιτεκτονική επεξεργαστών RISC. Για να το επιτύχετε αυτό, θα µάθετε τη δοµή και το ρεπερτόριο εντολών του εξοµοιωτή της γενιάς επεξεργαστών MIPS R2/3Κ spim και τις σηµαντικότερες εντολές του επεξεργαστή.

12 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ M ø π Στο Kεφάλαιο 6 περιγράφεται η οργανωτική δοµή και ο τρόπος λειτουργίας των διερµηνευτών, έτσι ώστε να είστε σε θέση όχι µόνο να κατανοείτε, αλλά και να κατασκευάζετε έναν απλό διερµηνευτή. Στο τελευταίο κεφάλαιο θα κατασκευάσετε τον πρώτο σας µεταγλωττιστή ή διερµηνευτή. Η γλώσσα την οποία καλείστε να µεταφράσετε ή να διερµηνεύσετε είναι ένα υποσύνολο της γλώσσας προγραµµατισµού C. Για να επιτύχετε αυτό το σκοπό, θα µάθετε πώς µπορείτε να χρησιµοποιείτε τη γνώση που αποκτήσατε στα προηγούµενα κεφάλαια µέσα από ένα σύνολο ραστηριοτήτων, οι οποίες θα σας κατευθύνουν µε συστηµατικό τρόπο στην τελική κατασκευή του µεταγλωττιστή ή διερµηνευτή σας.

13 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 13 EÈÛ ÁˆÁ ÎÔapplefi Σκοπός του κεφαλαίου είναι να µάθει ο σπουδαστής τη δοµή ενός µεταγλωττιστή, τις διαδικασίες ανάπτυξής του και να έρθει σε επαφή µε τα εργαλεία που θα χρησιµοποιήσει για την ανάπτυξή του. 1 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Όταν θα έχετε µελετήσει το παρακάτω κεφάλαιο, θα µπορείτε να: αναφέρετε τις δύο βασικές φάσεις που περνά κατά την εκτέλεσή του ένας µεταγλωττιστής, αναφέρετε και να περιγράψετε τα µέρη που αποτελούν τις δύο φάσεις του µεταγλωττιστή, δώσετε παραδείγµατα επτά (7) εργαλείων ανάπτυξης τµηµάτων των µεταγλωττιστών. ŒÓÓÔÈ ÎÏÂÈ È πηγαία γλώσσα τελική γλώσσα µεταγλωττιστής λεκτικός αναλυτής συντακτικός αναλυτής ενδιάµεσος κώδικας βελτιστοποίηση κώδικα ÈÛ ÁˆÁÈÎ apple Ú ÙËÚ ÛÂÈ Στο κεφάλαιο αυτό θα ασχοληθείτε µε τη δοµή ενός τυπικού µεταγλωττιστή και τα εργαλεία που µπορείτε να χρησιµοποιήσετε για την κατασκευή του. Το κεφάλαιο χωρίζεται σε τρεις ενότητες. Στην πρώτη ενότητα παρουσιάζεται η αιτία ύπαρξης και η σηµασία των µεταγλωττιστών. Στη δεύτερη ενότητα παρουσιάζονται αναλυτικά τα µέρη ενός µεταγλωττιστή και η διασύνδεση µεταξύ τους. Στην τρίτη ενότητα παρατίθενται τα βασικότερα εργαλεία κατασκευής µεταγλωττιστών.

14 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 1: Eπ ø 1.1 EÈÛ ÁˆÁ Όταν ακούµε τις φράσεις «Πήρα τον X υπολογιστή», «Έκανα αναβάθµιση στον υπολογιστή µου», αναφερόµαστε στο µηχάνηµα και εννοούµε τα υλικά µέρη από τα οποία έχει αυτό κατασκευαστεί. Από την πλευρά του προγραµµατιστή, όµως, ένας υπολογιστής δεν είναι τίποτε παραπάνω από το σύνολο εντολών που προσφέρει το υλικό µέρος του υπολογιστή, ώστε αυτός να το προγραµµατίσει για να λύσει ένα πλήθος προβληµάτων. Για να βοηθηθεί η διαδικασία ανάπτυξης προγραµµάτων και ο έλεγχος των πόρων που προσφέρει ένας υπολογιστής, αναπτύχθηκαν τα λειτουργικά συστήµατα, τα οποία επέκτειναν το σύνολο εντολών που έχει ο προγραµµατιστής στη διάθεσή του, δηµιουργώντας µια υποθετική υπολογιστική µηχανή που προγραµµατίζεται ευκολότερα. Οι γλώσσες προγραµµατισµού προσφέρουν και αυτές ένα σύνολο εντολών σε ένα υψηλότερο επίπεδο. Έτσι, για τον προγραµµατιστή οι γλώσσες προγραµµατισµού και το λειτουργικό σύστηµα αποτελούν «φλοιούς» που βρίσκονται ανάµεσα στον προγραµµατιστή και το υλικό µε σκοπό τον απλούστερο και αποδοτικότερο προγραµµατισµό του υλικού. Για να µετατραπεί ένα σύνολο εντολών ενός επιπέδου σε σύνολο εντολών ενός χαµηλότερου επιπέδου, απαιτείται η διαδικασία µετάφρασης των εντολών του υψηλότερου επιπέδου που λέµε ότι βρίσκεται σε πηγαία λώσσα (source language) σε αυτές του χαµηλότερου που ονοµάζεται τελική γλώσσα (object language). Τα προγράµ- µατα που αναλαµβάνουν αυτή τη διαδικασία ονοµάζονται µεταγλωττιστές (compilers). Συνήθως, για τον ορισµό των µεταγλωττιστών χρησιµοποιούνται γραµ- µατικές χωρίς συµφραζόµενα (context free grammars). Ανάµεσα στους µεταγλωττιστές και το λειτουργικό σύστηµα υπάρχει υποβοηθητικά µια ακόµα υποθετική µηχανή που αποτελείται από δοµές και αλγόριθµους, οι οποίοι δηµιουργούν το υπόβαθρο εκτέλεσης των προγραµµάτων. Αυτή η υποθετική µηχανή ονοµάζεται «σύστηµα εκτέλεσης» (run time system) της πηγαίας γλώσσας και συνήθως υλοποιείται στην τελική γλώσσα. Ένα σύστηµα εκτέλεσης µπορεί να είναι από πολύ απλό, σαν αυτό που συναντάµε στη FORTRAN, µέχρι πολύ περίπλοκο, σαν αυτά που συναντάµε σε παράλληλες γλώσσες προγραµµατισµού. Στην πράξη, όταν κατασκευάζουµε ένα µεταγλωττιστή, ορίζουµε σηµασιολογικά την πηγαία γλώσσα προγραµµατισµού και τις διαδικασίες µετατροπής των συντακτικών µορφωµάτων της πηγαίας γλώσσας σε διαδικασίες που θα πρέπει να εκτελέσει η υποθετική µηχανή του συστήµατος εκτέλεσης.

15 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ H ª ª ø π H ÔÌ ÂÓfi ÌÂÙ ÁψÙÙÈÛÙ Μια οπτική γωνία από την οποία µπορεί να παρατηρηθεί η λειτουργία ενός µεταγλωττιστή είναι ότι ένας µεταγλωττιστής περνά από τη φάση της ανάλυσης και τη φάση της σύνθεσης. Στη φάση της ανάλυσης ο µεταγλωττιστής προσπαθεί να ανακαλύψει τη δοµή του προγράµµατος που έχει σαν είσοδο. Στη φάση της σύνθεσης κατασκευάζει το αποτέλεσµα στην τελική γλώσσα, έτσι ώστε αυτό να πραγµατοποιεί τις διαδικασίες που είχαν προγραµµατιστεί στο πηγαίο πρόγραµµα. Πηγαίος Kώδικας Ì 1.1 Τυπικός σχεδιασµός ενός µεταγλωττιστή ANAΛYΣH Λεκτικός Aναλυτής tokens Συντακτικός Aναλυτής Συντακτικό ένδρο Σηµασιολογικός Aναλυτής Πίνακας Συµβόλων Γεννήτορας Eνδιάµεσου Kώδικα Eνδιάµεσος Kώδικας Bελτιστοποιητές Yψηλού & Mέσου Eπιπέδου Eνδιάµεσος Kώδικας Γεννήτορας Tελικού Kώδικα ΣYNΘEΣH Tελικός Kώδικας Ένας συνήθης µεταγλωττιστής αποτελείται από πολλά τµήµατα τα οποία µπορούµε να θεωρήσουµε ότι εκτελούνται αλληλοδιαδοχικά. Ένα παράδειγµα δοµής ενός µεταγλωττιστή φαίνεται στο Σχήµα O ÏÂÎÙÈÎfi Ó Ï Ù Ο λεκτικός αναλυτής οµαδοποιεί τους χαρακτήρες της εισόδου σε Λεκτικές Μονάδες (tokens). Χρησιµοποιούνται κανονικές εκφράσεις (regular expressions), για να οριστούν τα πρότυπα των λεκτικών µονάδων που µπορούν να χρησιµοποιηθούν. Για παράδειγµα, θα χρησιµοποιήσουµε την έκφραση

16 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 1: Eπ ø position := initial + rate * 60; την οποία θα χρησιµοποιούµε και για τα παραδείγµατα των υπόλοιπων τµηµάτων του µεταγλωττιστή. Ένας τυπικός λεκτικός αναλυτής γι αυτή την έκφραση θα αναγνωρίσει τις λεκτικές µονάδες position, initial, rate Ù appleô appleúôû ÈÔÚÈÛÙ (identifier) 60 Ù appleô ÛÙ ıâú =, *, + Ù appleô appleú ÍË ; Ù appleô ÛÙ ÍË Ο λεκτικός αναλυτής µπορεί να χρησιµοποιηθεί µεταξύ άλλων στην αφαίρεση κενών και σχολίων και στη µετατροπή των χαρακτήρων σε κεφαλαία ή µικρά για τις γλώσσες προγραµµατισµού που δε διακρίνουν κεφαλαία από µικρά O Û ÓÙ ÎÙÈÎfi Ó Ï Ù Ο συντακτικός αναλυτής οµαδοποιεί τις λεκτικές µονάδες τις οποίες παράγει ο λεκτικός αναλυτής σε συντακτικές µονάδες. Το τελικό αποτέλεσµα του συντακτικού αναλυτή είναι ένα συντακτικό δένδρο (parse tree), το οποίο αντιπροσωπεύει το Πηγαίο πρόγραµµα που αποτέλεσε την είσοδο του µεταγλωττιστή. Συνήθως, χρησιµοποιούµε γραµµατικές χωρίς συµφραζόµενα (context free grammars), για να ορίσουµε ένα συντακτικό αναλυτή. Κατά τη διάρκεια της οµαδοποίησης γίνεται έλεγχος για συντακτικά λάθη. Το συντακτικό δένδρο για την έκφραση που είδατε στην υποενότητα φαίνεται στο Σχήµα 1.2. := Ì 1.2 Παράδειγµα συντακτικού δένδρου id1 id2 + * id O ÛËÌ ÛÈÔÏÔÁÈÎfi Ó Ï Ù Ο σηµασιολογικός αναλυτής αναλύει το συντακτικό δένδρο χρησιµοποιώντας πληροφορία που σχετίζεται µε συµφραζόµενα. Για παράδειγµα, στην έκφραση που χρησιµοποιούµε ως παράδειγµα µπορεί να ελεγχθεί αν έχει οριστεί το position ή αν το rate µπορεί να πολλαπλασιαστεί µε τη σταθερή τύπου ακέραιου 60.

17 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ H ª ª ø π 17 Μετά τη φάση της σηµασιολογικής ανάλυσης µπορεί να δηµιουργηθεί ένα εντελώς διαφορετικό συντακτικό δένδρο. Για παράδειγµα, µπορεί το rate να είναι τύπου πραγ- µατικού αριθµού και να απαιτείται η µετατροπή του ακέραιου σε πραγµατικό αριθ- µό, πριν γίνει η πράξη του πολλαπλασιασµού O ÁÂÓÓ ÙÔÚ ÂÓ È ÌÂÛÔ ÎÒ ÈÎ Ο γεννήτορας ενδιάµεσου κώδικα παίρνει ως είσοδο το συντακτικό δένδρο και παράγει κώδικα για µια απλή υποθετική µηχανή. Συνήθης τέτοια αναπαράσταση είναι ο «κώδικας τριών διευθύνσεων», όπου κάθε εντολή έχει το πολύ τρεις τελεστές. Για την έκφραση που χρησιµοποιούµε για παράδειγµα θα έχουµε temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 Η ύπαρξη ενδιάµεσου κώδικα έχει πολλαπλά πλεονεκτήµατα. Αν θέλουµε να µεταφέρουµε το µεταγλωττιστή σε µια διαφορετική υπολογιστική αρχιτεκτονική, αρκεί µόνο να κατασκευαστεί ο µεταφραστής από την ενδιάµεση µορφή στην τελική γλώσσα. Αντίστοιχα, αν θέλουµε να φτιάξουµε µεταγλωττιστή για µια καινούρια γλώσσα, αν το ρεπερτόριο εντολών που παρέχει ο ενδιάµεσος κώδικας επαρκεί, µπορού- µε να κατασκευάσουµε µόνο τη φάση της ανάλυσης γι αυτή τη γλώσσα και να παράγουµε ενδιάµεσο κώδικα OÈ ÂÏÙÈÛÙÔappleÔÈËÙ ËÏÔ Î È ÌÂÛ Ô ÂappleÈapple Ô Οι βελτιστοποιητές υψηλού και µεσαίου επιπέδου είναι δυνατόν να περιλαµβάνουν πολλές αλληλοδιαδεχόµενες διαδικασίες. Η λειτουργία των διαδικασιών που περιλαµβάνουν βασίζεται πάνω σε αλγόριθµους και τεχνικές που έχουν σαν στόχο να βελτιώσουν το συντακτικό δένδρο, ώστε να µπορεί να παραχθεί «καλύτερος» τελικός κώδικας. Η έννοια του «καλύτερου» κώδικα είναι αρκετά περίπλοκη και σχετίζεται µε το ζητούµενο αποτέλεσµα. Τυπικά ζητούµενα στη διαδικασία βελτιστοποίησης είναι ο πιο γρήγορα εκτελούµενος τελικός κώδικας, η χρησιµοποίηση µικρότερης µνήµης και η ορθολογικότερη εκµετάλλευση των πόρων του υπολογιστή. Για παράδειγµα, αν εφαρµόζαµε βελτιστοποίηση, ο ενδιάµεσος κώδικας της έκφρασης που χρησιµοποιούµε ως παράδειγµα θα µπορούσε να µετατραπεί σε temp1 := id3 * 60.0 id1 := id2 + temp1

18 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 1: Eπ ø Aυτό είναι το πιο χρονοβόρο και περίπλοκο τµήµα ενός µεταγλωττιστή. Οι βελτιστοποιητές είναι προαιρετικά συστατικά των µεταγλωττιστών, αλλά ένας «καλός» µεταγλωττιστής απαραίτητα περιέχει βελτιστοποιητές O ÁÂÓÓ ÙÔÚ ÙÂÏÈÎÔ ÎÒ ÈÎ Ο γεννήτορας τελικού κώδικα δέχεται ως είσοδο το συντακτικό δένδρο ή τον ενδιά- µεσο κώδικα και παράγει ως έξοδο τον τελικό κώδικα. Σε κάποιες περιπτώσεις Μεταγλωττιστών δεν παράγεται κώδικας που µπορεί να εκτελεστεί απευθείας από τον επεξεργαστή, αλλά κώδικας assembly. Κατά τη διαδικασία της παραγωγής του τελικού κώδικα πραγµατοποιείται ανάθεση των µεταβλητών στις αντίστοιχες θέσεις µνήµης, γίνεται επιλογή των εντολών χαµηλού επιπέδου και υλοποιείται η πολιτική ανάθεσης των µεταβλητών στους καταχωρητές του επεξεργαστή O ÂÏÙÈÛÙÔappleÔÈËÙ ÌËÏÔ ÂappleÈapple Ô Οι αλγόριθµοι και οι τεχνικές που εκτελούνται κατά τη λειτουργία ενός βελτιστοποιητή χαµηλού επιπέδου αναφέρονται στον τελικό κώδικα. Αξιοποιούν πληροφορίες που σχετίζονται µε τις ιδιοµορφίες της υπολογιστικής αρχιτεκτονικής, στην οποία θα εκτελεστεί ο τελικός κώδικας µε στόχο τη βελτίωσή του O apple Ó Î Û Ì fiïˆó Ο πίνακας συµβόλων είναι το βασικότερο τµήµα ενός µεταγλωττιστή. Υποβοηθά όλα τα υπόλοιπα τµήµατά του παρέχοντας τις δοµές που απαιτούνται, για να τοποθετήσουν και να ανακτήσουν πληροφορίες. Είναι η βάση δεδοµένων για τα σύµβολα του πηγαίου προγράµµατος και λειτουργεί ως µέσο επικοινωνίας των διάφορων τµηµάτων του µεταγλωττιστή. Μια τυπική εγγραφή στον πίνακα συµβόλων µιας µεταβλητής περιέχει τη διεύθυνση µνήµης, τον τύπο και την εµβέλειά της. Αν πρόκειται για συνάρτηση, θα περιέχει επιπρόσθετα µεταξύ άλλων το όνοµά της, τον αριθµό και τον τύπο των ορισµάτων της. Σε πολύ απλούς µεταγλωττιστές ορισµένα τµήµατα ενοποιούνται ή δεν υλοποιούνται καθόλου. Είναι συνηθισµένη η ενοποίηση του συντακτικού αναλυτή µε το σηµασιολογικό αναλυτή και το γεννήτορα τελικού κώδικα. Στις διαδικασίες που εκτελεί ο συντακτικός αναλυτής προστίθενται απλές διαδικασίες σηµασιολογικής ανάλυσης και στη συνέχεια παράγεται ο τελικός κώδικας. Στην περίπτωση αυτή δε δηµιουργείται συντακτικό δένδρο, αλλά παράγεται απευθείας ο αντίστοιχος τελικός κώδικας.

19 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ Eƒ π À ª ø π ø 19 Κρίνετε αν οι παρακάτω προτάσεις είναι σωστές ή λανθασµένες.. ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.1 Σωστό Λάθος α) Η λειτουργία ενός µεταγλωττιστή υλοποιείται σε δύο φάσεις. β) Για να εκτελεστεί ένας µεταγλωττιστής σε έναν υπολογιστή, απαιτείται η ύπαρξη του συστήµατος εκτέλεσης της πηγαίας γλώσσας στον υπολογιστή αυτό. γ) Όλα τα τµήµατα ενός µεταγλωττιστή, όπως παρουσιάζονται στο Σχήµα 1.1, πρέπει να υλοποιηθούν. δ) Υπάρχουν τρία επίπεδα στα οποία µπορεί να εφαρµοστεί βελτιστοποίηση του κώδικα από ένα µεταγλωττιστή. 1.3 EÚÁ ÏÂ Ó appleù ÍË ÌÂÙ ÁψÙÙÈÛÙÒÓ Επειδή η διαδικασία κατασκευής ενός µεταγλωττιστή είναι µια επίπονη διαδικασία, της οποίας, όµως, ένα µέρος µπορεί να αυτοµατοποιηθεί, η επιστηµονική κοινότητα που ασχολήθηκε µε την κατασκευή µεταγλωττιστών από πολύ νωρίς ανέπτυξε εργαλεία για την υποβοήθηση της διαδικασίας ανάπτυξής τους. Αναπτύχθηκαν ακόµα εργαλεία για την εξοµοίωση υπολογιστικών αρχιτεκτονικών, ώστε να µπορεί να ελεγχθεί ο παραγόµενος τελικός κώδικας και να εκτιµηθεί η βελτίωση που προσφέρουν οι διάφορες φάσεις βελτιστοποίησης T Lex & Flex Τα πιο συνηθισµένα εργαλεία κατασκευής λεκτικών αναλυτών είναι τα lex και flex. To lex µετατρέπει την είσοδό του, που την αποτελούν κανόνες αναγνώρισης προτύπων και βοηθητικές συναρτήσεις, σε ένα λεκτικό αναλυτή. Το flex είναι µια βελτιωµένη υλοποίηση του lex, η οποία προσφέρεται δωρεάν από το Free Software Foundation. Μπορείτε να το βρείτε πολύ εύκολα στο Internet (π.χ. ftp://ftp.ntua.gr/pub/gnu/flex/). Είναι στο µεγαλύτερο ποσοστό του συµβατό µε το lex µε µόνο κάποιες µικρές διαφορές που µπορείτε να τις βρείτε σε ένα ειδικό κεφάλαιο στο εγχειρίδιο χρήσης που το συνοδεύει TA Yacc & Bison Τα πιο συνηθισµένα εργαλεία κατασκευής συντακτικών αναλυτών είναι τα yacc και bison. Το yacc µετατρέπει την είσοδό του, που την αποτελούν συντακτικοί κανόνες και βοηθητικές συναρτήσεις, σε ένα συντακτικό αναλυτή. Το bison είναι διαφορετική υλοποίηση του yacc που προσφέρεται δωρεάν (π.χ. ftp://ftp.ntua.gr/pub/gnu/bison/)

20 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 1: Eπ ø από το Free Software Foundation, αντίστοιχα µε το flex. Απαιτούν και τα δύο την ύπαρξη λεκτικού αναλυτή και συνεργάζονται άριστα µε τους λεκτικούς αναλυτές που παράγουν τα lex και flex TÔ PCCTS Τα αρχικά PCCTS σηµαίνουν Purdue Compiler Construction Tool Set το οποίο, όπως λέει το όνοµά του, είναι ένα σύνολο εργαλείων για την κατασκευή µεταγλωττιστών. Αποτελείται από το ANLTR που είναι αντίστοιχο του yacc, το DLG που είναι αντίστοιχο του lex και από βοηθητικό κώδικα. Η ουσιαστική διαφορά µε το yacc είναι ότι το PCCTS µπορεί να περιγράψει LL(k) γραµµατικές. Άλλη διαφορά είναι ότι το αρχείο περιγραφής του Λεκτικού αναλυτή που αποτελεί είσοδο του DLG παράγεται αυτόµατα από το ANLTR. Τέλος, παρέχεται έτοιµος µηχανισµός για την παραγωγή του συντακτικού δένδρου TÔ Spim Το spim εξοµοιώνει τον επεξεργαστή MIPS R2000/3000. Μπορεί να εκτελέσει απευθείας κώδικα assembly για τον επεξεργαστή. Παρέχει εργαλεία για την εκσφαλµάτωση του κώδικα και δυνατότητα επικοινωνίας µε άλλα προγράµµατα και το λειτουργικό σύστηµα του υπολογιστή. Λειτουργεί στην πλειοψηφία των υπολογιστικών αρχιτεκτονικών και είναι ένα πολύ καλό σύστηµα που µπορεί να χρησιµοποιηθεί κατά τη διάρκεια της εκµάθησης κατασκευής µεταγλωττιστών. Κατασκευάστηκε από τον James Larus, που δούλευε στο πανεπιστήµιο του Wisconsin και τώρα συνεργάζεται µε την Microsoft To Warts To WARTS βοηθάει στην εξοµοίωση της συµπεριφοράς της λανθάνουσας µνήµης πραγµατικών υπολογιστικών αρχιτεκτονικών. Κατασκευάστηκε και αυτό από τον James Larus. ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.2 Κρίνετε αν οι παρακάτω προτάσεις είναι σωστές ή λανθασµένες. Σωστό Λάθος α) Το lex είναι ένας λεκτικός αναλυτής β) Το yacc είναι εργαλείο κατασκευής συντακτικών αναλυτών. γ) Το spim µπορεί να χρησιµοποιηθεί µόνο σε υπολογιστές που έχουν επεξεργαστή της οικογένειας MIPS.

21 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ Eƒ π À ª ø π ø 21 ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.3 Προσπαθήστε να συσχετίσετε τα κοµµάτια του µεταγλωττιστή µε τις αντίστοιχες έννοιες. Είναι δυνατόν να µην υπάρχει συσχέτιση ή να υπάρχει πολλαπλή συσχέτιση ανάµεσα στα στοιχεία των δύο στηλών. λεκτική µονάδα λεκτικός αναλυτής συντακτικός αναλυτής γενν. ενδιάµεσης µορφής γενν. τελικού κώδικα σηµασιολογκός αναλυτής συντακτικό δένδρο κανονική έκφραση πίνακας συµβόλων PCCTS bison spim Ú ÛÙËÚÈfiÙËÙ 1.1 Πηγαίνετε στη βιβλιοθήκη και βρείτε βιβλία για µεταγλωττιστές. Επιλέξτε δύο από αυτά και µε βάση τα περιεχόµενα και την εισαγωγή τους κάνετε µια σύγκριση της ύλης που καλύπτουν. Αν είναι παλιές εκδόσεις, βρείτε και σηµειώστε πόσο διαφορετικά είναι τα εργαλεία και οι τεχνικές που προτείνονται.

22 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 1: Eπ ø ÓÔ Ë Στο Kεφάλαιο 1 µάθατε ότι ένας µεταγλωττιστής υλοποιείται σε δύο φάσεις και αποτελείται από πολλά τµήµατα, τα οποία εκτελούνται αλληλοδιαδοχικά. Το σηµαντικότερο τµήµα ενός µεταγλωττιστή είναι ο πίνακας συµβόλων που λειτουργεί σαν βάση δεδοµένων και µέσο επικοινωνίας ανάµεσα στα τµήµατα του µεταγλωττιστή. Η φάση της ανάλυσης υλοποιείται από τρία τµήµατα. Από το λεκτικό αναλυτή που µετατρέπει την είσοδο του µεταγλωττιστή σε λεκτικές µονάδες, το συντακτικό αναλυτή που οµαδοποιεί τις λεκτικές µονάδες σε συντακτικές µονάδες και το σηµασιολογικό αναλυτή που, χρησιµοποιώντας σηµασιολογική πληροφορία, ελέγχει και βελτιώνει το συντακτικό δένδρο. Η φάση της σύνθεσης υλοποιείται από πέντε µέρη. Από το γεννήτορα ενδιάµεσου κώδικα που παράγει ενδιάµεσο κώδικα χρησιµοποιώντας ως είσοδο το συντακτικό δένδρο. Τους βελτιστοποιητές υψηλού και µεσαίου επιπέδου που χρησιµοποιούν σαν είσοδο τον ενδιάµεσο κώδικα και έχουν σαν στόχο την ποιοτική αναβάθµισή του και το γεννήτορα τελικού κώδικα που παράγει τον τελικό κώδικα. Τέλος, µπορεί να υπάρχει ο βελτιστοποιητής χαµηλού επιπέδου που βελτιώνει τον τελικό κώδικα χρησιµοποιώντας πληροφορίες για τις ιδιοµορφίες της µηχανής στην οποία αυτός θα εκτελεστεί. Υπάρχουν πολλά εργαλεία που µπορούν να βοηθήσουν τη διαδικασία κατασκευής ενός µεταγλωττιστή. Είδατε τα κλασικά εργαλεία lex και yacc και τις ελεύθερα χρησιµοποιούµενες υλοποιήσεις τους, flex και bison, που βοηθούν στην κατασκευή λεκτικών και συντακτικών αναλυτών και το PCCTS που µπορεί να τα αντικαταστήσει. Ακόµα, παρουσιάστηκε το spim που εξοµοιώνει έναν πραγµατικό επεξεργαστή και µπορεί να χρησιµοποιηθεί σαν πλατφόρµα εκτέλεσης του δηµιουργούµενου τελικού κώδικα και το warts που βοηθάει στη µέτρηση της απόδοσης του τελικού κώδικα ως προς την προσπέλαση της λανθάνουσας µνήµης.

23 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 23 O ÂÓÓ ÙÔÚ ÂÎÙÈÎÒÓ AÓ Ï ÙÒÓ Lex ÎÔapplefi Σκοπός του κεφαλαίου είναι να µάθετε πώς µπορείτε να περιγράψετε τις λεκτικές µονάδες (tokens) µιας γλώσσας και πώς µπορείτε να κατασκευάσετε ένα πρόγραµµα (λεκτικό αναλυτή), το οποίο θα αναγνωρίζει λεκτικές µονάδες από την είσοδό του. Για να επιτύχετε αυτό το σκοπό, θα µάθετε να χρησιµοποιείτε το πλέον χρησιµοποιούµενο εργαλείο κατασκευής λεκτικών αναλυτών, το lex. 2 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Όταν θα έχετε µελετήσει το παρακάτω κεφάλαιο, θα µπορείτε να: περιγράφετε τις αρχές λειτουργίας ενός λεκτικού αναλυτή, ορίζετε κανονικές εκφράσεις (Regular Expressions) για τις λεκτικές µονάδες διάφορων γλωσσών προγραµµατισµού, χρησιµοποιείτε το εργαλείο κατασκευής λεκτικών αναλυτών lex, όταν χρειασθεί να κατασκευάσετε ένα λεκτικό αναλυτή. ŒÓÓÔÈ ÎÏÂÈ È λεκτικός αναλυτής λεκτική µονάδα (token) κανονικές εκφράσεις κανόνες αναγνώρισης προτύπων ταύτιση κανονικών εκφράσεων δράσεις κανόνων αρχικές καταστάσεις ÈÛ ÁˆÁÈÎ apple Ú ÙËÚ ÛÂÈ Το lex είναι το ευρύτερα χρησιµοποιούµενο εργαλείο για την κατασκευή λεκτικών αναλυτών. Αυτό το κεφάλαιο προσπαθεί να παρουσιάσει τον τρόπο που µπορεί να υλοποιηθεί ένας λεκτικός αναλυτής κάνοντας χρήση του lex. Θα µάθετε να γράφετε προδιαγραφές για λεκτικές µονάδες τις οποίες θα χρησιµοποιήσει το lex για την κατασκευή ενός λεκτικού αναλυτή. Θα γνωρίσετε τις δοµές και συναρτήσεις που προσφέρει το lex και τον τρόπο διασύνδεσής του µε το γεννήτορα συντακτικών αναλυτών yacc.

24 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 2: O ƒ π ø A À ø LEX 2.1 EÈÛ ÁˆÁ Όταν αναφερόµαστε σε µια γλώσσα, π.χ. την Ελληνική γλώσσα, ορισµένες ακολουθίες γραµµάτων µπορούν να οµαδοποιηθούν δηµιουργώντας λέξεις και να αναγνωριστούν ως συγκεκριµένοι τύποι λέξεων, π.χ. ρήµατα. Ακολουθώντας αντίστοιχη λογική, όταν ορίζουµε µια γλώσσα προγραµµατισµού, ορίζουµε γενικούς τύπους ακολουθιών γραµµάτων που έχουν συγκεκριµένη σηµασία στη γλώσσα που δηµιουργούµε. Τη διαδικασία της αναγνώρισης µιας ακολουθίας γραµµάτων και της αντιστοίχησής της σε µια κατηγορία τύπων ονοµάζουµε λεκτική ανάλυση. Μπορούµε να κατασκευάσουµε προγράµµατα που να εκτελούν τη διαδικασία της Λεκτικής Ανάλυσης. Τα προγράµµατα αυτά στη βιβλιογραφία ονοµάζονται Λεκτικοί Αναλυτές (Λ.Α.). Η βασική λειτουργία ενός τυπικού Λ.Α. είναι να διαβάζει από την είσοδό του έναν έναν τους χαρακτήρες της εισόδου, να αναγνωρίζει ακολουθίες χαρακτήρων και να παράγει στην έξοδό του Λεκτικές Μονάδες (tokens). Ως παράδειγµα, η ακολουθία των παρακάτω γραµµάτων area = length * height + 20; µπορεί να µετασχηµατιστεί από ένα Λ.Α. σε µια ακολουθία από τις Λεκτικές Μονάδες area, length, height τύπου προσδιοριστή (identifier) 20 τύπου σταθερής =, *, + τύπου πράξης ; τύπου στίξης Όταν θέλουµε να κατασκευάσουµε ένα Λ.Α., θα πρέπει να τον προγραµµατίσουµε µε τέτοιο τρόπο, ώστε να µπορεί να κατηγοριοποιήσει τις ακολουθίες γραµµάτων στους διάφορους τύπους. Για να επιτευχθεί αυτό, πρέπει να ορίσουµε κανόνες που θα πρέπει να ακολουθούνται κατά τη διάρκεια της αναγνώρισης. Υπάρχει τυπικός τρόπος για τον ορισµό κανόνων που θα χρησιµοποιηθούν για την αναγνώριση πρότυπων χαρακτήρων. Οι κανόνες αυτοί ονοµάζονται Κανονικές Εκφράσεις (Regular Expressions). Με τη βοήθειά τους µπορούµε να ορίσουµε τις ακολουθίες χαρακτήρων που ανήκουν στη γλώσσα, δηλαδή τις Λεκτικές Μονάδες τις οποίες θέλουµε να αναγνωρίζει ο Λ.Α. Για να βοηθηθεί η κατασκευή Λεκτικών Αναλυτών υπάρχει ένα εργαλείο κατασκευής τους. Το εργαλείο αυτό ονοµάζεται lex και είναι και αυτό ένας µεταφραστής. Το lex µετατρέπει την είσοδό του, που την αποτελούν Κανόνες Αναγνώρισης Προτύπων και βοηθητικές συναρτήσεις, σε ένα λεκτικό αναλυτή που µπορεί να χρησιµοποιη-

25 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ ƒàº ª LEX 25 θεί είτε αυτόνοµα είτε σε συνδυασµό µε ένα Συντακτικό αναλυτή για την κατασκευή ενός µεταγλωττιστή. Θα είναι χρήσιµο να µελετήσετε ξανά το αντίστοιχο κεφάλαιο της Θεµατικής Υποενότητας 6.1 «Μεταγλωττιστές», για να ξαναθυµηθείτε λίγα πράγµατα από τη θεωρία και τη γενική λειτουργία του lex. 2.2 ÚÔÁÚ ÌÌ Ù ÔÓÙ Ì ÙÔ Lex Γενικά, η µορφή του πηγαίου κώδικα που µπορεί να αναγνωρίσει το lex είναι η εξής: {ÔÚÈÛÌÔ } %% {Î ÓfiÓ (rules)} %% {ÕÏÏ ÏÔappleÔÈ ÛÂÈ Û Ó ÚÙ ÛˆÓ} Το τµήµα πριν από το πρώτο %% και µετά το τέλος των κανόνων µπορεί να παραλειφθεί, αν δεν είναι απαραίτητο. Έτσι, το πιο µικρό σωστό πρόγραµµα σε lex είναι %% το οποίο αντιστοιχεί σε προδιαγραφές για ένα Λ.Α., ο οποίος εκτελεί µόνο την προδιαγεγραµµένη ράση της αντιγραφής της εισόδου στην έξοδο. Οι κανόνες στο lex έχουν τη γενική µορφή <appleúfiù appleô> Ú ÛË και αντιπροσωπεύουν έναν Πίνακα µε τις ράσεις που πρέπει να εκτελέσει ο Λ.Α. σε κάθε περίπτωση που θα αναγνωρίσει το αντίστοιχο πρότυπο στην είσοδό του. Για παράδειγµα, ο κανόνας integer { printf( found keyword INT ); } σε περίπτωση που βρεί τη λέξη integer στην είσοδο του Λ.Α., θα τυπώσει το µήνυµα ``found keyword INT. 2.3 Ú ÊÔÓÙ Î ÓfiÓ ÛÙÔ Lex Παραπάνω αναφέραµε ότι τα πρότυπα στο lex ορίζονται µε Κανονικές Εκφράσεις, οι οποίες ορίζουν την ακολουθία γραµµάτων που θα ταυτιστεί. Στη συνέχεια, θα εκτελεστεί η αντίστοιχη ράση. Οι Κανονικές Εκφράσεις στο lex, εκτός από απλές αλφαριθµητικές ακολουθίες, περιλαµβάνουν και χαρακτήρες τελεστών µε διάφορες σηµασίες, όπως επανάληψη, επιλογή κ.ά. που θα δούµε παρακάτω.

26 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 2: O ƒ π ø A À ø LEX Οι χαρακτήρες τελεστών είναι οι ακόλουθοι: \ [ ] ^ -?. * + ( ) $ / { } % < > και σε περίπτωση που θέλουµε να τους χρησιµοποιήσουµε σαν απλούς χαρακτήρες, θα πρέπει να προηγείται ο χαρακτήρας διαφυγής, που στο συνήθη συνδυασµό χρήσης του lex µε τη γλώσσα προγραµµατισµού C είναι ο \. Ο χαρακτήρας ( ) ορίζει την αρχή ή το τέλος µιας ακολουθίας χαρακτήρων. Για παράδειγµα, τα πρότυπα των xyz +, xyz+, xyz\+ αντιστοιχούν στην ακολουθία χαρακτήρων xyz+, σε αντίθεση µε το πρότυπο xyz+, που, όπως θα δείτε παρακάτω στην υποενότητα 2.3.3, αντιστοιχεί σε κάτι διαφορετικό. Είναι, λοιπόν, καλή πρακτική να βάζετε µέσα σε ζευγάρι διπλών εισαγωγικών ( ) κάθε άλλο µη αλφαριθµητικό χαρακτήρα που θέλετε να δηλώσετε ως χαρακτήρα. Μια ακόµα χρήση των ( ) είναι όταν θέλουµε να περιγράψουµε πρότυπο που περιέχει τον κενό χαρακτήρα ή τον οριζόντιο στηλογνώµονα (tab), τα οποία κανονικά στο lex χωρίζουν τις Λεκτικές Μονάδες. Μέσα σε ζευγάρι διπλών εισαγωγικών ( ) µπορούν να χρησιµοποιηθούν και οι συµβολισµοί της C για ειδικούς χαρακτήρες, π.χ. καινούρια γραµµή \n, οριζόντιος στηλογνώµονας \t, πισωγύρισµα \b KÏ ÛÂÈ Ú ÎÙ ÚˆÓ Όταν θέλουµε να ορίσουµε ένα πρότυπο που µπορεί να ταυτιστεί µε έναν από τους χαρακτήρες µιας οµάδας χαρακτήρων, τότε ορίζουµε µία κλάση χαρακτήρων. Μία κλάση χαρακτήρων ορίζεται από χαρακτήρες που περικλείονται µέσα σε ένα συνδυασµό αριστερής και δεξιάς αγκύλης. Έτσι, η συµβολοσειρά [abc] µπορεί να ταυτιστεί µε το χαρακτήρα a ή µε το χαρακτήρα b ή µε το χαρακτήρα c. Όλοι οι χαρακτήρες µέσα στα [ ] αντιπροσωπεύουν ένα µοναδικό χαρακτήρα εκτός από τους \, - και ^. O χαρακτήρας σηµαίνει διάστηµα χαρακτήρων. Ως παράδειγµα, το [A-Za-z0-9<_] σηµαίνει όλους τους κεφαλαίους και µικρούς χαρακτήρες της αγγλικής αλφαβήτου, τους αριθµητικούς χαρακτήρες και τους χαρακτήρες < και _. Αν θέλουµε να συµπεριλάβουµε σε µια κλάση χαρακτήρων το χαρακτήρα, αυτός θα πρέπει να είναι πρώτος ή τελευταίος. Ο χαρακτήρας ^ χρησιµοποιείται, όταν θέλουµε να εκφράσουµε το υπόλοιπο του συνόλου χαρακτήρων του υπολογιστή σε σχέση µε µία κλάση χαρακτήρων. Σαν παράδειγµα, το [^abc] σηµαίνει όλους τους υπόλοιπους χαρακτήρες, συµπεριλαµβανοµένων και των ειδικών χαρακτήρων, εκτός από τους a, b, c. Για συντοµία, έχει εκ των προτέρων οριστεί µια ειδική κλάση χαρακτήρων που ταυτίζει όλους τους χαρακτήρες, εκτός από το τέλος γραµµής, και συµβολίζεται από τον χαρακτήρα τελεία (.).

27 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ ƒàº ª LEX 27 ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 2.1 Όταν χρησιµοποιούµε το lex και θέλουµε να αναγνωρίσουµε ένα σύνολο χαρακτήρων, τοποθετούµε τους χαρακτήρες µέσα σε [ και ], χωρίς να έχει σηµασία η σειρά εµφάνισης των χαρακτήρων. Όταν, όµως, θέλουµε να συµπεριλάβουµε στο σύνολο το χαρακτήρα ], αυτός πρέπει να είναι πρώτος στο σύνολο, ενώ και ο χαρακτήρας - πρέπει να είναι πρώτος ή τελευταίος. Μπορείτε να βρείτε γιατί; ÚÔ ÈÚÂÙÈÎ ÂÎÊÚ ÛÂÈ Ο τελεστής? σηµαίνει ότι το σύµβολο που προηγείται είναι προαιρετικό σε µια έκφραση. Έτσι, το πρότυπο ab?c µπορεί να ταυτιστεί είτε µε το ac είτε µε το abc Eapple Ó ÏËappleÙÈÎ ÂÎÊÚ ÛÂÈ Μπορούµε µε τη βοήθεια των χαρακτήρων * και + να ορίσουµε πρότυπα που να ταυτίζονται µε 0 ή περισσότερες και 1 ή περισσότερες εµφανίσεις των αντίστοιχων εκφράσεων που προηγούνται. Για παράδειγµα, το a* σηµαίνει κανένα ή περισσότερα a, ενώ το a+ σηµαίνει τουλάχιστον ένα ή περισσότερα a. Αντίστοιχα, το πρότυπο [a-z]+ σηµαίνει όλες τις συµβολοσειρές που αποτελούνται από µικρά γράµ- µατα και το πρότυπο [A-Za-z][A-Za-z0-9]* σηµαίνει όλες τις αλφαριθµητικές συµβολοσειρές που αρχίζουν µε αλφαριθµητικό χαρακτήρα. Το δεύτερο πρότυπο χρησιµοποιείται συνήθως στις περισσότερες γλώσσες προγραµµατισµού για τον ορισµό των µεταβλητών EÎÊÚ ÛÂÈ ÂÓ ÏÏ Á Ο τελεστής ορίζει την έννοια της εναλλαγής, δηλαδή τη δυνατότητα να ταυτιστεί ένα πρότυπο µε έναν από τους δύο όρους που το αποτελούν. Ως παράδειγµα, το πρότυπο ab cd µπορεί να ταυτιστεί είτε µε το ab είτε µε το cd EÎÊÚ ÛÂÈ ÔÌ ÔappleÔ ËÛË Οι παρενθέσεις είναι το µέσο που χρησιµοποιούµε για να εκφράσουµε οµαδοποίηση στο lex. Οι παρενθέσεις, αν και δεν είναι λάθος να χρησιµοποιούνται και στο εξωτερικό επίπεδο µιας Κανονικής Έκφρασης του lex, δεν είναι απαραίτητες. Έτσι στο lex οι εκφράσεις (abc) και abc ταυτίζονται, αν βρίσκονται στο εξωτερικό επίπεδο µιας Κανονικής Έκφρασης. Οι παρενθέσεις χρησιµοποιούνται, για να περιγράψουµε πολύπλοκες εκφράσεις. Για παράδειγµα, η έκφραση (ab cd+)?(ef)* ταυτίζεται µε ακολουθίες χαρακτήρων, όπως abefef, efefef, cdef ή cddd αλλά όχι και µε abc, abcd ή abcdef.

28 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 2: O ƒ π ø A À ø LEX E ÈÛıËÛ Û ÌÊÚ ÔÌ ÓˆÓ Το lex έχει τη δυνατότητα να αναγνωρίζει και κάποιες απλές περιπτώσεις συµφραζόµενων, αν και αυτό είναι βασική δουλειά του Συντακτικού Αναλυτή. Οι δύο απλούστερες τέτοιες µορφές είναι οι τελεστές ^ και $. Αν ο τελεστής ^ είναι ο πρώτος χαρακτήρας σε µία έκφραση, τότε αυτή η έκφραση µπορεί να ταυτιστεί µόνο αν βρίσκεται στην αρχή µιας γραµµής. Θυµηθείτε ότι το lex σαν αρχή γραµµής ορίζει τους χαρακτήρες που ακολουθούν το χαρακτήρα καινούριας γραµµής ( \n ) και την αρχή ενός αρχείου εισόδου. Για να µην υποπέσετε σε λάθη, όταν γράφετε εκφράσεις στο lex, θυµηθείτε τη διαφορετική ερµηνεία του τελεστή ^ µέσα στις κλάσεις χαρακτήρων. Αν ο τελεστής $ είναι ο τελευταίος χαρακτήρας σε µια έκφραση, τότε αυτή η έκφραση µπορεί να ταυτιστεί µόνο αν βρίσκεται στο τέλος µιας γραµµής, δηλαδή όταν αυτή ακολουθείται από το χαρακτήρα καινούριας γραµµής ( \n ). Ο τελεστής $ είναι απλά µια ειδική περίπτωση του τελεστή /, ο οποίος ορίζει ακολουθούµενα συµφραζόµενα. Για παράδειγµα, η έκφραση ab/cd µπορεί να ταυτιστεί µε το ab, αλλά µόνο όταν αυτό ακολουθείται από το cd. Έτσι, το ab$ είναι το ίδιο µε το ab/\n. Μπορούµε ακόµα να ορίσουµε στο lex ευαισθησία προς τα συµφραζόµενα που βρίσκονται «αριστερά» (ουσιαστικά πριν, αλλά για ιστορικούς λόγους υπάρχει η έννοια του left context ) από το σηµείο που βρίσκεται το αρχείο εισόδου µε τη χρήση αρχικών συνθηκών, τις οποίες θα δούµε στην ενότητα Eapple Ó ÏË Ë Î È Ú ÛË ÔÚÈÛÌÒÓ Το ζευγάρι των τελεστών {} έχει διπλή χρήση και µπορεί να σηµαίνει είτε χρήση ορισµών (όταν περικλείουν ακολουθία χαρακτήρων) είτε επανάληψη (όταν περικλείουν αριθµούς). Όταν αναφερόµαστε σε χρήση ορισµών, εννοούµε οι λέξεις που έχουµε ορίσει να αντιστοιχούν σε µια Κανονική Έκφραση στο πρώτο κοµµάτι του αρχείου εισόδου που ονοµάσαµε τµήµα ορισµών, αυτό δηλαδή που βρίσκεται πριν από το πρώτο %%. Να θυµάστε, λοιπόν, ότι οι ορισµοί που µπορούν να χρησιµοποιηθούν είναι αυτοί που έχετε ορίσει στο πρώτο τµήµα ενός τυπικού αρχείου εισόδου. Όταν περιέχονται αριθµοί, η σηµασία τους καθορίζεται ως εξής: α) Αν περιέχεται µόνο ένας αριθµός {a}, ορίζουµε ότι η έκφραση που προηγείται πρέπει να επαναλαµβάνεται τόσες φορές, όση είναι η τιµή a.

29 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ ƒàº ª LEX 29 β) Αν περιέχονται δύο αριθµοί {a,b}, τότε ορίζουµε ότι η έκφραση που προηγείται πρέπει να επαναλαµβάνεται από a έως b φορές. Ú ÂÈÁÌ 2.1 Στο παρακάτω πρόγραµµα το lex κάνει αντικατάσταση των digit και nonzero µε τον αντίστοιχο ορισµό τους, ενώ το a{1,5} µπορεί να ταυτιστεί µε 1 έως 5 εµφανίσεις του a. #include <stdio.h> digit [0-9] nonzero [1-9] %% 0 {nonzero}{digit} printf( Found an integer\n ); a{1,5} printf( Found 1 to 5 occurrences of a.\n ); ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 2.2 ώστε τις Κανονικές Εκφράσεις για τα ακόλουθα: (Όπου αναφέρουµε τη λέξη «λέξεις», εννοούµε τους συνδυασµούς γραµµάτων, ανεξάρτητα αν έχουν ή όχι σηµασία και αποτελούνται µόνο από γράµµατα της αγγλικής αλφαβήτου.) α) Όλες τις λέξεις που περιέχουν τα φωνήεντα της αγγλικής αλφαβήτου στη σειρά. Τα φωνήεντα της αγγλικής αλφαβήτου είναι στη σειρά τα a, e, i, o, u. β) Όλες τις λέξεις που τα γράµµατα τους είναι διατεταγµένα σε αύξουσα λεξικογραφική σειρά. γ) Όλες τις ακολουθίες από 0 και 1 οι οποίες περιέχουν ακριβώς µία φορά τον συνδυασµό 000. Τι σηµαίνουν τα ακόλουθα πρότυπα κανόνων σε lex; α) [^ ] β) ^ γ) [^ ].* δ) [^ ] ε) [^ ]+ στ) [^ ]+ ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 2.3

30 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 2: O ƒ π ø A À ø LEX ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 2.4 Αντιστοιχίστε τους Λεκτικούς Κανόνες σε lex που αναγνωρίζουν τους χαρακτήρες, όπως αυτοί απαντώνται στη γλώσσα προγραµµατισµού C, µε τους αντίστοιχους χαρακτήρες. 'a' \045 '[^']' \ã '\\[abfnrtv\'"?]' \\ \x0d '\\0[0-7]*' [ '\\x0[0-9a-fa-f]*' 'z' - "??"[()<>?!'=-] \t 2.4 OÈ ÂÓ ÚÁÂÈÂ ÙÔ Lex Όταν µια Κανονική Έκφραση ταυτιστεί στην είσοδο του Λεκτικού Αναλυτή, εκτελείται το κοµµάτι του κώδικα που αποτελεί το δεξιό σκέλος ενός κανόνα. Το δεξιό σκέλος του κανόνα το ονοµάζουµε ράση του Κανόνα. Αν δεν έχει οριστεί ράση από τον προγραµµατιστή, η ράση που εκτελείται είναι η αντιγραφή της εισόδου στην έξοδο. Όταν, λοιπόν, δηµιουργήσετε τα πρώτα σας προγράµµατα σε lex και δεν προβλέψετε να γράψετε κανόνες για όλες τις πιθανές εισόδους, θα παρατηρήσετε αντιγραφή της εισόδου στην έξοδο. Αυτός είναι ένας τρόπος αποσφαλµάτωσης των προγραµµάτων σας. Αν η ίδια ράση επαναλαµβάνεται για δύο ή περισσότερους κανόνες, µπορούµε να συνδυάσουµε τους κανόνες χρησιµοποιώντας το χαρακτήρα. Για παράδειγµα, αν έχουµε τα πρότυπα p1, p2, p3 που αντιστοιχούν στην ίδια ράση, µπορούµε να γράψουµε p1 p2 p3 { Ú ÛË } ;

31 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ Oπ ª π π À ƒ π À LEX 31 Ú ÛÙËÚÈfiÙËÙ 2.1 Να γραφούν Λεκτικοί Κανόνες για χρήση από lex που να αναγνωρίζουν τους αριθ- µούς, όπως αυτοί απαντώνται στη γλώσσα προγραµµατισµού C, π.χ. 1234, 1234L, 1234U, 1234UL, 123.4, 1234E-1, 12.34E+1, 123F, 123.4L, 12E+2F, 12E-2L, 0X1ABC, 0X1ABCU, 0X1ABCL, 0X1ABCUL (οι χαρακτήρες µπορεί να είναι είτε κεφαλαίοι είτε µικροί). 2.5 O ÌË ÓÈÛÌfi Ù ÙÈÛË ÙÔ Lex To lex µπορεί να χειριστεί ασαφείς ορισµούς ακολουθώντας τους παρακάτω κανόνες: 1. Όταν υπάρχει δυνατότητα να ταυτιστεί η είσοδος µε δύο ή περισσότερους κανόνες, ταυτίζεται µε τον κανόνα που αναγνωρίζει το µεγαλύτερο αριθµό χαρακτήρων της εισόδου. 2. Αν δύο ή περισσότεροι κανόνες αναγνωρίζουν το µεγαλύτερο αριθµό χαρακτήρων της εισόδου, τότε ενεργοποιείται ο κανόνας που έχει οριστεί πρώτος. Ú ÂÈÁÌ 2.2 Αν έχουµε τους ακόλουθους κανόνες integer { return KEYWORD; }; [a-z]+ { return IDENTIFIER; }; και ως είσοδο έχουµε τη λέξη integers, τότε θα προτιµηθεί ο δεύτερος κανόνας, γιατί ταυτίζεται µε είσοδο µήκους 8 σε αντίθεση µε τον πρώτο που ταυτίζεται µε είσοδο µήκους 7. Αντίθετα, αν η είσοδος ήταν integer, θα ταυτιζόταν µε τον πρώτο κανόνα, γιατί αυτός έχει οριστεί πρώτος. Κανονικά το lex χρησιµοποιεί κάθε χαρακτήρα της εισόδου µόνο µια φορά. Μπορεί για διάφορους λόγους να θέλουµε να επαναχρησιµοποιήσουµε τους χαρακτήρες που είχαν ταυτιστεί σε έναν κανόνα. Μας δίνεται η δυνατότητα να το κάνουµε αυτό χρησιµοποιώντας την εντολή REJECT µέσα στη ράση αυτού του Κανόνα. Αυτό µας επιτρέπει να ζητήσουµε από το µηχανισµό του lex να επιλέξει την αµέσως καλύτερη ταύτιση κανόνα από αυτή που είχε επιλέξει γι αυτή τη ράση, επαναχρησιµοποιώντας έτσι τους χαρακτήρες. 2.6 OÈ ÔÌ Î È ÔÈ Û Ó ÚÙ ÛÂÈ ÙÔ Lex Συνήθως, µας ενδιαφέρει να γνωρίζουµε και το κοµµάτι της εισόδου που έχει ταυ-

32 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 2: O ƒ π ø A À ø LEX τιστεί µε έναν κανόνα µας. Υπάρχει ένας πίνακας χαρακτήρων yytext στο lex, που περιέχει το κοµµάτι της εισόδου που έχει ταυτιστεί. Αν θέλουµε να δούµε την είσοδο, υπάρχει προκαθορισµένη η µακροεντολή ECHO. Για παράδειγµα, οι δύο κανόνες που ακολουθούν είναι ισοδύναµοι: [a-z]+ printf( %s, yytext); Î È [a-z]+ ECHO; Ο αριθµός των χαρακτήρων που έχουν ταυτιστεί περιέχεται στη µεταβλητή yyleng. O τελευταίος χαρακτήρας που ταυτίστηκε θα είναι ο yytext[yyleng-1]. Μέσα σε µία ράση µπορούν να ελεγχθούν τα περιεχόµενα του yytext. Από αυτό τον έλεγχο µπορεί να προκύψει ότι έχει διαβαστεί περισσότερο ή λιγότερο κοµµάτι της εισόδου σε σχέση µε αυτό που έπρεπε να διαβαστεί. Το lex δίνει τη δυνατότητα στον προγραµµατιστή, χρησιµοποιώντας τη συνάρτηση yymore(), να διαβάσει ακόµα ένα κοµµάτι της εισόδου και να το προσθέσει στο τέλος του yytext. Αντίστοιχα, η συνάρτηση yyless(n) µπορεί να χρησιµοποιηθεί για να κρατηθούν οι n πρώτοι χαρακτήρες από το yytext και να επιστραφούν οι υπόλοιποι στην είσοδο. Υπάρχει η δυνατότητα για τον προγραµµατιστή να χρησιµοποιήσει και τις βασικές ρουτίνες εισόδου και εξόδου του lex µέσα σε ράσεις Κανόνων. Οι ρουτίνες αυτές είναι η input() που επιστρέφει τον επόµενο χαρακτήρα της εισόδου, η output(c) που γράφει το χαρακτήρα c στην έξοδο και η unput(c) που επιστρέφει το χαρακτήρα c στην είσοδο. Ο χρήστης έχει τη δυνατότητα να ορίσει ξανά αυτές τις συναρτήσεις. Για περισσότερες πληροφορίες ανατρέξτε στο εγχειρίδιο του lex. Τέλος, ο προγραµµατιστής µπορεί να ορίσει ξανά τη συνάρτηση yywrap() η οποία εκτελείται, όταν ο λεκτικός αναλυτής φτάσει στο τέλος του αρχείου εισόδου (δηλαδή συναντήσει χαρακτήρα EOF). Μπορεί, έτσι, να χρησιµοποιηθεί, για να τυπωθούν στατιστικά, διάφοροι Πίνακες κλπ. Αν η συνάρτηση επιστρέψει 1, ο µηχανισµός του Λεκτικού αναλυτή συνεχίζει κανονικά. Η προκαθορισµένη έκδοση της yywrap() επιστρέφει OÈ Ú ÈÎ Û Óı ÎÂ ÙÔ Lex Πολλές φορές συµβαίνει ορισµένοι κανόνες του lex να έχουν λόγο ύπαρξης µόνο κάτω από ορισµένες συνθήκες. Ως παράδειγµα, µπορούµε να αναφέρουµε την περίπτωση ύπαρξης προεπεξεργαστή σε µια γλώσσα. Οι εντολές του προεπεξεργαστή έχουν νόηµα µόνο όταν προηγείται ένα ειδικό σύµβολο. Οι αρχικές συνθήκες δηλώνονται στο τµήµα ορισµών και έχουν τη γενική µορφή %Start name1 name2...

33 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ Xƒ πª πø LEX 33 όπου το %Start µπορεί να αντικατασταθεί από τα %s ή %S για λόγους συντοµίας. Για να ενεργοποιηθεί µια αρχική συνθήκη, πρέπει µια ράση να περιέχει µία εντολή της µορφής BEGIN <fióôì Ú ÈÎ Û Óı ÎË >; Όταν έχουµε ενεργοποιήσει µια αρχική συνθήκη και θέλουµε να επανέλθουµε στη βασική αρχική συνθήκη του lex, τότε πρέπει να ενεργοποιήσουµε την αρχική συνθήκη 0. Όταν θέλουµε να αναφερθούµε σε µία αρχική κατάσταση, περικλείουµε το όνοµά της µέσα σε <>. Η αναφορά µπορεί να γίνει µόνο στην αρχή ενός κανόνα. Για παράδειγµα, αν έχουµε την αρχική συνθήκη COMMENT και θέλουµε ο λεκτικός αναλυτής που θα παραχθεί από το lex να αφαιρεί τα σχόλια, όταν έχει ενεργοποιηθεί η αρχική συνθήκη COMMENT, τότε µπορούµε να γράψουµε: %s COMMENT %% /* BEGIN COMMENT; <COMMENT>. ; Στην περίπτωση που ένας κανόνας ισχύει για περισσότερες από µία αρχικές συνθήκες, τότε πριν από τον κανόνα θα πρέπει να προηγείται η αναφορά στις αρχικές συνθήκες για τις οποίες ο κανόνας αυτός ισχύει, χωρίζοντας τα ονόµατά τους µε κόµµατα: < Ú _Û Óı1, Ú _Û Óı2, > Î ÓfiÓ Αν πριν από έναν κανόνα προηγείται το <>, τότε αυτός ισχύει για κάθε αρχική συνθήκη. 2.8 XÚËÛÈÌÔappleÔÈÒÓÙ ÙÔ Lex Το lex δηµιουργεί τον πηγαίο κώδικα για ένα λεκτικό αναλυτή από ένα αρχείο λεκτικών κανόνων, που συνήθως έχει κατάληξη.l, εκτελώντας την εντολή lex input.l Παράγεται έτσι ένα αρχείο C µε το όνοµα lex.yy.c που περιέχει τον πηγαίο κώδικα για το λεκτικό Αναλυτή. Αν τα πρωτότυπα που θέλουµε να αναγνωρίσουµε έχουν πολύ µεγάλο µέγεθος, µπορεί να παρουσιαστούν προβλήµατα στην εκτέλεση του Λεκτικού Αναλυτή. Έχουµε

34 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ KEºA AIO 2: O ƒ π ø A À ø LEX τη δυνατότητα να αυξήσουµε το µέγεθος ορισµένων δοµών του χρησιµοποιώντας εντολές στο αρχείο περιγραφής. Οι εντολές αυτές είναι της µορφής %x ÙÈÌ όπου οι τιµές του x είναι ακέραιες και έχουν τη σηµασία που φαίνεται στον Πίνακα 2.1. Ó Î 2.1 Μεταβλητές µεγέθους δοµών του παραγόµενου Λ.Α. x p n e a k o Σηµασία Αριθµός θέσεων Αριθµός καταστάσεων Αριθµός κόµβων στο δένδρο Αριθµός καταστάσεων µετάβασης Αριθµός κλάσεων χαρακτήρων Μέγεθος της µεταβλητής yytext 2.9 To Lex ÛÂ Û ÓÂÚÁ Û ÌÂ ÙÔ Yacc Το lex παρέχει στο λεκτικό αναλυτή που δηµιουργεί τη συνάρτηση yylex(), η οποία είναι αυτή που καλεί το yacc, για να πάρει Λεκτικές µονάδες. Όταν θέλουµε να χρησιµοποιήσουµε το lex σε συνεργασία µε το yacc, θα πρέπει κάθε ράση του lex να τελειώνει µε µια εντολή της µορφής return <token>; όπου token η αντίστοιχη τιµή της Λεκτικής Μονάδας που πρέπει να επιστρέφεται. Για να χρησιµοποιήσει το yacc την έξοδο του lex, θα πρέπει να συµπεριληφθεί η γραµµή # include lex.yy.c ; στο τελευταίο κοµµάτι της γραµµατικής που χρησιµοποιεί για είσοδο το yacc.

35 ÈÓÙ Ï II.(168Û.) 22/8/ :52 ÂÏ 35 YNOæH 35 Ú ÛÙËÚÈfiÙËÙ 2.2 Να αναφέρετε τους τελεστές της γλώσσας προγραµµατισµού C (ή όποιας άλλης γλώσσας γνωρίζετε). Για κάθε τελεστή να αναφέρετε τον αριθµό των εντέλων, την προτεραιότητά του, την προσεταιριστικότητά του κλπ. Εάν δε γνωρίζετε αρκετά καλά κάποια γλώσσα, πηγαίνετε στη βιβλιοθήκη και επιλέξτε ένα βιβλίο που περιγράφει µία οποιαδήποτε γλώσσα. Πόσο εύκολο είναι να βρείτε την πληροφορία στο βιβλίο; ÓÔ Ë Στο κεφάλαιο αυτό µελετήσατε τη διαδικασία κατασκευής ενός Λεκτικού Αναλυτή. Στις δύο πρώτες ενότητες του κεφαλαίου έγινε µια εισαγωγή στις έννοιες που σχετίζονται µε τη Λεκτική Ανάλυση, µάθατε τα µέρη ενός προγράµµατος σε lex και τον τρόπο δήλωσης κανόνων στο lex. Στην ενότητα 2.3 εστιάσατε την προσοχή σας στο πώς µπορείτε να γράψετε τα πρότυπα των κανόνων σε lex. Γνωρίσατε τις κλάσεις χαρακτήρων, τις προαιρετικές και επαναληπτικές εκφράσεις, τις εκφράσεις εναλλαγής και οµαδοποίησης καθώς και τις δυνατότητες του lex για διαχείριση συµφραζόµενων. Μάθατε ακόµα τη συµπεριφορά του lex σε περίπτωση ασάφειας των κανόνων και τις δοµές και συναρτήσεις που προσφέρει το lex στον προγραµµατιστή. Τέλος, είδατε τη χρήση των αρχικών καταστάσεων στο lex, τη διαδικασία µετάφρασης ενός συνόλου κανόνων για την παραγωγή ενός λεκτικού αναλυτή και πώς ο παραγόµενος λεκτικός αναλυτής µπορεί να χρησιµοποιηθεί µαζί µε το yacc.

EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ

EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ E π A π π ª π EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ TfiÌÔ ' KÏ ÓıË Ú ÌappleÔ Ï Ë ÏÒÛÛ ÚÔÁÚ ÌÌ ÙÈÛÌÔ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα

Διαβάστε περισσότερα

EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ

EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ E π A π π ª π EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ TfiÌÔ A' HÏ appleèù ÎË EÈÛ ÁˆÁ ÛÙËÓ EappleÈÛÙ ÌË ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Mεταγλωττιστές Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα και πληρότητα

Διαβάστε περισσότερα

Θεωρία Πληροφορίας και Kωδικοποίησης

Θεωρία Πληροφορίας και Kωδικοποίησης Θεωρία Πληροφορίας και Kωδικοποίησης Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική

Διαβάστε περισσότερα

E π A π π ª π. Â È ÛÌfi ÔÁÈÛÌÈÎÔ. TfiÌÔ ' ÏÒÛÛÂ ÚÔÁÚ ÌÌ ÙÈÛÌÔ II. KÏÂ ÓıË Ú ÌappleÔ Ï Ë. (AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ ÚÔÁÚ ÌÌ ÙÈÛÌfi )

E π A π π ª π. Â È ÛÌfi ÔÁÈÛÌÈÎÔ. TfiÌÔ ' ÏÒÛÛÂ ÚÔÁÚ ÌÌ ÙÈÛÌÔ II. KÏÂ ÓıË Ú ÌappleÔ Ï Ë. (AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ ÚÔÁÚ ÌÌ ÙÈÛÌfi ) E π A π π ª π Â È ÛÌfi ÔÁÈÛÌÈÎÔ TfiÌÔ ' KÏÂ ÓıË Ú ÌappleÔ Ï Ë ÏÒÛÛÂ ÚÔÁÚ ÌÌ ÙÈÛÌÔ II (AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ ÚÔÁÚ ÌÌ ÙÈÛÌfi ) ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών

Διαβάστε περισσότερα

E π A π π ª π. È ÎÚÈÙ M ıëì ÙÈÎ. Î È M ıëì ÙÈÎ ÔÁÈÎ. TfiÌÔ A' È ÎÚÈÙ M ıëì ÙÈÎ ÂÒÚÁÈÔ BÔ ÚÔ

E π A π π ª π. È ÎÚÈÙ M ıëì ÙÈÎ. Î È M ıëì ÙÈÎ ÔÁÈÎ. TfiÌÔ A' È ÎÚÈÙ M ıëì ÙÈÎ ÂÒÚÁÈÔ BÔ ÚÔ E π A π π ª π È ÎÚÈÙ M ıëì ÙÈÎ Î È M ıëì ÙÈÎ ÔÁÈÎ TfiÌÔ A' ÂÒÚÁÈÔ BÔ ÚÔ È ÎÚÈÙ M ıëì ÙÈÎ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛΗΡΟΦΟΡΙΚΗ Θεµατική Eνότητα

Διαβάστε περισσότερα

E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË - EÊ ÚÌÔÁ. TfiÌÔ ' ÂÓÂÙÈÎÔ AÏÁfiÚÈıÌÔÈ Î È EÊ ÚÌÔÁ. ÎÔı Ó ÛË

E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË - EÊ ÚÌÔÁ. TfiÌÔ ' ÂÓÂÙÈÎÔ AÏÁfiÚÈıÌÔÈ Î È EÊ ÚÌÔÁ. ÎÔı Ó ÛË E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË - EÊ ÚÌÔÁ TfiÌÔ ' apple Ú ˆÓ ÎÔı Ó ÛË ÂÓÂÙÈÎÔ AÏÁfiÚÈıÌÔÈ Î È EÊ ÚÌÔÁ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛΗΡΟΦΟΡΙΚΗ

Διαβάστε περισσότερα

K ÓÔ.ÛÂÏÈ.(168ÛÂÏ.) :13 ÂÏ 1 (M ÚÔ ÙÛ ÁÎÔ) Eπιστήµη Eπιφανειών

K ÓÔ.ÛÂÏÈ.(168ÛÂÏ.) :13 ÂÏ 1 (M ÚÔ ÙÛ ÁÎÔ) Eπιστήµη Eπιφανειών K ÓÔ.ÛÂÏÈ.(168ÛÂÏ.) 18-10-06 09:13 ÂÏ 1 (M ÚÔ ÙÛ ÁÎÔ) Eπιστήµη Eπιφανειών Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως

Διαβάστε περισσότερα

E π A π π ª π. Ú ÌÌÈÎfi ÚÔÁÚ ÌÌ ÙÈÛÌfi. MÔÓÙÂÏÔappleÔ ËÛË. TfiÌÔ A' M ÓÔ PÔ ÌÂÏÈÒÙË Î È ÚÔÛÔÌÔ ˆÛË

E π A π π ª π. Ú ÌÌÈÎfi ÚÔÁÚ ÌÌ ÙÈÛÌfi. MÔÓÙÂÏÔappleÔ ËÛË. TfiÌÔ A' M ÓÔ PÔ ÌÂÏÈÒÙË Î È ÚÔÛÔÌÔ ˆÛË E π A π π ª π Ú ÌÌÈÎfi ÚÔÁÚ ÌÌ ÙÈÛÌfi Î È MÔÓÙÂÏÔappleÔ ËÛË TfiÌÔ A' M ÓÔ PÔ ÌÂÏÈÒÙË MÔÓÙÂÏÔappleÔ ËÛË Î È ÚÔÛÔÌÔ ˆÛË ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών

Διαβάστε περισσότερα

Tεχνολογία Λογισµικού II

Tεχνολογία Λογισµικού II Tεχνολογία Λογισµικού II ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος B' Tεχνολογία Λογισµικού II BAΣIΛEIOΣ

Διαβάστε περισσότερα

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex. ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 5 Ο Εργαστηριακό Μάθημα Δημιουργία Νέων Λεξικών Αναλυτών Σκοπός: Το μάθημα αυτό αναφέρεται: Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex. Στην

Διαβάστε περισσότερα

E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ. TfiÌÔ B' ÂÈÙÔ ÚÁÈÎ ÛÙ Ì Ù I

E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ. TfiÌÔ B' ÂÈÙÔ ÚÁÈÎ ÛÙ Ì Ù I E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ TfiÌÔ B' ÏÔ apple Ú ÎË ÂÈÙÔ ÚÁÈÎ ÛÙ Ì Ù I ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα APXEΣ TEXNOΛOΓIAΣ

Διαβάστε περισσότερα

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία Mεταγλωττιστές 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex Σκοπός: Το μάθημα αυτό αναφέρεται: στις κανονικές εκφράσεις στην δομή και το περιεχόμενο του αρχείου-εισόδου του flex Γενικά Θεωρία Κατά την

Διαβάστε περισσότερα

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Μεταγλωττιστές Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Εισαγωγή Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Μεταγλωττιστής Αρχικό πρόγραμμα (source program) Μεταγλωττιστής Τελικό πρόγραμμα (object program) Διαγνωστικά μηνύματα Μεταγλωττιστής Παίρνει σαν

Διαβάστε περισσότερα

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 2 Ο Εργαστηριακό Μάθημα Λεξική Ανάλυση Σκοπός: Το μάθημα αυτό αναφέρεται: Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση Στη δήλωση ορισμό κανονικών εκφράσεων Θεωρία Πρόλογος

Διαβάστε περισσότερα

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4) HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 1ο Εισαγωγή στο FLEX Ι ΑΣΚΩΝ Αντώνιος Σαββίδης Slide

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË EÊ ÚÌÔÁ. TfiÌÔ B' NÂ ÚˆÓÈÎ ÎÙ Î È ÓÔ AÚÁ Ú ÎË EÊ ÚÌÔÁ

E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË EÊ ÚÌÔÁ. TfiÌÔ B' NÂ ÚˆÓÈÎ ÎÙ Î È ÓÔ AÚÁ Ú ÎË EÊ ÚÌÔÁ E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË EÊ ÚÌÔÁ TfiÌÔ B' ÓÔ AÚÁ Ú ÎË NÂ ÚˆÓÈÎ ÎÙ Î È EÊ ÚÌÔÁ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα

Διαβάστε περισσότερα

E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ. TfiÌÔ ' MÈ Ï ÓÔ ËÌ. XÚÈÛÙÔ Ô Ï ÎË B ÛÂÈ Â ÔÌ ÓˆÓ

E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ. TfiÌÔ ' MÈ Ï ÓÔ ËÌ. XÚÈÛÙÔ Ô Ï ÎË B ÛÂÈ Â ÔÌ ÓˆÓ E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ TfiÌÔ ' MÈ Ï ÓÔ ËÌ. XÚÈÛÙÔ Ô Ï ÎË B ÛÂÈ Â ÔÌ ÓˆÓ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Μεταφραστές Εισαγωγή Διδάσκων: Επικ. Καθ. Γεώργιος Μανής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

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

Εργαστήριο 08 Εισαγωγή στo Yacc Εργαστήριο 08 Εισαγωγή στo Yacc Θεωρία Σκοπός: Το μάθημα αυτό αναφέρεται: Στο εργαλείο κατασκευής συντακτικών αναλυτών, Yacc, στις δομές και συναρτήσεις που προσφέρει. Στη σύνταξη των αρχείων περιγραφής

Διαβάστε περισσότερα

ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ

ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ E π A π π ª π ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ TfiÌÔ ' AÓ Ú T fiáèô TÔ KfiÛÙÔ ÙË ÔÈfiÙËÙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών IAΣΦAΛIΣH ΠOIOTHTAΣ Θεµατική

Διαβάστε περισσότερα

B ÛÈÎ EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ

B ÛÈÎ EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ E π A π π ª π B ÛÈÎ EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ TfiÌÔ E' Aı Ó ÛÈÔ apple ÚÁ ÚË ÂÈÁÌ ÙÔÏË ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών IΣΦAΛIΣH

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛΗΡΟΦΟΡΙΚΗ. Θεµατική Eνότητα BΑΣΙΚΑ ΖΗΤΗΜΑΤΑ ΙΚΤΥΩΝ Η/Υ

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛΗΡΟΦΟΡΙΚΗ. Θεµατική Eνότητα BΑΣΙΚΑ ΖΗΤΗΜΑΤΑ ΙΚΤΥΩΝ Η/Υ ίκτυα Yπολογιστών I Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα και πληρότητα

Διαβάστε περισσότερα

Aισθητήρες και Mικροαισθητήρες

Aισθητήρες και Mικροαισθητήρες TÛÔ Î Ï (128Û.) 2/1/2004 14:03 ÂÏ 1 Aισθητήρες και Mικροαισθητήρες Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης.

Διαβάστε περισσότερα

TËÏÂÌ ÙÈÎ, È ÎÙ Î È KÔÈÓˆÓ

TËÏÂÌ ÙÈÎ, È ÎÙ Î È KÔÈÓˆÓ E π A π π ª π TËÏÂÌ ÙÈÎ, È ÎÙ Î È KÔÈÓˆÓ TfiÌÔ ' AÓ ÛÙ ÛÈÔ EÌ ÏˆÙ YappleÔÏÔÁÈÛÙ Î È KÔÈÓˆÓ, Information Society ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH

Διαβάστε περισσότερα

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ Σκοπός: Το μάθημα αυτό αναφέρεται: 1 Ο Εργαστηριακό Μάθημα Εισαγωγή Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών Στα στάδια της μεταγλώττισης Θεωρία Πρόλογος Αφιερώνεται το πρώτο εργαστηριακό

Διαβάστε περισσότερα

OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ

OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ E π A π Δ π Δ ª π OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ Aı Ó ÛÈÔ X ÛÈ Îfi ËÌ ÙÚÈÔ ÂÔ ˆÚ ÎfiappleÔ ÏÔ TfiÌÔ ' XÚÔÓÈÎfi Î È OÈÎÔÓÔÌÈÎfi ÚÔÁÚ ÌÌ ÙÈÛÌfi ŒÚÁˆÓ Xρονικός και Oικονομικός Προγραμματισμός Έργων Σημείωση Το

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË

ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË E π A π π ª π ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË TfiÌÔ A' B Û ÏÂÈÔ KfiÌË È ÎÙÈÎ ÙË ÏËÚÔÊÔÚÈÎ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

Σχεδιασμός και Eκτίμηση Έργων

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

Διαβάστε περισσότερα

Eισαγωγή στην Πυρηνική Φυσική

Eισαγωγή στην Πυρηνική Φυσική Eισαγωγή στην Πυρηνική Φυσική Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα

Διαβάστε περισσότερα

Ψηφιακή επεξεργασία εικόνων και σηµάτων

Ψηφιακή επεξεργασία εικόνων και σηµάτων Ψηφιακή επεξεργασία εικόνων και σηµάτων Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική

Διαβάστε περισσότερα

ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ

ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ E π A π π ª π ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ TfiÌÔ E' AÓ Ú T fiáèô ÛÂÈ ÚÔÌËıÂ Ù AÁÔÚ ÛÙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών IAΣΦAΛIΣH ΠOIOTHTAΣ Θεµατική

Διαβάστε περισσότερα

E π A π π ª π º ÛÈÎÔ ËÌÂ. TfiÌÔ ' Ù ÙÈÛÙÈÎ ÂÚÌÔ Ó ÌÈÎ BÏ ÛË M Ú ÓÙ

E π A π π ª π º ÛÈÎÔ ËÌÂ. TfiÌÔ ' Ù ÙÈÛÙÈÎ ÂÚÌÔ Ó ÌÈÎ BÏ ÛË M Ú ÓÙ E π A π π ª π º ÛÈÎÔ ËÌÂ TfiÌÔ ' BÏ ÛË M Ú ÓÙ Ù ÙÈÛÙÈÎ ÂÚÌÔ Ó ÌÈÎ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΣΠOY EΣ ΣTIΣ ΦYΣIKEΣ EΠIΣTHMEΣ Θεµατική Ενότητα

Διαβάστε περισσότερα

ιαχείριση και Ποιότητα Λογισµικού

ιαχείριση και Ποιότητα Λογισµικού ιαχείριση και Ποιότητα Λογισµικού Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα

Διαβάστε περισσότερα

K Ì ÚÈÓfi (232ÛÂÏ.) 23/3/ :03 ÂÏ 1. Mικροηλεκτρονική

K Ì ÚÈÓfi (232ÛÂÏ.) 23/3/ :03 ÂÏ 1. Mικροηλεκτρονική K Ì ÚÈÓfi (232ÛÂÏ.) 23/3/2004 13:03 ÂÏ 1 Mικροηλεκτρονική Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης.

Διαβάστε περισσότερα

ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ

ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ E π A π π ª π ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ TfiÌÔ A' ˆÎÚ ÙË K ÙÛÈÎ AÛÊ ÏÂÈ YappleÔÏÔÁÈÛÙÒÓ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH

Διαβάστε περισσότερα

È Â ÚÈÛË YÁÚÒÓ AappleÔ Ï ÙˆÓ

È Â ÚÈÛË YÁÚÒÓ AappleÔ Ï ÙˆÓ E π A π Δ π Δ ª π È Â ÚÈÛË YÁÚÒÓ AappleÔ Ï ÙˆÓ TfiÌÔ ' ËÌ ÙÚÈÔ ÂˆÚÁ Î ÎË YÁÚ ÂˆÚÁÈÎ Aapplefi ÏËÙ Yγρά Γεωργικά Aπόβλητα Σημείωση Το ΕΑΠ είναι υπεύθυνο για την επιμέλεια έκδοσης και την ανάπτυξη των κειμένων

Διαβάστε περισσότερα

E π A π π ª π. ÚÔÁÚ ÌÌ ÙÈÛÌfi. ÁÈ ÙËÓ ÔÈfiÙËÙ. TfiÌÔ A' Â È ÛÌfi. ÁÈ ÙËÓ ÔÈfiÙËÙ. AÁÁÂÏfiappleÔ ÏÔ

E π A π π ª π. ÚÔÁÚ ÌÌ ÙÈÛÌfi. ÁÈ ÙËÓ ÔÈfiÙËÙ. TfiÌÔ A' Â È ÛÌfi. ÁÈ ÙËÓ ÔÈfiÙËÙ. AÁÁÂÏfiappleÔ ÏÔ E π A π π ª π ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ TfiÌÔ A' X Ú Ï ÌappleÔ AÁÁÂÏfiappleÔ ÏÔ Â È ÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών IAΣΦAΛIΣH

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Προγραµµατισµός Η/Υ Ο προγραµµατισµός είναι η διατύπωση του αλγορίθµου σε µορφή κατανοητή από τον Η/Υ ώστε να τον εκτελέσει («τρέξει» όπως λέµε στην ορολογία της

Διαβάστε περισσότερα

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

Παρουσίαση του εργαλείου FLEX Παρουσίαση του εργαλείου FLEX Γεννήτρια Λεκτικών Αναλυτών Α Φάση Λεκτική Ανάλυση Χαρακτηριστικά του flex Γεννήτρια λεκτικών αναλυτών σε C/C++ (fast lexical analyzer generator). Βασισµένο στο εργαλείο του

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

EÈ ÈÎ Ì Ù ÁÈ ÙËÓ ÔÈfiÙËÙ

EÈ ÈÎ Ì Ù ÁÈ ÙËÓ ÔÈfiÙËÙ E π A π π ª π EÈ ÈÎ Ì Ù ÁÈ ÙËÓ ÔÈfiÙËÙ TfiÌÔ B' NÈÎfiÏ Ô TÚ ÏÈ EappleÈıÂÒÚËÛË ÛÙËÌ ÙˆÓ ÁÈ ÙËÓ ÔÈfiÙËÙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών IAΣΦAΛIΣH ΠOIOTHTAΣ

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα. ΚΕΦΑΛΑΙΟ 7 ο 1. Επιλογή της κατάλληλης γλώσσας προγραµµατισµού Εκατοντάδες γλώσσες προγραµµατισµού χρησιµοποιούνται όπως αναφέρθηκε σήµερα για την επίλυση των προβληµάτων µε τον υπολογιστή, τη δηµιουργία

Διαβάστε περισσότερα

ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ

ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ E π A π π ª π ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ TfiÌÔ B' ˆÎÚ ÙË K ÙÛÈÎ AÛÊ ÏÂÈ ÈÎÙ ˆÓ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική

Διαβάστε περισσότερα

Eιδικά Θέµατα υναµικής των Kατασκευών και Σεισµικής Mηχανικής

Eιδικά Θέµατα υναµικής των Kατασκευών και Σεισµικής Mηχανικής M E KO. E. (192Û.) 23/5/2003 15:36 ÂÏ 1 Eιδικά Θέµατα υναµικής των Kατασκευών και Σεισµικής Mηχανικής Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη

Διαβάστε περισσότερα

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

HY340, 2009 Α. Σαββίδης Slide 2 / 26. HY340, 2009 Α. Σαββίδης Slide 3 / 26. HY340, 2009 Α. Σαββίδης Slide 4 / 26 HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 1ο Εισαγωγή στο FLEX ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης Slide

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Λογισμικό Συστήματος. Κλειώ Σγουροπούλου Λογισμικό Συστήματος Κλειώ Σγουροπούλου Λογισμικό συστήματος Λειτουργικό σύστημα Μεταφραστές γλώσσας (translators) Διερμηνείς (interpreters) Μεταγλωττιστές (compilers) Εκδότες (editors) Φορτωτές (loaders)

Διαβάστε περισσότερα

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή. ΑΕσΠΠ-Κεφ6. Εισαγωγή στον προγραμματισμό 1 ΣΩΣΤΟ ΛΑΘΟΣ 1. Οι γλώσσες προγραμματισμού αναπτυχθήκαν με σκοπό την επικοινωνία ανθρώπου μηχανής. 2. Αλγόριθμος = Πρόγραμμα + Δομές Δεδομένων 3. Ένα πρόγραμμα

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ

OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ E π A π Δ π Δ ª π OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ TfiÌÔ A' ÂÒÚÁÈÔ KÔÚÚ Aı Ó ÛÈÔ X ÛÈ Îfi OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ Oικονομική Tεχνικών Έργων Σημείωση Το ΕΑΠ είναι υπεύθυνο για την επιμέλεια έκδοσης και την ανάπτυξη

Διαβάστε περισσότερα

È Â ÚÈÛË ÙÂÚÂÒÓ AappleÔ Ï ÙˆÓ

È Â ÚÈÛË ÙÂÚÂÒÓ AappleÔ Ï ÙˆÓ E π A π Δ π Δ ª π È Â ÚÈÛË ÙÂÚÂÒÓ AappleÔ Ï ÙˆÓ ËÌ ÙÚÈÔ ÂˆÚÁ Î ÎË TfiÌÔ ' ÙÂÚ ˆÚÁÈÎ Aapplefi ÏËÙ Στερεά Γεωργικά Aπόβλητα Σημείωση Το ΕΑΠ είναι υπεύθυνο για την επιμέλεια έκδοσης και την ανάπτυξη των

Διαβάστε περισσότερα

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Γιώργος Δημητρίου Μάθημα 1 ο Γλώσσα - Μετάφραση Γλώσσα προγραμματισμού = Αναπαράσταση αλγορίθμων Ευκολία χρήσης Ακρίβεια και πληρότητα περιγραφής, όχι διφορούμενη! Μία περιγραφή για όλες τις μηχανές Μετάφραση

Διαβάστε περισσότερα

Μεταγλωττιστές Ενότητα 1: Εισαγωγή

Μεταγλωττιστές Ενότητα 1: Εισαγωγή Μεταγλωττιστές Ενότητα 1: Εισαγωγή Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,

Διαβάστε περισσότερα

Aρχές Διοίκησης Επιχειρήσεων

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

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

ÚÔËÁÌ Ó EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ

ÚÔËÁÌ Ó EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ E π A π π ª π ÚÔËÁÌ Ó EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ TfiÌÔ ' NÈÎfiÏ Ô ÔÁÔı ÙË È ÈÎ Û Â Î È T ÓÈÎ ÓÂ Ô BÂÏÙ ˆÛË ÙË ÔÈfiÙËÙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας

Διαβάστε περισσότερα

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το Σηµαντικά σηµεία κεφαλαίου Τα τρία στάδια επίλυσης ενός προβλήµατος: Ακριβής προσδιορισµό του προβλήµατος Ανάπτυξη του αντίστοιχου αλγορίθµου. ιατύπωση του αλγορίθµου σε κατανοητή µορφή από τον υπολογιστή.

Διαβάστε περισσότερα

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00 ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2011-2012 Προθεσµία: 8/1/12, 22:00 Περιεχόµενα Διαβάστε πριν ξεκινήσετε Εκφώνηση άσκησης Οδηγίες αποστολής άσκησης Πριν ξεκινήσετε (ΔΙΑΒΑΣΤΕ

Διαβάστε περισσότερα

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

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο Εισαγωγή στο Bison Μεταγλωττιστές, Χειμερινό εξάμηνο 2016-2017 Συντακτική Ανάλυση Αποτελεί την δεύτερη φάση της μετάφρασης. Εύρεση της σχέσης που υπάρχει των λεκτικών μονάδων ενός προγράμματος. Παράδειγμα

Διαβάστε περισσότερα

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Ποιες γλώσσες αναφέρονται ως φυσικές και ποιες ως τεχνητές; Ως φυσικές γλώσσες αναφέρονται εκείνες οι οποίες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων,

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

KO MA E I O OIH H 30/5/ :32 ÂÏ 1. Eπιστήµη Πολυµερών

KO MA E I O OIH H 30/5/ :32 ÂÏ 1. Eπιστήµη Πολυµερών KO MA E I O OIH H 30/5/2003 12:32 ÂÏ 1 Eπιστήµη Πολυµερών Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης.

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH. Θεµατική Ενότητα ΣYΓXPONA IKTYA KAI YΠHPEΣIEΣ

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH. Θεµατική Ενότητα ΣYΓXPONA IKTYA KAI YΠHPEΣIEΣ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣYΓXPONA IKTYA KAI YΠHPEΣIEΣ Τόµος A' ίκτυα Υπολογιστών ΙΙ ΓΙΩΡΓΟΣ ΦΟΥΣΚΑΣ Ειδικός Λειτουργικός

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 7.1. Ανάπτυξη Προγράµµατος Τι είναι το Πρόγραµµα; Το Πρόγραµµα: Είναι ένα σύνολο εντολών για την εκτέλεση ορισµένων λειτουργιών από τον υπολογιστή.

Διαβάστε περισσότερα

ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË

ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË E π A π π ª π ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË TfiÌÔ B' B Û ÏÂÈÔ KfiÌË AÓ ÛÙ ÛÈÔ MÈÎÚfiappleÔ ÏÔ ÏËÚÔÊÔÚÈÎ ÛÙËÓ EÎapple  ÛË ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού. Κεφάλαιο 6 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία σημαντικά στάδια : Σον ακριβή προσδιορισμό του προβλήματος Σην ανάπτυξη του αντίστοιχου αλγορίθμου

Διαβάστε περισσότερα

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

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο Εισαγωγή στο Flex Μεταγλωττιστές, Χειμερινό εξάμηνο 2014-2015 Ημερομηνίες Διαδικαστικά Παρουσίαση Flex 7 Νοεμβρίου 15:00 17:00 Παρουσίαση Bison 28 Νοεμβρίου 15:00 17:00 Στοιχεία επικοινωνίας Λίστα μαθήματος

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Μάριος Αραποστάθης Καθηγητής πληροφορικής Βαρβάκειου Λύκειου http://users.sch.gr/mariosarapostathis 6.1 Η έννοια του

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Mηχανολογική Σχεδίαση

Mηχανολογική Σχεδίαση Mηχανολογική Σχεδίαση Σημείωση Το ΕΑΠ είναι υπεύθυνο για την επιμέλεια έκδοσης και την ανάπτυξη των κειμένων σύμφωνα με τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστημονική αρτιότητα και

Διαβάστε περισσότερα

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες Πίνακας Περιεχοµένων Πρόλογος...vii Κεφάλαιο 1:Βασικές εισαγωγικές έννοιες...1 1.1 Η δοµή του µεταγλωττιστή...2 1.2 Η διαδικασία µεταγλώττισης...3 1.2.1 Η Λεξική Ανάλυση...6 1.2.2 Η Συντακτική Ανάλυση...6

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές Γλώσσες Προγραμματισμού Μεταγλωττιστές Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου Δομή Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου Μεταγλωττιστές

Διαβάστε περισσότερα

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Μάθημα 3 ο Λεκτική Ανάλυση και Λεκτικοί Αναλυτές Γενικά για τη λεκτική ανάλυση Έννοιες που χρειαζόμαστε Τεχνικές λεκτικής ανάλυσης Πίνακας συμβόλων και διαχείριση λαθών Σχεδίαση λεκτικού

Διαβάστε περισσότερα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr Κανόνες Ομαλής Λειτουργίας Ερχόμαστε στην ώρα μας Δεν καπνίζουμε και τρώμε εντός της αίθουσας

Διαβάστε περισσότερα

Θεµέλια Γραµµικού Προγραµµατισµού

Θεµέλια Γραµµικού Προγραµµατισµού Θεµέλια Γραµµικού Προγραµµατισµού Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Μεταφραστές Λεκτικός αναλυτής Διδάσκων: Επικ. Καθ. Γεώργιος Μανής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

È Â ÚÈÛË ÙÂÚÂÒÓ AappleÔ Ï ÙˆÓ

È Â ÚÈÛË ÙÂÚÂÒÓ AappleÔ Ï ÙˆÓ E π A π Δ π Δ ª π È Â ÚÈÛË ÙÂÚÂÒÓ AappleÔ Ï ÙˆÓ A Ì ÓÙÈÔ ÎÔÚ ÏË KˆÓÛÙ ÓÙ ÓÔ KÔÌÓ ÙÛ TfiÌÔ A' OÈÎÈ Î Î È ÏÏ ÌË EappleÈÎ Ó Ó Aapplefi ÏËÙ Oικιακά και άλλα μη Eπικίνδυνα Aπόβλητα Σημείωση Το ΕΑΠ είναι υπεύθυνο

Διαβάστε περισσότερα

Σειρά Προβλημάτων 3 Λύσεις

Σειρά Προβλημάτων 3 Λύσεις Σειρά Προβλημάτων 3 Λύσεις Άσκηση 1 Να δώσετε ασυμφραστικές γραμματικές που να παράγουν τις πιο κάτω γλώσσες: (α) { xyw 1w 2 x, y {a, b}, w 1 = a n, w 2 = b 2n, όπου, αν x=y=a, τότε n = 2k, διαφορετικά

Διαβάστε περισσότερα

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ Εισαγωγή στις Αρχές της επιστήμης των ΗΥ Ερωτήσεις και ασκήσεις για επανάληψη 1. Τι είναι πρόβλημα (σελ 14) 2. Ποιες είναι οι κατηγορίες προβλημάτων με βάση την επίλυση; Δώστε τον ορισμό για κάθε μια κατηγορία.

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON Γλώσσες Προγραμματισμού Μεταγλωττιστές Συντακτική Ανάλυση με το Εργαλείο BISON Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου Δομή Γεννήτριες Συντακτικών Αναλυτών Bison/yacc

Διαβάστε περισσότερα

Γενικές Παρατηρήσεις. Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα (1) Το Λήµµα της Αντλησης. Χρήση του Λήµµατος Αντλησης.

Γενικές Παρατηρήσεις. Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα (1) Το Λήµµα της Αντλησης. Χρήση του Λήµµατος Αντλησης. Γενικές Παρατηρήσεις Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα () Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Υπάρχουν µη κανονικές γλώσσες, π.χ., B = { n n n }. Αυτό

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα