ΘΠ06 Μεταγλωττιστές. Εργασία Εξαµήνου: Υλοποίηση ενός Μεταγλωττιστή για τη γλώσσα προγραµµατισµού Robin

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

Download "ΘΠ06 Μεταγλωττιστές. Εργασία Εξαµήνου: Υλοποίηση ενός Μεταγλωττιστή για τη γλώσσα προγραµµατισµού Robin"

Transcript

1 ΕΘΝΙΚΟ & ΚΑΠΟ ΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΘΠ06 Μεταγλωττιστές Εργασία Εξαµήνου: Υλοποίηση ενός Μεταγλωττιστή για τη γλώσσα προγραµµατισµού Robin ιδάσκων: Μανόλης Κουµπαράκης Βοηθός: Χαράλαµπος Νικολάου (charnik) 1

2 Εισαγωγή Η εργασία του µαθήµατος των µεταγλωττιστών αφορά τη σχεδίαση και υλοποίηση ενός µεταγλωττιστή για τη γλώσσα Robin η οποία περιγράφεται αναλυτικά παρακάτω. Γλώσσα υλοποίησης πρέπει να είναι η C++ ή η C (κατά προτίµηση και δική σας διευκόλυνση η C++) και τα εργαλεία flex και bison. Περισσότερες πληροφορίες σχετικά µε αυτά τα εργαλεία υπάρχουν στην ιστοσελίδα του µαθήµατος ( 1. Περιγραφή της γλώσσας Robin Η γλώσσα Robin είναι µια απλή γλώσσα προγραµµατισµού. Τα χαρακτηριστικά της εν συντοµία είναι τα εξής: βασικοί τύποι δεδοµένων για ακέραιους, χαρακτήρες και κινητής υποδιαστολής απλής ακρίβειας σύνθετοι τύποι δεδοµένων (οριζόµενοι από το χρήστη) µονοδιάστατοι πίνακες µε περιορισµένη λειτουργικότητα σύνταξη εντολών παρόµοια µε αυτή της γλώσσας C ορισµό και κλήση συναρτήσεων παρόµοια µε αυτή της γλώσσας C εµφωλιασµό µπλοκ εντολών και κανόνες εµβέλειας σύµφωνα µε τη γλώσσα C συµπερίληψη αρχείων Περισσότερες λεπτοµέρειες της γλώσσας δίνονται στις παραγράφους που ακολουθούν. 1.1 Αναγνωριστικά Τα αναγνωριστικά (identifiers) της γλώσσας Robin απαρτίζονται από γράµµατα (A..Z, a..z), ψηφία (0..9) και τον ειδικό χαρακτήρα _ (underscore). Ένα αναγνωριστικό δεν µπορεί να αρχίζει από ψηφίο. Τα πεζά γράµµατα διαφέρουν από τα αντίστοιχα κεφαλαία. Τα παρακάτω αναγνωριστικά είναι δεσµευµένα και δεν επιτρέπεται να χρησιµοποιούνται ως κοινά αναγνωριστικά. Η σηµασία τους εξηγείται σε επόµενες παραγράφους. char, int, float, else, if, main, return, void, while, record 1.2 Βασικοί τύποι δεδοµένων Οι βασικοί τύποι δεδοµένων που υποστηρίζει η γλώσσα Robin είναι τρεις: char (για χαρακτήρες), int (για ακεραίους) και float (για κινητής υποδιαστολής απλής ακρίβειας). Η χώρος µνήµης σε bytes που καταλαµβάνει ένας χαρακτήρας, ακέραιος και κινητής υποδιαστολής απλής ακρίβειας είναι 1, 4 και 4 αντίστοιχα. Οι ακέραιες σταθερές αποτελούνται από ένα προαιρετικό πρόσηµο ακολουθούµενο από ένα ή 2

3 περισσότερα δεκαδικά ψηφία. Παραδείγµατα ακέραιων σταθερών είναι τα εξής: Τις πραγµατικές σταθερές κινητής υποδιαστολής απλής ακρίβειας, που αποτελούνται από ένα ακέραιο µέρος, ένα κλασµατικό µέρος και ένα προαιρετικό εκθετικό µέρος. Το ακέραιο µέρος αποτελείται από ένα ή περισσότερα δεκαδικά ψηφία. Το κλασµατικό µέρος αποτελείται από το χαρακτήρα. της υποδιαστολής, ακολουθούµενο από ένα ή περισσότερα δεκαδικά ψηφία. Τέλος, το εκθετικό µέρος αποτελείται από το πεζό ή κεφαλαίο γράµµα E, ένα προαιρετικό πρόσηµο + ή - και ένα ή περισσότερα δεκαδικά ψηφία. Παραδείγµατα πραγµατικών σταθερών είναι τα ακόλουθα: e e e-3 Οι σταθερές τύπου χαρακτήρα αποτελούνται από έναν απλό ή ειδικό χαρακτήρα που περικλείεται από απλά εισαγωγικά. Ως απλοί χαρακτήρες θεωρούνται όλοι οι εκτυπώσιµοι χαρακτήρες πλην των εισαγωγικών (απλών και διπλών) και της ανάστροφης καθέτου \ (backslash). Οι ειδικοί χαρακτήρες χρησιµοποιούνται όπως στη γλώσσα C. Παριστάνονται ως ζεύγη χαρακτήρων, µε πρώτο την ανάστροφη κάθετο. Οι επιτρεπόµενοι ειδικοί χαρακτήρες είναι οι εξής: Χαρακτήρας Περιγραφή \n χαρακτήρας νέας γραµµής (new line) \" χαρακτήρας " (διπλό εισαγωγικό) \' χαρακτήρας ' (απλό εισαγωγικό) \0 χαρακτήρας µε ASCII κωδικό 0 \t χαρακτήρας αλλαγής στήλης (TAB) \\ χαρακτήρας \ (backslash) 1.3 Σύνθετοι τύποι δεδοµένων Η γλώσσα Robin επιτρέπει τον ορισµό σύνθετων τύπων δεδοµένων. Ένας σύνθετος τύπος δεδοµένων είναι µία συλλογή από µία ή περισσότερες µεταβλητές, πιθανώς διαφορετικών τύπων, που οµαδοποιούνται µε ένα µόνο όνοµα για ευκολία στο χειρισµό τους. Στο εξής θα ονοµάζουµε αυτές τις µεταβλητές πεδία (fields). Οι σύνθετοι τύποι δεδοµένων της γλώσσας Robin είναι αντίστοιχοι των δοµών (struct) της γλώσσας C και των εγγραφών (record) της γλώσσας Pascal. Τα πεδία ενός σύνθετου τύπου δεδοµένου της γλώσσας Robin µπορεί να έχουν τύπο µόνο κάποιο από τους βασικούς τύπους ή να είναι πίνακες βασικών τύπων. Έτσι, ένας σύνθετος τύπος δεν µπορεί να περιέχει έναν άλλο σύνθετο τύπο. Ένας σύνθετος τύπος σηµατοδοτείται µε τη δεσµευµένη λέξη record. Ένα παράδειγµα ενός σύνθετου τύπου είναι ο εξής: record point { int x; int y; 3

4 ; O παραπάνω σύνθετος τύπος αναπαριστά την έννοια του σηµείου στο επίπεδο. Κάθε σηµείο ορίζεται από τις συντεταγµένες του, την τετµηµένη και την τεταγµένη. Στον παραπάνω ορισµό αυτές αντιστοιχούν στα πεδία x και y αντίστοιχα. Μία δήλωση µεταβλητής ενός σύνθετου τύπου γίνεται ως εξής: record point p; Τα πεδία ενός σύνθετου τύπου προσπελαύνονται µε τον τελεστή. εφαρµοζόµενο πάνω σε µία µεταβλητή ενός σύνθετου τύπου και ακολουθούµενο από το όνοµα του πεδίου (π.χ. p.x ή p.y). Όλοι οι σύνθετοι τύποι ενός προγράµµατος θα πρέπει να ορίζονται πριν το κυρίως πρόγραµµα (βλ. επόµενη ενότητα). Ο χώρος µνήµης που καταλαµβάνει ένας σύνθετος τύπος εξαρτάται και υπολογίζεται αθροιστικά από τον αριθµό και το µέγεθος που καταλαµβάνουν τα πεδία του. Η Robin, όπως και η C, επιτρέπει τη δήλωση µεταβλητών µε όνοµα αυτό ενός σύνθετου τύπου δεδοµένων. 1.4 Πίνακες Εκτός από τους βασικούς και τους σύνθετους τύπους δεδοµένων, η γλώσσα Robin υποστηρίζει πίνακες (arrays) αποτελούµενους από στοιχεία των βασικών ή σύνθετων τύπων. Οι πίνακες όµως έχουν περιορισµένη λειτουργικότητα, όπως θα εξηγηθεί στις επόµενες παραγράφους. Κατά τον ορισµό µιας µεταβλητής τύπου πίνακα, πρέπει να ορίζεται το µήκος του, δηλαδή το πλήθος των στοιχείων που τον αποτελούν. Ένας πίνακας π.χ. 20 χαρακτήρων µε όνοµα name ορίζεται ως εξής: char name [20]; Τα στοιχεία του πίνακα µπορούν να προσπελαύνονται τοποθετώντας ένα δείκτη (έκφραση που επιστρέφει ακέραιο αριθµό) ανάµεσα σε αγκύλες, π.χ. name[5] Το πρώτο στοιχείο κάθε πίνακα αντιστοιχεί σε δείκτη 0, ενώ το τελευταίο σε δείκτη ίσο µε το µήκος του µείον ένα. Για τον πίνακα που ορίστηκε πιο πάνω, οι επιτρεπτές τιµές του δείκτη είναι οι ακέραιοι αριθµοί µεταξύ 0 και 19. Όπως σε κάθε γλώσσα προγραµµατισµού, έτσι και στη γλώσσα Robin ιδιαίτερα χρήσιµοι είναι οι πίνακες χαρακτήρων, που χρησιµοποιούνται για την αποθήκευση συµβολοσειρών (strings). Η Robin επιτρέπει τη χρήση σταθερών συµβολοσειρών, δηλαδή σταθερών πινάκων αποτελούµενων από χαρακτήρες. Οι συµβολοσειρές είναι ακολουθίες απλών και ειδικών χαρακτήρων που περικλείονται από διπλά εισαγωγικά. Παραδείγµατα συµβολοσειρών είναι τα εξής: "This is a string!" "Hello world!\n" "My phone number is: " Για την παράσταση των συµβολοσειρών, η γλώσσα Robin χρησιµοποιεί την ίδια σύµβαση µε τη C, δηλαδή οι συµβολοσειρές είναι ακολουθίες χαρακτήρων που τερµατίζονται µε τον 4

5 ειδικό χαρακτήρα \0 και δεν επιτρέπεται να εκτείνονται σε παραπάνω από µία γραµµή. Κατ αυτό τον τρόπο το πραγµατικό µήκος µιας συµβολοσειράς είναι κατά ένα µεγαλύτερο από το πλήθος των χαρακτήρων που την αποτελούν και πρέπει να γίνεται πρόβλεψη για τον επιπλέον χαρακτήρα. 1.5 Μονάδες προγράµµατος Ένα πρόγραµµα της γλώσσας Robin έχει τη δοµή ενός προγράµµατος C. Η γλώσσα Robin δε διαφοροποιεί τις µονάδες προγράµµατος: το κυρίως πρόγραµµα, οι διαδικασίες και οι συναρτήσεις αντιµετωπίζονται από κοινού ως συναρτήσεις, και ως τέτοιες δηλώνονται. Το κυρίως πρόγραµµα πρέπει να ονοµάζεται main και να επιστρέφει τύπο void. Σε περίπτωση που κάποια µονάδα προγράµµατος δεν επιστρέφει αποτέλεσµα, τότε δηλώνεται µε τύπο void. Επισηµαίνεται ότι µια συνάρτηση δεν µπορεί να επιστρέφει αποτέλεσµα τύπου πίνακα. Οι συναρτήσεις (όπως άλλωστε και οι µεταβλητές) πρέπει να έχουν δηλωθεί πριν χρησιµοποιηθούν. Η δήλωση αυτή µπορεί να γίνει µε δυο τρόπους: µε πλήρη ορισµό (επικεφαλίδα και κώδικας) µε απλή δήλωση (επικεφαλίδα µόνο) Στην περίπτωση δήλωσης συνάρτησης µε απλή δήλωση, ο ορισµός της θα πρέπει να παρουσιασθεί κάποια στιγµή στη συνέχεια του προγράµµατος. Σε κάθε περίπτωση η δήλωση και ο ορισµός κάθε συνάρτησης πρέπει να παρουσιάζεται µία µόνο φορά. Οι παράµετροι των συναρτήσεων µπορούν να περνούν µε δύο τρόπους: κατ αξία ή κατ αναφορά. Το πέρασµα κατ αναφορά δηλώνεται µε το σύµβολο & που προηγείται του ονόµατος της τυπικής παραµέτρου στην επικεφαλίδα της συνάρτησης, π.χ. void f (int by_value, int & by_reference) Στην περίπτωση που κάποια τυπική παράµετρος µιας συνάρτησης είναι πίνακας, στην επικεφαλίδα της συνάρτησης δεν αναγράφεται το µήκος του πίνακα. Αν είναι απαραίτητο αυτό να είναι γνωστό στη συνάρτηση, πρέπει να περνάει ως ανεξάρτητη παράµετρος. Πίνακες µπορούν να περνούν και µε τους δύο τρόπους (αξία και αναφορά). Παραδείγµατα συναρτήσεων µε τυπικές παραµέτρους τύπου πίνακα είναι οι εξής: void print (char s[]) int sum (int & values[], int size) 1.6 Εντολές Οι εντολές της γλώσσας Robin έχουν ακριβώς την ίδια µορφή µε τις αντίστοιχες εντολές της γλώσσας C. Με εξαίρεση τη σύνθετη εντολή (compound statement), πρέπει να τερµατίζονται υποχρεωτικά µε το χαρακτήρα ; (semicolon). Η εντολή εκχώρησης έχει την ίδια σύνταξη και σηµασιολογία µε την αντίστοιχη εντολή της C. Επιτρέπεται µόνο η εκχώρηση απλών τύπων: απαγορεύεται η εκχώρηση ολόκληρων πινάκων, αλλά επιτρέπεται η εκχώρηση σε στοιχεία πίνακα. Επίσης, δεν επιτρέπεται η εκχώρηση τιµής µεταξύ διαφορετικών τύπων, εκτός της περίπτωσης της εκχώρησης της τιµής ενός ακεραίου σε µία µεταβλητή τύπου κινητής υποδιαστολής. 5

6 Οι εντολές ελέγχου που επιτρέπει η γλώσσα είναι οι εξής : if ( λογική-έκφραση ) εντολή [ else εντολή ] while ( λογική-έκφραση ) εντολή Η σηµασιολογία των εντολών αυτών είναι η ίδια όπως στη γλώσσα C. Η εντολή κλήσης συνάρτησης έχει την ίδια σύνταξη και σηµασιολογία µε την αντίστοιχη εντολή της γλώσσας C. Η εντολή return χρησιµοποιείται για την επιστροφή από συνάρτηση. Όταν πρόκειται για συνάρτηση που επιστρέφει κάποιο τύπο, πρέπει να ακολουθείται από έκφραση του ίδιου τύπου µε αυτόν που επιστρέφει η συνάρτηση. 1.7 Τελεστές Οι τελεστές της γλώσσας Robin δίνονται παρακάτω. Η προτεραιότητα (precedence) και η προσεταιριστικότητα (associativity) των τελεστών αυτών είναι η ίδια µε αυτή των τελεστών της γλώσσας C (για λεπτοµέρειες ανατρέξτε στο βιβλίο των Kernighan & Ritchie, Η Γλώσσα Προγραµµατισµού C ). εν υπάρχουν τελεστές που να επιστρέφουν αποτέλεσµα τύπου χαρακτήρα ή πίνακα Αριθµητικοί τελεστές Οι αριθµητικοί τελεστές µε ένα τελούµενο της γλώσσας Robin είναι οι εξής: Τελεστής Σηµασία + Θετικό πρόσηµο (ταυτότητα) - Αρνητικό πρόσηµο (αντίθετος) Οι δυαδικοί αριθµητικοί τελεστές της γλώσσας είναι οι εξής: Τελεστής Σηµασία + Πρόσθεση ακεραίων - Αφαίρεση ακεραίων * Πολλαπλασιασµός ακεραίων / Πηλίκο ακέραιας διαίρεσης % Υπόλοιπο ακέραιας διαίρεσης Τα τελούµενα των αριθµητικών τελεστών πρέπει να είναι έγκυρες αριθµητικές εκφράσεις ακέραιου τύπου (int) ή τύπου κινητής υποδιαστολής (float). Στην περίπτωση των δυαδικών αριθµητικών τελεστών, αν και τα δύο είναι ακέραιου τύπου, τότε και το αποτέλεσµα είναι ακέραιου τύπου, διαφορετικά το αποτέλεσµα είναι τύπου κινητής υποδιαστολής, float. Στην περίπτωση του τελεστή υπολοίπου ακέραιας διαίρεσης, %, τα τελούµενα, όπως και το αποτέλεσµα της πράξης, θα πρέπει να είναι ακέραιου τύπου Σχεσιακοί τελεστές Οι σχεσιακοί τελεστές της γλώσσας Robin φαίνονται στον παρακάτω πίνακα. Τα τελούµενά τους πρέπει να είναι έγκυρες ακέραιες εκφράσεις ή χαρακτήρες. Πρέπει όµως τα δυο 6

7 τελούµενα να είναι του ίδιου τύπου. Απαγορεύονται συγκρίσεις ολόκληρων πινάκων, επιτρέπονται όµως οι συγκρίσεις στοιχείων πινάκων. Συγκρίσεις µεταξύ χαρακτήρων γίνονται µε βάση τους αντίστοιχους κωδικούς ASCII (ακέραιοι από 0 ως 255). Τελεστής Σηµασία == ίσο!= διάφορο > µεγαλύτερο < µικρότερο >= µεγαλύτερο ή ίσο <= µικρότερο ή ίσο! Τα αποτελέσµατα των σχεσιακών τελεστών είναι λογικές εκφράσεις. Οι εκφράσεις αυτές µπορούν να χρησιµοποιηθούν µόνο σε εντολές if και while. εν µπορούν να εκχωρηθούν σε µεταβλητές, να περάσουν ως παράµετροι ούτε να επιστραφούν ως αποτελέσµατα συναρτήσεων Λογικοί τελεστές Οι λογικοί τελεστές της γλώσσας Robin είναι τρεις: Τελεστής Σηµασία Λογική διάζευξη (ή) && Λογική σύζευξη (και)! Λογική άρνηση (όχι) Οι τελεστές και && είναι δυαδικοί, ενώ ο τελεστής! δέχεται ένα τελούµενο. Τα τελούµενα πρέπει να είναι έγκυρες λογικές εκφράσεις. Το αποτέλεσµα είναι επίσης λογική έκφραση Τελεστής προσπέλασης πεδίου Η Robin χρησιµοποιεί τον τελεστή προσπέλασης πεδίου,., για την αναφορά σε πεδία σύνθετων τύπων δεδοµένων. Ο τελεστής αναφοράς µπορεί να εφαρµοστεί µόνο σε τελούµενα σύνθετων τύπων δεδοµένων. 1.8 Σχόλια Τα σχόλια στη γλώσσα Robin είναι δυο ειδών. Τα κοινά σχόλια είναι ίδια µε αυτά της γλώσσας C. Περικλείονται από τις ακολουθίες χαρακτήρων /* και */ και δεν µπορούν να είναι φωλιασµένα (nested). Η γλώσσα Robin, όµως, υποστηρίζει και ένα δεύτερο τύπο σχολίων, που αρχίζουν µε την ακολουθία χαρακτήρων // και εκτείνονται ως το τέλος της γραµµής (όπως στη γλώσσα C++). 7

8 1.9 Οδηγίες προς το µεταγλωττιστή Η µοναδική οδηγία, που επιτρέπει ο µεταγλωττιστής της γλώσσας Robin είναι η οδηγία #include. Η οδηγία αυτή έχει την ίδια σηµασιολογία όπως και στη γλώσσα C, δηλαδή επιτρέπει την ανάγνωση ενός εξωτερικού αρχείου σαν αυτό να ήταν τµήµα του προγράµµατος. Πρέπει να βρίσκεται υποχρεωτικά στην αρχή του προγράµµατος. Η σύνταξή της είναι η εξής: #include "όνοµα αρχείου" Η οδηγία αυτή απευθύνεται ουσιαστικά στο λεκτικό αναλυτή. Σε περίπτωση που αυτός συναντήσει αυτή την οδηγία, θα πρέπει να σταµατήσει την ανάγνωση του αρχείου προγράµµατος, και να συνεχίσει µε την επεξεργασία του αρχείου που ζητείται να συµπεριληφθεί. Μετά το τέλος αυτού του αρχείου, ο λεκτικός αναλυτής πρέπει να συνεχίσει από το σηµείο του αρχείου προγράµµατος, στο οποίο είχε σταµατήσει. Για δική σας ευκολία, τα αρχεία που διαβάζονται µε την οδηγία #include δεν µπορούν να περιέχουν αντίστοιχες οδηγίες. Φυσικά µεµονωµένες λεκτικές µονάδες καθώς και σχόλια πρέπει να περιέχονται πλήρως σε ένα αρχείο προγράµµατος (δεν επιτρέπεται να αρχίζουν σε ένα αρχείο προγράµµατος και να τελειώνουν σε κάποιο άλλο). 2. Η γραµµατική της γλώσσας Robin Παρακάτω δίνεται η γραµµατική της γλώσσας Robin σε µορφή extended BNF. Τα τερµατικά σύµβολα αναγράφονται µε έντονους χαρακτήρες και µέσα σε διπλά εισαγωγικά. Μέσα σε γωνιακές αγκύλες αναγράφονται τα µη τερµατικά σύµβολα και κατ εξαίρεση οι λεκτικές µονάδες: <integer-constant> : ακέραια σταθερά (χωρίς πρόσηµο) <char-constant> : σταθερή τύπου χαρακτήρα <string-constant> : σταθερή συµβολοσειρά <id> : αναγνωριστικό Ακολουθεί η γραµµατική της γλώσσας. <program> <global-declaration-definition> ::= (<global-declaration-definition>)* <program-header> <compound-statement> (<function-definition>)* <record-definition> ::= <composite_type> { <composite_type> ::= record <id> ::= (<function-prototype>) (<record-definition>) (<function-definition>) (<variable-definition>) (<primitive-type-def>)+ ; 8

9 <program-header> ::= void main ( ) <function-prototype> ::= <function-header> ; <function-definition> ::= <function-header> <compound-statement> <function-header> ::= <return-type> <id> ( [<formal-params>] ) <return-type> ::= <data-type> <composite-type> void <formal-params> ::= <formal-parameter> (, <formal-parameter>)* <formal-parameter> ::= <data-type> [ & ] <id> [ [ ] ] <data-type> <composite-type> [ & ] <id> [ [ ] ] ::= int float char <variable-definition> ::= <primitive-type-def> <composite-type-def> <primitive-type-def> ::= <data-type> <def-one-variable> (, <def-one-variable>)* ; <composite-type-def> ::= <composite_type> <def-one-variable> (, <def-one-variable>)* ; <def-one-variable> ::= <id> [ [ <integer-constant> ] ] <statement> ::= <assignment> <if-statement> <while-statement> <void-function-call> <return-statement> <compound-statement> <empty-statement> <assignment> ::= <comp_l-value> = <expression> ; <comp_l-value> ::= <id>. <l-value> <l-value> <l-value> ::= <id> [ [ <expression> ] ] <if-statement> ::= if ( <b-expression> ) <statement> [ else <statement>] <while-statement> ::= while ( <b-expression> ) <statement> <void-function-call> ::= <function-call> ; <function-call> ::= <id> ( [ <actual-params> ] ) <actual-params> ::= <actual-parameter> (, <actual-parameter>)* <actual-parameter> ::= <expression> <string-constant> <return-statement> ::= return [ <expression> ] ; <empty-statement> ::= ; <compound-statement> ::= { (<variable-definition>)* (<statement>)* <b-expression> ::= <b-expression> <b-expression> <b-expression> && <b-expression> 9

10 ! <b-expression> <expression> == <expression> <expression>!= <expression> <expression> > <expression> <expression> < <expression> <expression> >= <expression> <expression> <= <expression> <expression> ::= <expression> + <expression> <expression> - <expression> <expression> * <expression> <expression> / <expression> <expression> % <expression> + <expression> - <expression> <comp_l-value> <integer-constant> <char-constant> <function-call> 3. Η βιβλιοθήκη έτοιµων συναρτήσεων Όπως και στη C, προκειµένου να υλοποιηθούν λειτουργίες που δεν υποστηρίζονται άµεσα από τη γλώσσα Robin (π.χ., είσοδος/έξοδος), χρειαζόµαστε βιβλιοθήκες έτοιµων συναρτήσεων. Στην περίπτωση της Robin θα υποθέσουµε ότι έχουµε µια standard inputoutput library που καθορίζεται από το αρχείο robin_io.rob. Το αρχείο αυτό πρέπει να περικλείεται σε κάθε πρόγραµµα που χρησιµοποιεί λειτουργίες input/output χρησιµοποιώντας την οδηγία #include. Επειδή δεν θα δηµιουργήσουµε τελικό κώδικα δεν µας ενδιαφέρει να έχουµε µια υλοποίηση των συναρτήσεων που περιλαµβάνονται στο αρχείο robin_io.rob. Για τις ανάγκες της εργασίας σας λοιπόν, απλά δηµιουργείστε ένα αρχείο robin_io.rob που να περιέχει τα πρωτότυπα των παρακάτω συναρτήσεων που υλοποιούν τις λειτουργίες input/output για τους τύπους δεδοµένων της γλώσσας Robin. void put_char (char c) Εκτυπώνει το χαρακτήρα c στο τρέχον αρχείο εξόδου. void put_int (int i) Εκτυπώνει τον ακέραιο i στο τρέχον αρχείο εξόδου σε δεκαδική µορφή. void put_float (float f) Εκτυπώνει τον δεκαδικό f στο τρέχον αρχείο εξόδου. void put_string (char s[]) Εκτυπώνει τη συµβολοσειρά s στο τρέχον αρχείο εξόδου. Η συµβολοσειρά πρέπει να τερµατίζεται µε τον ειδικό χαρακτήρα \0. char get_char () ιαβάζει και επιστρέφει ένα χαρακτήρα από το αρχείο εισόδου. Σε περίπτωση που δεν 10

11 υπάρχουν άλλοι χαρακτήρες (τέλος αρχείου) επιστρέφεται ο ειδικός χαρακτήρας \0. int get_int () ιαβάζει και επιστρέφει έναν ακέραιο αριθµό από το τρέχον αρχείο εισόδου σε δεκαδική µορφή. Αγνοούνται κενοί χαρακτήρες που πιθανώς προηγούνται του ακέραιου αριθµού. float get_float () ιαβάζει και επιστρέφει ένα δεκαδικό αριθµό από το τρέχον αρχείο εισόδου. Αγνοούνται κενοί χαρακτήρες που πιθανώς προηγούνται του δεκαδικού αριθµού. void get_string (char & s[], int size) ιαβάζει µια συµβολοσειρά από το τρέχον αρχείο εισόδου και την αποθηκεύει στη µεταβλητή s. Η µεταβλητή size περιέχει το µήκος της συµβολοσειράς s και χρησιµεύει ως όριο χαρακτήρων που µπορούν να τοποθετηθούν σε αυτή. ιαβάζονται χαρακτήρες µέχρι να εξαντληθεί το µήκος της συµβολοσειράς s ή να συναντηθεί ο ειδικός χαρακτήρας \n (τέλος γραµµής). Ο χαρακτήρας αυτός αφαιρείται από το αρχείο εισόδου, δεν τοποθετείται όµως στη συµβολοσειρά s. Η συµβολοσειρά s πάντα τερµατίζεται µε τον ειδικό χαρακτήρα \0. 4. Παραδείγµατα Στην παράγραφο αυτή δίνονται τέσσερα παραδείγµατα προγραµµάτων στη γλώσσα Robin. ίνεται επίσης ο ενδιάµεσος κώδικας, που πρέπει να παράγεται από το µεταγλωττιστή της Robin. Σηµειώνεται ότι σε καµιά φάση της µεταγλώττισης δεν έχουν γίνει βελτιστοποιήσεις. 4.1 Πες γεια! Το παρακάτω παράδειγµα είναι το απλούστερο πρόγραµµα στη γλώσσα Robin, που παράγει κάποιο αποτέλεσµα ορατό στο χρήστη. Το πρόγραµµα αυτό τυπώνει απλώς το µήνυµα: "Hello world!". #include "robin_io.rob" void main () { put_string("hello world!\n"); 4.2 Οι πύργοι του Hanoi Το πρόγραµµα που ακολουθεί λύνει το πρόβληµα των πύργων του Hanoi. Μια σύντοµη περιγραφή του προβλήµατος δίνεται παρακάτω. Υπάρχουν τρεις στύλοι, στον πρώτο από τους οποίους είναι περασµένοι n το πλήθος δακτύλιοι. Οι εξωτερικές διάµετροι των δακτυλίων είναι διαφορετικές και αυτοί είναι περασµένοι από κάτω προς τα πάνω σε αύξουσα σειρά εξωτερικής διαµέτρου, όπως φαίνεται στο Σχ.1. Ζητείται να µεταφερθούν οι δακτύλιοι από τον πρώτο στον τρίτο στύλο 11

12 left middle right Σχ.1. Οι πύργοι του Hanoi. (χρησιµοποιώντας το δεύτερο ως βοηθητικό χώρο), ακολουθώντας όµως τους εξής κανόνες : Κάθε φορά επιτρέπεται να µεταφερθεί ένας µόνο δακτύλιος, από κάποιο στύλο σε κάποιον άλλο στύλο. Απαγορεύεται να τοποθετηθεί δακτύλιος µε µεγαλύτερη διάµετρο πάνω από δακτύλιο µε µικρότερη διάµετρο. Το πρόγραµµα στη γλώσσα Robin που λύνει αυτό το πρόβληµα δίνεται παρακάτω. Η συνάρτηση hanoi είναι αναδροµική. #include "robin_io.rob" void hanoi (char source[], char target[], char auxiliary[], int rings); void move (char source[], char target[]); void main () { int NumberOfRings; put_string("please, give the number of rings : "); NumberOfRings = get_int(); put_string("\nhere is the solution :\n\n"); hanoi("left", "right", "middle", NumberOfRings); void hanoi (char source[], char target[], char auxiliary[], int rings) { if (rings < 1) return; else { hanoi(source, auxiliary, target, rings-1); move(source, target); hanoi(auxiliary, target, source, rings-1); void move (char source[], char target[]) { put_string("move from "); put_string(source); put_string(" to "); put_string(target); put_string(".\n"); 12

13 Ο ενδιάµεσος κώδικας, που πρέπει να παράγεται από το µεταγλωττιστή της Robin είναι ο εξής: 1: unit, move, -, - 2: par, "Move from ", V, - 3: call, -, -, put_string 4: par, source, V, - 5: call, -, -, put_string 6: par, " to ", V, - 7: call, -, -, put_string 8: par, target, V, - 9: call, -, -, put_string 10: par, ".\n", V, - 11: call, -, -, put_string 12: endu, move, -, - 13: unit, hanoi, -, - 14: <, rings, 1, 16 15: jump, -, -, 17 16: ret, -, -, - 17: par, source, V, - 18: par, auxiliary, V, - 19: par, target, V, - 20: -, rings, 1, $1 21: par, $1, V, - 22: call, -, -, hanoi 23: par, source, V, - 24: par, target, V, - 25: call, -, -, move 26: par, auxiliary, V, - 27: par, target, V, - 28: par, source, V, - 29: -, rings, 1, $2 30: par, $2, V, - 31: call, -, -, hanoi 32: endu, hanoi, -, - 33: unit, main, -, - 34: par, "Please, give the number of rings : ", V, - 35: call, -, -, put_string 36: par, $3, RET, - 37: call, -, -, get_int 38: :=, $3, -, NumberOfRings 39: par, "\nhere is the solution :\n\n", V, - 40: call, -, -, put_string 41: par, "left", V, - 42: par, "right", V, - 43: par, "middle", V, - 44: par, NumberOfRings, V, - 45: call, -, -, hanoi 46: endu, main, -, Πρώτοι αριθµοί Το παρακάτω παράδειγµα προγράµµατος στη γλώσσα Robin είναι ένα πρόγραµµα που υπολογίζει τους πρώτους αριθµούς µεταξύ 1 και n, όπου το n καθορίζεται από το χρήστη. Το πρόγραµµα αυτό χρησιµοποιεί έναν απλό αλγόριθµο για τον υπολογισµό των πρώτων αριθµών. Μια διατύπωση αυτού του αλγορίθµου σε ψευδογλώσσα δίνεται παρακάτω. Λαµβάνεται υπόψη ότι οι αριθµοί 2 και 3 είναι πρώτοι, και στη συνέχεια εξετάζονται µόνο οι αριθµοί της µορφής 6k±1, όπου k ακέραιος αριθµός. 13

14 Κύριο πρόγραµµα τύπωσε τους αριθµούς 2 και 3 t := 6 όσο t <= n κάνε τα εξής : αν ο αριθµός t-1 είναι πρώτος τότε τύπωσέ τον αν ο αριθµός t+1 είναι πρώτος τότε τύπωσέ τον t := t+6 Αλγόριθµος ελέγχου (είναι ο αριθµός t πρώτος;) αν t < 0 τότε έλεγξε τον αριθµό -t αν t < 2 τότε ο t δεν είναι πρώτος αν t = 2 τότε ο t είναι πρώτος αν ο t διαιρείται µε το 2 τότε ο t δεν είναι πρώτος i := 3 όσο i <= t/2 κάνε τα εξής : αν ο t διαιρείται µε τον i τότε ο t δεν είναι πρώτος i := i + 2 o t είναι πρώτος Το αντίστοιχο πρόγραµµα σε γλώσσα Robin είναι το εξής: #include "robin_io.rob" int prime (int n); void main () { int limit, number, counter; put_string("please, give the upper limit : "); limit = get_int(); put_string("prime numbers between 0 and "); put_int(limit); put_string("\n\n"); counter = 0; if (limit >= 2) { counter = counter + 1; put_string("2\n"); if (limit >= 3) { counter = counter + 1; put_string("3\n"); number = 6; while (number <= limit) { if (prime(number-1) > 0) { counter = counter + 1; put_int(number-1); put_string("\n"); if (number!= limit && prime(number+1) > 0) { counter = counter + 1; put_int(number+1); put_string("\n"); number = number + 6; put_string("\n"); put_int(counter); put_string(" prime number(s) were found.\n"); int prime (int n) { int i; 14

15 if (n < 0) return prime(-n); if (n < 2) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; i = 3; while (i <= n/2) { if (n % i == 0) return 0; i = i+2; return 1; Ο ενδιάµεσος κώδικας, που πρέπει να παράγεται από το µεταγλωττιστή της Robin δίνεται παρακάτω. 1: unit, prime, -, - 2: <, n, 0, 4 3: jump, -, -, 10 4: -, n, -, $1 5: par, $1, V, - 6: par, $2, RET, - 7: call, -, -, prime 8: retv, $2, -, - 9: ret, -, -, - 10: <, n, 2, 12 11: jump, -, -, 14 12: retv, 0, -, - 13: ret, -, -, - 14: =, n, 2, 16 15: jump, -, -, 18 16: retv, 1, -, - 17: ret, -, -, - 18: %, n, 2, $3 19: =, $3, 0, 21 20: jump, -, -, 23 21: retv, 0, -, - 22: ret, -, -, - 23: :=, 3, -, i 24: /, n, 2, $4 25: <=, i, $4, 27 26: jump, -, -, 35 27: %, n, i, $5 28: =, $5, 0, 30 29: jump, -, -, 32 30: retv, 0, -, - 31: ret, -, -, - 32: +, i, 2, $6 33: :=, $6, -, i 34: jump, -, -, 24 35: retv, 1, -, - 36: ret, -, -, - 37: endu, prime, -, - 38: unit, main, -, - 39: par, "Please, give the upper limit : ", V, - 40: call, -, -, put_string 41: par, $7, RET, - 42: call, -, -, get_int 43: :=, $7, -, limit 44: par, "Prime numbers between 0 and ", V, - 15

16 45: call, -, -, put_string 46: par, limit, V, - 47: call, -, -, put_int 48: par, "\n\n", V, - 49: call, -, -, put_string 50: :=, 0, -, counter 51: >=, limit, 2, 53 52: jump, -, -, 57 53: +, counter, 1, $8 54: :=, $8, -, counter 55: par, "2\n", V, - 56: call, -, -, put_string 57: >=, limit, 3, 59 58: jump, -, -, 63 59: +, counter, 1, $9 60: :=, $9, -, counter 61: par, "3\n", V, - 62: call, -, -, put_string 63: :=, 6, -, number 64: <=, number, limit, 66 65: jump, -, -, 97 66: -, number, 1, $10 67: par, $10, V, - 68: par, $11, RET, - 69: call, -, -, prime 70: >, $11, 0, 72 71: jump, -, -, 79 72: +, counter, 1, $12 73: :=, $12, -, counter 74: -, number, 1, $13 75: par, $13, V, - 76: call, -, -, put_int 77: par, "\n", V, - 78: call, -, -, put_string 79: <>, number, limit, 81 80: jump, -, -, 94 81: +, number, 1, $14 82: par, $14, V, - 83: par, $15, RET, - 84: call, -, -, prime 85: >, $15, 0, 87 86: jump, -, -, 94 87: +, counter, 1, $16 88: :=, $16, -, counter 89: +, number, 1, $17 90: par, $17, V, - 91: call, -, -, put_int 92: par, "\n", V, - 93: call, -, -, put_string 94: +, number, 6, $18 95: :=, $18, -, number 96: jump, -, -, 64 97: par, "\n", V, - 98: call, -, -, put_string 99: par, counter, V, - 100: call, -, -, put_int 101: par, " prime number(s) were found.\n", V, - 102: call, -, -, put_string 103: endu, main4.4, -, Ταξινόµηση µε τη µέθοδο της φυσαλίδας Ο αλγόριθµος της φυσαλίδας (bubble sort) είναι ένας από τους πιο γνωστούς και απλούς αλγορίθµους ταξινόµησης. Το παρακάτω πρόγραµµα σε Robin ταξινοµεί έναν πίνακα ακεραίων αριθµών κατ αύξουσα σειρά, χρησιµοποιώντας αυτό τον αλγόριθµο. Αν x είναι ο 16

17 πίνακας που πρέπει να ταξινοµηθεί και n είναι το µέγεθός του (θεωρούµε ότι τα στοιχεία του είναι τα x[0], x[1],..., x[n-1]), ο αλγόριθµος περιγράφεται µε ψευδοκώδικα ως εξής: Αλγόριθµος της φυσαλίδας (bubble sort) επανάλαβε το εξής για i από 0 ως n-2 αν x[i] < x[i+1] αντίστρεψε τα x[i] και x[i+1] όσο µεταβάλλεται η σειρά των στοιχείων του x Το αντίστοιχο πρόγραµµα σε γλώσσα Robin είναι το εξής : #include "robin_io.rob" void swap (int & x, int & y); void PrintArray (char msg[], int array[], int size); void BubbleSort (int & array[], int size); void main () { int i, x[16], seed; i = 0; seed = 65; while (i < 16) { seed = (seed * i) % 101; x[i] = seed; i = i + 1; PrintArray("Initial array: ", x, 16); BubbleSort(x, 16); PrintArray("Sorted array: ", x, 16); void swap (int & x, int & y) { int t; t = x; x = y; y = t; void PrintArray (char msg[], int array[], int size) { int i; put_string(msg); i = 0; while (i < size) { if (i > 0) put_string(", "); put_int(array[i]); i = i+1; put_string("\n"); void BubbleSort (int & array[], int size) { int i, changed; changed = 1; while (changed == 1) { i = 0; changed = 0; while (i < size-1) { if (array[i] < array[i+1]) { swap(array[i], array[i+1]); 17

18 changed = 1; i = i+1; Ο ενδιάµεσος κώδικας, που πρέπει να παράγεται από το µεταγλωττιστή της Robin δίνεται παρακάτω. 1: unit, swap, -, - 2: :=, x, -, t 3: :=, y, -, x 4: :=, t, -, y 5: endu, swap, -, - 6: unit, BubbleSort, -, - 7: :=, 1, -, changed 8: =, changed, 1, 10 9: jump, -, -, 27 10: :=, 0, -, i 11: :=, 0, -, changed 12: -, size, 1, $1 13: <, i, $1, 15 14: jump, -, -, 26 15: +, i, 1, $2 16: <, array[i], array[$2], 18 17: jump, -, -, 23 18: par, array[i], R, - 19: +, i, 1, $3 20: par, array[$3], R, - 21: call, -, -, swap 22: :=, 1, -, changed 23: +, i, 1, $4 24: :=, $4, -, i 25: jump, -, -, 13 26: jump, -, -, 8 27: endu, BubbleSort, -, - 28: unit, PrintArray, -, - 29: par, msg, V, - 30: call, -, -, put_string 31: :=, 0, -, i 32: <, i, size, 34 33: jump, -, -, 43 34: >, i, 0, 36 35: jump, -, -, 38 36: par, ", ", V, - 37: call, -, -, put_string 38: par, array[i], V, - 39: call, -, -, put_int 40: +, i, 1, $5 41: :=, $5, -, i 42: jump, -, -, 32 43: par, "\n", V, - 44: call, -, -, put_string 45: endu, PrintArray, -, - 46: unit, main, -, - 47: :=, 0, -, i 48: :=, 65, -, seed 49: <, i, 16, 51 50: jump, -, -, 60 51: *, seed, 137, $6 52: +, $6, 221, $7 18

19 53: +, $7, i, $8 54: %, $8, 101, $9 55: :=, $9, -, seed 56: :=, seed, -, x[i] 57: +, i, 1, $10 58: :=, $10, -, i 59: jump, -, -, 49 60: par, "Initial array: ", V, - 61: par, x, V, - 62: par, 16, V, - 63: call, -, -, PrintArray 64: par, x, R, - 65: par, 16, V, - 66: call, -, -, BubbleSort 67: par, "Sorted array: ", V, - 68: par, x, V, - 69: par, 16, V, - 70: call, -, -, PrintArray 71: endu, main, -, - 5. Στάδια της Εργασίας και Βαθµολογία Τα στάδια της εργασίας, τα αντίστοιχα τµήµατα του µεταγλωττιστή, η κατανοµή των µονάδων (6 από 10 που αντιστοιχούν στο µάθηµα), και η ηµεροµηνία παράδοσης του κάθε σταδίου φαίνονται στον παρακάτω πίνακα. Στάδιο Τµήµα του µεταγλωττιστή Μονάδες Ηµεροµηνία Παράδοσης 1 Υλοποίηση λεκτικού αναλυτή µε flex /03/ Υλοποίηση συντακτικού αναλυτή µε bison 1 12/04/ Υλοποίηση πίνακα συµβόλων και /05/2010 σηµασιολογικής ανάλυσης 4 Παραγωγή ενδιάµεσου κώδικα 2 24/05/ Παραγωγή τελικού κώδικα 2 (bonus) Συνολική εργασία 6 (max 8) Παρατηρήσεις: 1. Η εργασία θα εκπονηθεί από οµάδες φοιτητών που θα αποτελούνται από το πολύ 2 άτοµα. 2. Η εξέταση της εργασίας και η βαθµολογία θα είναι ατοµική! Η εξέτασης της εργασίας θα γίνει λίγες µέρες µετά την 24/05/2010 (λεπτοµέρειες θα δοθούν εν καιρώ). 3. Ο κώδικας που θα παραδώσετε για κάθε στάδιο θα πρέπει να περιέχει και τον κώδικα για όλα τα προηγούµενα στάδια. Στις 24/05/2010 εκτός από τον κώδικα θα πρέπει να παραδώσετε και µια αναλυτική έκθεση ανά οµάδα η οποία θα καλύπτει την εργασία στο σύνολο της και θα αναλύει τις τεχνικές που χρησιµοποιήθηκαν. Οι εκθέσεις σας δεν θα γίνουν δεκτές αν είναι γραµµένες µε το χέρι (θα πρέπει να χρησιµοποιήσετε κάποιο κειµενογράφο π.χ. Μicrosoft Word, LaTeX κλπ.). Το περιεχόµενο της έκθεσης περιγράφεται παρακάτω (Κεφ. 6.1). 19

20 4. Εκπρόθεσµες εργασίες δεν θα γίνονται δεκτές. Αν δεν παραδώσετε κάποιο στάδιο της εργασίας, χάνετε όλους τους βαθµούς που αναλογούν σ αυτό το στάδιο. 5. Η υλοποίηση της οδηγίας συµπερίληψης αρχείων #include είναι προαιρετική. 5.1 Περιεχόµενα Έκθεσης Κατά την εξέταση της εργασίας, κάθε οµάδα θα πρέπει να παραδώσει µια έκθεση (10-15 σελίδες + κώδικας) που καλύπτει όλα τα λειτουργικά τµήµατα του µεταγλωττιστή που υλοποιήθηκε: 1. Λεκτικός Αναλυτής. Να περιγράψετε προσεκτικά την επικοινωνία του λεκτικού αναλυτή µε το συντακτικό αναλυτή και να δώσετε τον κώδικα σε flex που υλοποιεί τον λεκτικό αναλυτή. 2. Συντακτικός αναλυτής. Γι αυτό το τµήµα του µεταγλωττιστή πρέπει να κάνετε τα εξής: Να δώσετε τη γραµµατική της Robin σε µορφή γραµµατικής χωρίς συµφραζόµενα. Να εξηγήσετε ποιες συγκρούσεις µετάθεσης/αναγωγής ή αναγωγής/αναγωγής υπάρχουν και πως τις αποφεύγετε στην υλοποίηση σας µε bison. Να δώσετε τον κώδικα σε bison που υλοποιεί την συντακτική ανάλυση. 3. Πίνακας συµβόλων. Να περιγράψετε προσεκτικά τι πληροφορίες αποθηκεύονται στον πίνακα συµβόλων για κάθε είδος ονόµατος της Robin, ποια µέθοδος υλοποίησης χρησιµοποιείται, και πως αντιµετωπίζεται το πρόβληµα της εµβέλειας ονοµάτων. 4. ηλώσεις ονοµάτων. Να περιγράψετε προσεκτικά τι κάνει ο µεταγλωττιστής σας για κάθε περίπτωση δήλωσης ονόµατος και να δώσετε το σχετικό κώδικα σε bison. 5. Ενδιάµεσος κώδικας για τις υπόλοιπες εντολές. Να περιγράψετε προσεκτικά τον ενδιάµεσο κώδικα που δηµιουργεί ο µεταγλωττιστής σας για κάθε άλλη εντολή και να δώσετε τον σχετικό κώδικα σε bison. 6. Έλεγχος ορθότητας προγραµµάτων και µηνύµατα λάθους. Να περιγράψετε αναλυτικά τα λάθη που εντοπίζονται από τον µεταγλωττιστή σας και τις τεχνικές που χρησιµοποιείτε για να τα αντιµετωπίσετε. Αυτή η συζήτηση είναι δυνατόν να ενσωµατωθεί στην περιγραφή των διαφόρων λειτουργικών τµηµάτων του µεταγλωττιστή. 7. Παραδείγµατα. Θα πρέπει επίσης να δώσετε τουλάχιστον 1 πρόγραµµα της Robin που έχετε χρησιµοποιήσει σαν test για κάθε χαρακτηριστικό της γλώσσας που ελέγχετε, καθώς και την έξοδο που δίνει ο µεταγλωττιστής σας γι αυτά τα προγράµµατα. Οι έλεγχοι θα πρέπει να συµπεριλαµβάνουν και περιπτώσεις λαθών και πώς ο µεταγλωττιστής σας τις αντιµετωπίζει. 20

21 Αν δεν έχετε υλοποιήσει κάποιο µέρος του µεταγλωττιστή, θα πρέπει να το εξηγήσετε καθαρά στην έκθεση σας. Αν δεν το κάνετε αυτό, θα χάσετε περισσότερες µονάδες κατά την βαθµολόγηση. 6. Επίλογος Στη διάρκεια του εξαµήνου θα δοθούν και άλλες διευκρινίσεις και αναλυτικά παραδείγµατα µεταγλώττισης. Να παρακολουθείτε τις παραδόσεις, τις ασκήσεις και την ιστοσελίδα του µαθήµατος. Καλή επιτυχία! 21

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές

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

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

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

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

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

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

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

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

Μεταγλωττιστές 2019 Θέμα εργασίας

Μεταγλωττιστές 2019 Θέμα εργασίας Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 0 Θέμα εργασίας ( ) https://courses.softlab.ntua.gr/compilers/

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

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

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

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

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

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

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009 ΕΘΝΙΚΟ & ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΘΠ06 Μεταγλωττιστές Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009 Βοηθοί: Χαράλαμπος Νικολάου(charnik)

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Μεταβλητές 2 Δήλωση μεταβλητών Η δήλωση (declaration) πληροφορεί το μεταγλωττιστή για το όνομα και

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

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

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

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος 2012-13 Κων/νος Φλώρος Απλοί τύποι δεδομένων Οι τύποι δεδομένων προσδιορίζουν τον τρόπο παράστασης των

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

Μεταγλωττιστές 2015 Θέμα εργασίας. Η γλώσσα Tony. Sir Charles Antony (Tony) Richard Hoare (1934 ) Prof. Emeritus, Oxford University.

Μεταγλωττιστές 2015 Θέμα εργασίας. Η γλώσσα Tony. Sir Charles Antony (Tony) Richard Hoare (1934 ) Prof. Emeritus, Oxford University. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 01 Θέμα εργασίας Η γλώσσα

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

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

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

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

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

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1 Περιεχόµενα Τύποι εδοµένων int, char, float, double Τελεστές =,+,-,*,/,% Αριθµητικές εκφράσεις

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

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

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

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

Μεταγλωττιστές 2018 Θέμα εργασίας

Μεταγλωττιστές 2018 Θέμα εργασίας Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 0 Θέμα εργασίας (1 ) https://courses.softlab.ntua.gr/compilers/

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

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

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

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Παρατηρήσεις

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

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

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

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

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

Εργασία Προγραµµατισµού

Εργασία Προγραµµατισµού ΠΛΗ 401 ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΟΥ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2006-2007 Τµήµα Ηλεκτρονικών ΠΟΛΥΤΕΧΝΕΙΟ Μηχανικών και ΚΡΗΤΗΣ Μηχανικών Υπολογιστών ΘΕΩΡΙΑ ΠΛΗ ΥΠΟΛΟΓΙΣΜΟΥ 401 Μιχαήλ ιδάσκων Γ. Λαγουδάκης Εργασία Προγραµµατισµού

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

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

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

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

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

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

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

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

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

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

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

Εργασία Προγραµµατισµού

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

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

Α. 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) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού EEL Προγραμματιστική άσκηση: Η γλώσσα προγραμματισμού EEL Η EEL (Early Experimental Language) είναι μια μικρή γλώσσα προγραμματισμού. Παρόλο που οι προγραμματιστικές της ικανότητες είναι μικρές, η εκπαιδευτική

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object

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

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD) Η Γλώσσα Pascal Χαρακτηριστικά Τύποι Δεδοµένων Δοµή προγράµµατος 1. Βασικές έννοιες Χαρακτηριστικά της γλώσσας Pascal Γλώσσα προγραµµατισµού Συντακτικό Σηµασιολογία Αλφάβητο της γλώσσας Pascal (Σύνολο

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

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

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

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

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

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

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

Η γλώσσα Llama Μεταγλωττιστές

Η γλώσσα Llama Μεταγλωττιστές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 0 Θέμα εργασίας Η γλώσσα

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

Εισαγωγή στη γλώσσα προγραμματισμού C++ Εισαγωγή στη γλώσσα προγραμματισμού C++ Περιβάλλον Εργασίας 2 Περιβάλλον Εργασίας 1. Χρήση απλού κειμενογράφου και Μεταγλωττιστή 2. Ολοκληρωμένα Περιβάλλοντα Εργασίας (Integrated Development Environments)

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

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

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

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

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

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων Απλά Προγράμματα Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα Οι Βασικοί κανόνες Κατανόηση

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

Μεταγλωττιστές 2017 Θέμα εργασίας

Μεταγλωττιστές 2017 Θέμα εργασίας Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 2017 Θέμα εργασίας (1932

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες: Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών

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

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

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

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

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

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

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β.1 Τύποι Δεδομένων Όλες οι γλώσσες προγραμματισμού (πρέπει να) υποστηρίζουν πέντε (5) πρωταρχικούς τύπους δεδομένων: char (character) int (integer)

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

ΑΣΚΗΣΗ 2: ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΣΤΗ C

ΑΣΚΗΣΗ 2: ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΣΤΗ C Σκοπός της Άσκησης ΑΣΚΗΣΗ 2: ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΣΤΗ C Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραµµατισµού C: τη δοµή των προγραµµάτων της,

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

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

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2 Είσοδος / Έξοδος Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Συνάρτηση εξόδου printf Συνάρτηση εισόδου scanf Βιβλίο µαθήµατος: Chapter 2,, Sec. 3 & 6 ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-1 Είσοδος

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C Τµήµα Πληροφορικής και Τηλεπικοινωνιών Περιεχόµενα Εισαγωγή Πρόγραµµα Φάσεις Υλοποίησης µε χρήση του εργαλείου DEV C + + οµή Προγράµµατος Η συνάρτηση main Μεταβλητές Τι είναι

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

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

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

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

Η γλώσσα Edsger. Μεταγλωττιστές 2016 Θέμα εργασίας

Η γλώσσα Edsger. Μεταγλωττιστές 2016 Θέμα εργασίας Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 2016 Θέμα εργασίας Η γλώσσα

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

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2 Εισαγωγή στην C Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Σύνταξη και Σηµασιολογία της C Σχολιασµός Μεταβλητές / Σταθερές Τύποι εδοµένων και Τελεστές Βιβλίο µαθήµατος: Chapter 2,, Sec.

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

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

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

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1 Είσοδος/ Έξοδος Σε σχεδόν όλα τα προγράµµατα πρέπει να πάρουµε κάποια δεδοµένα και να δώσουµε

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Β Μέρος Δομή Ελέγχου if-elif-else Επαναληπτική Δομή Ελέγχου while Επαναληπτική Δομή Ελέγχου for Αλληλεπίδραση χρήστη-προγράμματος Συναρτήσεις Η δομή

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

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά Α. Μ. Βαθμός Σχόλια 1183 1194 1238 1239 1240 1241 - Καλή δουλειά 1242 1243 1244 1245 - Κακή χρήση συναρτήσεων. Κάνεις τον ίδιο έλεγχο και εντός και εκτός της συνάρτησης. Θα έπρεπε να έχεις βρεί ένα τρόπο

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

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

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

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

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

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

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

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

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

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

Συναρτήσεις. Εισαγωγή

Συναρτήσεις. Εισαγωγή Συναρτήσεις Εισαγωγή Η χρήση συναρτήσεων στα προγράμματα της γλώσσας C είναι πολύ σημαντική καθώς μας επιτρέπει τη διάσπαση ενός προβλήματος σε μικρότερα υποπροβλήματα τα οποία μπορούμε να επιλύσουμε πιο

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

Βασικές Αρχές Προγραμματισμού

Βασικές Αρχές Προγραμματισμού Βασικές Αρχές Προγραμματισμού Κεφάλαιο 2 ΗγλώσσαC Ιστορική Αναδρομή ΗανάπτυξητηςC ξεκίνησε το 1972 στα εργαστήρια Bell από τον Dennis Ritchie με σκοπό την ανάπτυξη ενός λειτουργικού συστήματος για τον

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

Visual Basic Βασικές Έννοιες

Visual Basic Βασικές Έννοιες Visual Basi Βασικές Έννοιες «Είδα στον ύπνο µου ότι η ζωή είναι χαρά. Ξύπνησα και είδα ότι είναι χρέος. Αγωνίστηκα και είδα ότι τo χρέος είναι χαρά.» Ραµπριτανάθ Ταγκόρ Κουλλάς Χρίστος www.oullas.om oullas

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

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων Σκοπός της Άσκησης ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση µε τη χρήση πινάκων σαν διατάξεις αποθήκευσης δεδοµένων της Γλώσσας Προγραµµατισµού C. H συγκεκριµένη άσκηση

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

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C Εργαστήριο 2 Τµήµα Πληροφορικής και Τηλεπικοινωνιών οµή προγράµµατος Οδηγίες προεπεξεργαστή #include... # define... τµήµα δηλώσεων ηλωσεις και ορισµοί µεταβλητών. ηλωσεις συναρτήσεων

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

Μεταβλητές, σταθερές, τύποι και δηλώσεις. Εντολές αντικατάστασης, τελεστές και παραστάσεις. Εμβέλεια και χρόνος ζωής μεταβλητών

Μεταβλητές, σταθερές, τύποι και δηλώσεις. Εντολές αντικατάστασης, τελεστές και παραστάσεις. Εμβέλεια και χρόνος ζωής μεταβλητών 18 Η γλώσσα προγραμματισμού C Μεταβλητές, σταθερές, τύποι και δηλώσεις Εντολές αντικατάστασης, τελεστές και παραστάσεις Η ροή του ελέγχου Δομή προγράμματος, συναρτήσεις και εξωτερικές μεταβλητές Εμβέλεια

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal Δοµή προγράµµατος 1. Δοµή προγράµµατος program όνοµα_προγράµµατος(αρχείο_1, αρχείο_2,...αρχείο_ν); ΕΠΙΚΕΦΑΛΙΔΑ ΒΙΒΛΙΟΘΗΚΕΣ uses όνοµα_βιβλιοθήκης,όνοµα_βιβλιοθήκης;

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

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13 Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13 ΙΣΤΟΡΙΚΑ Παρουσιάστηκε το 1970 από το Niklaus Wirth Προγενέστερη γλώσσα ήταν η Algol 60 Είναι δομημένη γλώσσα προγραμματισμού υψηλού

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

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

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

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

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

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

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι

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

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

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

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

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

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

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

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

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

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

5 &6. Τύποι δεδομένων, τελεστές και

5 &6. Τύποι δεδομένων, τελεστές και Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 5 &6. Τύποι δεδομένων, τελεστές και αριθμητικές εκφράσεις Ιωάννης Κατάκης Σήμερα o Τύποι δεδομένων int, char, float, double o Τελεστές = + - * / % o Αριθμητικές

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

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Βασικοί τύποι της C 2 Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char Χαρακτήρας 1 int Ακέραιος 2 ή 4 (*) float Πραγματικός

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