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

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

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

Transcript

1 Mεταγλωττιστές

2

3 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣXE IAΣMOΣ ΛOΓIΣMIKOY Τόµος A' Mεταγλωττιστές ΠANAΓIΩTHΣ ΠINTEΛAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών ΠATPA 2001

4 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣXE IAΣMOΣ ΛOΓIΣMIKOY Τόµος A' Mεταγλωττιστές Συγγραφή ΠANAΓIΩTHΣ ΠINTEΛAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών Κριτική Ανάγνωση IΩANNHΣ KOTPΩNHΣ Eπίκουρος Καθηγητής Τµήµατος Πληροφορικής Πανεπιστηµίου Aθηνών Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου ΣΩKPATHΣ KATΣIKAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Aιγαίου Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση ΓΕΡΑΣΙΜΟΣ MΩPAΪTHΣ Γλωσσική Επιµέλεια BAΣIΛIKH HMHTPOΠOYΛOY Τεχνική Επιµέλεια ΕΣΠΙ ΕΚ ΟΤΙΚΗ Ε.Π.Ε. Καλλιτεχνική Επιµέλεια Σελιδοποίηση TYPORAMA Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων ΟΜΑ Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 2001 ISBN: Kωδικός Έκδοσης: ΠΛH 24/1 Copyright 2000 για την Ελλάδα και όλο τον κόσµο ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Οδός Παπαφλέσσα & Υψηλάντη, Πάτρα Τηλ: (0610) , Φαξ: (0610) Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη.

5 ÂÚÈ fiìâó K º π 1 EÈÛ ÁˆÁ ÛÙÔ MÂÙ ÁψÙÙÈÛÙ Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή Γλώσσες προγραµµατισµού H διαδικασία µετάφρασης φόρτωσης εκτέλεσης H δοµή ενός µεταγλωττιστή Περάσµατα Mείωση του αριθµού των περασµάτων Λεκτική ανάλυση Συντακτική ανάλυση ηµιουργία ενδιάµεσου κώδικα Bελτιστοποίηση ηµιουργία κώδικα ιαχείριση πινάκων και σηµασιολογική ανάλυση ιαχείριση λαθών Eργαλεία µεταγλωττιστών Bootstrapping Σύνοψη K º π 2 ÂÎÙÈÎ AÓ Ï ÛË Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή Σχεδιασµός λεκτικού αναλυτή Kανονικές εκφράσεις Συµβολοσειρές και γλώσσες: Oρισµοί... 39

6 6 META øtti TE Oρισµός κανονικών εκφράσεων Πεπερασµένα αυτόµατα Aυτόµατη κατασκευή ενός λεκτικού αναλυτή Περιγραφή του Lex Σύνοψη K º π 3 ÓÙ ÎÙÈÎ ÙÔÈ Â ÏˆÛÛÒÓ ÚÔÁÚ ÌÌ ÙÈÛÌÔ Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Γραµµατικές Context Free υνατότητες των Context Free Γραµµατικών (CF) ηµιουργία των δένδρων ανίχνευσης ιφορούµενες γραµµατικές Iεραρχία γλωσσών κατά Chomsky Σύνοψη K º π 4 B ÛÈÎ T ÓÈÎ ÓÙ ÎÙÈÎ AÓ Ï ÛË Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή σε συντακτική ανάλυση Aνίχνευση Shift Reduce Operator precedence ανίχνευση Tοp down ανίχνευση Προβλήµατα σε Top down ανίχνευση Aπαλοιφή της άµεσης αριστερής αναδροµής Aναλυτές αναδροµικής κατάβασης Aναλυτές LL Σύνοψη... 86

7 EPIEXOMENA 7 K º π 5 Ó ÎÂ Ì fiïˆó Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή Πίνακες συµβόλων: Περιεχόµενα Πίνακες συµβόλων: Oργάνωση Tαξινοµηµένοι και µη ταξινοµηµένοι πίνακες Kερµατισµός διευθύνσεων Eπανακερµατισµός διευθύνσεων Aλυσιδωτός κερµατισµός Συναρτήσεις κερµατισµού ενδρικά δοµηµένοι πίνακες Πίνακες συµβόλων για γλώσσες µε δοµές Block Άνοιγµα και κλείσιµο των Blocks Eισαγωγή και εισαγωγή Kερµατισµός διευθύνσεων και δοµή Block Σύνοψη K º π 6 ÓÙ ÎÙÈÎ K Ù ı ÓfiÌÂÓË MÂÙ ÊÚ ÛË Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Σηµασιολογικές ρουτίνες Yλοποίηση των συντακτικά κατευθυνόµενων µεταφράσεων Eνδιάµεσος κώδικας Postfix κώδικας ένδρα ανίχνευσης και συντακτικά δένδρα Kώδικας τριών διευθύνσεων και υλοποιήσεις του Mετάφραση εντολών εκχώρησης Mεταφραστικό σχήµα Eκφράσεις µε µίξη τύπων

8 8 META øtti TE 6.4 Mετάφραση λογικών εκφράσεων Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Aριθµητική αναπαράσταση Aναπαράσταση ελέγχου ροής Σύνοψη Mετάφραση εντολών ροής Mετάφραση δοµηµένων εντολών Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Mετάφραση της εντολής For Mετάφραση δοµηµένων εντολών Mετάφραση σε Top down ανίχνευση Σύνοψη K º π 7 ËÌÈÔ ÚÁ TÂÏÈÎÔ KÒ ÈÎ Στόχος, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις Eισαγωγή Προβλήµατα κατά τη δηµιουργία τελικού κώδικα Ένα µοντέλο υπολογιστή Ένας απλός δηµιουργός κώδικα O αλγόριθµος δηµιουργίας κώδικα ηµιουργία κώδικα για άλλους τύπους εντολών Eκχώρηση καταχωρητών Bελτιστοποίηση Peephole Σύνοψη Aπαντήσεις ασκήσεων αυτοαξιολόγησης Aπαντήσεις δραστηριοτήτων Bιβλιογραφία Γλωσσάριο

9 ÚfiÏÔÁÔ Η σχεδίαση και η κατασκευή ενός Μεταγλωττιστή ή ενός ιερµηνευτή για µια γλώσσα προγραµµατισµού δεν είναι ούτε απλό ούτε εύκολο εγχείρηµα. Το υλικό αυτής της Θεµατικής Υποενότητας προορίζεται για να σας διδάξει τις βασικές εισαγωγικές έννοιες και να σας µάθει πώς µπορείτε να κατασκευάσετε όχι έναν πλήρη Μεταγλωττιστή ή ιερµηνευτή, αλλά κάποια βασικά τµήµατα αυτού. ίνει έµφαση στα πρακτικά προβλήµατα σχεδίασης και υλοποίησης και όχι στην πραγµατικά πολύ εκτεταµένη θεωρία που υπάρχει στη διεθνή βιβλιογραφία. Για να καταφέρετε να κατανοήσετε πλήρως το υλικό αυτής της θεµατικής υποενότητας χρειάζεστε να έχετε αποκτήσει τουλάχιστον ενός χρόνου προγραµµατιστική εµπειρία σε κάποια γλώσσα προγραµµατισµού και να έχετε βασικές γνώσεις από οµές εδοµένων, γλώσσα Assembly και στοιχεία θεωρίας γλωσσών προγραµµατισµού. Μην ανησυχείτε όµως διότι το µέρος των βασικών αυτών γνώσεων που είναι προαπαιτούµενο θα σας δοθεί µέσα από την ίδια την θεµατική υποενότητα (εκτός βέβαια από την προγραµµατιστική εµπειρία ), ενώ πολύ περισσότερες θεωρητικές και πρακτικές γνώσεις θα τις αποκτήσετε από τις αντίστοιχες θεµατικές υποενότητες «οµές εδοµένων», «Αρχιτεκτονική Υπολογιστών», «Μικροεπεξεργαστές» και «Αυτό- µατα και Τυπικές Γλώσσες». Όσοι από εσάς θελήσετε να ασχοληθείτε σοβαρότερα µε Μεταγλωττιστές, ιερµηνευτές και γενικότερα µε Μεταφραστές θα έχετε την ευκαιρία να µάθετε περισσότερα πράγµατα και κυρίως να κατασκευάσετε ένα µικρό αλλά πλήρη Μεταγλωττιστή ή ιερµηνευτή στα πλαίσια της θεµατικής υποενότητας «Εργαστηριακές Ασκήσεις σε Μεταγλωττιστές». Τέλος, όσον αφορά τη βιβλιογραφία, επέλεξα για λόγους οικονοµίας χώρου να σας την παρουσιάσω συγκεντρωµένη στο τέλος του βιβλίου, αντί να την δίνω σε κάθε κεφάλαιο ξεχωριστά. Ο τόµος που έχετε στα χέρια σας, έχει γίνει προσπάθεια να γραφεί σύµφωνα µε τις οδηγίες και τα πρότυπα του Ελληνικού Ανοικτού Πανεπιστήµιου και προέρχεται από υλικό το οποίο διδάσκεται τόσο στο Τµήµα Μαθηµατικών όσο και στο Τµήµα Μηχανικών Η/Υ και Πληροφορικής του Πανεπιστηµίου Πατρών. Για να φτάσει ο τόµος στη µορφή αυτή βοήθησαν σηµαντικά τόσο τα σχόλια του Κριτικού Αναγνώστη, συνάδελφου Ι. Κοτρώνη, όσο και του επίσης συνάδελφου και Ακαδηµαϊκού Υπεύθυνου της Θεµατι-

