Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

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

Download "Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων"

Transcript

1 Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων Γλώσσες και Μεταφραστές Σηµασιολογική Ανάλυση και Παραγωγή Ενδιάµεσου Κώδικα Στη µετάφραση οδηγούµενη από τη σύνταξη, τόσο η σηµασιολογική ανάλυση, όσο και η παραγωγή ενδιάµεσου κώδικα, υλοποιούνται µέσα από τη συντακτική ανάλυση, και συγκεκρι- µένα επεκτείνοντας τη γραµµατική της γλώσσας µε εισαγωγή κατηγορηµάτων στα σύµβολα και σηµασιολογικών ρουτινών στους κανόνες της. Τα κατηγορήµατα αποθηκεύουν την πληροφορία που συλλέγεται κατά την ανάλυση, ώστε να µπορεί αυτή να µεταφέρεται από σύµβολο σε σύµβολο. Οι σηµασιολογικές ρουτίνες υλοποιούν τη µεταφορά της πληροφορίας, χρησιµοποιώντας όποια πληροφορία συλλέγεται από τις λεκτικές µονάδες που παρέχει ο λεκτικός αναλυτής, καθώς και την πληροφορία από την προηγούµενη συντακτική και σηµασιολογική ανάλυση, και παράγοντας νέα. Έτσι, για την υλοποίηση της σηµασιολογικής ανάλυσης µέσα από το συντακτικό αναλυτή, πρέπει να επεκτείνουµε τη γραµµατική της γλώσσας σε κατηγορική γραµµατική. Το πρώτο που πρέπει να κάνουµε εποµένως, είναι να απεικονίσουµε τα σηµασιολογικά χαρακτηριστικά της γλώσσας σε κατάλληλα κατηγορήµατα. Για παράδειγµα, οι βασικοί τύποι της γλώσσας µπορούν να παρασταθούν µε κατάλληλη κωδικοποίηση µέσω κάποιου κατηγορήµατος ακέραιου τύπου, το οποίο θα συνοδεύει όλα εκείνα τα σύµβολα της γραµµατικής που έχουν τύπο, όπως είναι τα αναγνωριστικά, οι σταθερές και όλα τα σύµβολα παραστάσεων. Στη συνέχεια, θα πρέπει να µετατρέψουµε όλους τους σηµασιολογικούς κανόνες και περιορισµούς της γλώσσας, που συνήθως µας δίνονται σε περιφραστική µορφή µέσα από κάποιο εγχειρίδιο, σε αλγεβρικές και λογικές παραστάσεις των αντίστοιχων κατηγορηµάτων. Οι σηµασιολογικοί κανόνες και περιορισµοί, στην τελική τους µορφή, συνοδεύουν τους συντακτικούς κανόνες της γλώσσας, και αποτιµώνται κάθε φορά που ο αντίστοιχος συντακτικός κανόνας χρησιµοποιείται στη συντακτική ανάλυση κάποιου προγράµµατος. Η παραγωγή ενδιάµεσου κώδικα γίνεται παράλληλα µε τη σηµασιολογική ανάλυση. Έτσι, σε κάθε σηµείο της συντακτικής ανάλυσης που θέλουµε να παράγει ενδιάµεσο κώδικα, τοποθετούµε κατάλληλη βοηθητική ρουτίνα, η οποία να καλείται από το συντακτικό αναλυτή και να παράγει τον επιθυµητό ενδιάµεσο κώδικα σε κάποιο κατηγόρηµα κατάλληλου τύπου, χρησι- µοποιώντας τα αντίστοιχα κατηγορήµατα από το δεξί µέλος του κανόνα. Ο ενδιάµεσος κώδικας κάθε µονάδας του προγράµµατος εµφανίζεται στο τέλος της ανάλυσης της µονάδας, µέσα από κάποιο συντιθέµενο κατηγόρηµα του συµβόλου στη ρίζα του αντίστοιχου συντακτικού δέντρου. Ενσωµάτωση σηµασιολογικών χαρακτηριστικών στη σύνταξη της γλώσσας Πολλές φορές είναι επιθυµητό, κάποια σηµασιολογικά χαρακτηριστικά µιας γλώσσας να ενσωµατώνονται στη σύνταξη της γλώσσας. Αν και θεωρητικά όλα τα σηµασιολογικά χαρακτηριστικά θα µπορούσαν να ενσωµατωθούν στη σύνταξη, κάτι τέτοιο δε µπορεί να γίνει στην πράξη, διότι θα έκανε απαγορευτικό το µέγεθος και την πολυπλοκότητα της γραµµατικής, που δε θα µπορούσε πια να είναι χωρίς συµφραζόµενα. Για παράδειγµα, επειδή το όνοµα µιας µεταβλητής είναι σηµασιολογικό χαρακτηριστικό της λεκτικής µονάδας του αναγνωριστικού, θα έπρεπε κάθε δυνατό όνοµα να αποτελεί ανεξάρτητη λεκτική µονάδα στη γραµµατική της γλώσσας. Επίσης, αν η χρήση µιας µεταβλητής πρέπει να ακολουθεί τη δήλωσή της σε κάποια µονάδα του προγράµµατος, ο έλεγχος προηγούµενης δήλωσης στη χρήση µιας µεταβλητής απαιτεί η δήλωση να είναι συµφραζόµενο στον κανόνα στον οποίο ορίζεται η χρήση της µεταβλητής σε κάποια παράσταση.

2 Από την άλλη µεριά, η ενσωµάτωση κάποιων σηµασιολογικών χαρακτηριστικών στους συντακτικούς κανόνες της γλώσσας µπορεί να απλοποιεί τη διαδικασία συντακτικής ανάλυσης, παρά την αύξηση σε αριθµό κανόνων. Για παράδειγµα, αν η γραµµατική είναι διφορούµενη, κάποια σηµασιολογικά χαρακτηριστικά µπορούν να τη µετατρέψουν σε ισοδύναµη µη διφορούµενη. Με τον τρόπο αυτό, η συντακτική ανάλυση γίνεται ντετερµινιστική, µε συνέπεια τη σηµαντική µείωση της χρονικής πολυπλοκότητάς της. Την πλέον συνηθισµένη περίπτωση ενσωµάτωσης σηµασιολογικών χαρακτηριστικών στη σύνταξη µιας γλώσσας αποτελούν οι ιδιότητες των τελεστών της γλώσσας. Ενώ οι εκφράσεις της γλώσσας µπορούν αρχικά να είναι διφορούµενες, η προτεραιότητα και η προσεταιριστικότητα των τελεστών µπορούν να τις µετατρέψουν σε µη διφορούµενες. Μάλιστα, τα συνηθισµένα µετα-εργαλεία συντακτικής ανάλυσης όπως για παράδειγµα το Bison δέχονται δηλώσεις προτεραιότητας και προσεταιριστικότητας, έτσι ώστε να κάνουν τη µετατροπή έµ- µεσα κατά τη διαδικασία κατασκευής των πινάκων ανάλυσης, χωρίς να αυξάνουν τους κανόνες της γραµµατικής και ακόµα περισσότερο χωρίς να επιβάλλουν στον προγραµµατιστή να κάνει τη µετατροπή 1. ηµιουργία κατηγορικής γραµµατικής Η δηµιουργία της κατηγορικής γραµµατικής πάνω στην οποία θα στηριχθεί η σηµασιολογική ανάλυση και η παραγωγή ενδιάµεσου κώδικα δεν είναι συστηµατική διαδικασία που να µπορεί να περιγραφεί µε κάποιον αλγόριθµο. Κάθε γλώσσα έχει ιδιαίτερα σηµασιολογικά χαρακτηριστικά, τα οποία περιγράφονται στα εγχειρίδια της γλώσσας περιφραστικά µέσα από παραδείγµατα, και όχι µε κάποιον αυστηρό και γενικά τυποποιηµένο τρόπο. Όσο υπάρχει τυποποίηση στην περιγραφή των συντακτικών κανόνων µιας γλώσσας, άλλο τόσο δεν υπάρχει τυποποίηση στην περιγραφή της σηµασιολογίας της γλώσσας. Και αν κάποια σηµασιολογικά χαρακτηριστικά µπορούν να περιγραφούν µέσα από κάποιες αλγεβρικές παραστάσεις, όπως για παράδειγµα το σύστηµα τύπων της γλώσσας, κάποια άλλα, όπως η σηµασιολογία των δηλώσεων και των εντολών της γλώσσας, περιγράφονται κύρια µέσα από παραδείγµατα. Έτσι, ενώ για την πρώτη περίπτωση η απεικόνιση των χαρακτηριστικών σε κατηγορήµατα και σηµασιολογικούς κανόνες και περιορισµούς είναι σχετικά εύκολη, για τη δεύτερη περίπτωση η απεικόνιση θα γίνει µετά από την άριστη κατανόηση της γλώσσας, που συνήθως αποκτάται µετά από αρχικές αποτυχηµένες προσπάθειες σχεδίασης της σηµασιολογικής ανάλυσης, και πολλές φορές µε εκ των υστέρων πρόσθεση κάποιων κατηγορηµάτων, αφού γίνει συνειδητή η ανάγκη υλοποίησής τους. Για την περιγραφή του συστήµατος τύπων για παράδειγµα, δύο είναι τα βασικά κατηγορήµατα που απαιτούνται: Το ένα να παρέχει τον κωδικό τύπου, και το άλλο να παρέχει την πραγ- µατική δοµή του τύπου, αν είναι σύνθετος. Ο κωδικός τύπου µπορεί να είναι κάποιος ακέραιος, ενώ η δοµή του τύπου είναι πιθανό να πρέπει να υλοποιηθεί µε γράφηµα, ιδιαίτερα αν η γλώσσα υποστηρίζει κυκλικές δοµές τύπων, όπως η Pascal και η C που υποστηρίζουν δείκτες σε σύνθετους τύπους, οι οποίοι µπορούν να περιέχουν τους ίδιους δείκτες. Για βασικούς τύπους, ο κωδικός τύπου παρέχεται από τους κανόνες που περιέχουν τις αντίστοιχες λεκτικές µονάδες. Για σύνθετους τύπους, ο κωδικός και η δοµή του τύπου παρέχονται από τους κανόνες που περιγράφουν τους κατασκευαστές αυτών των τύπων. Οι σηµασιολογικές ρουτίνες στην περίπτωση του συστήµατος τύπων θα περιλαµβάνουν τουλάχιστον κατασκευή των α- ντίστοιχων δοµών αναπαράστασης για σύνθετους τύπους, έλεγχο συµβατότητας τύπων για κάθε συντακτικό κανόνα όπου απαντώνται περισσότεροι από έναν τύπο, καθώς και πιθανή παραγωγή τύπου αποτελέσµατος. εδοµένου ότι µαζί µε τη σηµασιολογική ανάλυση, οι σηµασιολογικές ρουτίνες παράγουν και ενδιάµεσο κώδικα, ένα κατηγόρηµα που µπορεί να συνοδεύει σύµβολα της γραµµατικής που περιγράφουν εντολές ή παραστάσεις είναι κάποιο κατηγόρηµα που απεικονίζει ενδιάµε- 1 Η παρέµβαση στην κατασκευή των πινάκων συντακτικής ανάλυσης µπορεί να οδηγεί σε ισοδύναµη γραµµατική, αλλά µπορεί και όχι. Αν για παράδειγµα η γραµµατική είναι εγγενώς διφορούµενη, καµία τέτοια παρέµβαση δε θα µπορούσε να οδηγήσει σε ισοδύναµη γραµµατική µε ντετερµινιστική συντακτική ανάλυση!

