Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών
Ιωάννης Γαροφαλάκης, Σπυρίδων Σιούτας, Παναγιώτης Χατζηδούκας
-
Μετάφραση Γλωσσών Προγραμματισμού
-
Σύνταξη Γλωσσών Προγραμματισμού
-
Μεταβλητές, Εκφράσεις, Εντολές
-
Τύποι Δεδομένων - Προχωρημένοι Τύποι Δεδομένων
(Πολυδιάστατα Arrays - Τανυστές)
-
Εμβέλεια και Χρόνος Δέσμευσης Μνήμης
-
Διαδικασίες, Συναρτήσεις
-
Αρχές Συναρτησιακού προγραμματισμού
(λ-calculus, Map-Reduce)
-
Εισαγωγή στην Python
-
Αρχές Αντικειμενοστραφούς προγραμματισμού
-
Αρχές Λογικού προγραμματισμού
-
Αρχές Γλωσσών Προγραμματισμού για Βάσεις Δεδομένων
-
Μετάφραση Γλωσσών Προγραμματισμού
-
Σύνταξη Γλωσσών Προγραμματισμού
-
Μεταβλητές, Εκφράσεις, Εντολές
-
Τύποι Δεδομένων - Προχωρημένοι Τύποι Δεδομένων
(Πολυδιάστατα Arrays - Τανυστές)
-
Εμβέλεια και Χρόνος Δέσμευσης Μνήμης
-
Διαδικασίες, Συναρτήσεις
-
Αρχές Συναρτησιακού προγραμματισμού
(λ-calculus, Map-Reduce)
-
Εισαγωγή στην Python
-
Αρχές Αντικειμενοστραφούς προγραμματισμού
-
Αρχές Λογικού προγραμματισμού
-
Αρχές Γλωσσών Προγραμματισμού για Βάσεις Δεδομένων
-
Μετάφραση Γλωσσών Προγραμματισμού
-
Σύνταξη Γλωσσών Προγραμματισμού
-
Μεταβλητές, Εκφράσεις, Εντολές
-
Τύποι Δεδομένων - Προχωρημένοι Τύποι Δεδομένων
(Πολυδιάστατα Arrays - Τανυστές)
-
Εμβέλεια και Χρόνος Δέσμευσης Μνήμης
-
Διαδικασίες, Συναρτήσεις
-
Αρχές Συναρτησιακού προγραμματισμού
(λ-calculus, Map-Reduce)
-
Εισαγωγή στην Python
-
Αρχές Αντικειμενοστραφούς προγραμματισμού
-
Αρχές Λογικού προγραμματισμού
-
Αρχές Γλωσσών Προγραμματισμού για Βάσεις Δεδομένων
Περίγραμμα
Διδάσκοντες:
Γιάννης Γαροφαλάκης, Καθηγητής, 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 μμ
και
- Τετάρτη 4 - 6 μμ
Προτεινόμενα συγγράμματα
- 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).
Γιάννης Γαροφαλάκης, Καθηγητής, 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 μμ
και
- Τετάρτη 4 - 6 μμ
- 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).
- Εξέλιξη των Γλωσσών Προγραμματισμού,
- Κριτήρια σχεδιασμού.
- Είδη Μεταφραστών,
- Χρήσιμα Μεταεργαλεία,
- Διερμηνευτές,
- Σύγκριση Μεταφραστών/Διερμηνευτών
- Λεκτική Ανάλυση:
- Πεπερασμένα Αυτόματα,
- Κανονικές Εκφράσεις.
- Συντακτική Ανάλυση:
- Γραμματικές - BNF,
- LL - LR,
- Top -Down Parsing,
- Bottom-Up Parsing.
- Μεταβλητές,
- Εκφράσεις,
- Εντολές.
- Βασικοί Τύποι,
- Ακολουθίες Χαρακτήρων,
- Τύποι Απαρίθμησης,
- Array,
- Record,
- Δείκτες.
- Κανόνες Εμβέλειας,
- Χρόνος Δέσμευσης Μνήμης,
- Στοίβες Εκτέλεσης.
- Είδη Υπορουτίνων.
- Μεταβίβαση Παραμέτρων:
- Κλήση με Τιμή,
- Κλήση με Αναφορά,
- Κλήση με Τιμή-Αποτέλεσμα,
- Κλήση με Όνομα.
Ανοικτό Ακαδ. Μάθημα
Αρ. Επισκέψεων : 92778
Αρ. Προβολών : 756619