Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Γλώσσες Προγραμματισμού Υπολογιστών

Τι είναι ένας μεταγλωττιστής υπολογιστή και πώς λειτουργεί στη διαδικασία μετάφρασης γλωσσών προγραμματισμού υψηλού επιπέδου σε κώδικα μηχανής;

Ο μεταγλωττιστής υπολογιστή:Μεταφραστής από τον ανθρώπινο αναγνώσιμο κώδικα σε γλώσσα μηχανής

A Compiler είναι ένα ειδικό πρόγραμμα που μεταφράζει τον πηγαίο κώδικα γραμμένο σε μια γλώσσα προγραμματισμού υψηλού επιπέδου (όπως C ++, Java, Python, αλλά η Python συνήθως ερμηνεύεται) σε κώδικα μηχανής ή σε άλλη γλώσσα χαμηλότερου επιπέδου που ένας υπολογιστής μπορεί να κατανοήσει και να εκτελέσει άμεσα. Σκεφτείτε το ως εκλεπτυσμένο μεταφραστή ανάμεσα σε μια γλώσσα που γράφουν οι άνθρωποι και ένα γλωσσικό μηχανές "καταλαβαίνουν".

Λειτουργία ενός μεταγλωττιστή:Η διαδικασία μετάφρασης

Η διαδικασία συλλογής συνήθως περιλαμβάνει αρκετές ξεχωριστές φάσεις, καθένα από τα οποία εκτελεί μια συγκεκριμένη εργασία. Ακολουθεί μια ανάλυση των βασικών σταδίων:

1. λεξική ανάλυση (σάρωση):

* Σκοπός: Διαβάζει τον χαρακτήρα πηγαίου κώδικα ανά χαρακτήρα και τις ομαδοποιεί σε σημαντικές μονάδες που ονομάζονται *Tokens *.

* Ενέργειες:

* Αφαιρεί το κενό και τα σχόλια.

* Προσδιορίζει τις λέξεις-κλειδιά (όπως `if`,` ``, 'for`), τα αναγνωριστικά (ονόματα μεταβλητών), οι χειριστές (`+`, `-`,`* `,`/`), οι κυριότεροι (αριθμοί, χορδές) και διαχωριστές (παρενθέσεις, ημικόλια).