10 10 META øtti TE κής Ενότητας Σ. Κάτσικα. Με την ευκαιρία αυτή θέλω να ευχαριστήσω θερµά και τους δύο. Κοιτάζοντας λίγο στα περιεχόµενα του τόµου, το πρώτο κεφάλαιο στοχεύει να σας δώσει µια σφαιρική και πλήρη εικόνα της οργάνωσης και λειτουργίας ενός Μεταγλωττιστή. Στη συνέχεια, στο κεφάλαιο 2 θα µελετήσετε ζητήµατα που αναφέρονται στη Λεκτική Ανάλυση και θα δείτε παραδείγµατα για το πώς κατασκευάζουµε ένα Λεκτικό Αναλυτή µε το χέρι (γράφοντας κώδικα) ή αυτόµατα χρησιµοποιώντας εργαλεία όπως το LEX. Στο κεφάλαιο 3 θα εξοικειωθείτε µε τις «γραµµατικές χωρίς συµφραζόµενα» και γενικότερα τις συντακτικές εκφράσεις και δοµές (π.χ. δένδρα ανίχνευσης) που είναι απαραίτητες για να προχωρήσετε στο κεφάλαιο 4, σε κάποιες βασικές τεχνικές Συντακτικής Ανάλυσης. Στη συνέχεια στο κεφάλαιο 5, θα εξοικειωθείτε µε τους πίνακες συµβόλων και τους τρόπους οργάνωσης και προσπέλασής τους σε ένα Μεταγλωττιστή ή ιερµηνευτή. Ακολούθως, στο κεφάλαιο 6, θα δείτε τρόπους εσωτερικής αναπαράστασης του υπό µεταγλώττιση αρχικού (πηγαίου) προγράµµατος, τη λεγόµενη «ενδιάµεση µορφή» του προγράµµατος, αλλά και τον ενδιάµεσο κώδικα που παράγεται από τις διάφορες κατηγορίες εντολών πηγαίου κώδικα. Τέλος, στο κεφάλαιο 7, θα δείτε διάφορες µορφές τελικού κώδικα και πώς αυτός παράγεται από ένα απλό αλγόριθµο δηµιουργίας κώδικα, για κάποιο υποθετικό υπολογιστή πολύ απλής αρχιτεκτονικής. Ο συγγραφέας Παναγιώτης Πιντέλας Καθηγητής Πληροφορικής Τµήµα Μαθηµατικών, Πανεπιστήµιο Πατρών

11 EÈÛ ÁˆÁ ÛÙÔ MÂÙ ÁψÙÙÈÛÙ Ùfi Ô Στόχος του κεφαλαίου αυτού είναι να σας παρουσιάσει σύντοµα και περιληπτικά τι είναι ο µεταγλωττιστής, πού χρειάζεται, πώς είναι δοµηµένος από διάφορες λειτουργικές ενότητες και πώς οι ενότητες αυτές επικοινωνούν και συνεργάζονται µεταξύ τους. Επίσης σας βοηθάει να έχετε µια πλήρη εικόνα για το περιεχόµενο των κεφαλαίων που θα ακολουθήσουν. 1 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Όταν θα έχετε µελετήσει το κεφάλαιο αυτό θα µπορείτε να: εξηγήσετε τι είναι ένας µεταγλωττιστής, περιγράψετε τις διαφορές µεταξύ µεταγλωττιστών, διερµηνευτών, µεταφραστών και προ επεξεργαστών, περιγράψετε εν συντοµία τη διαδικασία µετάφρασης φόρτωσης εκτέλεσης ενός προγράµµατος, περιγράψετε τις φάσεις (δοµή) ενός µεταλωττιστή και ενός διερµηνευτή, εξηγήσετε τι είναι τα «περάσµατα» (passes) και πώς τα µειώνουµε, περιγράψετε σε συντοµία τις έξι φάσεις της µεταφραστικής διαδικασίας που επιτελεί ένας µεταγλωττιστής, εξηγήσετε τι είναι τα tokens, εξηγήσετε τι είναι και πού χρησιµοποιείται ο πίνακας συµβόλων, αναφέρετε εργαλεία που χρησιµοποιούνται για την κατασκευή των µεταγλωττιστών, περιγράψετε µια ειδική περίπτωση διαδικασίας κατασκευής ενός µεταγλωττιστή (bootstrapping) περιγράψετε τα δένδρα ανίχνευσης και πού χρησιµοποιούνται. ŒÓÓÔÈ ÎÏÂÈ È Μεταφραστής, Μεταγλωττιστής, ιερµηνευτής, Προεπεξεργαστής,

12 12 KEºA AIO 1: EI A ø H TOY META øtti TE Πηγαίος Κώδικας, Τελικός Κώδικας, Περάσµατα, Tokens, Bootstrapping, Λεκτική Ανάλυση, Συντακτική Ανάλυση, Σηµασιολογική Ανάλυση, ηµιουργία Ενδιάµεσου Κώδικα, Βελτιστοποίηση Κώδικα και ηµιουργία Τελικού Κώδικα. EÈÛ ÁˆÁÈÎ apple Ú ÙËÚ ÛÂÈ Το κεφάλαιο αυτό θα σας βοηθήσει να αποκτήσετε µια συνοπτική µεν αλλά πλήρη εικόνα του τι είναι ένας Μεταγλωττιστής και ένας ιερµηνευτής, ποια είναι η δουλειά τους, πώς είναι δοµηµένοι και πώς διαφοροποιείται η λειτουργία του ενός από τον άλλο. Είναι το βασικότερο κεφάλαιο της θεµατικής υποενότητας που έχετε στα χέρια σας µια και σας, δίνει συνολική και σφαιρική εικόνα της οργάνωσης, αλλά κυρίως των λειτουργιών, που επιτελούνται µέσα σε ένα µεταφραστικό σύστηµα (πρόγραµµα), όπως είναι ο Μεταγλωττιστής και ο ιερµηνευτής. εν θα πρέπει να έχετε ιδιαίτερη δυσκολία µε το κεφάλαιο αυτό µια και σας παρουσιάζει τις λειτουργίες των µεταφραστικών αυτών συστηµάτων από ένα υψηλό επίπεδο και µε αρκετά απλό τρόπο. Επειδή όµως στη συνέχεια των κεφαλαίων θα εξετάσουµε µία µία τις λειτουργίες αυτές και θα δούµε αρκετές από τις λεπτοµέρειές τους, θα σας διευκολύνει πολύ να έχετε στο µυαλό σας τη συνολική εικόνα της µεταφραστικής διαδικασίας. Έτσι, ξεκινάµε µε το να ορίσουµε τι είναι οι Μεταφραστές και ειδικότερα οι Μεταγλωττιστές και οι ιερµηνευτές, στη συνέχεια κάνουµε µια σύντοµη αναφορά στις γλώσσες προγραµµατισµού και τη διαδικασία µετάφρασης φόρτωσης εκτέλεσης ενός προγράµµατος για να δούµε κατόπιν τη δοµή ενός Μεταγλωττιστή και τη διαφοροποίησή του από ένα ιερµηνευτή. Κατόπιν βλέπουµε τις λειτουργίες τους και στο τέλος κάποια εργαλεία χρήσιµα στην κατασκευή µεταφραστικών συστηµάτων.

13 Eπ ø EÈÛ ÁˆÁ Ένας Μεταφραστής (Τranslator) είναι ένα πρόγραµµα το οποίο παίρνει στην είσοδο ένα πρόγραµµα γραµµένο σε κάποια γλώσσα προγραµµατισµού (αρχική γλώσσα source language) και δίνει στην έξοδο ένα πρόγραµµα σε κάποια άλλη γλώσσα (τελική γλώσσα target or object language). Αν η αρχική γλώσσα είναι υψηλού επιπέδου, όπως C, ΡL/Ι, FΟRΤRAΝ, ΡASCAL κ.λπ., και η τελική γλώσσα είναι χαµηλού επιπέδου, όπως Assembly ή γλώσσα µηχανής, τότε ο µεταφραστής λέγεται Συµβολοµεταφραστής ή Μεταγλωττιστής (Compiler). Παλαιότερα οι Μεταγλωττιστές εθεωρούντο εξαιρετικά χρονοβόρα προγράµµατα για να τα γράψει κανείς. Σήµερα γράφονται µε αρκετά λιγότερη προσπάθεια χάρις στην κατανόηση της οργάνωσης της διαδικασίας συµβολοµετάφρασης (Compilation) και την ανάπτυξη προγραµµατιστικών εργαλείων για την υλοποίηση των διαφόρων τµηµάτων των Μεταγλωττιστών. Στις περισσότερες περιπτώσεις συµβολοµετάφρασης, οι µεταφραστές µετασχηµατίζουν το πρόγραµµα από την αρχική γλώσσα σε µια πιο απλοποιηµένη, που λέγεται ενδιάµεσος κώδικας ή γλώσσα (Ιntermediate Code or Language). Μπορούµε να φαντασθούµε τον ενδιάµεσο κώδικα σαν µια γλώσσα µηχανής ενός υποθετικού υπολογιστή, ο οποίος µπορεί να εκτελέσει τον κώδικα αυτόν. Ο µεταφραστής, ο οποίος µετασχηµάτησε το αρχικό πρόγραµµα στην ενδιά- µεση γλώσσα και στη συνέχεια εκτελεί τη γλώσσα αυτή, καλείται ιερµηνευτής (Ιnterpreter). Aντίθετα, ο µεταφραστής µε βάση την ενδιάµεση γλώσσα θα συνεχίσει για να κατασκευάσει τελικό κώδικα. Μερικοί ιερµηνευτές εκτελούν τις εντολές της αρχικής γλώσσας χωρίς να κατασκευάζουν ενδιά- µεσο κώδικα (π.χ. Βasic Ιnterpreters ή και JCL Ιnterpreters). Οι Ιnterpreters είναι συνήθως µικρότεροι σε µέγεθος από τους Μεταγλωττιστές, αλλά και αρκετές φορές πιο αργοί στην εκτέλεση των αρχικών προγραµµάτων. Υπάρχουν και διάφοροι άλλοι τύποι µεταφραστών. Ο Assembler µεταφράζει προγράµµατα από γλώσσα Assembly ή assembly σε γλώσσα µηχανής, ενώ ένας Προεπεξεργαστής (Ρreprocessor) µετασχηµατίζει προγράµµατα από µια υψηλή γλώσσα σε ισοδύναµα προγράµµατα µιας άλλης υψηλής γλώσσας. Π.χ. Ρreprocessor για δοµηµένη (structured) Fortran, preprocessor για γραφήµατα (graphs) σε Fortran, Ρascal κ.λπ.

