Διδάσκοντες:
Γιάννης Γαροφαλάκης, Καθηγητής, garofala@ceid.upatras.gr
Σπύρος Σιούτας, Καθηγητής, sioutas@ceid.upatras.gr
Παναγιώτης Χατζηδούκας, Αν. Καθηγητής, phadjido@ceid.upatras.gr
Φροντιστήριο - Εργασίες:
Γεράσιμος Βονιτσάνος, Διδάκτορας, mvonitsanos@ceid.upatras.gr
Ιουλία Σίμου, Υποψήφια Διδακτόρισσα, simo@ceid.upatras.gr
Περιεχόμενο μαθήματος
-
Μετάφραση Γλωσσών Προγραμματισμού
-
Σύνταξη Γλωσσών Προγραμματισμού
-
Μεταβλητές, Εκφράσεις, Εντολές
-
Τύποι Δεδομένων - Προχωρημένοι Τύποι Δεδομένων
(Πολυδιάστατα Arrays - Τανυστές)
-
Εμβέλεια και Χρόνος Δέσμευσης Μνήμης
-
Διαδικασίες, Συναρτήσεις
-
Αρχές Συναρτησιακού προγραμματισμού
(λ-calculus, Map-Reduce)
-
Εισαγωγή στην Python
-
Αρχές Αντικειμενοστραφούς προγραμματισμού
-
Αρχές Λογικού προγραμματισμού
-
Αρχές Γλωσσών Προγραμματισμού για Βάσεις Δεδομένων
Μαθησιακοί στόχοι
Με την ολοκλήρωση της διδασκαλίας του μαθήματος, οι φοιτητές θα είναι ικανοί να:
- Κατανοούν το συνολικό πλαίσιο και ιστορικό της ανάπτυξης και χρήσης των διαφόρων παραδειγμάτων γλωσσών προγραμματισμού.
- Γνωρίζουν τα βασικά κριτήρια καλού σχεδιασμού και επιτυχίας μιας γλώσσας προγραμματισμού.
- Γνωρίζουν τη λειτουργία των μεταφραστών και διερμηνευτών, τις διαφορές τους και τα περιβάλλοντα χρήσης τους.
- Διακρίνουν τα διαφορετικά επίπεδα συντακτικών στοιχείων των γλωσσών προγραμματισμού.
- Κατασκευάζουν τυπικές γραμματικές που είναι μέρος των τυπικών γλωσσών, θεωρητικού μοντέλου περιγραφής του συντακτικού των γλωσσών προγραμματισμού.
- Υλοποιούν λεξικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με πεπερασμένα αυτόματα και κανονικές εκφράσεις, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το flex.
- Υλοποιούν συντακτικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με γραμματικές χωρίς συμφραζόμενα χρησιμοποιώντας σημειογραφία BNF, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το bison.
- Γνωρίζουν τον τρόπο που υλοποιούν και χειρίζονται οι διάφορες γλώσσες προγραμματισμού, τα συντακτικά στοιχεία ανώτερου επιπέδου όπως μεταβλητές, εκφράσεις, εντολές.
- Ορίζουν κατάλληλους τύπους δεδομένων στα προγράμματά τους, αξιοποιώντας τις δυνατότητες που προσφέρουν οι διαφορετικές γλώσσες προγραμματισμού.
- Γνωρίζουν τους δύο βασικούς κανόνες εμβέλειας (στατικός και δυναμικός) και τους τρόπους υλοποίησής τους στις διάφορες γλώσσες προγραμματισμού.
- Γνωρίζουν τους μηχανισμούς δέσμευσης και διαχείρισης μνήμης κατά την εκτέλεση ενός προγράμματος.
- Γνωρίζουν τα είδη, τα συστατικά, τα χαρακτηριστικά και τις σχεδιαστικές προκλήσεις για τη χρήση υποπρογραμμάτων.
- Προγραμματίζουν χρησιμοποιώντας υποπρογράμματα, αξιοποιώντας τους διαφορετικούς τρόπους μεταβίβασης παραμέτρων που υποστηρίζουν οι γλώσσες προγραμματισμού.
- Γνωρίζουν τα βασικά χαρακτηριστικά των διαφορετικών παραδειγμάτων προγραμματισμού, συγκεκριμένα του συναρτησιακού και του λογικού προγραμματισμού.
Με την ολοκλήρωση της διδασκαλίας του μαθήματος, οι φοιτητές θα έχουν αναπτύξει τις ακόλουθες δεξιότητες:
- Θα έχουν αποκτήσει μια συνολική άποψη για τη δομή, τον τρόπο λειτουργίας και τις δυνατότητες των σύγχρονων γλωσσών προγραμματισμού.
- Θα μπορούν να κατασκευάζουν τυπικές γραμματικές.
- Θα υλοποιούν λεξικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με πεπερασμένα αυτόματα και κανονικές εκφράσεις, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το flex.
- Θα υλοποιούν συντακτικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με γραμματικές χωρίς συμφραζόμενα χρησιμοποιώντας σημειογραφία BNF, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το bison.
- Θα ορίζουν κατάλληλους τύπους δεδομένων στα προγράμματά τους, αξιοποιώντας τις δυνατότητες που προσφέρουν οι διαφορετικές γλώσσες προγραμματισμού.
- Θα προγραμματίζουν χρησιμοποιώντας υποπρογράμματα, αξιοποιώντας τους διαφορετικούς τρόπους μεταβίβασης παραμέτρων που υποστηρίζουν οι γλώσσες προγραμματισμού.
Μέθοδοι αξιολόγησης
Αξιολόγηση:
-
70% Τελική γραπτή εξέταση
-
30% Project (υποχρεωτικό), 1 - 4 ατόμων
-
+1 μονάδα max (προαιρετική) ατομική άσκηση Python (παράδοση μόνο τον Ιούνιο)
-
Τουλάχιστον 5 και στα δύο (γραπτό, project)
-
Μπορεί να δοθεί η εξέταση (ή το project) τον Ιούνιο και το project (ή η εξέταση) το Σεπτέμβριο (θα είναι βαθμός Σεπτεμβρίου τότε)
-
Ο βαθμός Project παραμένει και για το επόμενο ακαδημαϊκό έτος. Όχι του Γραπτού και της Άσκησης Python.
Παραδόσεις:
Παραδόσεις (Θεωρία - Εργασίες - Ασκήσεις):
- Δευτέρα 4 - 6 μμ
και
- Τρίτη 3 - 5 μμ
Προτεινόμενα συγγράμματα
- Michael L. Scott, Πραγματολογία των Γλωσσών Προγραμματισμού, Κλειδάριθμος, 2009
ή
- Robert W. Sebesta, Αρχές Γλωσσών Προγραμματισμού, 11η Έκδοση, Μ. Γκιούρδας, 2017
Βιβλιογραφία
-
Ellis Horowitz, Βασικές Αρχές Γλωσσών Προγραμματισμού, Κλειδάριθμος 1993
-
Ν. Παπασπύρου, Ε. Σκορδαλάκης, Μεταγλωττιστές, Συμμετρία 2002
-
Terrence W. Pratt, Marvin V. Zelkowitz, Programming Languages Design & Implementation, 4th Edition, 2001, Prentice Hall
-
J.P. Bennett, Introduction to Compiling Techniques. A first course using ANSI C, LEX and YACC, 2nd Edition, 1996, Mc Graw-Hill
-
A.V. Aho, R. Sethi, J.D. Ullman, Compilers: Principles, Techniques and Tools, 1986, Addison-Wesley
Συνιστώμενη προαπαιτούμενη γνώση από τα μαθήματα:
- Τεχνολογία και Προγραμματισμός Υπολογιστών (ΝΥ131)
- Οντοκεντρικός Προγραμματισμός (ΝΥ134)
- Εισαγωγή στους Αλγόριθμους (ΝΥ205)
- Δομές Δεδομένων (ΝΥ233)
- Θεωρία Υπολογισμού (ΝΥ3011).