Γλώσσες και εργαλεία προγραμματισμού
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Προηγούμενα θέματα για σκέψη
- Εκφράστε με ψευδοκώδικα τη διαδικασία μιας πρόσφατης συναλλαγής σας
με το Δημόσιο.
- Εκφράστε με ψευδοκώδικα τον τρόπο με τον οποίο δίνονται ρέστα
στα καταστήματα.
- Βελτιώστε τον κώδικα φυλάσσοντας σε πίνακες τις αξίες και
ποσότητες των νομισμάτων που υπάρχουν στο ταμείο.
- Εκφράστε με ψευδοκώδικα τη διαδικασία πολλαπλασιασμού δύο
αριθμών Μ, Ν σε λογ2(MAX(N,M)) βρόχους.
Μπορείτε να χρησιμοποιήσετε πρόσθεση, σύζευξη και ολίσθηση.
Ιστορική ανασκόπηση
- Προγραμματισμός με διακόπτες
- Γλώσσα μηχανής
- Συμβολική γλώσσα
- Fortran
- Lisp, Simula, Prolog
Χαρακτηριστικές αλγοριθμικές γλώσσες
Σε μια αλγοριθμική (imperative) γλώσσα
το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να
εκτελέσει ο υπολογιστής.
- Fortran, Fortran 9X
- Cobol
- Algol-60
- Basic
- PL/I
- Pascal, Modula-2, Oberon
- C
- Ada
- Smalltalk
- C++
- Awk, Perl, Tcl/Tk
- Java
Χαρακτηριστικές δηλωτικές γλώσσες
Σε μια δηλωτική (declarative) γλώσσα
το πρόγραμμα εκφράζει τη δομή του προβλήματος που θέλουμε
να επιλύσουμε.
Η γλώσσα προγραμματισμού παρέχει τον κατάλληλο μηχανισμό ελέγχου
ο οποίος χρησιμοποιόντας τη δομή που έχουμε ορίσει καταλήγει
στο επιθυμητό αποτέλεσμα.
Γλώσσες βασισμένες στη λογική
Γλώσσες βασισμένες σε συναρτήσεις
Τυπική περιγραφή γλωσσών
- Σύνταξη (Syntax)
- Ο τρόπος με τον οποίο τοποθετούνται στη σειρά τα συστατικά
στοιχεία της γλώσσας για να αποτελέσουν ένα πρόγραμμα.
- Σημασιολογία (Semantics)
- Η σημασία που αποδίδεται στα συστατικά στοιχεία ενός
προγράμματος κατά τη μετάφραση και την εκτέλεσή του.
Γραμματική BNF
ΑΔ ::= ΑΔ + ΠΓ | ΑΔ - ΠΓ | ΠΓ
ΠΓ ::= ΠΓ * Β | ΠΓ / Β | Β
Β ::= αριθμός | (ΑΔ)
Βασικά γλωσσικά εργαλεία
- Προετοιμαστής/Διορθωτής (Editor)
- Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος.
- Προεπεξεργαστής (Preprocessor)
- Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς
συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα.
Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++.
- Συμβολομεταφραστής (Assembler)
- Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα
μηχανής.
- Μεταγλωττιστής (Compiler)
- Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής.
- Διερμηνευτής (Interpreter)
- Εκτελεί άμεσα ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου.
- Συνδέτης (Linker)
- Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά
σε ένα συνεχές πρόγραμμα.
- Φορτωτής (Loader)
- Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές
σε σχετικές θέσεις μνήμης.
Συνήθως τμήμα του λειτουργικού συστήματος.
- Αποσφαλματωτής (Debuger)
- Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την
εξέταση και αλλαγή μεταβλητών του
και γενικά ενέργειες που αποσκοπούν στην ανίχνευση
λαθών που μπορεί να περιέχει το πρόγραμμα.
Δομή του μεταγλωττιστή
- Λεξική ανάλυση (Lexical analysis)
- Αναγνώριση βασικών λεκτικών τμημάτων του προγράμματος όπως
αριθμών, ονόματα μεταβλητών και λέξεων-κλειδιών της γλώσσας.
- Συντακτική ανάλυση (Parsing)
- Η δημιουργία από τα λεξικά τμήματα του συντακτικού δέντρου του
προγράμματος.
- Πίνακας συμβόλων (Symbol table)
- Χώρος αποθήκευσης των χαρακτηριστικών όλων των ονομάτων που
χρησιμοποιούνται στο πρόγραμμα.
- Έλεγχος τύπων (Type checking)
- Έλεγχος του τύπου των μεταβλητών, των συναρτήσεων και των
εκφράσεων.
- Βελτιστοποίηση (Optimization)
- Αλλαγές στη δομή του κώδικα που αυξάνουν την ταχύτητα με την
οποία θα εκτελεστεί, χωρίς όμως να επηρεάζουν το αποτέλεσμα.
- Παραγωγή κώδικα (Code generation)
- Παραγωγή συμβολικής γλώσσας ή γλώσσας μηχανής.
Η διεργασία του προγραμματισμού
- Σχεδιασμός
- Συγγραφή σε ψευδοκώδικα
- Συγγραφή στη γλώσσα προγραμματισμού
- Μεταγλώτιση
- Εκτέλεση
- Αποσφαλμάτωση
Βιβλιογραφία
- Peter Rechenberg.
Εισαγωγή στην Πληροφορική. σ. 138-150
Κλειδάριθμος, 1992.
- Alfred V. Aho, Ravi Sethi,
and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools.
Addison-Wesley, 1985.
- Alfred V. Aho, Brian W.
Kernighan, and Peter J. Weinberger.
The
AWK Programming Language.
Addison-Wesley, 1988.
- J.W. Backus, F.L.
Bauer, J.Green, C.Katz, J.McCarthy, P. Naur, A.J.Perlis, H. Rutishauser,
K. Samuelson, B. Vauquois, J.H. Wegstein, A. van Vinjgaarden, and M. Woodger.
Revised report on the algorthmic language ALGOL 60.
IFIP, 1960.
- Jean D. Ichbiah et al.
Reference Manual for the Ada Programming Language, ANSI/MIL-STD-1815
A-1983.
Castle House Publication Ltd., 1983.
- Kathleen Jensen and
Niklaus Wirth.
PASCAL User Manual and Report.
Springer Verlag, second edition, 1975.
- Brian W. Kernighan
and Dennis M. Ritchie.
The C
Programming Language.
Prentice-Hall, second edition, 1988.
- Brian W. Kernighan.
Why Pascal is not my favorite programming language.
Technical Report 100, Bell Laboratories, Murray Hill, New Jersey 07974, July
1981.
- Günther Lamprecht.
Introduction to SIMULA-67.
Friedr. Vieweg & Sohn, Braunschweig, Wiesbaden, Germany, 1981.
- Martin
Richards and Colin Whitby-Strevens.
BCPL — The Language and its Compiler.
Cambridge University Press, 1979.
- Ravi Sethi.
Programming Languages: Convepts and Constructs.
Addison-Wesley, 1989.
- Bjarne Stroustrup.
The
C++ Programming Language.
Addison-Wesley, second edition, 1991.
- R. D. Tennent.
Princliples of Programming Languages.
Prentice Hall, 1981.
- Larry Wall and
Randal L. Schwartz.
Programming Perl.
O'Reilly and Associates, Sebastopol, CA, USA, 1990.
- Richard L. Wexelblat.
Maxims for malfeasant designers, or how to design languages to make programming
as difficult as possible.
In Proceedings of the 2nd International Conference on Software
Engineering, pages 331–336, San Fransisco, CA, USA, October 1976.
IEEE Computer Society Press.
Ασκήσεις
- Σε τι υπερέχουν και σε τι υστερούν οι
δηλωτικές και σε τι οι αλγοριθμικές γλώσσες;
- Περιγράψτε σε BNF τη γλώσσα με την οποία απαγγέλει την ώρα η
φωνή στο 141. Λάβετε υπόψη σας ότι μηδενικά λεπτά και δευτερόλεπτα
δεν απαγγέλονται.
- Μεταγλωττίστε σε συμβολική γλώσσα 8086 τον υπολογισμό της
έκφρασης της Pascal Sum := Sum + 2 * Element[i];