Please ensure Javascript is enabled for purposes of website accessibility

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

Κωδικός : CEID1091

CEID1091  -  Ιωάννης Γαροφαλάκης, Σπυρίδων Σιούτας, Παναγιώτης Χατζηδούκας

Περίγραμμα

Διδάσκοντες:

Διδάσκοντες

Γιάννης Γαροφαλάκης, Καθηγητής, 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

  • Αρχές Αντικειμενοστραφούς προγραμματισμού

  • Αρχές Λογικού προγραμματισμού

  • Μαθηματικές Γλώσσες Ερωτήσεων

 

 

Μαθησιακοί στόχοι

Μαθησιακοί στόχοι

Με την ολοκλήρωση της διδασκαλίας του μαθήματος, οι φοιτητές θα είναι ικανοί να:

  1. Κατανοούν το συνολικό πλαίσιο και ιστορικό της ανάπτυξης και χρήσης των διαφόρων παραδειγμάτων γλωσσών προγραμματισμού.
  2. Γνωρίζουν τα βασικά κριτήρια καλού σχεδιασμού και επιτυχίας μιας γλώσσας προγραμματισμού.
  3. Γνωρίζουν τη λειτουργία των μεταφραστών και διερμηνευτών, τις διαφορές τους και τα περιβάλλοντα χρήσης τους.
  4. Διακρίνουν τα διαφορετικά επίπεδα συντακτικών στοιχείων των γλωσσών προγραμματισμού.
  5. Κατασκευάζουν τυπικές γραμματικές που είναι μέρος των τυπικών γλωσσών, θεωρητικού μοντέλου περιγραφής του συντακτικού των γλωσσών προγραμματισμού.
  6. Υλοποιούν λεξικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με πεπερασμένα αυτόματα και κανονικές εκφράσεις, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το flex.
  7. Υλοποιούν συντακτικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με γραμματικές χωρίς συμφραζόμενα χρησιμοποιώντας σημειογραφία BNF, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το bison.
  8. Γνωρίζουν τον τρόπο που υλοποιούν και χειρίζονται οι διάφορες γλώσσες προγραμματισμού, τα συντακτικά στοιχεία ανώτερου επιπέδου όπως μεταβλητές, εκφράσεις, εντολές.
  9. Ορίζουν κατάλληλους τύπους δεδομένων στα προγράμματά τους, αξιοποιώντας τις δυνατότητες που προσφέρουν οι διαφορετικές γλώσσες προγραμματισμού.
  10. Γνωρίζουν τους δύο βασικούς κανόνες εμβέλειας (στατικός και δυναμικός) και τους τρόπους υλοποίησής τους στις διάφορες γλώσσες προγραμματισμού.
  11. Γνωρίζουν τους μηχανισμούς δέσμευσης και διαχείρισης μνήμης κατά την εκτέλεση ενός προγράμματος.
  12. Γνωρίζουν τα είδη, τα συστατικά, τα χαρακτηριστικά και τις σχεδιαστικές προκλήσεις για τη χρήση υποπρογραμμάτων.
  13. Προγραμματίζουν χρησιμοποιώντας υποπρογράμματα, αξιοποιώντας τους διαφορετικούς τρόπους μεταβίβασης παραμέτρων που υποστηρίζουν οι γλώσσες προγραμματισμού.
  14. Γνωρίζουν τα βασικά χαρακτηριστικά των διαφορετικών παραδειγμάτων προγραμματισμού, συγκεκριμένα του συναρτησιακού και του λογικού προγραμματισμού.
  15. Γνωρίζουν σε βάθος τη Γλώσσα Προγραμματισμού Python.

 

Με την ολοκλήρωση της διδασκαλίας του μαθήματος, οι φοιτητές θα έχουν αναπτύξει τις ακόλουθες δεξιότητες:

  1. Θα έχουν αποκτήσει μια συνολική άποψη για τη δομή, τον τρόπο λειτουργίας και τις δυνατότητες των σύγχρονων γλωσσών προγραμματισμού.
  2. Θα μπορούν να κατασκευάζουν τυπικές γραμματικές.
  3. Θα υλοποιούν λεξικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με πεπερασμένα αυτόματα και κανονικές εκφράσεις, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το flex.
  4. Θα υλοποιούν συντακτικούς αναλυτές, τόσο τη θεωρητική τους περιγραφή με γραμματικές χωρίς συμφραζόμενα χρησιμοποιώντας σημειογραφία BNF, όσο και προγραμματίζοντας σχετικά εργαλεία όπως το bison.
  5. Θα ορίζουν κατάλληλους τύπους δεδομένων στα προγράμματά τους, αξιοποιώντας τις δυνατότητες που προσφέρουν οι διαφορετικές γλώσσες προγραμματισμού.
  6. Θα προγραμματίζουν χρησιμοποιώντας υποπρογράμματα, αξιοποιώντας τους διαφορετικούς τρόπους μεταβίβασης παραμέτρων που υποστηρίζουν οι γλώσσες προγραμματισμού.
  7. Θα προγραμματίζουν σε Python.

 

 

Μέθοδοι αξιολόγησης

Μέθοδοι αξιολόγησης

Αξιολόγηση:

2ο Έτος - Νέα διαδικασία:

  • 60% Τελική γραπτή εξέταση
  • 20% Project flex/bison (υποχρεωτικό), 1 – 3 ατόμων
  • 20% Εργασία Python (υποχρεωτική), 1 – 3 ατόμων

Προϋποθέσεις:

  • Τουλάχιστον 3,5 και στα τρία (γραπτό, flex/bison, Python)
  • Φυσικά, μέσος όρος των τριών, τουλάχιστον 5.
  • Μπορεί να δοθεί οποιο(α)δήποτε από τα τρία τον Ιούνιο και το/τα υπόλοιπο/α το Σεπτέμβριο (-> βαθμός Σεπτεμβρίου).
  • Οι βαθμοί Project flex/bison και Εργασίας Python παραμένουν και για το επόμενο ακαδημαϊκό έτος. Όχι ο βαθμός του Γραπτού.

 

3ο Έτος και άνω:

  • 70% Τελική γραπτή εξέταση

  • 30% Project (υποχρεωτικό), 1 - 3 ατόμων

 

Προϋποθέσεις:

  • Τουλάχιστον 5 και στα δύο (γραπτό, project)

  • Μπορεί να δοθεί η εξέταση (ή το project) τον Ιούνιο και το project (ή η εξέταση) το Σεπτέμβριο (θα είναι βαθμός Σεπτεμβρίου τότε)

  • Ο βαθμός Project παραμένει και για το επόμενο ακαδημαϊκό έτος. Όχι του Γραπτού και της Άσκησης Python.

  • Μπορεί να ακολουθηθεί η νέα διαδικασία, εφόσον παραδοθεί Εργασία 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).