* Αντιστοιχεί σε κάθε στοιχείο ενός τύπου (π.χ., `αναγνωριστικό ',` Integer_Literal`, `λέξη -κλειδί').

* Έξοδος: Ένα ρεύμα μαρκών.

Παράδειγμα:

`` c ++

int x =10 + y; // Παράδειγμα κώδικα C ++

`` `

Θα ήταν tokenized ως κάτι σαν:

`` `

<Λέξη -κλειδί, "int">

<Αναγνωριστικό, "x">

<Χειριστής, "=">

>

<Χειριστής, "+">

<Αναγνωριστικό, "Y">

<Διαχωριστικός, ";">

`` `

2. Ανάλυση σύνταξης (ανάλυση):

* Σκοπός: Ελέγχει εάν η ακολουθία των μαρκών συμμορφώνεται με τους γραμματικούς κανόνες (σύνταξη) της γλώσσας προγραμματισμού.

* Ενέργειες:

* Χρησιμοποιεί τα μάρκες για να δημιουργήσει ένα αφηρημένο δέντρο σύνταξης (AST). Το AST αντιπροσωπεύει την ιεραρχική δομή του προγράμματος, δείχνοντας πώς σχετίζονται τα μάρκες.

* Προσδιορίζει σφάλματα σύνταξης (π.χ., που λείπουν ημικόλια, παρενθέσεις που δεν έχουν ανατινάξει).

* Έξοδος: Ένα αφηρημένο δέντρο σύνταξης (AST).

Παράδειγμα (συνεχίζοντας από πάνω):

Ο αναλυτής θα κατασκευάσει ένα AST που να αντιπροσωπεύει τη δήλωση `int x =10 + y;` Το AST θα έδειχνε ότι το `x` δηλώνεται ως ακέραιος και αρχικοποιείται με το αποτέλεσμα της έκφρασης '10 + y'.

3. Σημασιολογική ανάλυση:

* Σκοπός: Ελέγχει το νόημα (σημασιολογία) του κώδικα και εξασφαλίζει ότι το πρόγραμμα είναι λογικά συνεπές.

* Ενέργειες:

* Τύπος ελέγχου:Επαληθεύει ότι οι λειτουργίες εκτελούνται σε συμβατούς τύπους δεδομένων (π.χ., προσθέτοντας έναν ακέραιο σε μια συμβολοσειρά θα ήταν ένα σφάλμα).

* Ανάλυση πεδίου εφαρμογής:Καθορίζει την έννοια των αναγνωριστικών με βάση το πλαίσιο τους (π.χ., η οποία αναφέρεται η μεταβλητή `x`).

* Ανίχνευση σφαλμάτων:Προσδιορίζει σημασιολογικά σφάλματα (π.χ., χρησιμοποιώντας μια μη δηλωμένη μεταβλητή, καλώντας μια λειτουργία με λάθος αριθμό επιχειρημάτων).

* Διαχείριση πίνακα συμβόλων:Ο πίνακας συμβόλων αποθηκεύει πληροφορίες σχετικά με τα αναγνωριστικά (μεταβλητές, λειτουργίες κ.λπ.) που χρησιμοποιούνται στο πρόγραμμα.

* Έξοδος: Ένα σχολιασμένο AST (το AST με πρόσθετες σημασιολογικές πληροφορίες) και τον πίνακα συμβόλων.

4.

* Σκοπός: Μεταφράζει το σχολιασμένο AST σε μια ενδιάμεση αναπαράσταση (IR).

* Ενέργειες:

* Το IR είναι μια ανεξάρτητη από το μηχάνημα αναπαράσταση του προγράμματος, που έχει σχεδιαστεί για να βελτιστοποιηθεί εύκολα και να μεταφραστεί σε κώδικα προορισμού. Τα κοινά IRS περιλαμβάνουν κωδικό τριών διευθύνσεων και κωδικό μηχανής στοίβας.

* Απλοποιεί τον κώδικα και διευκολύνει την εκτέλεση βελτιστοποιήσεων.

* Έξοδος: Ενδιάμεσο κώδικα (IR).

Παράδειγμα (απλός κωδικός τριών διευθύνσεων):

Η έκφραση «10 + y» μπορεί να μεταφραστεί σε:

`` `

T1 =10 + y // t1 είναι μια προσωρινή μεταβλητή

x =T1

`` `

5. Βελτιστοποίηση κώδικα:

* Σκοπός: Βελτιώνει την αποτελεσματικότητα του ενδιάμεσου κώδικα.

* Ενέργειες:

* Διάφορες τεχνικές βελτιστοποίησης εφαρμόζονται για τη μείωση του μεγέθους κώδικα, του χρόνου εκτέλεσης ή και των δύο.

* Οι κοινές βελτιστοποιήσεις περιλαμβάνουν:

* Συνεχής αναδίπλωση (αξιολόγηση σταθερών εκφράσεων σε χρόνο μεταγλώττισης).

* Εξάλειψη νεκρού κώδικα (αφαίρεση κώδικα που δεν εκτελείται ποτέ).

* Ξύρισμα βρόχου (επεκτείνοντας τους βρόχους για να μειώσουν τα γενικά έξοδα).

* Κοινή εξάλειψη υπο -εκφράσεων (αποφεύγοντας περιττές υπολογισμούς).

* Έξοδος: Βελτιστοποιημένος ενδιάμεσος κώδικας.

6. Δημιουργία κώδικα:

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

* Ενέργειες:

* Επιλέγει τις κατάλληλες οδηγίες μηχανής για κάθε δήλωση IR.

* Διαθέτει καταχωρητές για την αποθήκευση μεταβλητών και ενδιάμεσων τιμών.

* Χειρίζεται την κατανομή μνήμης.

* Έξοδος: Κωδικός μηχανής ή γλώσσα συναρμολόγησης.

7.

* Εάν η γεννήτρια κώδικα εξάγει τη γλώσσα συναρμολόγησης, χρησιμοποιείται ένα πρόγραμμα συναρμολογητή για τη μετατροπή του κώδικα συναρμολόγησης σε κωδικό μηχανής.

8. σύνδεση (προαιρετικό):

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

* Επιλύει εξωτερικές αναφορές (αναφορές σε λειτουργίες ή μεταβλητές που ορίζονται σε άλλα αρχεία).

Παράδειγμα Περίληψη:

Ας πούμε ότι έχετε ένα απλό πρόγραμμα C ++:

`` c ++

int main () {

int a =5;

int b =10;

int sum =a + b;

επιστροφή 0;

}

`` `

Ο μεταγλωττιστής θα περάσει από την ακόλουθη (απλοποιημένη) διαδικασία:

1. λεξική ανάλυση: Προσδιορίζει μάρκες όπως `int`,` main ', `=`, `5`,`+`, κλπ.

2. Ανάλυση σύνταξης: Δημιουργεί ένα AST που αντιπροσωπεύει τη δομή του κώδικα (π.χ. η «κύρια λειτουργία» περιέχει δηλώσεις και λειτουργία προσθήκης).

3. Σημασιολογική ανάλυση: Ελέγχει εάν οι μεταβλητές δηλώνονται πριν από τη χρήση, ότι το `+` ισχύει για ακέραιους ακέραιους κ.λπ.

4. Δημιουργεί μια ενδιάμεση αναπαράσταση, ίσως κάτι σαν:

`` `

A =5

B =10

άθροισμα =a + b

επιστροφή 0

`` `

5. Βελτιστοποίηση κώδικα: Μπορεί να εκτελέσει μικρές βελτιστοποιήσεις (δεν είναι πολύ δυνατή βελτιστοποίηση σε αυτήν την ασήμαντη περίπτωση).

6. Δημιουργία κώδικα: Μεταφράζει το IR σε οδηγίες κώδικα μηχανής ειδικά για τον επεξεργαστή στόχου (π.χ. οδηγίες συναρμολόγησης x86).

Βασικά πλεονεκτήματα της συλλογής:

* ταχύτητα: Ο συντάκτης κώδικα γενικά εκτελείται ταχύτερα από τον ερμηνευμένο κώδικα, επειδή η μετάφραση γίνεται μόνο μία φορά, κατά τη διάρκεια της συλλογής, και όχι κάθε φορά που εκτελείται το πρόγραμμα.

* Ανίχνευση σφαλμάτων: Οι μεταγλωττιστές μπορούν να ανιχνεύσουν πολλά σφάλματα κατά τη διάρκεια της συλλογής, πριν από την εκτέλεση του προγράμματος, γεγονός που συμβάλλει στη βελτίωση της αξιοπιστίας του κώδικα.

* Ασφάλεια: Με την ανίχνευση σφαλμάτων στο χρόνο μεταγλώττισης, οι μεταγλωττιστές μπορούν να βοηθήσουν στην πρόληψη ορισμένων τρωτών σημείων ασφαλείας.

Βασικά μειονεκτήματα της συλλογής:

* Εξάρτηση πλατφόρμας: Ο συντάκτης κώδικα είναι συχνά ειδικός για την πλατφόρμα, που σημαίνει ότι μπορεί να εκτελεστεί μόνο στο λειτουργικό σύστημα και στην αρχιτεκτονική επεξεργαστή για την οποία καταρτίζεται.

* Χρόνος σύνταξης: Η διαδικασία συλλογής μπορεί να διαρκέσει σημαντικό χρονικό διάστημα, ειδικά για μεγάλα προγράμματα.

* Πολυπλοκότητα εντοπισμού σφαλμάτων: Ο εντοπισμός σφαλμάτων που καταρτίζεται από τον κώδικα μπορεί μερικές φορές να είναι πιο προκλητική από τον εντοπισμό ερμηνευμένου κώδικα επειδή εργάζεστε με τον κώδικα μηχανής και όχι τον αρχικό πηγαίο κώδικα.

Συνοπτικά, ο μεταγλωττιστής είναι ένα κρίσιμο στοιχείο της ανάπτυξης λογισμικού, υπεύθυνη για τη μετατροπή του κώδικα υψηλού επιπέδου σε μια μορφή που μπορεί να εκτελέσει ένας υπολογιστής. Εκτελεί διάφορα σύνθετα στάδια για να αναλύσουμε, να βελτιστοποιήσουμε και να δημιουργήσουμε κώδικα μηχανής, που τελικά μας επιτρέπει να εκτελούμε τα προγράμματα που γράφουμε.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα