Τι είναι ο σχεδιασμός μεταγλωττιστή; Τύποι, Εργαλεία Κατασκευής, Παράδειγμα
Τι είναι ο μεταγλωττιστής;
Ο μεταγλωττιστής είναι ένα πρόγραμμα υπολογιστή που σας βοηθά να μετατρέψετε τον πηγαίο κώδικα γραμμένο σε γλώσσα υψηλού επιπέδου σε γλώσσα μηχανής χαμηλού επιπέδου. Μεταφράζει τον κώδικα που είναι γραμμένος σε μια γλώσσα προγραμματισμού σε κάποια άλλη γλώσσα χωρίς να αλλάζει το νόημα του κώδικα. Ο μεταγλωττιστής κάνει επίσης τον τελικό κώδικα αποδοτικό, ο οποίος είναι βελτιστοποιημένος για χρόνο εκτέλεσης και χώρο στη μνήμη.
Η διαδικασία μεταγλώττισης περιλαμβάνει βασικούς μηχανισμούς μετάφρασης και ανίχνευση σφαλμάτων. Η διαδικασία του μεταγλωττιστή περνά από λεξιλογική, συντακτική και σημασιολογική ανάλυση στο μπροστινό μέρος και δημιουργία κώδικα και βελτιστοποίηση στο πίσω μέρος.
Χαρακτηριστικά των μεταγλωττιστών
- Ορθότητα
- Ταχύτητα μεταγλώττισης
- Διατηρήστε τη σωστή σημασία του κώδικα
- Η ταχύτητα του κωδικού στόχου
- Αναγνώριση νόμιμων και παράνομων κατασκευών προγραμμάτων
- Καλή αναφορά/χειρισμός σφαλμάτων
- Βοήθεια εντοπισμού σφαλμάτων κώδικα
Τύποι μεταγλωττιστή
Ακολουθούν οι διαφορετικοί τύποι μεταγλωττιστή:
- Single Pass Compilers
- Δύο μεταγλωττιστές περασμάτων
- Multipass Compilers
Single Pass Compiler
Με ένα πέρασμα, ο πηγαίος κώδικας του μεταγλωττιστή μετατρέπεται απευθείας σε κώδικα μηχανής. Για παράδειγμα, η γλώσσα Pascal.
Μεταγλωττιστής δύο περασμάτων
Ο μεταγλωττιστής δύο περασμάτων χωρίζεται σε δύο ενότητες, π.χ.
- Μπροστινή πλευρά: Αντιστοιχίζει τον νομικό κώδικα σε Ενδιάμεση Αναπαράσταση (IR).
- Πίσω άκρο: Αντιστοιχίζει το IR στο μηχάνημα-στόχο
Η μέθοδος Two pass compiler απλοποιεί επίσης τη διαδικασία επαναστόχευσης. Επιτρέπει επίσης πολλαπλά μπροστινά άκρα.
Multipass Compilers
Ο μεταγλωττιστής πολλαπλών διέλευσης επεξεργάζεται τον πηγαίο κώδικα ή το δέντρο σύνταξης ενός προγράμματος πολλές φορές. Χώριζε ένα μεγάλο πρόγραμμα σε πολλά μικρά προγράμματα και τα επεξεργαζόταν. Αναπτύσσει πολλαπλούς ενδιάμεσους κώδικες. Όλα αυτά τα multipass λαμβάνουν ως είσοδο την έξοδο της προηγούμενης φάσης. Άρα απαιτεί λιγότερη μνήμη. Είναι επίσης γνωστό ως «Wide Compiler».
Καθήκοντα του μεταγλωττιστή
Οι κύριες εργασίες που εκτελεί ο μεταγλωττιστής είναι:
- Χωρίζει το πρόγραμμα πηγής σε κομμάτια και τους επιβάλλει γραμματική δομή
- Σας επιτρέπει να δημιουργήσετε το επιθυμητό πρόγραμμα-στόχο από την ενδιάμεση αναπαράσταση και επίσης να δημιουργήσετε τον πίνακα συμβόλων
- Μεταγλωττίζει τον πηγαίο κώδικα και εντοπίζει σφάλματα σε αυτόν
- Διαχειριστείτε την αποθήκευση όλων των μεταβλητών και των κωδικών.
- Υποστήριξη για ξεχωριστή μεταγλώττιση
- Διαβάστε, αναλύστε ολόκληρο το πρόγραμμα και μεταφράστε σε σημασιολογικά ισοδύναμο
- Μετάφραση του πηγαίου κώδικα σε αντικειμενικό κώδικα ανάλογα με τον τύπο του μηχανήματος
Ιστορία του μεταγλωττιστή
Σημαντικό ορόσημο της ιστορίας του Compiler είναι το εξής:
- Η λέξη «μεταγλωττιστής» χρησιμοποιήθηκε για πρώτη φορά στις αρχές της δεκαετίας του 1950 από την Grace Murray Hopper.
- Ο πρώτος μεταγλωττιστής κατασκευάστηκε από τον John Backum και την ομάδα του μεταξύ 1954 και 1957 στο IBM.
- Η COBOL ήταν η πρώτη γλώσσα προγραμματισμού που συντάχθηκε σε πολλές πλατφόρμες το 1960
- Η μελέτη των θεμάτων σάρωσης και ανάλυσης συνεχίστηκε στις δεκαετίες του 1960 και του 1970 για να δοθεί μια ολοκληρωμένη λύση.
Βήματα για συστήματα επεξεργασίας γλώσσας
Πριν μάθετε για την έννοια των μεταγλωττιστών, πρέπει πρώτα να κατανοήσετε μερικά άλλα εργαλεία που λειτουργούν με μεταγλωττιστές.
- Προεπεξεργαστής: Ο προεπεξεργαστής θεωρείται ως μέρος του Compiler. Είναι ένα εργαλείο που παράγει είσοδο για τον Compiler. Ασχολείται με την επεξεργασία μακροεντολών, την αύξηση, την επέκταση γλώσσας κ.λπ.
- Διερμηνέας: Ένας διερμηνέας είναι σαν τον Compiler που μεταφράζει τη γλώσσα υψηλού επιπέδου σε γλώσσα μηχανής χαμηλού επιπέδου. Η κύρια διαφορά μεταξύ των δύο είναι ότι ο διερμηνέας διαβάζει και μετασχηματίζει τον κώδικα γραμμή προς γραμμή. Ο μεταγλωττιστής διαβάζει ολόκληρο τον κώδικα ταυτόχρονα και δημιουργεί τον κώδικα μηχανής.
- Assembler: Μεταφράζει τον κώδικα γλώσσας συναρμολόγησης σε γλώσσα κατανοητή από μηχανή. Το αποτέλεσμα εξόδου του assembler είναι γνωστό ως αρχείο αντικειμένου που είναι ένας συνδυασμός εντολών μηχανής καθώς και των δεδομένων που απαιτούνται για την αποθήκευση αυτών των οδηγιών στη μνήμη.
- Links: Ο σύνδεσμος σάς βοηθά να συνδέσετε και να συγχωνεύσετε διάφορα αρχεία αντικειμένων για να δημιουργήσετε ένα εκτελέσιμο αρχείο. Όλα αυτά τα αρχεία μπορεί να έχουν μεταγλωττιστεί με ξεχωριστούς assemblers. Το κύριο καθήκον ενός συνδέτη είναι να αναζητήσει τις καλούμενες μονάδες σε ένα πρόγραμμα και να βρει τη θέση μνήμης όπου είναι αποθηκευμένες όλες οι μονάδες.
- Φορτωτής: Το πρόγραμμα φόρτωσης είναι ένα μέρος του λειτουργικού συστήματος, το οποίο εκτελεί τις εργασίες φόρτωσης εκτελέσιμων αρχείων στη μνήμη και εκτέλεσης τους. Υπολογίζει επίσης το μέγεθος ενός προγράμματος που δημιουργεί επιπλέον χώρο στη μνήμη.
- Cross-compiler: Ένας Cross compiler στο σχεδιασμό μεταγλωττιστή είναι μια πλατφόρμα που σας βοηθά να δημιουργήσετε εκτελέσιμο κώδικα.
- Μεταγλωττιστής από πηγή σε πηγή: Ο μεταγλωττιστής από πηγή σε πηγή είναι ένας όρος που χρησιμοποιείται όταν ο πηγαίος κώδικας μιας γλώσσας προγραμματισμού μεταφράζεται στην πηγή μιας άλλης γλώσσας.
Εργαλεία κατασκευής μεταγλωττιστή
Τα εργαλεία κατασκευής μεταγλωττιστών εισήχθησαν ως τεχνολογίες που σχετίζονται με υπολογιστές εξαπλωμένες σε όλο τον κόσμο. Είναι επίσης γνωστά ως μεταγλωττιστές-μεταγλωττιστές, μεταγλωττιστές-γενήτριες ή μεταφραστής.
Αυτά τα εργαλεία χρησιμοποιούν συγκεκριμένη γλώσσα ή αλγόριθμο για τον καθορισμό και την υλοποίηση του στοιχείου του μεταγλωττιστή. Ακολουθεί το παράδειγμα των εργαλείων κατασκευής μεταγλωττιστή.
- Γεννήτριες σαρωτών: Αυτό το εργαλείο λαμβάνει κανονικές εκφράσεις ως είσοδο. Για παράδειγμα LEX για Unix Operating System.
- Μηχανές μετάφρασης κατευθυνόμενες στη σύνταξη: Αυτά τα εργαλεία λογισμικού προσφέρετε έναν ενδιάμεσο κωδικό χρησιμοποιώντας το δέντρο ανάλυσης. Έχει στόχο να συσχετίσει μία ή περισσότερες μεταφράσεις με κάθε κόμβο του δέντρου ανάλυσης.
- Γεννήτριες ανάλυσης: Μια γεννήτρια αναλυτών παίρνει μια γραμματική ως είσοδο και δημιουργεί αυτόματα τον πηγαίο κώδικα που μπορεί να αναλύσει ροές χαρακτήρων με τη βοήθεια μιας γραμματικής.
- Αυτόματες γεννήτριες κωδικών: Λαμβάνει ενδιάμεσο κώδικα και τους μετατρέπει σε Γλώσσα Μηχανής.
- Μηχανές ροής δεδομένων: Αυτό το εργαλείο είναι χρήσιμο για τη βελτιστοποίηση κώδικα. Εδώ, οι πληροφορίες παρέχονται από τον χρήστη και ο ενδιάμεσος κώδικας συγκρίνεται για την ανάλυση οποιασδήποτε σχέσης. Είναι επίσης γνωστή ως ανάλυση ροής δεδομένων. Σας βοηθά να μάθετε πώς οι τιμές μεταδίδονται από ένα μέρος του προγράμματος σε άλλο μέρος.
Γιατί να χρησιμοποιήσετε έναν μεταγλωττιστή;
- Ο μεταγλωττιστής επαληθεύει ολόκληρο το πρόγραμμα, επομένως δεν υπάρχουν συντακτικά ή σημασιολογικά σφάλματα.
- Το εκτελέσιμο αρχείο βελτιστοποιείται από τον μεταγλωττιστή, επομένως εκτελείται πιο γρήγορα.
- Σας επιτρέπει να δημιουργήσετε εσωτερική δομή στη μνήμη.
- Δεν χρειάζεται να εκτελέσετε το πρόγραμμα στο ίδιο μηχάνημα που κατασκευάστηκε.
- Μετάφραση ολόκληρου του προγράμματος σε άλλη γλώσσα.
- Δημιουργία αρχείων στο δίσκο.
- Συνδέστε τα αρχεία σε μια εκτελέσιμη μορφή.
- Ελέγξτε για συντακτικά σφάλματα και τύπους δεδομένων.
- Σας βοηθά να βελτιώσετε την κατανόησή σας για τη γλωσσική σημασιολογία.
- Βοηθά στον χειρισμό ζητημάτων γλωσσικής απόδοσης.
- Ευκαιρία για ένα μη τετριμμένο προγραμματιστικό έργο.
- Οι τεχνικές που χρησιμοποιούνται για την κατασκευή ενός μεταγλωττιστή μπορούν να είναι χρήσιμες και για άλλους σκοπούς.
Εφαρμογή μεταγλωττιστών
- Ο σχεδιασμός μεταγλωττιστή βοηθά στην πλήρη εφαρμογή Γλωσσών Προγραμματισμού Υψηλού Επιπέδου.
- Υποστήριξη βελτιστοποίησης για υπολογιστή Archiδομή Παραλληλισμός.
- Σχεδιασμός Νέων Ιεραρχιών Μνήμης Μηχανών.
- Χρησιμοποιείται ευρέως για τη μετάφραση προγραμμάτων.
- Χρησιμοποιείται με άλλα εργαλεία παραγωγικότητας λογισμικού.
Σύνοψη
- Ο μεταγλωττιστής είναι ένα πρόγραμμα υπολογιστή που σας βοηθά να μετατρέψετε τον πηγαίο κώδικα γραμμένο σε γλώσσα υψηλού επιπέδου σε γλώσσα μηχανής χαμηλού επιπέδου.
- Η ορθότητα, η ταχύτητα μεταγλώττισης, η διατήρηση της σωστής σημασίας του κώδικα είναι μερικά σημαντικά χαρακτηριστικά του σχεδιασμού του μεταγλωττιστή.
- Οι μεταγλωττιστές χωρίζονται σε τρία μέρη 1) Μεταγλωττιστές Single Pass 2) Two Pass Compilers και 3) Multipass Compilers.
- Ο «μεταγλωττιστής» χρησιμοποιήθηκε για πρώτη φορά στις αρχές της δεκαετίας του 1950 από την Grace Murray Hopper.
- Τα βήματα για το σύστημα επεξεργασίας γλώσσας είναι: Προεπεξεργαστής, Διερμηνέας, Συναρμολογητής, Συνδέτης/Φορτωτής.
- Σημαντικά εργαλεία κατασκευής μεταγλωττιστών είναι 1) Γεννήτριες σαρωτών, 2) Σύνταξη-3) μηχανές κατευθυνόμενης μετάφρασης, 4) γεννήτριες ανάλυσης, 5) Αυτόματες γεννήτριες κωδικών.
- Το κύριο καθήκον του μεταγλωττιστή είναι να επαληθεύσει ολόκληρο το πρόγραμμα, ώστε να μην υπάρχουν συντακτικά ή σημασιολογικά σφάλματα.