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

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

Περιγραφή
Το μάθημα  "Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών"  διδάσκεται ως Υποχρεωτικό Μάθημα Εαρινού Εξαμήνου στο Τμήμα Μηχανικών   Η/Υ και Πληροφορικής του Πανεπιστημίου Πατρών.
 
Η ύλη του μαθήματος περιλαμβάνει τα παρακάτω:

  • Μετάφραση Γλωσσών Προγραμματισμού

  • Σύνταξη Γλωσσών Προγραμματισμού

  • Μεταβλητές, Εκφράσεις, Εντολές

  • Τύποι Δεδομένων - Προχωρημένοι Τύποι Δεδομένων

     (Πολυδιάστατα Arrays - Τανυστές)

  • Εμβέλεια και Χρόνος Δέσμευσης Μνήμης

  • Διαδικασίες, Συναρτήσεις

  • Αρχές Συναρτησιακού προγραμματισμού

    (λ-calculus, Map-Reduce)

  • Εισαγωγή στην Python

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

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

  • Αρχές Γλωσσών Προγραμματισμού για Βάσεις Δεδομένων

CC - Αναφορά - Μη Εμπορική Χρήση - Παρόμοια Διανομή
Διδάσκοντες:

Γιάννης Γαροφαλάκης, Καθηγητής, 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. Γνωρίζουν τα βασικά χαρακτηριστικά των διαφορετικών παραδειγμάτων προγραμματισμού, συγκεκριμένα του συναρτησιακού και του λογικού προγραμματισμού.

 

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

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

 

 

Μέθοδοι αξιολόγησης
Αξιολόγηση:
  • 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,
  • Δείκτες.
  • Κανόνες Εμβέλειας,
  • Χρόνος Δέσμευσης Μνήμης,
  • Στοίβες Εκτέλεσης.
  • Είδη Υπορουτίνων.
  • Μεταβίβαση Παραμέτρων:
    • Κλήση με Τιμή,
    • Κλήση με Αναφορά,
    • Κλήση με Τιμή-Αποτέλεσμα,
    • Κλήση με Όνομα.