14 14 KEºA AIO 1: EI A ø H TOY META øtti TE 1.2 ÏÒÛÛÂ ÚÔÁÚ ÌÌ ÙÈÛÌÔ Συνέπεια των δυσκολιών του προγραµµατισµού σε γλώσσα µηχανής υπήρξε το πρώτο βήµα ανάπτυξης που είναι οι συµβολικές γλώσσες Assembly. Σ αυτές τις γλώσσες αντικαταστάθηκαν οι λειτουργικοί κώδικες των εντολών και οι διευθύνσεις δεδοµένων και εντολών µε συµβολικά ονόµατα για ευκολία του προγραµµατιστή. Το συµβολικό πρόγραµµα Assembly πρέπει πρώτα να µεταφραστεί σε γλώσσα µηχανής από κάποιον Assembler και κατόπιν να εκτελεστεί. Τα macros (macro εντολές) είναι ψευδοεντολές Assembly, οι οποίες µετασχηµατίζονται από το Μacro Assembler σε µια ακολουθία εντολών Assembly και ίσως και άλλων macros. Οι περισσότεροι σύγχρονοι Assemblers είναι στην πραγ- µατικότητα Μacro Assemblers. Οι γλώσσες υψηλού επιπέδου αποτελούν τη φυσική συνέχεια στην εξέλιξη των γλωσσών προγραµµατισµού και ήλθαν για να ανακουφίσουν τον προγραµµατιστή από λεπτοµέρειες που δεν είχαν καµιά σχέση µε το προγραµ- µατιζόµενο πρόβληµα, αλλά και να διευκολύνουν χρήστες, οι οποίοι δεν είχαν άµεση επαφή µε Assemblers και ούτε υπήρχε λόγος να έχουν. Το βασικό πλεονέκτηµα των γλωσσών προγραµµατισµού υψηλού επιπέδου είναι ότι επιτρέπουν στο χρήστη να εκφράζει (προγραµµατίζει) αλγόριθµους σε µορφές είτε κοντά στα µαθηµατικά είτε κοντά στη φυσική του γλώσσα, είτε ακόµα και κοντά στη λύση του προβλήµατος που εκφράζει ο αλγόριθ- µος. Το πρόβληµα που εισάγεται µε τις υψηλές γλώσσες είναι ότι το µεταφραστικό πρόγραµµα (Μεταγλωττιστής) είναι πολύ πιο πολύπλοκο από οποιονδήποτε Μacro Assembler H È ÈÎ Û ÌÂÙ ÊÚ ÛË ÊfiÚÙˆÛË ÂÎÙ ÏÂÛË Στο σχήµα 1.1 δίνεται διαγραµµατικά η διαδικασία Μετάφρασης Φόρτωσης Εκτέλεσης ενός προγράµµατος. Ο προγραµµατιστής γράφει σε κάποια γλώσσα υψηλού επιπέδου το πρόγραµµά του, το οποίο ουσιαστικά είναι η κωδικοποιηµένη λύση ενός προβλήµατος. Το πρόγραµµα αυτό στη συνέχεια µπορεί να χρειάζεται προεπεξεργασία ή όχι. Aν χρειάζεται, τότε θα τροφοδοτηθεί στον προεπεξεργαστή του Μεταγλωττιστή, αλλιώς τροφοδοτείται κατ ευθείαν στο Μεταγλωττιστή. Ο Μεταγλωττιστής εν γένει βγάζει έξοδο σε γλώσσα µηχανής υπό µορφή µεταθετού κώδικα (relocatable code). Ο µεταθετός κώδικας πιθανότατα περιέχει και αναφορές σε βιβλιοθήκες προκατασκευασµένων ρουτινών (π.χ. µαθηµατικές συναρτήσεις κ.λπ.).

15 ø ƒ ƒ ªª π ª À 15 Πρόγραµµα χρήστη Προεπεξεργαστής Mεταγλωττιστής Assembler Loader/Linker Ì 1.1 Eκτελέσιµο πρόγραµµα ιαδικασία Mετάφρασης Φόρτωσης Eκτέλεσης Οι αναφορές αυτές (procedure ή function calls) πρέπει να συνδεθούν µε τον αντίστοιχο κώδικα από τις βιβλιοθήκες (µέσω του Linker), ώστε να καταλήξουµε στον εκτελέσιµο κώδικα. Ο κώδικας σε εκτελέσιµη και µεταθετή µορφή µπορεί, µετά από αίτηµα του χρήστη πρός το λειτουργικό σύστηµα και τελικά πρός το φορτωτή (Loader), να εκτελεσθεί από τον υπολογιστή. Σε κάποιες λίγες περιπτώσεις ο µεταγλωττιστής παράγει κώδικα Assembly, οπότε στην περίπτωση αυτή χρειάζεται να κληθεί ο Assembler και η διαδικασία συνεχίζεται όπως παραπάνω. 1.3 H ÔÌ ÂÓfi ÌÂÙ ÁψÙÙÈÛÙ Ο µεταγλωττιστής (compiler) παίρνει στην είσοδο ένα πρόγραµµα και παράγει στην έξοδο µια ισοδύναµη ακολουθία εντολών µηχανής (σε µερικές περιπτώσεις παράγει ισοδύναµο πρόγραµµα σε Assembly). Η διαδικασία της µεταφραστικής αυτής δουλειάς είναι τόσο πολύπλοκη που συνήθως χωρίζεται σε διάφορες φάσεις (phases), (δείτε το σχήµα 1.2). Κάθε φάση είναι µια διαδικασία (µέρος της συνολικής µετάφρασης) η οποία παίρνει ως είσοδο κάποια µορφή του αρχικού προγράµµατος και παράγει στην έξοδο κάποια άλλη αναπαράσταση.

16 16 KEºA AIO 1: EI A ø H TOY META øtti TE Η πρώτη φάση Λεκτικός Aναλυτής (lexical analyzer ή scanner) χωρίζει χαρακτήρες της αρχικής γλώσσας (προγράµµατος) σε λογικές οµάδες tokens. Τα συνηθέστερα tokens είναι λέξεις κλειδιά (keywords), όπως DΟ ή ΙF, ονό- µατα µεταβλητών (identifiers), όπως Υ ή SPEED, σύµβολα τελεστών (operator symbols), όπως = ή *, και σύµβολα στίξης, όπως παρένθεση ή κόµµα. Η έξοδος του Λεκτικού Αναλυτή είναι µια ακολουθία από tokens που δίνεται ως είσοδος στην επόµενη φάση, του Συντακτικού Αναλυτή (Syntax Analyzer ή Parser). Τα tokens µπορεί να παριστάνονται µε ακέραιους κώδικες, π.χ. το DΟ µπορεί να παριστάνεται µε 1, το * µε 2 και ο «identifier» µε 3. Στην περίπτωση του token «identifier» χρειάζεται και µια δεύτερη ποσότητα που καθορίζει ποιος από τους identifiers του προγράµµατος αναφέρεται από το συγκεκριµένο token. Ο Συντακτικός Aναλυτής (Syntax Analyzer) οµαδοποιεί τα tokens σε συντακτικές δοµές. Π.χ. τα τρία tokens που παριστούν το A+Β µπορεί να οµαδοποιηθούν σε µια συντακτική δοµή που καλείται έκφραση (expression). Οι εκφράσεις µπορεί να οµαδοποιηθούν σε εντολές (statements). Συχνά η συντακτική δοµή θεωρείται σαν ένα δένδρο του οποίου τα φύλλα είναι τα tokens που λογικά ανήκουν µαζί. Στα πλαίσια της Σηµασιολογικής Ανάλυσης θα προσδιορισθεί ο τύπος του αποτελέσµατος Α+Β (π.χ. integer ή real) και θα εισαχθούν εντολές που κάνουν µετατροπές τύπων στα Α και Β, εάν και όπου χρειάζεται. Στη ηµιουργία του Ενδιάµεσου Κώδικα (Ιntermediate Code Generation) χρησιµοποιείται η δοµή που παράγεται από τον Συντακτικό Αναλυτή για να κατασκευαστεί µια σειρά από απλές εντολές. Οι εντολές αυτές συχνά αποτελούνται από έναν τελεστή (operator) και µικρό αριθµό από έντελα (operands) και µπορούν να θεωρηθούν σαν ένα είδος macro εντολών. Η βασική διαφορά µεταξύ ενδιάµεσου κώδικα και κώδικα Assembly είναι ότι στον ενδιάµεσο κώδικα δεν χρειάζεται να γίνει αναφορά στους Καταχωρητές (registers) που θα χρησιµοποιηθούν στις διάφορες πράξεις. Η Βελτιστοποίηση του Κώδικα (Code Οptimization) είναι µια προαιρετική φάση που χρησιµοποιείται για να βελτιώσει τον ενδιάµεσο κώδικα ώστε το τελικό (object) πρόγραµµα να λειτουργεί τρέχει πιο γρήγορα και/ή να καταλαµβάνει λιγότερο χώρο στη µνήµη. Η τελική φάση ηµιουργία Κώδικα (Code Generation) παράγει τον τελικό κώδικα (object code), αποφασίζοντας για τις θέσεις µνήµης των δεδοµέ-

17 H ª ª ø π 17 Πηγαίο πρόγραµµα Λεκτική ανάλυση Συντακτική ανάλυση Σηµασιολογική ανάλυση Πίνακας συµβόλων ιαχείριση λαθών ηµιουργία ενδιάµεσου κώδικα Bελτιστοποίηση ενδιάµεσου κώδικα ηµιουργία τελικού κώδικα Tελικό πρόγραµµα Ì 1.2 Oι φάσεις ενός µεταγλωττιστή

18 18 KEºA AIO 1: EI A ø H TOY META øtti TE νων, διαλέγοντας κώδικα για την προσπέλαση κάθε δεδοµένου και επιλέγοντας τους καταχωρητές µε τους οποίους θα γίνει κάθε υπολογιστική πράξη. Aποτελεί τη δυσκολότερη φάση πρακτικά και θεωρητικά. Η διαχείριση Πινάκων (Τable Μanagement, Βookkeeping) διατηρεί πληροφορίες για τα ονόµατα που χρησιµοποιούνται στο πρόγραµµα, όπως τύπος (real, character κ.λπ.), µέγεθος και άλλες. Η φυσική δοµή που χρησιµοποιείται για τις πληροφορίες αυτές καλείται Πίνακας Συµβόλων (Symbol Τable). Ο Χειριστής Λαθών (Error Handler) καλείται κάθε φορά που διαπιστώνεται κάποια ανωµαλία στο πρόγραµµα. Εκδίδει διαγνωστικά µηνύµατα και ρυθ- µίζει τις πληροφορίες που τροφοδοτούνται από µια φάση σε άλλη, ώστε κάθε φάση να µπορεί να συνεχίσει την δουλειά της. Είναι λογική απαίτηση από κάθε µεταγλωττιστή η µεταφραστική διαδικασία να φτάνει µέχρι το τέλος της ώστε στα εσφαλµένα προγράµµατα να αποκαλύπτονται από το Μεταγλωττιστή όσο το δυνατόν περισσότερα από τα λάθη που υπάρχουν. Ένας Μεταγλωττιστής και ένας ιερµηνευτής µπορούν να θεωρηθούν ότι αποτελούνται (δοµικά) από δύο τµήµατα όπως φαίνεται στο Σχήµα 1.3. Το εµπρόσθιο τµήµα (front end) είναι ίδιο και στις δύο περιπτώσεις. Το οπίσθιο τµήµα, (back end) στην περίπτωση του µεταγλωττιστή περιλαµβάνει τις λειτουργίες που αναφέρονται στο Σχήµα 1.3 και περιγράφτηκαν προηγουµένως, ενώ στην περίπτωση του διερµηνευτή περιλαµβάνει τον εξοµειωτή που εκτελεί τις εντολές του ενδιάµεσου κώδικα. ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.1 Εξηγήστε τη δοµική διαφορά µεταξύ ενός µεταγλωττιστή και ενός διερ- µηνευτή.

