Μεταγλωττιστές
Η πρώτη κατηγορία μεταφραστών για γλώσσες υψηλού επιπέδου είναι οι μεταγλωττιστές. Οι μεταγλωττιστές ακολουθούν τα εξής βήματα για την μετατροπή ενός προγράμματος σε γλώσσα μηχανής: συγγραφή του προγράμματος, μεταγλώττιση, σύνδεση, εκτέλεση. Οι ενέργειες αυτές μπορεί να γίνονται σαν μια συνεχόμενη διαδικασία είτε το καθένα σε διαφορετικό χρόνο. Είναι προφανές ότι κατά την διάρκεια όλης αυτής της διαδικασίας θα προκύψουν λάθη και η διαδικασία να ξεκινήσει από την αρχή. Στο τέλος της διαδικασίας το πρόγραμμα μπορεί να εκτελείτε χωρίς την βοήθεια του μεταγλωττιστή.
Αναλυτικότερα:
-
Συγγραφή κώδικα, μπορεί να γίνει σε έναν απλό κειμενογράφο (π.χ notepad, gedit κτλ) ή ακόμα και σε περιβάλλοντα συγγραφής κώδικα που προσφέρουν αρκετές βοήθειες στου προγραμματιστές (Integrated Development Enviroment) που μπορεί να κοστίζουν από καθόλου (NetBeans, Eclipse) έως αρκετά χρήματα (Microsoft Visual Studio, Borland C++ Builder). Θα μιλήσουμε για αυτά εκτενέστερα σε επόμενη ενότητα.
-
Μεταγλώττιση, κατά την διάρκεια του σταδίου αυτού το πρόγραμμα ελέγχεται για συντακτικά λάθη σύμφωνα με το πρότυπο της εκάστοτε γλώσσας και στη συνέχεια μετατρέπεται σε γλώσσα μηχανής. Για να ολοκληρωθεί αυτό το στάδιο το πρόγραμμα πρέπει να είναι συντακτικά σωστό.
-
Σύνδεση, παρότι το πρόγραμμα μετά το στάδιο της μεταγλώττισης είναι σε γλώσσα μηχανής δεν είναι ακόμα έτοιμο για να τρέξει μόνο του. Τις περισσότερες φορές οι προγραμματιστές δεν γράφουν το πρόγραμμα σε ένα μόνο αρχείο, αλλά σε περισσότερα για να επιτυγχάνουν καλύτερη οργάνωση. Επίσης χρησιμοποιούν βιβλιοθήκες που παρέχονται είτε από την γλώσσα που χρησιμοποιούν είτε από συναδέλφους τους. Άρα κάποιος πρέπει να ενώσει όλα αυτά τα κομμάτια μαζί. Την δουλεία αυτή αναλαμβάνει ο linker. Για να τελειώσει το στάδιο αυτό πρέπει όλα τα αρχεία που χρειάζονται να είναι παρόντα αλλιώς θα αποτύχει.
-
Εκτέλεση, σε αυτό το στάδιο το πρόγραμμα είναι πλέον ανεξάρτητο από τον μεταγλωττιστή και μπορεί να εκτελεστεί μόνο του. Παρόλα αυτά η διαδικασία δεν έχει ολοκληρωθεί καθώς σε αυτό το στάδιο μπορεί να διαπιστωθούν λογικά λάθη.
Μετά την ολοκλήρωση της μεταγλώττισης και της σύνδεσης το πρόγραμμα μας
είναι άραγε ικανό να τρέξει σε κάθε υπολογιστή ανεξαρτήτου λειτουργικού
συστήματος; Η απάντηση δυστυχώς είναι όχι. Όπως έχει γίνει σαφές μέσα
σε αυτή την ενότητα κάθε υπολογιστής έχει τις δικές του εντολές άρα η
μετατροπή του προγράμματος από γλώσσα υψηλού επιπέδου σε γλώσσα μηχανής
αφορά μόνο υπολογιστές που έχουν το ίδιο σύνολο εντολών, για άλλους
υπολογιστές θα πρέπει να ξαναγίνει μεταγλώττιση. Όσον άφορα το θέμα του
λειτουργικού συστήματος που διαθέτει ένας υπολογιστής το θέμα είναι
λίγο πιο περίπλοκο καθώς υπάρχουν γλώσσες που έχουν μεταγλωττιστές μόνο
για ένα σύνολο λειτουργικών και όχι για όλα.
Υπάρχει λύση για αυτό το πρόβλημα; Στην γενική
περίπτωση όχι. Υπάρχουν όμως γλώσσες όπως η Java που επιχειρούν να
λύσουν αυτό το θέμα και το έχουν καταφέρει σε πολύ μεγάλο βαθμό. Η Java
χρησιμοποιεί έναν ποιο έξυπνο τρόπο μεταγλώττισης που χρησιμοποιεί και
μεταγλωττιστή και διερμηνευτή, θα αναφερθεί στο αμέσως επόμενο κεφάλαιο,
για να παρακάμψει το πρόβλημα που αναφέραμε.