Γλώσσες και εργαλεία προγραμματισμού

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Ιστορική ανασκόπηση

Χαρακτηριστικές αλγοριθμικές γλώσσες

Σε μια αλγοριθμική (imperative) (ή προστακτική ή επιτακτική ή διαδικαστική (procedural)) γλώσσα το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να εκτελέσει ο υπολογιστής.

Χαρακτηριστικές δηλωτικές γλώσσες

Σε μια δηλωτική (declarative) ή εφαρμοστική (applicative) γλώσσα το πρόγραμμα εκφράζει τη δομή του προβλήματος που θέλουμε να επιλύσουμε. Η γλώσσα προγραμματισμού παρέχει τον κατάλληλο μηχανισμό ελέγχου ο οποίος χρησιμοποιόντας τη δομή που έχουμε ορίσει καταλήγει στο επιθυμητό αποτέλεσμα.

Γλώσσες βασισμένες στη λογική

Γλώσσες βασισμένες σε συναρτήσεις

Τυπική περιγραφή γλωσσών

Σύνταξη (Syntax)
Ο τρόπος με τον οποίο τοποθετούνται στη σειρά τα συστατικά στοιχεία της γλώσσας για να αποτελέσουν ένα πρόγραμμα.
Σημασιολογία (Semantics)
Η σημασία που αποδίδεται στα συστατικά στοιχεία ενός προγράμματος κατά τη μετάφραση και την εκτέλεσή του.

Παράδειγμα γραμματικής BNF

Μια αριθμητική έκφραση μπορεί να αποτελείται από: Ο τρόπος που αυτά συνδυάζονται μεταξύ τους εκφράζεται σε BFN ως εξής:
ΑΔ ::= ΑΔ + ΠΓ | ΑΔ - ΠΓ | ΠΓ
ΠΓ ::= ΠΓ * Β | ΠΓ / Β | Β
Β ::= αριθμός | (ΑΔ)

Βασικά γλωσσικά εργαλεία

Προετοιμαστής/Διορθωτής (Editor)
Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος.
Προεπεξεργαστής (Preprocessor)
Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα. Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++.
Συμβολομεταφραστής (Assembler)
Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα μηχανής.
Μεταγλωττιστής (Compiler)
Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής.
Διερμηνευτής (Interpreter)
Εκτελεί άμεσα ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου.
Συνδέτης (Linker)
Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά σε ένα συνεχές πρόγραμμα.
Φορτωτής (Loader)
Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές σε σχετικές θέσεις μνήμης. Συνήθως τμήμα του λειτουργικού συστήματος.
Αποσφαλματωτής (Debuger)
Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την εξέταση και αλλαγή μεταβλητών του και γενικά ενέργειες που αποσκοπούν στην ανίχνευση λαθών που μπορεί να περιέχει το πρόγραμμα.

Δομή του μεταγλωττιστή

Λεκτική ανάλυση (Lexical analysis)
Αναγνώριση βασικών λεκτικών τμημάτων του προγράμματος όπως αριθμών, ονόματα μεταβλητών και λέξεων-κλειδιών της γλώσσας.
Συντακτική ανάλυση (Parsing)
Η δημιουργία από τα λεξικά τμήματα του συντακτικού δέντρου του προγράμματος.
Πίνακας συμβόλων (Symbol table)
Χώρος αποθήκευσης των χαρακτηριστικών όλων των ονομάτων που χρησιμοποιούνται στο πρόγραμμα.
Έλεγχος τύπων (Type checking)
Έλεγχος του τύπου των μεταβλητών, των συναρτήσεων και των εκφράσεων.
Βελτιστοποίηση (Optimization)
Αλλαγές στη δομή του κώδικα που αυξάνουν την ταχύτητα με την οποία θα εκτελεστεί, χωρίς όμως να επηρεάζουν το αποτέλεσμα.
Παραγωγή κώδικα (Code generation)
Παραγωγή συμβολικής γλώσσας ή γλώσσας μηχανής.

Η διεργασία του προγραμματισμού

Βιβλιογραφία

Ασκήσεις