Προφανώς, η αντίληψη των ανθρώπων και μια ηλεκτρονική συσκευή όπως ο υπολογιστής είναι διαφορετική. Οι άνθρωποι μπορούν να κατανοήσουν οτιδήποτε μέσω των φυσικών γλωσσών, αλλά ένας υπολογιστής δεν το κάνει. Ο υπολογιστής χρειάζεται μεταφραστή για να μετατρέψει τις γλώσσες γραμμένες με μορφή αναγνώσιμη από τον άνθρωπο στη μορφή αναγνώσιμη από υπολογιστή.
Ο μεταγλωττιστής και ο διερμηνέας είναι οι τύποι μεταφραστών γλωσσών. Τι είναι ο Μεταφραστής Γλωσσών; Αυτή η ερώτηση μπορεί να προκύψει στο μυαλό σας.
Ο μεταφραστής γλώσσας είναι ένα λογισμικό που μεταφράζει τα προγράμματα από μια γλώσσα πηγής που είναι σε μορφή αναγνώσιμη από τον άνθρωπο σε ένα ισοδύναμο πρόγραμμα σε μια γλώσσα αντικειμένων. Η γλώσσα πηγής είναι γενικά μια γλώσσα προγραμματισμού υψηλού επιπέδου και η γλώσσα αντικειμένων είναι συνήθως η γλώσσα του υπολογιστή ενός πραγματικού υπολογιστή.
Συγκριτικό διάγραμμα
Βάση σύγκρισης | Μεταγλωττιστής | Διερμηνέας |
---|---|---|
Εισαγωγή | Παίρνει ένα ολόκληρο πρόγραμμα τη φορά. | Παίρνει μια μόνο γραμμή κώδικα ή οδηγίες κάθε φορά. |
Παραγωγή | Δημιουργεί ενδιάμεσο κώδικα αντικειμένου. | Δεν παράγει κανένα ενδιάμεσο κώδικα αντικειμένου. |
Μηχανισμός εργασίας | Η συμπλήρωση γίνεται πριν από την εκτέλεση. | Η σύνταξη και η εκτέλεση πραγματοποιούνται ταυτόχρονα. |
Ταχύτητα | Συγκριτικά γρηγορότερα | Βραδύτερη |
Μνήμη | Η απαίτηση μνήμης οφείλεται περισσότερο στη δημιουργία αντικειμενικού κώδικα. | Απαιτεί λιγότερη μνήμη, καθώς δεν δημιουργεί ενδιάμεσο κώδικα αντικειμένου. |
Λάθη | Προβολή όλων των σφαλμάτων μετά τη σύνταξη, όλα ταυτόχρονα. | Εμφανίζει σφάλμα κάθε γραμμής μία προς μία. |
Ανίχνευση σφαλμάτων | Δύσκολος | Ευκολότερα συγκριτικά |
Σχετικές γλώσσες προγραμματισμού | C, C ++, C #, Scala, η γραφομηχανή χρησιμοποιεί μεταγλωττιστή. | Java, PHP, Perl, Python, Ruby χρησιμοποιεί διερμηνέα. |
Ορισμός του μεταγλωττιστή
Ένας μεταγλωττιστής είναι ένα πρόγραμμα που διαβάζει ένα πρόγραμμα γραμμένο στη γλώσσα υψηλού επιπέδου και το μετατρέπει στο μηχάνημα ή σε γλώσσα χαμηλού επιπέδου και αναφέρει τα σφάλματα που υπάρχουν στο πρόγραμμα. Μετατρέπει ολόκληρο τον πηγαίο κώδικα με ένα πάτημα ή μπορεί να πάρει πολλαπλά περάσματα για να το κάνει, αλλά επιτέλους, ο χρήστης παίρνει τον καταρτισμένο κώδικα που είναι έτοιμος να εκτελέσει.
Ο μεταγλωττιστής λειτουργεί σε φάσεις. διάφορα στάδια μπορούν να ομαδοποιηθούν σε δύο μέρη που είναι:
- Ανάλυση Η φάση του μεταγλωττιστή αναφέρεται επίσης ως το εμπρόσθιο άκρο στο οποίο το πρόγραμμα χωρίζεται σε θεμελιώδη συστατικά μέρη και ελέγχει τη γραμματική, τη σημασιολογία και τη σύνταξη του κώδικα μετά την οποία παράγεται ο ενδιάμεσος κώδικας. Η φάση ανάλυσης περιλαμβάνει τον λεξικό αναλυτή, τον σημασιολογικό αναλυτή και τον αναλυτή σύνταξης.
- Η φάση σύνθεσης του μεταγλωττιστή είναι επίσης γνωστή ως το πίσω άκρο στο οποίο βελτιστοποιείται ο ενδιάμεσος κώδικας και παράγεται ο κώδικας στόχου. Η φάση σύνθεσης περιλαμβάνει κώδικα βελτιστοποίησης και γεννήτρια κώδικα.
ΦΑΣΕΙΣ COMPILER
Τώρα ας καταλάβουμε λεπτομερώς τη λειτουργία κάθε σταδίου.
- Λεξικός αναλυτής : Σαρώνει τον κώδικα ως ροή χαρακτήρων, ομαδοποιεί την ακολουθία των χαρακτήρων σε λεξικά και εξάγει μια ακολουθία μαρκών με αναφορά στη γλώσσα προγραμματισμού.
- Αναλυτής σύνταξης : Στη φάση αυτή, οι μάρκες που δημιουργούνται στο προηγούμενο στάδιο ελέγχονται έναντι της γραμματικής της γλώσσας προγραμματισμού, ανεξάρτητα από το αν οι εκφράσεις είναι συντακτικά σωστές ή όχι. Κάνει αναλύσεις για να το πράξει.
- Σημασιολογικός Αναλυτής : Εξακριβώνει αν οι εκφράσεις και οι δηλώσεις που δημιουργήθηκαν στην προηγούμενη φάση ακολουθούν τον κανόνα της γλώσσας προγραμματισμού ή όχι και δημιουργούν αναλυμένες αναλύσεις.
- Ενδιάμεση γεννήτρια κώδικα : Δημιουργεί ισοδύναμο ενδιάμεσο κώδικα του πηγαίου κώδικα. Υπάρχουν πολλές αναπαραστάσεις ενδιάμεσου κώδικα, αλλά ο TAC (Τρίτος κώδικας διεύθυνσης) είναι ο πιο ευρέως χρησιμοποιούμενος.
- Κωδικοποιητής βελτιστοποίησης : Βελτιώνει χρόνο και χώρο απαιτήσεις του προγράμματος. Για το σκοπό αυτό, εξαλείφει τον πλεονασμένο κώδικα που υπάρχει στο πρόγραμμα.
- Γεννήτρια κώδικα : Αυτή είναι η τελική φάση του μεταγλωττιστή στον οποίο παράγεται ο κωδικός στόχου για μια συγκεκριμένη μηχανή. Εκτελεί λειτουργίες όπως η διαχείριση μνήμης, η ανάθεση μητρώου και η βελτιστοποίηση της μηχανής.
Ο πίνακας συμβόλων είναι κάπως μια δομή δεδομένων που διαχειρίζεται τα αναγνωριστικά μαζί με τον σχετικό τύπο δεδομένων που αποθηκεύει. Ο χειριστής σφαλμάτων ανιχνεύει, αναφέρει, διορθώνει τα σφάλματα που συναντώνται μεταξύ των διαφόρων φάσεων ενός μεταγλωττιστή.
Ορισμός του διερμηνέα
Ο διερμηνέας είναι μια εναλλακτική λύση για την εφαρμογή μιας γλώσσας προγραμματισμού και κάνει την ίδια εργασία με έναν μεταγλωττιστή. Ο διερμηνέας εκτελεί λεξιλόγια, ανάλυση και έλεγχο τύπου παρόμοια με έναν μεταγλωττιστή. Αλλά ο διερμηνέας επεξεργάζεται το δέντρο σύνταξης απευθείας για να αποκτήσει πρόσβαση σε εκφράσεις και να εκτελέσει μια δήλωση παρά να δημιουργήσει κώδικα από το δέντρο σύνταξης.
Ένας διερμηνέας μπορεί να χρειαστεί να επεξεργαστεί το ίδιο δέντρο σύνταξης περισσότερες από μία φορές, γι 'αυτό και η ερμηνεία είναι συγκριτικά πιο αργή από την εκτέλεση του προγραμματισμένου προγράμματος.
Η σύνταξη και η ερμηνεία πιθανώς συνδυάζονται για την υλοποίηση μιας γλώσσας προγραμματισμού. Στην οποία ένας μεταγλωττιστής δημιουργεί κώδικα ενδιάμεσου επιπέδου τότε ο κώδικας ερμηνεύεται και όχι μεταγλωττίζεται στον κώδικα μηχανής.
Η χρήση ενός διερμηνέα είναι επωφελής κατά την ανάπτυξη του προγράμματος, όπου το πιο σημαντικό μέρος είναι να είναι σε θέση να δοκιμάσει γρήγορα μια τροποποίηση του προγράμματος και όχι να εκτελέσει αποτελεσματικά το πρόγραμμα.
Βασικές διαφορές μεταξύ του μεταγλωττιστή και του διερμηνέα
Ας δούμε τις μεγάλες διαφορές μεταξύ του Compiler και του Interpreter.
- Ο μεταγλωττιστής παίρνει ένα πρόγραμμα στο σύνολό του και το μεταφράζει, αλλά ο διερμηνέας μεταφράζει μια δήλωση προγράμματος με δήλωση.
- Ο ενδιάμεσος κώδικας ή ο κώδικας στόχου δημιουργείται στην περίπτωση ενός μεταγλωττιστή. Σε σχέση με το διερμηνέα δεν δημιουργεί ενδιάμεσο κώδικα.
- Ένας μεταγλωττιστής είναι συγκριτικά γρηγορότερος από τον Διερμηνέα καθώς ο μεταγλωττιστής παίρνει ολόκληρο το πρόγραμμα με μία κίνηση ενώ οι διερμηνείς καταρτίζουν κάθε γραμμή κώδικα μετά την άλλη.
- Ο μεταγλωττιστής απαιτεί περισσότερη μνήμη από το διερμηνέα λόγω της δημιουργίας αντικειμενικού κώδικα.
- Ο συγχρονιστής παρουσιάζει ταυτόχρονα όλα τα σφάλματα και είναι δύσκολο να ανιχνευθούν τα σφάλματα στα σφάλματα εμφάνισης του ερμηνευτή αντίθεσης σε κάθε δήλωση μία προς μία και είναι ευκολότερο να εντοπιστούν σφάλματα.
- Σε μεταγλωττιστή, όταν εμφανιστεί ένα σφάλμα στο πρόγραμμα, σταματά τη μετάφρασή του και μετά την κατάργηση του σφάλματος ολόκληρο το πρόγραμμα μεταφράζεται και πάλι. Αντιθέτως, όταν παρουσιάζεται σφάλμα στον διερμηνέα, εμποδίζει τη μετάφρασή του και μετά την αφαίρεση του σφάλματος, η μετάφραση συνεχίζεται.
- Σε έναν μεταγλωττιστή, η διαδικασία απαιτεί δύο βήματα στα οποία αρχικά μεταφέρεται ο πηγαίος κώδικας στο πρόγραμμα στόχευσης που εκτελείται στη συνέχεια. Ενώ βρίσκεστε στο διερμηνέα Είναι μια διαδικασία ενός βήματος, στην οποία ο Πηγαίος κώδικας συντάσσεται και εκτελείται ταυτόχρονα.
- Ο μεταγλωττιστής χρησιμοποιείται σε γλώσσες προγραμματισμού όπως C, C ++, C #, Scala, κλπ. Από την άλλη, ο διερμηνέας απασχολείται σε γλώσσες όπως Java, PHP, Ruby, Python κ.λπ.
συμπέρασμα
Ο μεταγλωττιστής και ο διερμηνέας προορίζονται να κάνουν την ίδια εργασία, αλλά διαφέρουν στη διαδικασία λειτουργίας, ο Compiler παίρνει τον πηγαίο κώδικα με συνολικό τρόπο, ενώ ο Διερμηνέας παίρνει τα συστατικά μέρη του πηγαίου κώδικα, δηλ. Δήλωση με δήλωση.
Παρόλο που τόσο ο μεταγλωττιστής όσο και ο διερμηνέας έχουν ορισμένα πλεονεκτήματα και μειονεκτήματα, όπως οι ερμηνευμένες γλώσσες θεωρούνται ως δια-πλατφόρμα, δηλαδή ο κώδικας είναι φορητός. Επίσης, δεν χρειάζεται να μεταγλωττίσει οδηγίες που προηγουμένως ήταν αντίθετες με τον μεταγλωττιστή, κάτι που εξοικονομεί χρόνο. Οι σύνθετες γλώσσες είναι ταχύτερες όσον αφορά τη διαδικασία σύνταξης.