19 H ª ª ø π 19 Πηγαίο πρόγραµµα Ì 1.3 Oι λειτουργίες µεταγλώττισης και διερµήνευσης Front End Λεξ. ανάλυση Συντ. ανάλυση Σηµασ. ανάλυση Eνδιαµ. κώδικας Bελτιστ. ενδ. κώδικα ιαχ. µνήµης ηµ. τελικού κώδικα Bελτιστ. τελ. κώδικα Eνδιάµ. κωδ. υποθετικής µηχανής Eξοµοιωτής της υποθετικής µηχανής Mεταγλωττιστής Back End ιερµηνευτής Back End ιασύνδεση Eκτελέσιµο πρόγραµµα Eξοµοιωµένη εκτέλεση

20 20 KEºA AIO 1: EI A ø H TOY META øtti TE ÂÚ ÛÌ Ù Κατά την υλοποίηση ενός Μεταγλωττιστή κοµµάτια από µια ή περισσότερες φάσεις συνδυάζονται σε ένα πέρασµα (pass). Το πέρασµα διαβάζει το πηγαίο πρόγραµµα ή την έξοδο του προηγούµενου περάσµατος, κάνει τους µετασχηµατισµούς που ορίζονται από τις φάσεις του και γράφει το αποτέλεσµα σε κάποιο προσωρινό αρχείο, το οποίο ενδεχοµένως διαβάζεται από κάποιο επόµενο πέρασµα. Ο αριθµός των περασµάτων και η οµαδοποίηση των φάσεων σε περάσµατα, υπαγορεύονται από τη συγκεκριµένη γλώσσα και µηχανή στην οποία θα λειτουργήσει ο Μεταγλωττιστής. Μερικές γλώσσες, όπως Algol 68 και ΡL/Ι, χρειάζονται δύο τουλάχιστον περάσµατα. Μεταγλωττιστές που τρέχουν σε υπολογιστές µε µικρή µνήµη συνήθως χρειάζονται περισσότερα περάσµατα από εκείνους που τρέχουν σε υπολογιστές µεγάλης µνήµης. Aκόµη, τα περισσότερα περάσµατα ενός Μεταγλωττιστή υπαγορεύουν και µεγαλύτερο χρόνο για τη µετάφραση των προγραµµάτων MÂ ˆÛË ÙÔ ÚÈıÌÔ ÙˆÓ appleâú ÛÌ ÙˆÓ ηµιουργείται το ερώτηµα πώς διάφορες φάσεις µπορούν να συνδυαστούν σε ένα πέρασµα χωρίς γράψιµο και διάβασµα σε ενδιάµεσο (προσωρινό) αρχείο. Τυπική απάντηση δίνει ο Λεκτικός Αναλυτής όπου ένας µικρός βοηθητικός χώρος (buffer) π.χ. ένα διάνυσµα στη µνήµη χρησιµοποιείται σαν διάµεσο (Ιnterface) µεταξύ των περασµάτων. Σε άλλες περιπτώσεις ενσω- µατώνονται φάσεις σε ένα πέρασµα µε την τεχνική του πισωµπαλώµατος («backpatching»). Ú ÂÈÁÌ 1.1 Ένας Assembler µπορεί να έχει κάποια εντολή της µορφής «GΟΤΟ L», η οποία προηγείται κάποιας εντολής που έχει ετικέτα (Label) L, π.χ. L:ADD Χ. Ένας Assembler 2 περασµάτων χρησιµοποιεί το πρώτο πέρασµα για να εισάγει στον Πίνακα Συµβόλων µια λίστα από όλους τους identifiers (ετικέτες (Labels) εντολών και ονόµατα δεδοµένων µεταβλητών) µαζί µε τις διευθύνσεις µηχανής (σχετικές ως προς την αρχή του προγράµµατος) που τους αντιστοιχούν. Κατόπιν το δεύτερο πέρασµα αντικαθιστά τους µνηµονικούς κώδικες λειτουργίας, όπως GΟΤΟ, µε τα ισοδύναµά τους σε γλώσσα µηχανής και τους identifiers µε τις διευθύνσεις µηχανής. Aπό την άλλη µεριά ένας Assembler ενός περάσµατος µπορεί να δηµιουργήσει ένα «σκελετό» της GΟΤΟ L και να προσθέσει τη διεύθυνση µηχανής

21 H ª ª ø π 21 της GΟΤΟ L σε µια λίστα εντολών που πρόκειται να πισωµπαλωθούν (backpatched) µόλις η διεύθυνση µηχανής της επιγραφής L γίνει γνωστή στον Assembler. Η λίστα αυτή µπορεί να «κρέµεται» σαν δοµή διασυνδεµένης λίστας, από µια θέση που σχετίζεται µε την επιγραφή L στον Πίνακα Συµβόλων. Ο Assembler µόλις συναντήσει την εντολή «L:ADD Χ» ψάχνει τη λίστα των εντολών που αναφέρονται στην L και βάζει την διεύθυνση της L:ADD Χ στο πεδίο διεύθυνσης όλων αυτών των εντολών. Επόµενες αναφορές στην L χρησιµοποιούν τη διεύθυνση της L που είναι πλέον γνωστή. Η «Aπόσταση» του backpatching είναι συνήθως µικρή για τους περισσότερους µεταγλωττιστές. Σαν απόσταση στο παραπάνω παράδειγµα του Assembler µπορούµε να θεωρήσουµε την απόσταση µεταξύ των εντολών GOTO L και L:ADD X. Η µείωση του αριθµού των περασµάτων σ ένα µεταγλωττιστή στοχεύει να βοηθήσει στην κατασκευή: α) πιο «µικρού» µεταγλωττιστή, ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.2 β) πιο «τµηµατοποιηµένου» (άρα πιο εύκολα να γραφεί) µεταγλωττιστή, γ) πιο «γρήγορου» µεταγλωττιστή, όσον αφορά το χρόνο που χρειάζεται για να µεταφράσει το πρόγραµµά σας, δ) πιο «γρήγορου», όσον αφορά το χρόνο που χρειάζεται για να εκτελεσθεί το πρόγραµµά σας, µετά τη µετάφρασή του από το µεταγλωττιστή, ε) πιο εύκολου (ευκολία να κατασκευασθεί) και πιο συντηρήσιµου µεταγλωττιστή. Ποια από τις πέντε παραπάνω περιπτώσεις θεωρείται ότι είναι η σωστή; Αιτιολογήστε την επιλογή σας.