3 σο κώδικα. Αν ο ενδιάµεσος κώδικας είναι σε µορφή αφηρηµένου συντακτικού δέντρου, ένα βασικό κατηγόρηµα θα είναι ένας δείκτης στη δοµή κόµβου του ενδιάµεσου κώδικα, τυπικά κάποιου struct της C. Ειδικά για σύµβολα λεκτικών µονάδων, η εύρεση κατηγορηµάτων είναι πιο απλή, δεδοµένου ότι οι λεκτικές µονάδες έχουν συγκεκριµένα χαρακτηριστικά που είναι εύκολα κατανοητά. Για παράδειγµα οι σταθερές µιας γλώσσας έχουν τύπο και τιµή, τα αναγνωριστικά της γλώσσας έχουν όνοµα ή/και δείκτη στον πίνακα συµβόλων, ενώ οι τελεστές έχουν κάποιον κωδικό τελεστή, αν κάτι τέτοιο είναι απαραίτητο και δεν εννοείται από τη γραµµατική της γλώσσας. Εφαρµογή σηµασιολογικών κανόνων και περιορισµών Οι σηµασιολογικοί κανόνες και περιορισµοί που συνδέουν τις τιµές των κατηγορηµάτων µεταξύ τους και συνοδεύουν τους συντακτικούς κανόνες µε τη µορφή ρουτινών, εφαρµόζονται µε έναν από τους ακόλουθους δύο τρόπους: 1. Αφού κατασκευαστεί το δέντρο συντακτικής ανάλυσης για το δεδοµένο πρόγραµµα, δη- µιουργείται πάνω σε αυτό ο γράφος εξαρτήσεων των κατηγορηµάτων, ο οποίος και καθορίζει τη σειρά εφαρµογής. 2. Προκαθορίζοντας τη θέση των ρουτινών µέσα στους συντακτικούς κανόνες, κάνουµε την αποτίµησή τους τη στιγµή ακριβώς που η συντακτική ανάλυση φτάσει σε αυτή τη θέση. Από τις δύο αυτές µεθόδους, η δεύτερη που ονοµάζεται και σχήµα µετάφρασης (translation scheme) µπορεί να χρησιµοποιείται όταν η σειρά αποτίµησης ακολουθεί τη σειρά συντακτικής ανάλυσης των συµβόλων. Έτσι, για τις συνηθισµένες συντακτικές αναλύσεις που τα σύµβολα αναλύονται από αριστερά προς τα δεξιά, για να µπορεί να χρησιµοποιηθεί αυτή η µέθοδος, η αντίστοιχη κατηγορική γραµµατική πρέπει να είναι L-κατηγορική. Στο µεταεργαλείο Bison, που υποστηρίζει S-κατηγορικές γραµµατικές οι οποίες βέβαια είναι και L- κατηγορικές, χρησιµοποιείται αυτή η µέθοδος για τη σηµασιολογική ανάλυση. Αξίζει να σηµειώσουµε ότι µε τη δεύτερη µέθοδο, το δέντρο συντακτικής ανάλυσης δεν είναι απαραίτητο να κατασκευαστεί, µια που για την αποτίµηση των κατηγορηµάτων µπορούµε να χρησιµοποιήσουµε τη στοίβα συντακτικής ανάλυσης, η οποία στην ουσία εξοµοιώνει το δέντρο. Στη συνέχεια θα ασχοληθούµε µόνο µε αυτή τη µέθοδο. Κατηγορήµατα και σηµασιολογικές ρουτίνες µε το µετα-εργαλείο Bison Ας δούµε στη συνέχεια πώς υλοποιούνται οι κατηγορικές γραµµατικές στο µετα-εργαλείο Bison. Το Bison υποστηρίζει ένα κατηγόρηµα για κάθε σύµβολο της γραµµατικής, και σηµασιολογικές ρουτίνες µε τη µορφή κώδικα C ανάµεσα σε άγκιστρα, οι οποίες τοποθετούνται σε κατάλληλες θέσεις στο δεξί µέλος ενός συντακτικού κανόνα. Κάθε ρουτίνα θεωρείται ειδικό σύµβολο της γραµµατικής 2, γι αυτό και προσµετράται όταν αριθµούνται τα σύµβολα του κανόνα για αναφορά στα κατηγορήµατα αυτών! Έτσι για παράδειγµα σε έναν κανόνα της µορφής: A : a B c D όπου a και c τερµατικά σύµβολα, η προσθήκη σηµασιολογικών ρουτινών µπορεί να δώσει ένα νέο κανόνα της µορφής: A : a B { code1 c D { code2 Η αντιστοίχηση κατηγορηµάτων σε σύµβολα γίνεται ως εξής: $1 : κατηγόρηµα του a $2 : κατηγόρηµα του B $3 : κατηγόρηµα του { code1 $4 : κατηγόρηµα του c 2 Επειδή η εισαγωγή νέων συµβόλων τροποποιεί τη γραµµατική, πρέπει να ελέγχουµε ότι ο συντακτικός αναλυτής συνεχίζει να λειτουργεί σωστά µετά την εισαγωγή κάποιας σηµασιολογικής ρουτίνας!

4 $5 : κατηγόρηµα του D $6 : κατηγόρηµα του { code2 $$ : κατηγόρηµα του A Τα $1 και $4 που αναφέρονται σε τερµατικά σύµβολα αν χρησιµοποιούνται πρέπει να έχουν λάβει τιµή από το λεκτικό αναλυτή (µε τη βοήθεια της µεταβλητής yylval). Τα $2 και $5 αν χρησιµοποιούνται πρέπει να λαµβάνουν τιµή από άλλους κανόνες που έχουν τα αντίστοιχα µη τερµατικά σύµβολα B και D στο αριστερό µέλος τους. Τα $3 και $6 µπορούν να χρησιµοποιηθούν σαν προσωρινές µεταβλητές. Το $$ λαµβάνει τιµή µέσα από τις δύο σηµασιολογικές ρουτίνες του κανόνα. Επειδή το Bison υλοποιεί συντακτικούς αναλυτές της οικογένειας LR, η αναγνώριση των συµβόλων στο δεξί µέλος ενός κανόνα γίνεται από αριστερά προς τα δεξιά. Έτσι, αναφορά σε ένα κατηγόρηµα από τα $1 - $6 δε µπορεί να γίνει πριν την αναγνώριση του αντίστοιχου συµβόλου. Για παράδειγµα, η ρουτίνα "code1" δε µπορεί να αναφερθεί στα κατηγορήµατα $4 - $6, αφού κατά τη στιγµή εκτέλεσής της έχουν αναγνωριστεί µόνο τα σύµβολα a και B του κανόνα, το οποίο σηµαίνει ότι µόνο τα $1 και $2 έχουν έγκυρες τιµές αν βέβαια αυτές τους έχουν αποδοθεί! Η ρουτίνα "code1" µπορεί να δώσει τιµή στο κατηγόρηµα $3, ώστε αυτό να χρησιµοποιηθεί από τη ρουτίνα "code2", όπως επίσης και στο κατηγόρηµα $$, το οποίο µπορεί να χρησιµοποιηθεί από τη ρουτίνα "code2" ή να επιστραφεί µε την ολοκλήρωση της αναγνώρισης του κανόνα (ελάττωση) σε κάποιον άλλο κανόνα που αναγνωρίζει το σύµβολο Α στο δεξί µέλος του, όντας στην ίδια κατάσταση συντακτικής ανάλυσης µε το στοιχείο ελάττωσης. Επειδή η µεταφορά πληροφορίας από σύµβολο σε σύµβολο και από κανόνα σε κανόνα µέσω των κατηγορηµάτων επιτυγχάνεται µε την εισαγωγή των τιµών αυτών στη στοίβα του συντακτικού αναλυτή, κάθε κατηγόρηµα παραµένει ενεργό µέχρι την ολοκλήρωση της αναγνώρισης του αντίστοιχου κανόνα µε την ελάττωσή του. Η επεξεργασία που γίνεται σε κάθε σηµασιολογική ρουτίνα περιλαµβάνει τουλάχιστον ένα από (α) έλεγχο σηµασιολογικής ορθότητας του προγράµµατος, (β) παραγωγή πληροφορίας που θα χρησιµοποιηθεί αργότερα, και (γ) παραγωγή ενδιάµεσου κώδικα. Έστω για παράδειγµα µια γλώσσα προγραµµατισµού, στην οποία η εφαρµογή ενός τελεστή Χ σε δύο τελούµενα γίνεται µε βάση το συντακτικό κανόνα: expression : expression X expression και διέπεται από το σηµασιολογικό κανόνα: "Τα τελούµενα του τελεστή Χ πρέπει να είναι τύπου Α ή Β, και το αποτέλεσµα της εφαρµογής του είναι τύπου Β, αν κάποιο τελούµενο είναι τύπου Β, διαφορετικά είναι τύπου Α." Αν ο µεταγλωττιστής της γλώσσας αυτής κατασκευάζει ενδιάµεσο κώδικα στη µορφή αφηρηµένου συντακτικού δέντρου και το σύµβολο expression έχει ως κατηγόρηµα έναν κόµβο αυτού, ο συντακτικός κανόνας, για να υλοποιεί τον πιο πάνω σηµασιολογικό περιορισµό, θα τροποποιηθεί ως εξής: expression : expression X expression { if (($1->type!= A) ($1->type!= B) ($3->type!= A) ($3->type!= B)) yyerror("mh symbata teloumena tou telesth X"); $$ = Create_Tree (opx, $1, $3); if (($1->type == B) ($3->type == B)) $$->type = B; else $$->type = A; όπου υποθέσαµε ότι ο κόµβος του αφηρηµένου συντακτικού δέντρου έχει κάποιο πεδίο type που αποθηκεύει τον τύπο αυτού. Ο τελεστής Χ αποθηκεύεται σε κάποιο άλλο πεδίο του κόµβου µε κατάλληλο κωδικό opx, µέσα από την κλήση της συνάρτησης Create_Tree(). Το πρώτο µέρος της πιο πάνω σηµασιολογικής ρουτίνας υλοποιεί τον έλεγχο συµβατότητας των τελούµενων του Χ, το δεύτερο µέρος παράγει ενδιάµεσο κώδικα, κατασκευάζοντας έναν κόµβο του αφηρηµένου συντακτικού δέντρου, ενώ το τρίτο µέρος παράγει κάποια πληροφορία για τον κόµβο, που θα χρησιµοποιηθεί αργότερα σε κάποια άλλη εκτέλεση σηµασιολογι-

5 κής ρουτίνας (πιθανά της ίδιας!). Ο κόµβος που κατασκευάστηκε αποθηκεύεται στο κατηγόρηµα $$, ώστε να µεταφερθεί σε άλλη αναγνώριση κανόνα. Χρήση καθολικών µεταβλητών στο µεταγλωττιστή Είδαµε πιο πάνω ότι η πληροφορία που συγκεντρώνεται κατά τη σηµασιολογική ανάλυση αποθηκεύεται στα κατηγορήµατα των συµβόλων της γραµµατικής. Επειδή στην πράξη η ση- µασιολογική ανάλυση γίνεται µέσα από τα µετα-εργαλεία συντακτικής ανάλυσης, υπάρχουν περιορισµοί στη χρήση των κατηγορηµάτων που προκύπτουν από τον τρόπο λειτουργίας αυτών των µετα-εργαλείων. Για παράδειγµα το Bison δεν υποστηρίζει κληρονοµούµενα κατηγορήµατα. Τέτοιοι περιορισµοί µας οδηγούν σε εναλλακτικές λύσεις, όπως είναι η χρήση καθολικών µεταβλητών στο µεταγλωττιστή για αποθήκευση πληροφορίας που σε ιδανικές συνθήκες θα αποθηκεύαµε σε κατηγορήµατα. Χαρακτηριστικό παράδειγµα καθολικής µεταβλητής που υλοποιείται σε κάθε µεταγλωττιστή είναι ο πίνακας συµβόλων. Λόγω της συχνής προσπέλασης του πίνακα συµβόλων, αν δεν τον υλοποιούσαµε ως καθολική µεταβλητή, θα έπρεπε να τον παρέχουµε ως κληρονοµούµενο κατηγόρηµα στα περισσότερα σύµβολα της γραµµατικής, αλλά και να επιστρέφεται από αυτά ως συντιθέµενο κατηγόρηµα. Τις πιο πολλές φορές, η µεταφορά του από σύµβολο σε σύµβολο θα γινόταν απλά για να φτάσει στον κανόνα στον οποίο πραγµατικά προσπελαύνεται, κάτι που θα αύξανε άσκοπα το χρόνο µεταγλώττισης του προγράµµατος. Ακόµα κι αν το µεταεργαλείο µας παρείχε τη δυνατότητα υποστήριξης κληρονοµούµενων κατηγορηµάτων, θα συνεχίζαµε να προτιµάµε την υλοποίηση του πίνακα συµβόλων ως καθολική µεταβλητή. Για παρόµοιους λόγους µπορούµε να ορίσουµε και να χρησιµοποιήσουµε και άλλες καθολικές µεταβλητές σε ένα µεταγλωττιστή, αλλά θα πρέπει να έχουµε υπ όψη τα εξής: 1. Πρέπει να έχουµε καλή κατανόηση της λειτουργίας του µετα-εργαλείου που χρησιµοποιούµε, ώστε να είµαστε σίγουροι ότι οι καθολικές µεταβλητές προσπελαύνονται µε τη σειρά που θέλουµε να προσπελαύνονται. Έτσι, για το Bison: α) Με τον τρόπο που ο συντακτικός αναλυτής εκτελεί τις κινήσεις του, µεταπηδάει συχνά από έναν κανόνα σε κάποιον άλλο, πριν ξαναγυρίσει στον πρώτο. Ένα κοινό λάθος είναι η χρήση µιας καθολικής µεταβλητής σε διαφορετικές θέσεις κάποιου κανόνα, νοµίζοντας ότι η τιµή της δε θα αλλάξει, όσο δεν υπάρχει ανάθεση σε αυτήν µέσα στις σηµασιολογικές ρουτίνες του κανόνα. Ίσως σε κάποιον άλλο κανόνα που χρησι- µοποιείται ανάµεσα στα σύµβολα του δεξιού µέλους του πρώτου, είναι πιθανό να έ- χουµε γράψει κώδικα που να περιέχει ανάθεση στην ίδια µεταβλητή. β) Ένας συντακτικός αναλυτής που χρησιµοποιεί ένα προπορευόµενο σύµβολο στις κινήσεις του, προχωράει µια λεκτική µονάδα παρακάτω από το σηµείο στο οποίο βρίσκεται. Εποµένως, αν µια καθολική µεταβλητή προσπελαύνεται και από το λεκτικό αναλυτή, είναι πολύ πιθανό να προσπελαστεί µε άλλη σειρά από την αναµενόµενη. 2. Οι πολλές καθολικές µεταβλητές κάνουν το µεταγλωττιστή δυσανάγνωστο, και δυσκολεύουν τη διόρθωση λαθών του. Εντολές, δηλώσεις και παραγωγή ενδιάµεσου κώδικα Γενικά στην παραγωγή του ενδιάµεσου κώδικα έχουµε δύο περιπτώσεις αρχικού κώδικα: (α) Αρχικό κώδικα που δεν είναι εκτελέσιµος, όπως είναι οι δηλώσεις. (β) Αρχικό κώδικα που είναι εκτελέσιµος, όπως είναι οι εντολές και οι αποτιµήσεις εκφράσεων. Στην πρώτη περίπτωση, ο αρχικός κώδικας παρέχει πληροφορίες που αποθηκεύονται σε διάφορες δοµές του µεταγλωττιστή, όπως στον πίνακα συµβόλων. Ο τελευταίος διατηρεί τις πληροφορίες του µόνο όσο διαρκεί η εµβέλεια στην οποία αυτές συγκεντρώθηκαν. Όποιες από αυτές χρειάζονται για το υπόλοιπο της µετάφρασης πρέπει να αποθηκεύονται και στον ενδιάµεσο κώδικα, όπως για παράδειγµα οι τύποι των µεταβλητών του προγράµµατος. Κάποιες πληροφορίες καταλήγουν και στον τελικό κώδικα, όπως για παράδειγµα οι αρχικές τι- µές στατικών µεταβλητών.

6 Στη δεύτερη περίπτωση από την άλλη µεριά, είναι πιθανό, αλλά όχι απαραίτητο, ο αρχικός κώδικας να παρέχει πληροφορίες όπως οι πιο πάνω. Ο τύπος του αποτελέσµατος της αποτί- µησης µιας έκφρασης είναι παράδειγµα πληροφορίας που συγκεντρώνεται από εκτελέσιµο αρχικό κώδικα. Πέρα από όποιες πληροφορίες, ένας εκτελέσιµος αρχικός κώδικας παράγει τόσο ενδιάµεσο, όσο και τελικό κώδικα 3. ηλώσεις και Χώροι εδοµένων Μια από τις πιο βασικές πληροφορίες που χρειαζόµαστε για την παραγωγή κώδικα είναι οι πληροφορίες δέσµευσης χώρου στη µνήµη για κάθε δεδοµένο του προγράµµατος. Κάθε µεταβλητή ενός προγράµµατος αποτελεί ένα δεδοµένο αυτού, που καταλαµβάνει κάποιο χώρο στη µνήµη. Κατά τη µετάφραση χρειαζόµαστε κάποιο προσχέδιο για την οργάνωση του χώρου δεδοµένων, ώστε να µπορούµε να ξέρουµε κατά την εκτέλεση του κώδικα, πού βρίσκεται κάθε δεδοµένο στη µνήµη. Για παράδειγµα, η εντολή C: x = a+2; πρέπει, όταν εκτελεστεί, να διαβάσει από το χώρο δεδοµένων την τιµή της µεταβλητής a, να εκτελέσει την πρόσθεση µε την ακέραια σταθερά 2, και να αποθηκεύσει το αποτέλεσµα πίσω στο χώρο δεδοµένων, στη θέση που αντιστοιχεί στη µεταβλητή x. Σε κάθε µία από τις δύο προσπελάσεις του χώρου δεδοµένων, ο κώδικας πρέπει να ξέρει ακριβώς ποια διεύθυνση θα προσπελάσει. Σε ένα ορθό πρόγραµµα, µια µεταβλητή χρησιµοποιείται µετά τη δήλωσή της. Εποµένως η δήλωση αυτής µπορεί να αποτελέσει το σηµείο στο οποίο θα δεσµεύσουµε στο χώρο δεδοµένων µια θέση γι αυτή. Στη συνέχεια, σε κάθε αναφορά της, το µόνο που χρειαζόµαστε για την παραγωγή του κώδικα είναι (α) η θέση της και (β) ο τύπος της. Με κάθε δέσµευση αναγράφουµε τον αριθµό θέσης στον πίνακα συµβόλων, ώστε να συνδέσουµε τις επόµενες αναφορές στη µεταβλητή µε τη θέση αυτή, όσο βέβαια διαρκεί η εµβέλεια στην οποία αυτή είναι δηλωµένη. Όταν µπορούµε να έχουµε πολλούς ενεργούς χώρους δεδοµένων, χρειαζόµαστε επιπλέον και την ένδειξη του χώρου δεδοµένων στον οποίο αναφερόµαστε. Για παράδειγµα, σε φωλιασµένα υποπρογράµµατα της Pascal µια αναφορά πρέπει να συνοδεύεται από το βάθος φωλιάσµατος στο οποίο ορίζεται η αντίστοιχη µεταβλητή, ενώ σε οποιαδήποτε συνάρτηση της C µια αναφορά πρέπει να συνοδεύεται από την ένδειξη καθολικής ή τοπικής µεταβλητής. Ας θεωρήσουµε το πιο κάτω πρόγραµµα C: int x; float y[10]; int A(unsigned i,float z) { int x[100]; static float a = -1.0; if (i > 10) { unsigned x; x = i; a += x+z; return 1; a += z+y[i]; return 0; Με την πρώτη δήλωση "int x", κατ αρχήν ενηµερώνουµε τον πίνακα συµβόλων για τον τύπο του αναγνωριστικού "x", ώστε να µπορούµε να ανιχνεύσουµε σηµασιολογικά σφάλµατα (α) από δεύτερη δήλωση του ίδιου αναγνωριστικού στην ίδια εµβέλεια, και (β) από λανθασµένη χρήση του αναγνωριστικού. Εκτός από την ενηµέρωση αυτή, πρέπει να δεσµεύσουµε κάποια θέση στο χώρο καθολικών δεδοµένων του προγράµµατος για τη µεταβλητή x, και να σηµειώσουµε ότι η θέση αυτή είναι τύπου int. Για απλούστευση δεσµεύουµε θέσεις σειριακά, κι ε- 3 Τελικός κώδικας δε θα παραχθεί, µόνο αν σε κάποια φάση βελτιστοποίησης ο ενδιάµεσος κώδικας για κάποιο λόγο απαλειφτεί.

7 ποµένως η µεταβλητή x θα αντιστοιχηθεί στην πρώτη θέση του καθολικού χώρου δεδοµένων του προγράµµατος. Για τη δέσµευση αυτή χρησιµοποιούµε ένα βοηθητικό πίνακα, τον πίνακα δέσµευσης του χώρου δεδοµένων στον οποίο αναφερόµαστε. Η σηµείωση του τύπου στον πίνακα δέσµευσης είναι απαραίτητη, επειδή θα µας χρειαστεί όταν βγούµε από την τρέχουσα εµβέλεια, οπότε και θα χάσουµε όποιες πληροφορίες µας παρέχει ο πίνακας συµβόλων για τη µεταβλητή x 4. Σε αντίθεση µε τον πίνακα συµβόλων, όπου οι πληροφορίες αποθηκεύονται µε βάση το όνοµα µιας µεταβλητής, κι εποµένως χάνονται µε την έξοδο από την εµβέλεια στην οποία αυτή δηλώνεται, ο πίνακας δέσµευσης αποθηκεύει τις πληροφορίες µε βάση τη θέση της µεταβλητής στο χώρο δεδοµένων, κι έτσι τις διατηρεί µέχρι το τέλος της µετάφρασης της µονάδας, ώστε οι δεσµεύσεις να µεταφέρονται στον τελικό κώδικα µε τη µορφή διευθύνσεων και µετατοπίσεων σε εντολές προσπέλασης µνήµης. Μάλιστα, επειδή ο ενδιάµεσος κώδικας δε γνωρίζει το µέγεθος των τύπων στην τελική γλώσσα µετάφρασης, ο πίνακας δέσµευσης χρησιµεύει και ως εργαλείο για τον υπολογισµό της επακριβούς λογικής διεύθυνσης και επακριβούς µετατόπισης σε ψηφιολέξεις κάθε µεταβλητής στο χώρο δεδοµένων της. Εδώ για παράδειγµα, εφ όσον δεν ξέρουµε τι αναπαράσταση έχει ο τύπος int στην τελική γλώσσα µετάφρασης, δηλαδή πόσες ψηφιολέξεις χρησιµοποιεί, δε µπορούµε να ξέρουµε τις µετατοπίσεις των επόµενων µεταβλητών στο χώρο δεδοµένων πριν την παραγωγή τελικού κώδικα, οπότε και θα µπορέσουµε να τις υπολογίσουµε. Με τη δήλωση "float y[10]" ενηµερώνουµε τον πίνακα συµβόλων και δεσµεύουµε τις επόµενες δέκα θέσεις στον ίδιο χώρο δεδοµένων, υποδεικνύοντας ότι αυτές είναι τύπου float. Ας σηµειωθεί ότι σε γλώσσες µε πολύπλοκες δοµές, δε µας αρκεί η αναφορά του τύπου µιας µεταβλητής, αλλά και η οργάνωση του τύπου αυτού, ώστε να µπορούµε αργότερα να υπολογίσουµε τις διευθύνσεις και µετατοπίσεις των επιµέρους στοιχείων ή πεδίων τους. Κάτι τέτοιο είναι απαραίτητο, όχι µόνο για αναφορές σε µεµονωµένα στοιχεία ή πεδία των µεταβλητών αυτών, αλλά και για αναφορές σε ολόκληρες τις δοµές, για γλώσσες που επιτρέπουν για παράδειγµα αναθέσεις ή συγκρίσεις σύνθετων τύπων. Τέλος, σε γλώσσες που το σύστηµα τύπων επιβάλλει δυναµικό έλεγχο ορθότητας µιας αναφοράς, η οργάνωση ενός τύπου µεταφέρεται στον τελικό κώδικα, ο οποίος πρέπει να εκτελεί αυτόν τον έλεγχο. Έτσι, για την πιο πάνω δήλωση, θα πρέπει να σηµειώσουµε ότι η δοµή είναι µονοδιάστατη µε 10 στοιχεία, ώ- στε να διαχωριστεί για παράδειγµα από τη δοµή που θα αντιστοιχούσε στη δήλωση "float y[2][5]". Μέσα στην εµβέλεια της συνάρτησης Α, ο χώρος δεδοµένων κατά την εκτέλεση του προγράµµατος θα είναι ένα εγγράφηµα δραστηριοποίησης, αφού η γλώσσα C χρησιµοποιεί εγγραφήµατα δραστηριοποίησης για υποστήριξη αναδροµής στις κλήσεις συναρτήσεων. Η µορφή των εγγραφηµάτων δραστηριοποίησης είναι σε µεγάλο βαθµό αυθαίρετη, και καθορίζεται από τους σχεδιαστές των µεταγλωττιστών. Εδώ θα ακολουθήσουµε µια µορφή, όπου στην αρχή του εγγραφήµατος δεσµεύουµε χώρο που σχετίζεται µε το µηχανισµό κλήσης της συνάρτησης και σύνδεσής της µε το υπόλοιπο περιβάλλον 5, και µετά δεσµεύουµε χώρο για τις τοπικές µεταβλητές της συνάρτησης. Έτσι, την πρώτη θέση του χώρου δεδοµένων τη δεσµεύουµε για αποθήκευση της διεύθυνσης επανόδου, µια θέση που τη θεωρούµε τύπου void*. Τη δεύτερη θέση τη δεσµεύουµε για αποθήκευση της τιµής του αποτελέσµατος της Α, τύπου int. Κάθε εκτέλεση της εντολής "return 1;" θα αποθηκεύει την τιµή 1 στη θέση αυτή. Στη συνέχεια, δεσµεύουµε δύο θέσεις για τις δύο παραµέτρους της Α, µια θέση τύπου unsigned και µια θέση τύπου float, και ενηµερώνου- µε τον πίνακα συµβόλων για τον τύπο των αντίστοιχων αναγνωριστικών "i" και "z", υποδεικνύοντας ταυτόχρονα ότι έχουµε δεσµεύσει γι αυτά την τρίτη και την τέταρτη θέση του χώρου δεδοµένων. Πριν από κάθε κλήση της Α, το καλούν περιβάλλον τοποθετεί τις τιµές των πραγµατικών παραµέτρων µε τη σειρά στις θέσεις αυτές. Εφαρµόζοντας κοινή τακτική για όλες τις κλήσεις συναρτήσεων, ξέρουµε πού πρέπει να τοποθετούµε τις τιµές των πραγµατι- 4 Εδώ δε θα συµβεί κάτι τέτοιο, αφού βρισκόµαστε στην εξωτερική εµβέλεια. Θα συνέβαινε όµως, αν βρισκόµαστε σε εσωτερική εµβέλεια. Για οµοιοµορφία επεξεργασίας, χρησιµοποιούµε πίνακες δέσµευσης για όλους τους χώρους δεδοµένων. 5 Για γλώσσες όπως η Pascal που υποστηρίζουν φωλιασµένες δηλώσεις υποπρογραµµάτων µε στατικό δέσιµο, τουλάχιστον µια θέση πρέπει να δεσµεύεται για το σύνδεσµο προσπέλασης.

8 κών παραµέτρων πριν από µία κλήση, και πού θα βρίσκεται το αποτέλεσµα της συνάρτησης µετά την κλήση, ενώ η συνάρτηση που καλείται θα ξέρει σε ποια διεύθυνση να επιστρέψει 6. Μετά το χώρο που δεσµεύσαµε για τις παραµέτρους της Α, δεσµεύουµε χώρο για τις τοπικές µεταβλητές στοίβας. Έτσι, δεσµεύουµε χώρο 100 θέσεων τύπου int, και ενηµερώνουµε κατάλληλα τον πίνακα συµβόλων για το αναγνωριστικό "x" της εµβέλειας της Α. Η µεταβλητή a είναι στατική, κι εποµένως θα τοποθετηθεί στην 12η θέση του χώρου καθολικών δεδοµένων. Αυτό δεν την καθιστά καθολική µεταβλητή, αφού δε θα είναι ορατή µόλις βγούµε από την εµβέλεια της συνάρτησης Α, αλλά της δίνει διάρκεια ζωής ίδια µε τη διάρκεια ζωής των καθολικών µεταβλητών, δηλαδή ίση µε το χρόνο εκτέλεσης του προγράµµατος. Ο τύπος της θέσης αυτής είναι float. Όταν µπαίνουµε στη φωλιασµένη εµβέλεια, η δήλωση "unsigned x" δεσµεύει µια νέα θέση στο εγγράφηµα δραστηριοποίησης της Α, τύπου unsigned. Άσχετα µε τις λειτουργίες του πίνακα συµβόλων για το χειρισµό φωλιασµένων εµβελειών, η µεταβλητή x θα τοποθετηθεί α- πλά στην επόµενη θέση του ίδιου εγγραφήµατος δραστηριοποίησης, και όχι σε νέο εγγράφη- µα. Όσο βρισκόµαστε στην ίδια συνάρτηση, νέες δηλώσεις δεσµεύουν νέες θέσεις, αλλά πάντα στον ίδιο χώρο δεδοµένων. υνατότητα συµπίεσης των δεσµεύσεων υπάρχει, αν υπάρχουν δηλώσεις µεταβλητών σε διαφορετικές εµβέλειες του ίδιου επιπέδου, για παράδειγµα στις δύο κατευθύνσεις µιας εντολής "if", οι οποίες δε θα µπορούσαν ποτέ να είναι ταυτόχρονα ενεργές, αλλά κάτι τέτοιο είναι αντικείµενο βελτιστοποίησης, και δε µπορεί να γίνει, πριν γίνουν γνωστά τα ακριβή µεγέθη σε ψηφιολέξεις των δεδοµένων της συνάρτησης. Για το λόγο αυτό, η ύπαρξη φωλιασµένων εµβελειών µέσα στην ίδια συνάρτηση δεν αυξάνει την πολυπλοκότητα της παραγωγής ενδιάµεσου κώδικα για αυτή. Με το παραπάνω προσχέδιο του εγγραφήµατος δραστηριοποίησης της Α, η αναφορά στην παράµετρο i γίνεται πάντα στην τρίτη θέση του χώρου δεδοµένων, η αναφορά στη µεταβλητή x µέσα στη φωλιασµένη εµβέλεια γίνεται στην 105η θέση του χώρου δεδοµένων, ενώ η αναφορά στην παράµετρο z γίνεται στην τέταρτη θέση του χώρου δεδοµένων. Οι αναφορές στη στατική µεταβλητή a και στον πίνακα y γίνονται στο χώρο καθολικών δεδοµένων, στις θέσεις 12 και 2-11, αντίστοιχα. Συµπερασµατικά: Σε κάθε δήλωση µεταβλητής δεσµεύουµε στον αντίστοιχο χώρο δεδοµένων τις θέσεις που απαιτούνται, συµπληρώνοντας τον πίνακα δέσµευσης µε τον τύπο και τη δοµή της µεταβλητής. Ακόµα, αντιγράφουµε το δείκτη του πίνακα δέσµευσης στον πίνακα συµβόλων, για την επίλυση όλων των αναφορών στη µεταβλητή αυτή στην τρέχουσα εµβέλεια και στην ορατότητά της. Ο πίνακας δέσµευσης µιας συνάρτησης αποτελεί εν τέλει συντιθέµενο κατηγόρηµα της δήλωσης αυτής, ώστε να παραµείνει προσπελάσιµος µετά την ολοκλήρωση της επεξεργασίας της, οπότε ο πίνακας συµβόλων καθαρίζεται από δηλώσεις της εµβέλειάς της. Ο πίνακας δέσµευσης αποτελεί ένα προσχέδιο του αντίστοιχου χώρου δεδοµένων και α- ποτελεί τη γέφυρα του πίνακα συµβόλων µε τον τελικό κώδικα. Μετά την παραγωγή ενδιάµεσου κώδικα δεν υπάρχει καµία δέσµευση ονοµάτων στο πρόγραµµα. Όλες οι µεταβλητές έχουν αντιστοιχηθεί σε κάποια θέση στο συνολικό χώρο δεδοµένων του προγράµµατος, είτε είναι στατικές είτε είναι µεταβλητές στοίβας. Πέρα από τις δηλώσεις µεταβλητών, οι δηλώσεις τύπων δε συνδέονται µε κάποια λειτουργία όπως αυτή που περιγράψαµε, αλλά χρησιµεύουν για να αποδίδουν κάποια ονόµατα σε τύπους, απαιτώντας την εισαγωγή τους στον πίνακα συµβόλων. Η περιγραφή της δοµής κάθε τύπου που χρειάζεται ο πίνακας δέσµευσης για τις µεταβλητές αυτού αποθηκεύεται έτσι στον πίνακα συµβόλων. Με την έξοδο από µια εµβέλεια, οι δηλώσεις τύπων της εµβέλειας καταστρέφονται, και οι αντίστοιχες περιγραφές έχουν περάσει στους πίνακες δέσµευσης. Τέλος, οι δηλώσεις σταθερών έχουν σαν αποτέλεσµα την εισαγωγή των ονοµάτων τους στον πίνακα συµβόλων, και την αντικατάσταση του ονόµατος µιας σταθεράς µε την τιµή της, κάθε 6 Οι θέσεις αυτές ενδέχεται να µη χρησιµοποιηθούν στον τελικό κώδικα, ανάλογα µε το πώς η τελική γλώσσα χρησιµοποιεί τους καταχωρητές της για την υλοποίηση κλήσεων συναρτήσεων.

9 φορά που αυτό χρησιµοποιείται. Εάν υποστηρίζονται σταθερές σύνθετου τύπου που µπορούν να περάσουν σαν παράµετροι σε υποπρογράµµατα, απαιτείται δέσµευση στο χώρο δεδοµένων γι αυτές, ώστε να έχουν κάποια διεύθυνση. Τότε, οι σταθερές αυτές χρησιµοποιούνται σα στατικές µεταβλητές στην εµβέλεια στην οποία δηλώνονται, και τοποθετούνται στον εξωτερικό χώρο δεδοµένων. Αρχικοποιήσεις Στατικών Μεταβλητών Οι αρχικοποιήσεις των στατικών µεταβλητών ενός προγράµµατος µε κάποιες τιµές πρέπει να γίνονται κατά τη µετάφρασή του. Αντί δηλαδή να παράγεται κώδικας που να αποθηκεύει αυτές τις τιµές στις αντίστοιχες θέσεις του χώρου δεδοµένων, ο χώρος δεδοµένων σχεδιάζεται µε αυτές τις τιµές. Έτσι, η δήλωση FORTRAN: integer x(100)/100*6/ που αποδίδει την τιµή 6 σε όλα τα στοιχεία του πίνακα x, δεν είναι εκτελέσιµη εντολή, αλλά έχει σαν αποτέλεσµα την αρχικοποίηση του χώρου δεδοµένων που δεσµεύεται για τον πίνακα x µε τις αντίστοιχες τιµές. Παρόµοια για τη δήλωση C που είδαµε νωρίτερα: static float a = -1.0; η τιµή -1.0 αποθηκεύεται στο χώρο δεδοµένων στη θέση της µεταβλητής a κατά τη σχεδίαση αυτού. Γενικά, ένας µεταγλωττιστής παράγει ένα αρχείο, το οποίο περιέχει τον εκτελέσιµο κώδικα, µαζί µε το χώρο δεδοµένων που αντιστοιχεί σε αρχικοποιηµένες στατικές µεταβλητές. Συνήθως ο χώρος δεδοµένων τακτοποιείται, ώστε οι αρχικοποιηµένες µεταβλητές να τοποθετούνται πρώτες, και οι υπόλοιπες να ακολουθούν, ώστε να µην απαιτείται αποθήκευση στο αρχείο εξόδου του µεταγλωττιστή ολόκληρου του χώρου δεδοµένων, παρά µόνο αυτού που α- ντιστοιχεί στις αρχικοποιηµένες µεταβλητές. Πληροφορία που αποθηκεύεται στο αρχείο ενη- µερώνει το φορτωτή (loader) του λειτουργικού συστήµατος για το συνολικό µέγεθος του χώρου δεδοµένων του προγράµµατος που πρέπει να ενεργοποιηθεί για την εκτέλεσή του. Έτσι, η δουλειά του µεταγλωττιστή στις αρχικοποιήσεις είναι να συνδέει τις δεσµευµένες θέσεις του χώρου δεδοµένων µε τις τιµές που δίνονται. Μ άλλα λόγια, οι πίνακες δέσµευσης επεκτείνονται, ώστε να περιέχουν και τις αποδιδόµενες τιµές, οι οποίες συµπληρώνονται µε κάθε τιµή που απαντάται στη λίστα αρχικών τιµών της αντίστοιχης δήλωσης. Στο τέλος της µετάφρασης, κατά την παραγωγή του αρχείου εξόδου του µεταγλωττιστή, αντιγράφονται σε αυτό οι τιµές από τους πίνακες δέσµευσης. Ας σηµειωθεί ότι η επέκταση των πινάκων δέσµευσης αφορά µόνο τους πίνακες όπου δεσµεύονται στατικές µεταβλητές. Στη FORTRAN όλες οι µεταβλητές είναι στατικές, ενώ στην PASCAL δεν υπάρχουν στατικές µεταβλητές. Στη C στατικές είναι όλες οι καθολικές µεταβλητές και όσες τοπικές µεταβλητές είναι δηλωµένες σα στατικές. Οι στατικές µεταβλητές της C δεσµεύονται στον εξωτερικό χώρο δεδοµένων. Παραγωγή Ενδιάµεσου Κώδικα Εκφράσεων Ο ενδιάµεσος κώδικας σε µορφή αφηρηµένου συντακτικού δέντρου που παράγεται για την αποτίµηση εκφράσεων είναι γενικά παρόµοιος µε τα δέντρα εκφράσεων, αν και µετά από βελτιστοποιήσεις που βρίσκουν κοινές υποεκφράσεις µπορεί να λάβει µορφή κατευθυνόµενου ακυκλικού γράφου. Χρησιµοποιώντας το Bison, και µε την προϋπόθεση ότι οι παράµετροι προτεραιότητας και προσεταιριστικότητας των τελεστών της αρχικής γλώσσας έχουν δοθεί σωστά, η παραγωγή του ενδιάµεσου κώδικα σε εκφράσεις είναι πολύ εύκολη. Παραδείγµατα σηµασιολογικών ρουτινών για την παραγωγή ενδιάµεσου κώδικα σε εκφράσεις είναι τα πιο κάτω: E : E op E { $$ = Create_Tree($2, $1, $3); E : ( E ) { $$ = $2; E : id { $$ = Create_Leaf(ID, $1); E : const { $$ = Create_Leaf(CONST, $1);

10 όπου οι συναρτήσεις Create_Tree() και Create_Leaf() δηµιουργούν ένα νέο κόµβο του δέντρου 7, και αποδίδουν στα πεδία αυτού κατάλληλες τιµές από τις παραµέτρους που τους δίνονται. Επιπλέον του παραπάνω κώδικα, οι ρουτίνες θα πρέπει να περιέχουν αν αυτό είναι απαραίτητο και τον κώδικα ελέγχου σηµασιολογικής ορθότητας και παραγωγής πληροφορίας που προαναφέραµε. Παραγωγή Ενδιάµεσου Κώδικα Εντολών Η κύρια διαφορά του κώδικα εντολών µε τον κώδικα εκφράσεων πάντα στη µορφή αφηρη- µένου συντακτικού δέντρου είναι ότι δεν έχει τόσο οµοιόµορφη δοµή όπως ο παραπάνω. Κάθε εντολή έχει το δικό της τύπο κόµβου, αν και δεν είναι δύσκολο να βρεθεί ένας τύπος που να καλύπτει όλες τις εντολές της αρχικής γλώσσας. Για παράδειγµα, οι περισσότερες εντολές αναφέρονται σε κάποια έκφραση: ανάθεση, εντολές βρόχου, εντολές διακλάδωσης, εντολές επιλογής. Έτσι, ο τύπος του κόµβου εντολής θα πρέπει να έχει πάντα ένα πεδίο δείκτη σε κώδικα έκφρασης. Παρόµοια, οι περισσότερες εντολές περιέχουν κάποια άλλη εντολή: εντολές διακλάδωσης, εντολές βρόχου, εντολές επανάληψης. Ο τύπος του κόµβου εντολής θα πρέπει εποµένως να έχει κι ένα πεδίο δείκτη σε άλλον κώδικα εντολής. Τα δύο αυτά πεδία αρκούν για εντολές όπως η εντολή "while" της Pascal και της C, ή η εντολή "λογικού if" της FORTRAN. Πιο πολύπλοκες εντολές απαιτούν περισσότερα πεδία στους κόµβους τους. Σε µια σύνθετη εντολή, η σύνδεση διαδοχικών εντολών στην ίδια εµβέλεια µπορεί να γίνει σε γραµµική λίστα, είτε σε δέντρο, µε βάση το συνήθη κανόνα: statements statements statement statement Θα πρέπει εδώ να σηµειωθεί ότι σε αρκετές από τις εντολές των συνηθισµένων γλωσσών προγραµµατισµού, η ολοκλήρωση της µετάφρασης σε ενδιάµεσο κώδικα γι αυτές δε µπορεί να γίνει, πριν την ολοκλήρωση της µετάφρασης κάποιου µπλοκ εντολών. Χαρακτηριστικό παράδειγµα αποτελούν οι εντολές goto, όταν αναφέρονται σε ετικέτες που δεν έχουν ακόµα εµφανιστεί, και οι οποίες θα πρέπει να υπάρχουν µέσα σε κάποιο συγκεκριµένο µπλοκ εντολών, σύµφωνα µε τους κανόνες σηµασιολογίας της αντίστοιχης γλώσσας. Τότε, εφαρµόζοντας τη µέθοδο του µπαλώµατος (backpatching), τοποθετούµε τους κόµβους εντολών που δεν έχουν µεταφραστεί πλήρως σε κάποια λίστα, έναν-έναν καθώς τους παράγουµε, και (α) σε κάθε εµφάνιση ετικέτας διατρέχουµε τη λίστα, ολοκληρώνουµε τη µετάφραση των εντολών που αναφέρονται σε αυτή, και αφαιρούµε τους αντίστοιχους κόµβους, ενώ (β) όταν φτάσουµε στο τέλος του µπλοκ, ανιχνεύουµε σηµασιολογικό σφάλµα αν η λίστα µας δεν είναι άδεια 8. Παραδείγµατα Θα µελετήσουµε στη συνέχεια τρία παραδείγµατα υλοποίησης σηµασιολογικών ρουτινών σε µια πιο γενική µορφή από αυτή του µετα-εργαλείου Bison, µε πολλαπλά κατηγορήµατα ανά σύµβολο, αν και πάντα συντιθέµενα, και µε αναφορά στα σύµβολα των κανόνων µε το όνοµά τους. Για µετατροπή σε µορφή κατάλληλη για το Bison, αρκεί κανείς να υλοποιήσει τα πολλαπλά κατηγορήµατα ως πολλαπλά πεδία του ίδιου σύνθετου τύπου εγγραφής, χρησιµοποιώντας ως τελικό µοναδικό κατηγόρηµα κάποιο δείκτη στον τύπο αυτόν, καθώς και να χρησι- µοποιήσει το συµβολισµό και την αρίθµηση των κατηγορηµάτων που ορίζει το Bison. 7 Ο τύπος του κόµβου του δέντρου είναι κάποια δοµή struct µε πεδία που καθορίζονται από τον προγραµµατιστή, από τα οποία τουλάχιστον ένα καθορίζει τον τελεστή που αντιστοιχεί στον κόµβο, και δύο είναι δείκτες στα παιδιά του κόµβου. Το φύλλο του δέντρου είναι ίδιου τύπου, όµως οι δείκτες στα παιδιά είναι µηδενικοί (NULL). 8 Η µέθοδος του µπαλώµατος δεν εφαρµόζεται µόνο για εντολές, αλλά και για δηλώσεις. Για παράδειγµα, η επεξεργασία δηλώσεων υποπρογραµµάτων µε προαναγγελία (Pascal), πρωτότυπο (C) ή απ ευθείας κλήση τους (FORTRAN) γίνεται µε αυτή τη µέθοδο.

11 Παράδειγµα 1. Ας θεωρήσουµε την παρακάτω γραµµατική αριθµητικών εκφράσεων κάποιας γλώσσας προγραµµατισµού: expr expr ADDOP expr expr MULOP expr ( expr ) ID όπου ADDOP η λεκτική µονάδα των τελεστών πρόσθεσης και αφαίρεσης, MULOP η λεκτική µονάδα των τελεστών πολλαπλασιασµού και διαίρεσης, και ID η λεκτική µονάδα των αναγνωριστικών της γλώσσας. Το σύστηµα τύπων της γλώσσας περιλαµβάνει δύο βασικούς αριθµητικούς τύπους, των ακεραίων και των πραγµατικών, και κάποιους σύνθετους τύπους, µεταξύ των οποίων είναι και ένας τύπος δεικτών. Ας υποθέσουµε ότι η σηµασιολογική περιγραφή των αριθµητικών εκφράσεων της γλώσσας περιλαµβάνει τα εξής: (α) Οι τύποι που συµµετέχουν στις αριθµητικές εκφράσεις είναι είτε βασικοί, ακέραιοι ή πραγµατικοί, είτε δείκτες. (β) Τα τελούµενα των πράξεων πρέπει να είναι βασικού τύπου, εκτός από τις πράξεις πρόσθεσης και αφαίρεσης, όπου µπορεί το ένα τελούµενο να είναι τύπου δείκτη, αλλά τότε το άλλο πρέπει να είναι ακέραιου τύπου. (γ) Αν σε µια πράξη µεταξύ βασικών τύπων συµµετέχει πραγµατικός τύπος, το αποτέλεσµα είναι πραγµατικού τύπου. (δ) Αν σε µια πράξη συµµετέχει τύπος δείκτη, το αποτέλεσµα είναι του ίδιου τύπου δείκτη. (ε) Τα αναγνωριστικά που συµµετέχουν σε µια έκφραση πρέπει να έχουν δηλωθεί νωρίτερα. (στ) Οι τελεστές MULOP έχουν µεγαλύτερη προτεραιότητα από τους τελεστές ADDOP, ενώ όλοι έχουν αριστερή προσεταιριστικότητα. (ζ) Οι πράξεις µέσα σε παρενθέσεις έχουν πάντα µεγαλύτερη προτεραιότητα από τις πράξεις που βρίσκονται έξω από αυτές. Για τη σηµασιολογική ανάλυση των αριθµητικών εκφράσεων, κατ αρχήν θα ενσωµατώσου- µε τις ιδιότητες προτεραιότητας και προσεταιριστικότητας των τελεστών στη γραµµατική της γλώσσας, ώστε να γίνει µη διφορούµενη. Για τη γενική περίπτωση, ανεξάρτητα δηλαδή του µετα-εργαλείου συντακτικής ανάλυσης που χρησιµοποιούµε, θα προχωρήσουµε σε µετασχη- µατισµό της γραµµατικής. Σε ψηλότερα επίπεδα θα διατηρήσουµε τελεστές χαµηλότερης προτεραιότητας, ενώ µε αριστερή αναδροµή θα εξασφαλίσουµε την αριστερή προσεταιριστικότητα. Έτσι, θα καταλήξουµε στη γραµµατική: expr expr ADDOP term term term term MULOP factor factor factor ( expr ) ID Ας σηµειωθεί ότι η µορφή της γραµµατικής µας εξασφαλίζει αυτόµατα τη σηµασιολογία των παρενθέσεων, κι έτσι δε χρειάζεται καµία παρέµβαση γι αυτό. Στη συνέχεια, για κάθε σύµβολο της γραµµατικής θα ορίσουµε τα απαιτούµενα κατηγορήµατα. Έτσι, τα τρία µη τερµατικά σύµβολα θα έχουν τουλάχιστον δύο κατηγορήµατα, το ένα έστω t_code θα δίνει τον κωδικό τύπου, και το άλλο έστω t_struct θα δίνει τη δοµή τύπου. Ας υποθέσουµε ότι οι δύο βασικοί τύποι που µας ενδιαφέρουν έχουν κωδικούς T_INT και T_REAL, ενώ ο τύπος των δεικτών έχει κωδικό T_POINT. Η µορφή του κατηγορήµατος t_struct δε θα µας απασχολήσει εδώ. Το τερµατικό σύµβολο ID θα έχει ένα κατηγόρηµα έστω name που θα δίνει το όνοµα του αναγνωριστικού. Υποθέστε ότι διαθέτουµε κάποια συνάρτηση αναζήτησης έστω lookup() που δεδοµένου ενός ονόµατος, µας επιστρέφει κάποιο δείκτη στον πίνακα συµβόλων του µεταγλωττιστή. Αν το αναγνωριστικό δεν έχει οριστεί νωρίτερα, η συνάρτηση µας επιστρέφει µηδενική τιµή. Κάθε στοιχείο του πίνακα συµβόλων περιέχει τουλάχιστον δύο πεδία που α- ποθηκεύουν πληροφορία για τον τύπο του αναγνωριστικού, τα οποία για απλούστευση θα θεωρήσουµε ότι έχουν το ίδιο όνοµα µε τα δύο κατηγορήµατα των µη τερµατικών συµβόλων που ορίσαµε νωρίτερα.

12 Ο σηµασιολογικός αναλυτής θα πρέπει µε βάση τα παραπάνω να ελέγχει την ορθότητα των τύπων που συµµετέχουν σε µια αριθµητική έκφραση, καθώς επίσης και να αποτιµά τα κατηγορήµατα του αριστερού µέλους κάθε συντακτικού κανόνα, ώστε αυτά να µπορούν να χρησι- µοποιηθούν σε ευρύτερες εκφράσεις. Σε µορφή σχήµατος µετάφρασης, µια υλοποίηση σε ψευδοκώδικα C των σηµασιολογικών ρουτινών που χρειαζόµαστε θα είναι: expr 0 expr 1 ADDOP term { if (expr 1.t_code == T_POINT) { if (term.t_code!= T_INT) sem_error(1); else { expr 0.t_code = T_POINT; expr 0.t_struct = expr 1.t_struct; else if (term.t_code == T_POINT) { if (expr 1.t_code!= T_INT) sem_error(1); else { expr 0.t_code = T_POINT; expr 0.t_struct = term.t_struct; else if (((expr 1.t_code!= T_REAL) && (expr 1.t_code!= T_INT)) ((term.t_code!= T_REAL) && (term.t_code!= T_INT))) sem_error(2); else if ((expr 1.t_code == T_REAL) (term.t_code == T_REAL)) expr 0.t_code = T_REAL; else expr 0.t_code = T_INT; expr term { expr.t_code = term.t_code; expr.t_struct = term.t_struct; term term MULOP factor { 0 1 if (((term 1.t_code!= T_REAL) && (term 1.t_code!= T_INT)) ((factor.t_code!= T_REAL) && (factor.t_code!= T_INT))) sem_error(3); else if ((term 1.t_code == T_REAL) (factor.t_code == T_REAL)) term 0.t_code = T_REAL; else term 0.t_code = T_INT; term factor { term.t_code = factor.t_code; term.t_struct = factor.t_struct; factor ( expr ) { factor.t_code = expr.t_code; factor.t_struct = expr.t_struct; factor ID { symbol_table_item * entry; if (!(entry = lookup(id.name))) sem_error(4); else { factor.t_code = entry->t_code; factor.t_struct = entry->t_struct;

13 όπου sem_error() κατάλληλη συνάρτηση διαχείρισης σηµασιολογικών σφαλµάτων, που στην απλούστερη περίπτωση δέχεται σαν παράµετρο κάποιον κωδικό σφάλµατος και εκτυπώνει κατάλληλο µήνυµα, τερµατίζοντας τη µετάφραση, ενώ symbol_table_item είναι ο τύπος των στοιχείων του πίνακα συµβόλων του µεταγλωττιστή. Παρατηρήστε ότι στην παραπάνω ανάλυση δε χρειάστηκε να διαχωρίσουµε τους τελεστές πρόσθεσης και αφαίρεσης, ή πολλαπλασιασµού και διαίρεσης, µεταξύ τους, εφ όσον δε διαφέρουν σηµασιολογικά, τουλάχιστον όσο αφορά τους τύπους των τελούµενών τους. Αν όµως προχωρούσαµε σε παραγωγή ενδιάµεσου κώδικα, θα έπρεπε να τους διαχωρίσουµε, και επο- µένως θα χρειαζόµασταν ένα κατάλληλο κατηγόρηµα για τα τερµατικά σύµβολα ADDOP και MULOP, το οποίο θα περνούσαµε στην αντίστοιχη σηµασιολογική ρουτίνα. Παράδειγµα 2. Ας θεωρήσουµε τώρα την πιο κάτω γραµµατική των εντολών διακλάδωσης κάποιας γλώσσας προγραµµατισµού: if_stmt KEY_IF expr KEY_ΤΗΕΝ stmt if_tail if_tail KEY_ELSE stmt ε όπου KEY_IF, KEY_THEN και KEY_ELSE οι λεκτικές µονάδες των αντίστοιχων λέξεωνκλειδιά, expr το µη τερµατικό σύµβολο των εκφράσεων, και stmt το µη τερµατικό σύµβολο των εντολών της γλώσσας. Το σύστηµα τύπων της γλώσσας περιλαµβάνει εκτός των άλλων ένα βασικό τύπο λογικών εκφράσεων. Ας υποθέσουµε ότι η σηµασιολογική περιγραφή των εντολών διακλάδωσης της γλώσσας περιλαµβάνει τα εξής: (α) Ο τύπος της έκφρασης στην εντολή διακλάδωσης πρέπει να είναι λογικός. (β) Αν το αποτέλεσµα της αποτίµησης της έκφρασης είναι TRUE, εκτελείται η εντολή που ακολουθεί τη λέξη-κλειδί THEN, διαφορετικά, και αν υπάρχει λέξη-κλειδί ELSE, εκτελείται η εντολή που την ακολουθεί. Ο έλεγχος ορθότητας µιας εντολής διακλάδωσης, όσο αφορά τον τύπο της έκφρασης, είναι πολύ απλός. Για την υλοποίησή του θέλουµε τουλάχιστον ένα κατηγόρηµα για το σύµβολο expr, έστω t_code, το οποίο να µας δίνει τον κωδικό τύπου της έκφρασης. Έστω ότι ο κωδικός του λογικού τύπου είναι ο T_BOOL. Ας υποθέσουµε ότι πέρα από τον έλεγχο ορθότητας, θέλουµε να παράγουµε και τον αντίστοιχο ενδιάµεσο κώδικα. Έτσι, θα χρειαστούµε ένα κατηγόρηµα για όλα τα µη τερµατικά σύµβολα της πιο πάνω γραµµατικής, έστω i_code, το οποίο να είναι ένας δείκτης σε κάποια µορφή ενδιάµεσου κώδικα. Υποθέστε ότι διαθέτουµε µια συνάρτηση έστω create_if_code(), η οποία παράγει τον ενδιάµεσο κώδικα µιας εντολής διακλάδωσης, δεδοµένων τριών δεικτών στους ενδιάµεσους κώδικες της έκφρασης, της πρώτης και της δεύτερης εντολής. Ο σηµασιολογικός αναλυτής θα πρέπει εποµένως να ελέγχει την ορθότητα του τύπου της έκφρασης, και αν αυτός είναι σωστός, να αποτιµά το κατηγόρηµα του συµβόλου if_stmt. Έτσι, µια υλοποίηση των σηµασιολογικών ρουτινών που χρειαζόµαστε, σε µορφή σχήµατος µετάφρασης και σε ψευδοκώδικα C, θα είναι: if_stmt KEY_IF expr KEY_ΤΗΕΝ stmt if_tail { if (expr.t_code!= T_BOOL) sem_error(1); else if_stmt.i_code = create_if_code(expr.i_code, stmt.i_code, if_tail.i_code); if_tail KEY_ELSE stmt { if_tail.i_code = stmt.i_code; if_tail ε { if_tail.i_code = 0;

14 όπου όπως και προηγουµένως, sem_error() είναι κατάλληλη ρουτίνα διαχείρισης σηµασιολογικών σφαλµάτων. Παρατηρήστε ότι ο πιο πάνω κώδικας καθυστερεί στην αναγνώριση σφάλµατος στον τύπο της έκφρασης. Θα µπορούσαµε εναλλακτικά να υλοποιήσουµε τον πρώτο κανόνα ως εξής: if_stmt KEY_IF expr { if (expr.t_code!= T_BOOL) sem_error(1); KEY_ΤΗΕΝ stmt if_tail { if_stmt.i_code = create_if_code(expr.i_code, stmt.i_code, if_tail.i_code); οπότε τυχόν σφάλµα ανιχνεύεται αµέσως µετά τη συντακτική αναγνώριση της έκφρασης, πριν προχωρήσουµε στη συντακτική αναγνώριση της µίας ή των δύο εντολών που συµπληρώνουν την εντολή διακλάδωσης. Παράδειγµα 3. Ας µελετήσουµε τέλος τη γραµµατική των δηλώσεων µεταβλητών κάποιας γλώσσας προγραµµατισµού: var_decl type ID dims ; type KEY_INT KEY_FLOAT ID dims dims [ ICONST ] ε όπου KEY_INT και KEY_FLOAT οι λεκτικές µονάδες των αντίστοιχων λέξεων-κλειδιά που παριστάνουν τους δύο βασικούς τύπους της γλώσσας, ακεραίων και πραγµατικών αντίστοιχα, ID η λεκτική µονάδα των αναγνωριστικών, και ICONST η λεκτική µονάδα των ακέραιων σταθερών της γλώσσας. Το σύστηµα τύπων της γλώσσας περιλαµβάνει τους δύο βασικούς και έναν αριθµό από σύνθετους τύπους. Ανάµεσα στους σύνθετους τύπους ορίζεται και ένας τύπος πίνακα, πολυδιάστατος, µε στοιχεία οποιουδήποτε τύπου. Οι σύνθετοι τύποι της γλώσσας µπορούν να ονοµάζονται µε δήλωση άλλης µορφής που δε θα µας απασχολήσει εδώ. Ας υποθέσουµε ότι η ση- µασιολογική περιγραφή των δηλώσεων µεταβλητών της γλώσσας περιλαµβάνει τα εξής: (α) Αν χρησιµοποιείται αναγνωριστικό τύπου για τη δήλωση του τύπου της µεταβλητής ή των στοιχείων του πίνακα, αυτό πρέπει να έχει δηλωθεί νωρίτερα. (β) Ο αριθµός διαστάσεων που δηλώνονται δε µπορεί να ξεπερνάει το 5. (γ) Το µέγεθος του πίνακα σε κάθε διάσταση καθορίζεται µε µια µη προσηµασµένη ακέραια σταθερά που δεν πρέπει να έχει µηδενική τιµή. (δ) Το όνοµα του αναγνωριστικού δεν πρέπει να είναι ήδη δηλωµένο. Για τη σηµασιολογική ανάλυση των δηλώσεων, θα υποθέσουµε ότι το µη τερµατικό σύµβολο type έχει τα δύο κατηγορήµατα που είδαµε νωρίτερα, t_code και t_struct. Οι κωδικοί των βασικών τύπων είναι T_INT και T_FLOAT, ενώ ο κωδικός T_ARRAY περιγράφει τύπο πίνακα. Μια δοµή αναπαράστασης τύπου για πίνακες θα πρέπει να περιέχει πληροφορίες για τα µεγέθη των διαστάσεων και τον τύπο των στοιχείων του πίνακα, και να κατασκευάζεται µε κατάλληλη συνάρτηση έστω την create_array(), η οποία δέχεται ως παραµέτρους τον κωδικό και τη δοµή τύπου του στοιχείου του πίνακα και επιστρέφει τη νέα δοµή. Το τερµατικό σύµβολο ICONST θα έχει ένα κατηγόρηµα έστω val που θα δίνει την τιµή της σταθεράς, ενώ το τερµατικό σύµβολο ID θα έχει ένα κατηγόρηµα έστω name που θα δίνει το όνοµα του αναγνωριστικού. Θεωρήστε ότι διαθέτουµε κάποια συνάρτηση αναζήτησης έστω lookup() που δεδοµένου ενός ονόµατος, µας επιστρέφει κάποιο δείκτη στον πίνακα συµβόλων, µηδενικής τιµής αν το αναγνωριστικό δεν έχει οριστεί νωρίτερα. Ακόµα, διαθέτουµε και κάποια συνάρτηση εισαγωγής έστω insert() που δεδοµένου κάποιου ονό- µατος, το εισάγει στον πίνακα συµβόλων του µεταγλωττιστή, επιστρέφοντας ένα δείκτη στο αντίστοιχο στοιχείο. Κάθε στοιχείο του πίνακα συµβόλων περιέχει τουλάχιστον τέσσερα πεδία που αποθηκεύουν πληροφορία για τον τύπο του αναγνωριστικού, τα δύο από τα οποία για

15 απλούστευση θα θεωρήσουµε ότι έχουν το ίδιο όνοµα µε τα δύο κατηγορήµατα του συµβόλου type, το τρίτο έστω t_type θα δίνει την πληροφορία αν το αναγνωριστικό αντιστοιχεί σε όνοµα τύπου ή όχι, ενώ το τέταρτο έστω t_dims θα δίνει τον αριθµό διαστάσεων του αναγνωριστικού. Το µη τερµατικό σύµβολο dims θα πρέπει να έχει ένα κληρονοµούµενο κατηγόρηµα, το ο- ποίο να δείχνει στο στοιχείο του πίνακα συµβόλων που µόλις έχουµε εισάγει, ώστε µε κάθε νέα διάσταση να προστίθεται σ αυτό η νέα πληροφορία. Εναλλακτικά, µπορούµε να µετασχηµατίσουµε τη γραµµατική σε άλλη ισοδύναµή της, στην οποία να µην απαιτείται κληρονοµούµενο κατηγόρηµα 9. Τέτοιος µετασχηµατισµός δεν είναι πάντα εφικτός, και γι αυτό θα προτιµήσουµε µια άλλη λύση, αυτή της χρήσης καθολικών µεταβλητών στο µεταγλωττιστή. Μια τέτοια λύση µπορεί να χρησιµοποιηθεί εδώ, διότι η γραµµατική δεν επιτρέπει µια νέα δήλωση να αρχίσει, πριν ολοκληρωθεί η προηγούµενη, κι έτσι δεν υπάρχει κίνδυνος λάθους αποτίµησης στις όποιες καθολικές µεταβλητές χρησιµοποιήσουµε. Έστω λοιπόν cur_item µια καθολική µεταβλητή δείκτη στον πίνακα συµβόλων, η οποία δείχνει στο πιο πρόσφατο στοιχείο που εισάγουµε σε αυτόν. Με τη βοήθεια της µεταβλητής αυτής θα µπορούµε να προσθέτουµε διαστάσεις σε ένα όνοµα του πίνακα συµβόλων. Θα αποφύγουµε προγραµµατιστικές λεπτοµέρειες και θα θεωρήσουµε ότι η προσθήκη διάστασης γίνεται µε κατάλληλη συνάρτηση έστω add_dim(), η οποία δέχεται ως παραµέτρους ένα δείκτη σε δοµή τύπου πίνακα και µια ακέραια σταθερά που αποτελεί το µέγεθος της νέας διάστασης. Ο σηµασιολογικός αναλυτής θα πρέπει µε βάση τα παραπάνω να ελέγχει την ορθότητα των δηλώσεων, και να εισάγει στον πίνακα συµβόλων όλες τις πληροφορίες που προκύπτουν σε κάθε δήλωση. Σε µορφή σχήµατος µετάφρασης, µια υλοποίηση σε ψευδοκώδικα C των ση- µασιολογικών ρουτινών που χρειαζόµαστε θα είναι: var_decl type ID { if (lookup(id.name)) sem_error(1); cur_item = insert(id.name); cur_item->t_code = type.t_code; cur_item->t_struct = type.t_struct; cur_item->t_type = 0; cur_item->t_dims = 0; dims ; type KEY_INT { type.t_code = T_INT; type KEY_FLOAT { type.t_code = T_FLOAT; type ID { symbol_table_item * entry; if (!(entry = lookup(id.name))) sem_error(2); else if (!entry->t.type) sem_error(3); else { type.t_code = entry->t_code; type.t_struct = entry->t_struct; 9 Μια κατάλληλη ισοδύναµη γραµµατική θα ήταν για παράδειγµα η ακόλουθη: var_decl var_decl_body ; var_decl_body var_decl_body [ ICONST ] type ID type INT FLOAT ID όπου εξασφαλίζεται ότι το σύµβολο type θα βρίσκεται κάτω από όλες τις εµφανίσεις του συµβόλου var_decl_body στο δέντρο συντακτικής ανάλυσης, κι έτσι δε χρειαζόµαστε κάποιο κληρονοµούµενο κατηγόρηµα, για να περάσουµε τις πληροφορίες τύπου από το πρώτο στο δεύτερο σύµβολο.

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

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

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

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

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

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

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

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Παραδείγματα Ενοτήτων 7-9 Ενότητα 7: Ενδιάμεσος κώδικας Άσκηση 7-1: Θεωρήστε τη γλώσσα προγραμματισμού C με τη γνωστή γραμματική

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Δεύτερη Σειρά Ασκήσεων 22 Νοεμβρίου 2016 Μέρος Α. (χειρόγραφη και ηλεκτρονική παράδοση 9 Δεκεμβρίου) Άσκηση 1: Θεωρήστε τη

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Δεύτερη Σειρά Ασκήσεων 22 Νοεμβρίου 2016 (χειρόγραφη και ηλεκτρονική παράδοση 9 Δεκεμβρίου) Άσκηση 1: Θεωρήστε τη γραμματική με κανόνες: Α B a A a c B B b A b

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

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

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

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

Θέματα Μεταγλωττιστών

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

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

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

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι Μεταγλωττιστές Εργαστήριο 9 Σημασιολογική Ανάλυση Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι 2016-2017 Σύνταξη και Σημασιολογία Σε οποιαδήποτε γλώσσα (προγραμματισμού ή μη) υπάρχουν δύο βασικές

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

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

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

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

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 1 η : Parsers Συντακτική Ανάλυση για ΓΧΣ Οι τεχνικές συντακτικής ανάλυσης κατηγοριοποιούνται με βάση διάφορα κριτήρια: Κατεύθυνση ανάλυσης μη τερματικών συμβόλων Σειρά επιλογής

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Μεταγλωττιστές Στοίβα Εκτέλεσης και Εγγραφήματα Δραστηριοποίησης Σε όλες σχεδόν τις μοντέρνες γλώσσες προγραμματισμού,

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

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 1 η : Parsers Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Συντακτική Ανάλυση για ΓΧΣ Οι τεχνικές συντακτικής ανάλυσης κατηγοριοποιούνται

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

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

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

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

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

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

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

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

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

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

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

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

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

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

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

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

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

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

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

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

Παρουσίαση του εργαλείου BISON Παρουσίαση του εργαλείου BISON Γεννήτρια Συντακτικών Αναλυτών Β Φάση Συντακτική Ανάλυση Χαρακτηριστικά του bison Γεννήτρια συντακτικών αναλυτών σε C/C++. Συµβατό µε το εργαλείο του Unixyacc. Σχετικά εύκολο

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

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

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

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραµµατισµός Ι (ΗΥ120)

Προγραµµατισµός Ι (ΗΥ120) Προγραµµατισµός Ι (ΗΥ120) Διάλεξη 15: Διασυνδεµένες Δοµές - Λίστες Δοµές δεδοµένων! Ένα τυπικό πρόγραµµα επεξεργάζεται δεδοµένα Πώς θα τα διατάξουµε? 2 Τι λειτουργίες θέλουµε να εκτελέσουµε? Πώς θα υλοποιήσουµε

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

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

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

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t) Προγραµµατισµός Ι (ΗΥ120) ιάλεξη 18: ιασυνδεµένες οµές - Λίστες ιασυνδεδεµένες δοµές δεδοµένων Η µνήµη ενός πίνακα δεσµεύεται συνεχόµενα. Η πρόσβαση στο i-οστό στοιχείο είναι άµεσηκαθώς η διεύθυνση του

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

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

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

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

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

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

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών. Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ Δεν κάνει compile και το λάθος είναι σηµαντικό: Το head1 είναι δείκτης σε struct, εποµένως η προσπέλαση πεδίου γίνεται 321 FAIL µε head1->next και όχι head1.next. Επιπλέον, έχετε λάθος

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

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

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

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

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

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

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

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

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

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

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

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

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

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

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

Οι δείκτες στη γλώσσα C

Οι δείκτες στη γλώσσα C Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς

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

Εισαγωγή στον Προγραμματισμό

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

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

Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων Πανεπιστήµιο Θεσσαλίας Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων Αρχιτεκτονική Υπολογιστών Εργασία Εξαµήνου: Προσοµοίωση ARM σε επίπεδο VHDL/Verilog 1. Μελέτη συνόλου εντολών και αρχιτεκτονικής ARM

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

scanf() scanf() stdin scanf() printf() int float double %lf float

scanf() scanf() stdin scanf() printf() int float double %lf float Εισαγωγή Στον Προγραµµατισµό «C» Είσοδος Δεδοµένων Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Η συνάρτηση scanf() Η συνάρτηση

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Παραδείγματα Ενοτήτων 1-2 Ενότητα 1: Εισαγωγή Άσκηση 1-1: Θεωρήστε μια υποθετική γλώσσα προγραμματισμού και την παρακάτω γραμματική

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Εκφράσεις και Λίγες Εντολές Οι εκφράσεις της C Τελεστές Απλές και σύνθετες εντολές Εντολές ελέγχου (επιλογής) Εισαγωγή σε

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

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

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

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

Εισαγωγή στον Προγραµµατισµό «C»

Εισαγωγή στον Προγραµµατισµό «C» Εισαγωγή Στον Προγραµµατισµό «C» Δείκτες Πανεπιστήµιο Πελοποννήσου Τµήµα Επιστήµης & Τεχνολογίας Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Μνήµη Υπολογιστή Η µνήµη RAM (Random Access Memory) ενός υπολογιστή

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

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράµµατα «γράφονται» χρησιµοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαµβάνει

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 2 ο Τύποι Δεδοµένων Δήλωση Μεταβλητών Έξοδος Δεδοµένων Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Μνήµη και Μεταβλητές Σχέση Μνήµης Υπολογιστή και Μεταβλητών Η µνήµη (RAM) ενός

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

8 FORTRAN 77/90/95/2003

8 FORTRAN 77/90/95/2003 ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 1: Εισαγωγή... 17 1.1. Ανασκόπηση της ιστορίας των υπολογιστών... 18 1.2. Πληροφορία και δεδομένα... 24 1.3. Ο Υπολογιστής... 26 1.4. Δομή και λειτουργία του υπολογιστή... 28 1.5.

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 3: Πίνακες, βρόχοι, συναρτήσεις 1 Ιουνίου 2017 Το σημερινό εργαστήριο

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως

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

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2011-2012 ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ Ποιος πρέπει να ολοκληρώσει αυτή την εργασία? Φοιτητές έτους >=2 που

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

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει.

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει. οµηµένες τεχνικές Ο στόχος των δοµηµένων τεχνικών είναι: Υψηλής ποιότητας προγράµµατα Εύκολη τροποποίηση προγραµµάτων Απλοποιηµένα προγράµµατα Μείωση κόστους και χρόνου ανάπτυξης. Οι βασικές αρχές τους

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

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

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

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

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ Α1. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και, δίπλα,

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

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη Επιλογή και επανάληψη Η ύλη που αναπτύσσεται σε αυτό το κεφάλαιο είναι συναφής µε την ύλη που αναπτύσσεται στο 2 ο κεφάλαιο. Όπου υπάρχουν διαφορές αναφέρονται ρητά. Προσέξτε ιδιαίτερα, πάντως, ότι στο

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2010 Ι ΑΣΚΩΝ: ΑΝΤΩΝΙΟΣ ΣΑΒΒΙ ΗΣ ΒΑΣΙΚΗ ΕΡΓΑΣΙΑ ΦΑΣΗ 2η από 5 Ανάθεση: Πέµπτη 15 Απριλίου 2010, 11:00 (πρωί)

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ ΘΕΜΑ Α ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ Α1. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και, δίπλα,

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

Εισαγωγή στον Προγραμματισμό

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

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

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

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

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

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

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

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

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

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

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 3 ο Συνδεδεµένες Λίστες Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση ΟΑΤ λίστα Ακολουθιακή λίστα Συνδεδεµένη λίστα

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 10: Δείκτες Δείκτες Υπάρχουν περιπτώσεις που δεν ενδιαφέρει το περιεχόμενο αλλά η μιας μεταβλητής. Χρειάζεται κατάλληλος μηχανισμός αναφοράς και επεξεργασίας τιμών που

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ ΑΡΧΗ 1ης ΣΕΛΙ ΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 ΘΕΜΑ Α : Α1. Να

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Μεταβλητές-Σταθερές-Παράμετροι Τα στοιχεία

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Πρώτη Σειρά Ασκήσεων 27 Οκτωβρίου 2016 Μέρος Α. (χειρόγραφη και ηλεκτρονική παράδοση 11 Νοεμβρίου) Άσκηση 1: Θεωρήστε το ακόλουθο

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

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

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

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

Πρόβλημα 37 / σελίδα 207

Πρόβλημα 37 / σελίδα 207 Πρόβλημα 37 / σελίδα 207 2.5. Ôåóô áõôïáîéïëüãçóçò Δίνονται οι παρακάτω ομάδες προτάσεων. Σε κάθε μία από αυτές, να κάνετε τις απαραίτητες διορθώσεις ώστε να ισχύουν οι προτάσεις 1. Η αναπαράσταση

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 1 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 1 1.1 ΕΙΣΑΓΩΓΗ ΣΤΗ FORTRAN 77 Ένα πρόγραµµα σε οποιαδήποτε γλώσσα προγραµµατισµού δεν τίποτα άλλο από µια σειρά εντολών που πρέπει

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

Βασικά στοιχεία της Java

Βασικά στοιχεία της Java Βασικά στοιχεία της Java προτάσεις, εκφράσεις, µεταβλητές, σταθερές, τελεστές Ορισµοί Πρόταση (statement) είναι µία απλή εντολή σε µία γλώσσα προγραµµατισµού. Γιαπαράδειγµα: int x=12; Έκφραση (expression)

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

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

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

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

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

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