22 22 KEºA AIO 1: EI A ø H TOY META øtti TE 1.4 ÂÎÙÈÎ Ó Ï ÛË Ο Λεκτικός Αναλυτής διαβάζει έναν έναν τους χαρακτήρες του αρχικού προγράµµατος και τους χωρίζει σε µια ακολουθία ατοµικών λεκτικών µονάδων που καλούνται tokens και που το καθένα παριστάνει µια σειρά χαρακτήρων που µπορούν να διαχειρίζονται από το Λεκτικό Aναλυτή σαν µοναδική λογική ενότητα. Π.χ. στην εντολή Fortran ΙF (5.ΕQ.ΜAΧ) GΟ ΤΟ 100 αναγνωρίζονται τα οκτώ tokens: ΙF, (, 5,.ΕQ., ΜAΧ, ), GΟΤΟ, 100 Κάθε token αποτελείται από δύο στοιχεία, τον τύπο (type) και την τιµή (value) του, η οποία µπορεί να είναι κενή για κάποιο τύπο (π.χ. σύµβολα στίξης, keywords). Ο Λεκτικός Aναλυτής και ο Συντακτικός Aναλυτής συχνά ανήκουν στο ίδιο πέρασµα. Στην περίπτωση αυτή ο Λεκτικός Aναλυτής λειτουργεί είτε κάτω από το Συντακτικό Aναλυτή σαν υπορουτίνα αυτού είτε και οι δύο µαζί σαν συν ρουτίνες (coroutines). Ο Συντακτικός Αναλυτής ζητά από τον Λεκτικό Αναλυτή το επόµενο token, όποτε χρειάζεται ένα, και ο Λεκτικός Aναλυτής του επιστρέφει έναν κώδικα για το token που βρήκε. Aν το token είναι identifier ή άλλο token, το οποίο µπορεί να έχει κάποια τιµή, τότε ο Λεκτικός Aναλυτής επιστρέφει στο Συντακτικό Aναλυτή και την τιµή του. Η τιµή αυτή είναι συνήθως ένας δείκτης που δείχνει τη θέση του Πίνακα Συµβόλων όπου βρίσκεται η τιµή (value) του token. Ο δείκτης αυτός, ουσιαστικά επιστρέφεται στο Λεκτικό Aναλυτή από τις ρουτίνες που χειρίζονται τον πίνακα συµβόλων και οι οποίες κλήθηκαν από τον Λεκτικό Aναλυτή. Για να προσδιορίσει ο Λεκτικός Aναλυτής το επόµενο token χρειάζεται να ψάξει αρκετούς χαρακτήρες πέρα από τον τρέχοντα χαρακτήρα. Π.χ. στην εντολή ΙF (5.ΕQ.ΜAΧ ) GΟ ΤΟ 100 το βέλος δείχνει τη θέση της αρχής του επόµενου token µετά από τα «ΙF», «(» που θεωρούµε ότι έχουν ήδη αναγνωρισθεί από το Λεκτικό Aναλυτή και σταλεί στο Συντακτικό Aναλυτή.

23 π À 23 Για να αναγνωρίσει το «5» σαν token ο Λεκτικός Aναλυτής πρέπει να ψάξει τους χαρακτήρες µέχρι και τον «Q». Μπορείτε να εξηγήσετε γιατί; Ú ÛÙËÚÈfiÙËÙ ÓÙ ÎÙÈÎ Ó Ï ÛË ύο είναι οι βασικές λειτουργίες του Συντακτικού Aναλυτή. Ελέγχει ότι τα tokens που παίρνει από το Λεκτικό Aναλυτή υπακούουν στις συντακτικές προδιαγραφές της γλώσσας και επιπλέον σχηµατίζει και κάποια δενδρική µορφή για τις επόµενες φάσεις. Π.χ. σε πρόγραµµα Fortran η έκφραση A+/Β φθάνει στο Συντακτικό Aναλυτή σαν [id,n1] [+, ] [/, ] [id, n2] ο οποίος εντοπίζει δύο συνεχόµενους τελεστές (+, /) και απορρίπτει την έκφραση. Η δενδρική µορφή (Ρarse Τree ένδρο Ανίχνευσης) π.χ. της έκφρασης A/Β*C έχει δύο δυνατές παραστάσεις (α) και (β) (Σχήµα 1.4). Το ποια από τις δύο θα χρησιµοποιηθεί είναι συνάρτηση των προδιαγραφών της γλώσσας και πιο συγκεκριµένα, της συντακτικής δοµής της γλώσσας. Ακριβέστερα, είναι συνάρτηση της προτεραιότητας και προσεταιριστικότητας των τελεστών, όπως αυτές εκφράζονται µέσα από την τυπική σύνταξη της γλώσσας. Στο σχήµα 1.4(α), η έκφραση υπολογίζεται σαν A/(B*C), ενώ στο (β) σαν (A/B)*C. Το (α) είναι σωστό µε βάση τη σύνταξη της γλώσσας APL και το (β) λάθος. Ενώ µε βάση την σύνταξη της γλώσσας Fortran το (α) είναι λάθος και το (β) είναι σωστό. Όπως θα δούµε αργότερα οι context free γραµ- µατικές (grammars) είναι ιδιαίτερα χρήσιµες για τον καθορισµό συντακτικών δοµών. Και ακόµη, είναι δυνατόν για συγκεκριµένους τύπους expr expr expr expr expr expr expr expr expr expr A / B * C A / B * C (α) APL (β) FORTRAN Ì 1.4 ένδρα Aνίχνευσης της A/B*C

24 24 KEºA AIO 1: EI A ø H TOY META øtti TE context free γραµµατικών, να κατασκευασθούν αυτόµατα οι αντίστοιχοι Συντακτικοί Αναλυτές. Στο σχήµα 1.5 φαίνεται το ένδρο Ανίχνευσης της εντολής if (5 eq MAX) goto 100, µέρος των περιεχοµένων του Πίνακα Συµβόλων και τα tokens. ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.3 Κατασκεύασε όλα τα πιθανά ένδρα Ανίχνευσης της αριθµητικής έκφρασης: A * B / C 1.6 ËÌÈÔ ÚÁ ÂÓ È ÌÂÛÔ ÎÒ ÈÎ Η φάση της δηµιουργίας ενδιάµεσου κώδικα µετασχηµατίζει το ένδρο Ανίχνευσης (parse tree) σε µια αναπαράσταση του αρχικού προγράµµατος σε κάποια ενδιάµεση γλώσσα. Ο Κώδικας τριών ιευθύνσεων (Τhree address Code), είναι µια δηµοφιλής µορφή ενδιάµεσης γλώσσας, όπου µια τυπική εντολή έχει τη µορφή A:=Β op C statement Πίνακας συµβόλων If statement 341 const, integer, val = label, val = 100 if ( relation ) statement 729 id, integer, val = MAX expr rel op expr goto label Ì 1.5 Aνίχνευση της εντολής if (5eq MAX) goto 100 const eq id Tokens: [if,] [(,] [const, 341] [eq.] [id, 729] [),] [goto,] [label, 554]

25 ªπ Àƒ π π ª À ø π 25 Το ένδρο Ανίχνευσης (β) του Σχήµατος 1.4(β) θα µπορούσε να µετασχη- µατιστεί στην εξής σειρά εντολών τριών διευθύνσεων: Τ 1 := A / Β Τ 2 := Τ 1 * C όπου Τ 1 και Τ 2 είναι ονόµατα προσωρινών µεταβλητών. Aκόµη η ενδιάµεση γλώσσα χρειάζεται να έχει και απλές εντολές JΜΡ (ή GΟΤΟ), υπό συνθήκη και χωρίς συνθήκη, (π.χ. if A relop Β goto L). Υψηλότερου επιπέδου εντολές τύπου WΗΙLΕ DΟ ή ΙF ΤΗΕΝ ΕLSΕ µεταφράζονται σε χαµηλότερες εντολές συνθήκης (conditional statements) τριών διευθύνσεων. Ú ÂÈÁÌ 1.2 Η ακόλουθη εντολή WΗΙLΕ While A>Β & A<=2*Β 5 do A:=A+Β; έχει την εξής αντιστοιχία σε σειρά από tokens: [while, ] [id, n 1 ] [relop, >] [id, n 2 ] [comprelop, &] [id, n 1 ] [relop,<=] [con, n 3 ] [*, ] [id, n 2 ] [, ] [con, n 4 ] [do, ] [id, n 1 ] [=:, ] [id, n 1 ] [+, ] [id, n 2 ] [;, ] Το ένδρο Ανίχνευσης για την παραπάνω εντολή WΗΙLΕ είναι αυτό του Σχήµατος 1.7. Οι αλγόριθµοι που µετατρέπουν το ένδρο Ανίχνευσης σε ενδιάµεση γλώσσα (κώδικα) θα συζητηθούν αργότερα. Προς το παρόν παρουσιάζεται στο Σχήµα 1.6 ο ενδιάµεσος κώδικας όπως περίπου θα είναι. Q1: if A > Β goto Q2 goto Q3 Q2: Τ 1 := 2 * Β Τ 2 := Τ 1 5 if A <= Τ 2 goto Q4 goto Q3 Q4: A:= A + Β goto Q1 Q3: Ì 1.6 Ενδιάµεσος κώδικας για την εντολή WΗΙLΕ. Οι περισσότεροι Μεταγλωττιστές δεν δηµιουργούν ένδρα Ανίχνευσης άµεσα, αλλά δηµιουργούν τον ενδιάµεσο κώδικα, καθώς προχωράει η συντακτική ανάλυση.

26 26 KEºA AIO 1: EI A ø H TOY META øtti TE 1.7 BÂÏÙÈÛÙÔappleÔ ËÛË Η φάση της βελτιστοποίησης δεν υπάρχει σε όλους τους Μεταγλωττιστές παρ ότι µπορεί και να διπλασιάσει την ταχύτητα του τελικού προγράµµατος. Τοπική βελτιστοποίηση (Local optimization) µπορεί να εφαρµοστεί στον ενδιάµεσο κώδικα του Σχήµατος 1.6. Η ακολουθία: if A > B goto Q2 goto Q3 Q2: µπορεί να αντικατασταθεί από την εντολή if A <= Β goto Q3 Q2: Μια ακόµη πιο σηµαντική βελτιστοποίηση αναφέρεται στον υπολογισµό των δεικτών των εκφράσεων, π.χ. η εκχώρηση A[Ι]:= Β[Ι] + C[Ι] εφόσον η µνήµη του υπολογιστή προσπελαύνεται κατά bytes και υπάρχουν 4 bytes/word, χρειάζεται να υπολογίσει το 4*(Ι 1) τρεις φορές. Ένας Οptimizing Compiler θα µπορούσε να τροποποιήσει τον ενδιάµεσο κώδικα και να χρησιµοποιήσει το 4*(Ι 1) σαν κοινή υποέκφραση η οποία υπολογίζεται µια µόνο φορά, πράγµα το οποίο δεν θα µπορούσε να κάνει ένας προγραµµατιστής γιατί δεν του το επιτρέπει η υψηλού επιπέδου γλώσσα στην οποία προγραµµατίζει. Η βελτιστοποίηση των βρόχων (Loop Οptimization) δίνει τη µεγαλύτερη αύξηση ταχύτητας στα προγράµµατα µιας και αυτά καταναλώνουν τον περισσότερο χρόνο µέσα σε βρόχους. Η τυπική λύση είναι να µετακινηθούν οι υπολογισµοί που δίνουν πάντα το ίδιο αποτέλεσµα µέσα στον βρόχο, έξω και ακριβώς πριν από τον βρόχο. Οι υπολογισµοί αυτοί ονοµάζονται loop invariants. 1.8 ËÌÈÔ ÚÁ ÎÒ ÈÎ Σαν παράδειγµα στη φάση αυτή, η εντολή ενδιάµεσου κώδικα A:=Β+C (1)

27 ªπ Àƒ π ø π 27 µπορεί να µεταφραστεί στον εξής κώδικα µηχανής LΟAD Β ADD C (2) SΤΟRΕ A stat while stat while condition do stat condition & condition assignment relation relation location := expr expr relop expr expr relop expr id(a) expr + expr id(a) > id(b) id(a) <= expr exp id(a) id(b) con(5) expr * expr Ì 1.7 con(2) id(b) ένδρο Aνίχνευσης για εντολή WHILE

28 28 KEºA AIO 1: EI A ø H TOY META øtti TE Ú ÛÙËÚÈfiÙËÙ 1.2 Μια µετάφραση, όπως αυτή που περιγράφηκε, του ενδιάµεσου κώδικα σε κώδικα µηχανής δηµιουργεί πολλά LΟAD και SΤΟRΕ που πλεονάζουν. Η κατάσταση µπορεί να βελτιωθεί σηµαντικά, αν ο.κ. ( ηµιουργός Κώδικα) διατηρεί πληροφορίες για το περιεχόµενο των Καταχωρητών (registers), του Accumulator και της «επόµενης χρήσης» των ονοµάτων (identifiers) και δηµιουργεί εντολές LΟAD και SΤΟRΕ µόνο όταν χρειάζονται. Με αυτές τις υποθέσεις µπορείτε να εξηγήσετε πώς µπορεί να κατασκευασθεί «µικρότερος» κώδικας από τον (2) που δόθηκε παραπάνω; Σε ένα υπολογιστή µε λίγους καταχωρητές υψηλής ταχύτητας, ο ηµιουργός Κώδικα θα προσπαθήσει να κάνει την βέλτιστη χρήση αυτών των καταχωρητών. 1.9 È Â ÚÈÛË ÈÓ ÎˆÓ Î È ÛËÌ ÛÈÔÏÔÁÈÎ Ó Ï ÛË Ένας Μεταγλωττιστής χρειάζεται να διατηρεί πληροφορίες για όλα τα δεδο- µένα που εµφανίζονται στο πρόγραµµα. Π.χ., αν µια µεταβλητή παριστάνει έναν integer ή real αριθµό, το µέγεθος ενός Array, το πλήθος των παραµέτρων ενός υποπρογράµµατος κ.λπ. Οι πληροφορίες αυτές συλλέγονται κατά τις αρχικές φάσεις Λεκτικής Aνάλυσης και Συντακτικής Aνάλυσης εισάγονται στον Πίνακα Συµβόλων και έχουν διάφορες χρήσεις. Π.χ., αν υπάρχει η έκφραση A+Β, όπου A είναι τύπου integer και Β τύπου real, τότε (αν το επιτρέπει η γλώσσα) ο Μεταγλωττιστής πρέπει να φτιάξει κώδικα που να µετατρέπει τον A σε τύπου real, αλλιώς να καλέσει τις ρουτίνες χειρισµού λαθών για να αναφέρει το λάθος µίξης των τύπων. Η παραπάνω λειτουργία εντάσσεται στη Σηµασιολογική Aνάλυση (Semantic Analysis), η οποία εφαρµόζεται στον καθορισµό του τύπου των ενδιάµεσων αποτελεσµάτων, στον έλεγχο του τύπου των παραµέτρων και στον προσδιορισµό λειτουργίας που αναφέρεται από κάποιο τελεστή (π.χ. ο τελεστής + µπορεί να αναφέρεται σε ακέραια ή floating point πρόσθεση, σε λογικό «ΟR» ή και σε άλλη πράξη). Σηµασιολογική Aνάλυση µπορεί να γίνει κατά τη φάση της Συντακτικής Aνάλυσης, της δηµιουργίας ενδιάµεσου κώδικα ή την τελική φάση της δηµιουργίας κώδικα È Â ÚÈÛË Ï ıòó Aποτελεί µια από τις πιο σηµαντικές λειτουργίες του Μεταγλωττιστή. Όταν

29 π à πƒπ ø 29 ο Μεταγλωττιστής ανακαλύψει κάποιο λάθος, πρέπει να το αναφέρει στο διαχειριστή λαθών, ο οποίος εκδίδει κάποιο µήνυµα. Aκόµη ο Μεταγλωττιστής πρέπει να τροποποιήσει την είσοδο της φάσης στην οποία εµφανίστηκε το λάθος, ώστε η τελευταία να µπορέσει να συνεχίσει κανονικά. Εντοπίστε και διορθώστε τα λάθη που υπάρχουν στο παρακάτω κείµενο. «Ο Λεκτικός Αναλυτής διαβάζει το αρχικό πρόγραµµα σαν ένα σύνολο χαρακτήρων και επιστρέφει τους χαρακτήρες αυτούς στο Συντακτικό Αναλυτή. Η δουλειά του Συντακτικού Αναλυτή, µετά τη Σηµασιολογική Ανάλυση, είναι να οµαδοποιήσει τους χαρακτήρες σε tokens και τα tokens σε συντακτικές δοµές σύµφωνα µε τους συντακτικούς κανόνες της γραµµατικής και να φτιάξει ή δηµιουργήσει τον ενδιάµεσο κώδικα, υπό µορφή συντακτικού δένδρου, από το οποίο θα κατασκευασθεί ο τελικός κώδικας, ο οποίος στη συνέχεια µπορεί και να βελτιστοποιηθεί από το µεταγλωττιστή». ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË EÚÁ Ï ÌÂÙ ÁψÙÙÈÛÙÒÓ ιάφορα «εργαλεία» που έχουν αναπτυχθεί για να βοηθήσουν στη δηµιουργία Μεταγλωττιστών ποικίλουν από Scanner και Ρarser generators σε πολύπλοκα συστήµατα µε διάφορα ονόµατα, όπως Compiler Compilers, Compiler generators, ή translator writing systems, και παράγουν ένα Μεταγλωττιστή από κάποια µορφή προδιαγραφών µιας πηγαίας γλώσσας και του υπολογιστή, στον οποίο θα τρέχει ο Μεταγλωττιστής. Οι προδιαγραφές στα συστήµατα αυτά µπορούν να περιλαµβάνουν: α. Περιγραφή της Λεκτικής και Συντακτικής δοµής της γλώσσας. β. Περιγραφή της εξόδου που θα δηµιουργεί κάθε δοµικό στοιχείο της γλώσσας, (π.χ. κώδικας, διαχείριση λαθών). γ. Περιγραφή του στοχευόµενου υπολογιστή (target machine). Οι βασικές βοήθειες εργαλεία που παρέχονται από τους υπάρχοντες Compiler Compilers είναι οι εξής: 1. Γεννήτορες Λεκτικών Αναλυτών (Scanner Generators). 2. Γεννήτορες Συντακτικών Αναλυτών (Parser Generators), οι οποίοι προσφέρουν περισσότερη αξιοπιστία από τους Συντακτικούς Αναλυτές που κατα-

30 30 KEºA AIO 1: EI A ø H TOY META øtti TE σκευάζονται «µε το χέρι». 3. Βοήθειες για Code Generation. Συχνά ένας Compiler Compiler διαθέτει µια υψηλού επιπέδου γλώσσα για τον ενδιάµεσο κώδικα, τον Assembler ή τον κώδικα µηχανής. Ο χρήστης γράφει ρουτίνες σ αυτή τη γλώσσα και στον τελικό Μεταγλωττιστή οι ρουτίνες καλούνται στις κατάλληλες στιγµές από τον αυτόµατα δηµιουργούµενο Συντακτικό Αναλυτή BÔotstrapping Ένας Μεταγλωττιστής χαρακτηρίζεται από τρεις γλώσσες: την πηγαία, την τελική και τη γλώσσα στην οποία είναι γραµµένος. Οι γλώσσες αυτές µπορεί να είναι όλες διαφορετικές. Π.χ. ένας Μεταγλωττιστής µπορεί να τρέχει σε κάποια µηχανή και να παράγει τελικό κώδικα (Οbject Code) για µια άλλη µηχανή. Aυτός καλείται Cross Compiler και παραδείγµατα τέτοιων υπάρχουν σε µεγάλα συστήµατα (µηχανές) που παράγουν κώδικα για να τρέξει σε µικρότερα (π.χ. σε PC). Βootstrapping είναι η διαδικασία κατασκευής ενός Μεταγλωττιστή για µια γλώσσα Χ και ο οποίος είναι γραµµένος στη γλώσσα Χ(!) και παράγει κώδικα για µια µηχανή A. Για την παρακάτω συζήτηση χρησιµοποιείται ο συµβολισµός: ή που σηµαίνει: Μεταγλωττιστής για την γλώσσα Χ, γραµµένος στη γλώσσα Ζ ο οποίος παράγει κώδικα στη γλώσσα (µηχανής ή assembly) Υ. Υποθέτουµε ότι έχουµε µια γλώσσα L, για την οποία θέλουµε ένα Μεταγλωττιστή στη µηχανή A. S Γράφουµε κατ αρχήν για τη µηχανή A ένα «µικρό» Μεταγλωττιστή C L A A ο οποίος µεταφράζει προγράµµατα γραµµένα σε ένα υποσύνολο S της L σε κώδικα µηχανής ή Assembly A και είναι γραµµένος σε A. Κατόπιν γράφουµε ένα Μεταγλωττιστή στο υποσύνολο S της L. Όταν ο περάσει από τον L που τρέχει στη µηχανή A, το αποτέλεσµα LA C S L είναι ένας Μεταγλωττιστής τρέχει στη µηχανή A. C A S A C Z X Y C A LA XÆY C Z C S LA L για ολόκληρη τη γλώσσα L που µπορεί να

31 BOOTSTRAPPING 31 ιαγραµµατικά: C S LA C A SA C A LA Η διαδικασία αυτή µπορεί να επαναληφθεί σε 2 3 βήµατα διαλέγοντας κάθε φορά και ένα µεγαλύτερο υποσύνολο της γλώσσας S. ÓÔ Ë Έχοντας πλέον µελετήσει το κεφάλαιο αυτό θα πρέπει να έχετε αποκτήσει µια συνοπτική µεν αλλά πλήρη εικόνα για το τι είναι οι µεταφραστές και ειδικότερα οι Μεταγλωττιστές και οι ιερµηνευτές που κατά κύριο λόγο µας ενδιαφέρουν. Ξεκινήσαµε µε τη διαδικασία µετάφρασης φόρτωσης εκτέλεσης ενός πηγαίου προγράµµατος έτσι ώστε να σχηµατίσετε µια εικόνα των διαδικασιών που είναι απαραίτητες να γίνουν µέχρι να είναι σε θέση να εκτελεσθεί στον υπολογιστή ένα πρόγραµµα, το οποίο θα έχετε γράψει σε κάποια γλώσσα προγραµµατισµού. Στη συνέχεια είδατε περιληπτικά τη δοµή ενός µεταγλωττιστή να αποτελείται από ένα σύνολο δραστηριοτήτων που τις αναφέραµε σαν «φάσεις» και οι οποίες είναι οι εξής: λεκτική ανάλυση, συντακτική ανάλυση, σηµασιολογική ανάλυση, δηµιουργία ενδιάµεσου κώδικα, βελτιστοποίηση ενδιάµεσου κώδικα και δηµιουργία τελικού κώδικα. Επειδή οι δραστηριότητες αυτές, αν γίνονται µια µια, αυξάνουν πάρα πολύ το χρόνο που απαιτείται για να ολοκληρωθεί η διαδικασία µεταγλώττισης, είδαµε πως µπορούµε να ενσωµατώσουµε τις δραστηριότητες αυτές (φάσεις) σε ένα ή περισσότερα «περάσµατα» κάνοντας χρήση της τεχνικής της «οπισθοµπάλωσης». Την τεχνική αυτή την είδατε να εφαρµόζεται στην περίπτωση ενός Assembler. Είδατε επίσης τη δοµική και λειτουργική διαφορά ανάµεσα στους µεταγλωττιστές και τους διερµηνευτές. Είδατε δηλαδή ότι από άποψη δοµής µπορού- µε να θεωρήσουµε ότι και οι δυο αποτελούνται από δυο τµήµατα το «εµπρόσθιο τµήµα» και το «οπίσθιο τµήµα». Το εµπρόσθιο τµήµα και στις δυο περιπτώσεις εκτελεί τις ίδιες λειτουργίες και καταλήγει στη δηµιουργία του «ενδιά- µεσου κώδικα υποθετικής µηχανής» (υποθετικού υπολογιστή). Αντίθετα το µεν οπίσθιο τµήµα του µεταγλωττιστή από αυτόν τον ενδιάµεσο κώδικα δηµιουργεί τον τελικό κώδικα, το δε οπίσθιο τµήµα του διερµηνευτή κάνει εξο- µείωση της υποθετικής µηχανής και εκτέλεση του ενδιάµεσου κώδικα.

32 32 KEºA AIO 1: EI A ø H TOY META øtti TE Στη συνέχεια περιγράψαµε µε λίγα λόγια όλες τις φάσεις. Έτσι µάθατε ότι ο Λεκτικός Αναλυτής οµαδοποιεί τους χαρακτήρες του πηγαίου προγράµµατος σε λεκτικές δοµές που τις ονοµάσαµε «tokens» και ακόµη ότι ο ίδιος λειτουργεί σαν υπορουτίνα του Συντακτικού Αναλυτή. Ο Συντακτικός Αναλυτής οµαδοποιεί τα tokens σε «συντακτικές» δοµές, οι οποίες µπορούν να αναπαρασταθούν µε τη βοήθεια των «δένδρων ανίχνευσης» ή µε «κώδικα τριών διευθύνσεων» (και τα δυο µπορείτε να τα θεωρήσετε σαν µορφές ενδιάµεσης γλώσσας κώδικας της υποθετικής µηχανής). Επάνω σε αυτόν τον ενδιά- µεσο κώδικα γίνονται οι παρεµβάσεις που αφορούν τη σηµασιολογική ανάλυση (για παράδειγµα πρόσθεση επιπλέον κώδικα για τη µετατροπή των τύπων των «εντελών» σε µια αριθµητική έκφραση). Στη συνέχεια µάθατε µερικά είδη βελτιστοποίησης του ενδιάµεσου κώδικα, όπως η «τοπική βελτιστοποίηση» και η βελτιστοποίηση «βρόχων» και είδατε πως µπορείτε να δηµιουργήσετε «τελικό» κώδικα µηχανής από τον ενδιάµεσο κώδικα λαµβάνοντας βεβαίως υπόψη την «αρχιτεκτονική» του «στοχευόµενου» υπολογιστή. Η «διαχείριση» του «Πίνακα Συµβόλων» και η «ιαχείριση Λαθών» είναι δυο άλλες πολύ σηµαντικές λειτουργίες τόσο της µεταγλώττισης όσο και της διερµήνευσης. Αυτές δεν αναφέρονται σαν ξεχωριστές φάσεις αλλά σαν διεργασίες οι οποίες γίνονται σε καθεµία από τις φάσεις. Ακόµη, µάθατε και ότι υπάρχουν κάποια εργαλεία, τα οποία µας βοηθάνε στην κατασκευή µεταγλωττιστών και διερµηνευτών και τα οποία αναφέρονται ως «γεννήτορες» λεκτικών και συντακτικών αναλυτών. Τέλος, είδατε και µια ειδική περίπτωση διαδικασίας κατασκευής ενός µεταγλωττιστή, η οποία αναφέρεται σαν «bootstrapping»

33 ÂÎÙÈÎ AÓ Ï ÛË Ùfi Ô Στόχος του κεφαλαίου αυτού είναι να δώσει µια σύντοµη αλλά πλήρη παρουσίαση του πώς ακριβώς λειτουργεί ένας Λεκτικός Αναλυτής, πώς µπορείτε να κατασκευάσετε ένα Λεκτικό Αναλυτή µε το χέρι και πώς να χρησιµοποιήσετε Κανονικές Εκφράσεις για να κατασκευάσετε αυτόµατα έναν Λεκτικό Αναλυτή µε τη βοήθεια κάποιου εργαλείου (LEX). Επίσης να περιγράψει πώς λειτουργεί ένας τέτοιος γεννήτορας Λεκτικών Αναλυτών. 2 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Όταν θα έχετε µελετήσει το κεφάλαιο αυτό θα µπορείτε να: εξηγήσετε τι δουλειά κάνει ένας Λεκτικός Αναλυτής, περιγράψετε πώς ακριβώς λειτουργεί ένας Λεκτικός Αναλυτής για να επιτελέσει την εργασία του, εξηγήσετε τι είναι οι Κανονικές Εκφράσεις και πώς περιγράφουν τα λεκτικά στοιχεία µιας γλώσσας προγραµµατισµού, γράψετε Κανονικές Εκφράσεις που περιγράφουν τα tokens µιας γλώσσας, γράψετε ιαγράµµατα Μετάβασης Καταστάσεων και Πίνακες Μετάβασης Καταστάσεων για ένα σύνολο Κανονικών Εκφράσεων, γράψετε τις ρουτίνες ενός απλού Λεκτικού Αναλυτή, εξηγήσετε τι είναι το εργαλείο LEX, περιγράψετε πώς γίνεται αυτόµατα (από ένα εργαλείο όπως το LEX) η κατασκευή ενός Λεκτικού Αναλυτή, γράψετε ένα «πρόγραµµα» για το LEX. ŒÓÓÔÈ ÎÏÂÈ È Λεκτικός Αναλυτής (ΛΑ), Token, Κανονική Έκφραση (ΚΕ), ιάγραµµα Μετάβασης Καταστάσεων ( ΜΚ), Πεπερασµένα Αυτόµατα (ΠΑ),

34 34 KEºA AIO 2: EKTIKH ANA Y H Συµβολοσειρά, Γλώσσα, Προσδιοριστικό Πεπερασµένο Αυτόµατο (ΠΠΑ), Μη Προσδιοριστικό Πεπερασµένο Αυτόµατο (ΜΠΠΑ), Πίνακας Μεταβάσεων (ΠΜ), LEX. EÈÛ ÁˆÁÈÎ apple Ú ÙËÚ ÛÂÈ Έχετε ήδη µελετήσει το Κεφάλαιο 1 και γνωρίζετε πλέον τη βασική οργάνωση και τον τρόπο λειτουργίας ενός Μεταγλωττιστή, ενός ιερµηνευτή και γενικότερα ενός Μεταφραστή. Στη συνέχεια θα εξετάσουµε τον τρόπο λειτουργίας και τρόπους κατασκευής ενός Λεκτικού Αναλυτή. Για να κάνετε κτήµα σας το υλικό του κεφαλαίου αυτού δε χρειάζεστε κάποιο επιπλέον υλικό. Όµως, αν θέλετε να αποκτήσετε πιο ολοκληρωµένη γνώση ή συµπληρωµατικές πληροφορίες γύρω από τη θεωρία που αποτελεί το υπόβαθρο για την κατασκευή Λεκτικών Αναλυτών, σας συµβουλεύω να δείτε το υλικό της θεµατικής υποενότητας Αυτόµατα και Τυπικές Γλώσσες του προγράµµατος Πληροφορικής.

35 EI A ø H EÈÛ ÁˆÁ Έχει αναφερθεί ότι η λειτουργία του Λεκτικού Aναλυτή (ΛΑ) είναι να διαβάζει ένα ένα τους χαρακτήρες του πηγαίου (Source) προγράµµατος και να τους µεταφράζει σε tokens (π.χ. keywords, identifiers, constants). Το κεφάλαιο αυτό πραγµατεύεται το σχεδιασµό και την υλοποίηση των ΛA. Επειδή χρειάζεται κάποιος τρόπος περιγραφής των διαφόρων tokens που εµφανίζονται σε κάποια γλώσσα, εισάγονται οι Κανονικές Εκφράσεις (Regular Εxpressions). Aκόµη χρειάζεται κάποιος µηχανισµός που να αναγνωρίζει τα tokens της γλώσσας. Τέτοιοι µηχανισµοί (token Recognizers) είναι τα ιαγράµµατα Μετάβασης Καταστάσεων (Τransition Diagrams) και Πεπερασµένα Αυτόµατα (Finite Automata). Ένα πλεονέκτηµα της χρήσης των Κανονικών Εκφράσεων για τον καθορισµό των tokens είναι το γεγονός ότι από µια Κανονική Έκφραση µπορούµε να κατασκευάσουµε αυτόµατα ένα αναγνωριστή για τα tokens (token Recognizer) που παριστάνονται µε Κανονικές Εκφράσεις. Ο Λεκτικός Aναλυτής µπορεί να σχεδιαστεί σε χωριστό πέρασµα του Μεταγλωττιστή ή να συνεργάζεται µε το Συντακτικό Αναλυτή στο ίδιο πέρασµα (ο Λεκτικός Aναλυτής λειτουργεί σαν υπορουτίνα ή συνρουτίνα και καλείται από το Συντακτικό Aναλυτή, όταν αυτός χρειάζεται κάποιο token). Ο σκοπός του διαχωρισµού της Λεκτικής και Συντακτικής Aνάλυσης είναι η απλοποίηση του όλου σχεδιασµού του Μεταγλωττιστή. 2.2 Â È ÛÌfi ÏÂÎÙÈÎÔ Ó Ï Ù Επειδή ο Λεκτικός Aναλυτής για να αναγνωρίσει κάποιο token χρειάζεται πολλές φορές να διαβάσει αρκετούς χαρακτήρες µετά το τέλος του token, χρησιµοποιείται ένας βοηθητικός χώρος (buffer), από τον οποίο ο Λεκτικός Aναλυτής διαβάζει τους χαρακτήρες του. Χρησιµοποιούνται δύο δείκτες, 1 που δείχνει την αρχή του token και 2 (Lookahead δείκτης), που κινείται πέρα από το 1 όσο χρειάζεται για να αναγνωριστεί το token. Η απόσταση που πρέπει να ταξιδέψει ο 2 πέρα από το 1 για να αναγνωριστεί το token καλείται απόσταση Lookahead. Μερικές φορές γίνεται µια προεπεξεργασία του πηγαίου προγράµµατος για να απαλλαγεί από σχόλια ή κενά, ώστε να µειωθεί και η απόσταση Lookahead.

36 36 KEºA AIO 2: EKTIKH ANA Y H Input buffer Ì 2.1 Ο βοηθητικός χώρος και οι δείκτες 1 και 2 του Λεκτικού Αναλυτή A 1 A 2 Το ιάγραµµα Μετάβασης Καταστάσεων (Transition Diagram) είναι ένα χρήσιµο εργαλείο που χρησιµοποιείται στους Λεκτικούς Aναλυτές. Στο Σχήµα 2.2 απεικονίζεται το ιάγραµµα Μετάβασης Καταστάσεων για ένα «identifier». Το σχήµα αυτό στην πραγµατικότητα περιγράφει ένα αναγνωριστή tokens, δηλαδή ένα πρόγραµµα (ρουτίνα), το οποίο αναγνωρίζει tokens του τύπου «identifier». letter or digit Ì 2.2 ιάγραµµα Μετάβασης Καταστάσεων για ένα «identifier» start letter delimiter * Οι κύκλοι καλούνται καταστάσεις (states) και συνδέονται µε βέλη που καλούνται πλευρές (edges). Οι επιγραφές πάνω στις πλευρές σηµειώνουν τους χαρακτήρες εισόδου που µπορούν να εµφανιστούν µετά από κάθε κατάσταση. Για να µετατρέψουµε µια συλλογή από διαγράµµατα µετάβασης καταστάσεων σε ένα πρόγραµµα, κατασκευάζουµε µια ρουτίνα για κάθε κατάσταση. Το πρώτο βήµα που γίνεται στη ρουτίνα για κάθε κατάσταση είναι η κλήση κάποιας function getchar, που επιστρέφει τον επόµενο χαρακτήρα από το buffer και προχωράει το δείκτη 2 (lookahead pointer), ώστε να δείχνει στον αµέσως επόµενο χαρακτήρα. Το επόµενο βήµα είναι να προσδιοριστεί ποια πλευρά της κατάστασης (που επιγράφεται από το χαρακτήρα που επέστρεψε η getchar) πρέπει να ακολουθηθεί και να µεταφερθεί ο έλεγχος του προγράµµατος στην κατάσταση που δείχνει η πλευρά. Aν δεν υπάρχει τέτοια πλευρά, ο δείκτης 2 πρέπει να γυρίσει πίσω στην αρχική του θέση ( 1) και να γίνει προσπάθεια αναγνώρισης άλλου token, χρησιµοποιώντας κάποιο άλλο διάγραµµα µετάβασης καταστάσεων.

37 Ã π ª π À À 37 Aν όλα τα διαγράµµατα δοκιµάστηκαν χωρίς επιτυχία, πρέπει να κληθεί κάποια ρουτίνα λάθους, µιας και πρόκειται για κάποιο λεκτικό σφάλµα στο πηγαίο πρόγραµµα. Η ρουτίνα για την κατάσταση 0 του Σχήµατος 2.2 µπορεί να είναι η εξής: state 0: C:=getchar( ); if letter(c) then goto state 1 else fail( ) Η letter επιστρέφει true εφόσον το C είναι γράµµα. Η fail γυρίζει τον 2 πίσω στην αρχική του θέση 1 και ξεκινά το επόµενο ιάγραµµα Μετάβασης Καταστάσεων, αν υπάρχει, ή καλεί τη ρουτίνα λάθους. Για την κατάσταση 1 η αντίστοιχη ρουτίνα είναι η εξής: state 1: C:=getchar( ); if letter(c) or digit(c) then goto state 1 else if delimeter(c) then goto state 2 else fail( ) όπου digit και delimeter είναι παρόµοιες µε την letter. Η κατάσταση 2 υπονοεί ότι έχει ευρεθεί ένας identifier. Επειδή ο delimiter (στην πλευρά προς την κατάσταση 2) δεν είναι µέρος του identifier, πρέπει ο 2 να γυρίσει µια θέση πίσω. Aυτό γίνεται µε µια ρουτίνα retract και οι καταστάσεις που χρειάζεται να την καλούν σηµειώνονται µε ένα αστερίσκο. Aκόµη χρειάζεται µια ρουτίνα που θα εισάγει τον ευρεθέντα identifier στον πίνακα συµβόλων, αν δεν υπάρχει ήδη εκεί. Έτσι ο κώδικας για την κατάσταση 2 θα είναι ως εξής: state 2: retract( ); return (id, install( ) ) Η κατάσταση 2 επιστρέφει στο Συντακτικό Aναλυτή ένα ζευγάρι που συνίσταται από ένα ακέραιον (id) κώδικα για identifier και ένα δείκτη στον πίνακα συµβόλων, που επιστρέφεται από την install. Εάν τα κενά αγνοούνται στην πηγαία γλώσσα, η κατάσταση 2 θα πρέπει να περιλαµβάνει και εντολές που κινούν τον αρχικό δείκτη 1 στον επόµενο µη κενό χαρακτήρα του τµήµατος του πηγαίου προγράµµατος που βρίσκεται στο buffer εισόδου.

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 1

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 1 ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 1 ΠΡΟΛΟΓΟΣ ΒΙΒΛΙΟΥ Η σχεδίαση και η κατασκευή ενός Μεταγλωττιστή ή ενός ιερµηνευτή για µια γλώσσα προγραµµατισµού δεν είναι ούτε απλή ούτε εύκολη υπόθεση. Το υλικό

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

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

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

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

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ÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ

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

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

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Ê ÚÌÔÁ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛΗΡΟΦΟΡΙΚΗ

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

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 Θεµατική Ενότητα

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

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Ô ËÛË Î È ÚÔÛÔÌÔ ˆÛË ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών

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

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

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

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

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

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

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

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νότητα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Μεταγλωττιστής Πρόγραμμα Διαβάζει προγράμματα δεδομένης γλώσσας (πηγαία γλώσσα) και τα μετατρέπει

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

εύτερη γενιά: γλώσσα assembly

εύτερη γενιά: γλώσσα assembly ΚΕΦΑΛΑΙΟ 6: Γλώσσες Προγραµµατισµού 6.1 Γενιές γλωσσών προγραµµατισµού (Σχήµα 6.1) 6.1 Ιστορική εξέλιξη 6.2 Παραδοσιακές έννοιες προγραµµατισµού 6.3 ιαδικασιακές µονάδες 6.4 Υλοποίηση γλώσσας 6.5 Αντικειµενοστρεφής

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

ΚΕΦΑΛΑΙO 2 ΛΕΚΤΙΚΗ ΑΝΑΛΥΣΗ 1

ΚΕΦΑΛΑΙO 2 ΛΕΚΤΙΚΗ ΑΝΑΛΥΣΗ 1 ΚΕΦΑΛΑΙO 2 ΛΕΚΤΙΚΗ ΑΝΑΛΥΣΗ 1 Στόχος Στόχος του κεφαλαίου αυτού είναι να δώσει µια σύντοµη αλλά πλήρη παρουσίαση του πώς ακριβώς λειτουργεί ένας Λεκτικός Αναλυτής, πώς µπορείτε να κατασκευάσετε ένα Λεκτικό

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

Κεφάλαιο 2: Μεταφραστές

Κεφάλαιο 2: Μεταφραστές Κεφάλαιο 2: Μεταφραστές Αρχές Γλωσσών και Προγραμματισμού Λειτουργία Μετάφρασης ΑΡΧΙΚΗ ΓΛΩΣΣΑ (Source) L A ΓΛΩΣΣΑ ΥΛΟΠΟΙΗΣΗΣ ΜΕΤΑΦΡΑΣΤΗ (Implementation) L Y ΤΕΛΙΚΗ ΓΛΩΣΣΑ (Target) L T Αρχικό Πρόγραμμα

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

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή Αντίρριο, 05/04/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» To δεύτερο μέρος της εργασίας έχει ως στόχο την ανάπτυξη του συντακτικού αναλυτή με χρήση του bison / byacc. Στο

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 2: Mεταφραστές Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Λειτουργία Μετάφρασης ΑΡΧΙΚΗ ΓΛΩΣΣΑ (Source) L 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

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

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

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

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

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

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

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

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πιφανειών Σηµείωση Το ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθοδολογία της εξ Αποστάσεως

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

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

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

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

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

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

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

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

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

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

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 Θεµατική Ενότητα

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

6. Εισαγωγή στον προγραµµατισµό

6. Εισαγωγή στον προγραµµατισµό 6. Εισαγωγή στον προγραµµατισµό 6.1 Η έννοια του προγράµµατος. 6.2 Ιστορική αναδροµή. 6.2.1 Γλώσσες µηχανής. ΗΜ04-Θ1Α 1. Ένα πρόγραµµα σε γλώσσα µηχανής είναι µια ακολουθία δυαδικών ψηφίων. 5. Ένα πρόγραµµα

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

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

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

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

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις Προγραµµατισµός Η/Υ Ανασκόπηση - Ορισµοί Περιεχόµενα Ο κύκλος ανάπτυξης προγράµµατος Περιγραφή προβλήµατος Ανάλυση προβλήµατος Λογικό ιάγραµµα Ψευδοκώδικας Κωδικοποίηση Συντήρηση Γλώσσες Προγραµµατισµού

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

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

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

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

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

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

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

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

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

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

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Σ

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

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» Η εργασία έχει ως στόχο τον σχεδιασμό και την υλοποίηση ενός μεταγλωττιστή για την γλώσσα Ciscal, χρησιμοποιώντας

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

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

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

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Μεταγλωττιστές Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Βιβλιογραφία Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman. Compilers:

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

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

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

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

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2011-2012 Γιάννης Γαροφαλάκης, Καθηγητής Αθανάσιος Ν.Νικολακόπουλος, Υποψήφιος Διδάκτορας 28 Μαρτίου 2012 Περίληψη Σκοπός της παρούσας

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

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

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

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός I (Θ)

Προγραμματισμός I (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός I (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Οκτώβριος 2017 Δρ. Δημήτρης Βαρσάμης Οκτώβριος

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στην FORTRAN Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Fortran FORmula TRANslation: (Μία από τις πρώτες γλώσσες τρίτης γενιάς) Εκδόσεις FORTRAN (1957) FORTRAN II (1958) FORTRAN III

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

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών Πρόγραμμα σε γλώσσα μηχανής του ΕΚΥ Θέση μνήμης Περιεχόμενα μνήμης Εντολή (assembly) 0 0001 000000000011 lda 3 1 0011 000000000100 ada

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

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

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

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

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

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

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

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Τ.Ε.Ι ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Πτυχιακή εργασία του φοιτητή Γιαννακίδη Αποστόλη Επιβλέπων καθηγητής Τσούλος

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ΠΕΡΙΕΧΟΜΕΝΟ ΤΟΥ ΜΑΘΗΜΑΤΟΣ Αρχές

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

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

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

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

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

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

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

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

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

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 1.3-1.4: Εισαγωγή Στον Προγραµµατισµό ( ιάλεξη 2) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγικές Έννοιες - Ορισµοί Ο κύκλος ανάπτυξης προγράµµατος Παραδείγµατα Πότε χρησιµοποιούµε υπολογιστή?

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 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. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού Strange Προγραμματιστική άσκηση: Η γλώσσα προγραμματισμού Strange Η Strange είναι μια μικρή γλώσσα προγραμματισμού. Παρόλο που οι προγραμματιστικές της ικανότητες είναι μικρές, η εκπαιδευτική αυτή γλώσσα περιέχει

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

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

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

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

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

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

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

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1 Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1 6.3 Φυσικές και τεχνητές γλώσσες Μια γλώσσα γενικά προσδιορίζεται από: 1. Το αλφάβητο: το σύνολο των στοιχείων που χρησιμοποιεί

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

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

Εισαγωγή στην πληροφορική Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Εισαγωγή στην πληροφορική Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Αλγόριθµοι, στοιχεία

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β Καβακλή Χειμερινό Εξάμηνο 2001 Στόχοι του Μαθήματος! Ανάπτυξη αναλυτικής

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

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

Εισαγωγή. Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα και ιστορική αναδρομή (i) Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα και ιστορική αναδρομή Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος 2017 2 / 216 (i) Γλώσσες προγραμματισμού Μεταγλωττιστές Αναγκαιότητα

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

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

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

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Πέµπτη, 31 Μαΐου 2007 ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ 1o Α. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και δίπλα

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