Διαφορά μεταξύ φάσης και μετάβασης στον μεταγλωττιστή

Διαφορά μεταξύ φάσης και μετάβασης στον μεταγλωττιστή
Διαφορά μεταξύ φάσης και μετάβασης στον μεταγλωττιστή

Βίντεο: Διαφορά μεταξύ φάσης και μετάβασης στον μεταγλωττιστή

Βίντεο: Διαφορά μεταξύ φάσης και μετάβασης στον μεταγλωττιστή
Βίντεο: Πού οφείλεται η μεγάλη διαφορά στην τιμή καυσίμων μεταξύ Ελλάδας - Κύπρου | Ώρα Ελλάδος 2024, Νοέμβριος
Anonim

Phase vs Pass στον Compiler

Γενικά, ο μεταγλωττιστής είναι ένα πρόγραμμα υπολογιστή που διαβάζει ένα πρόγραμμα γραμμένο σε μια γλώσσα, η οποία ονομάζεται γλώσσα πηγής, και το μεταφράζει σε μια άλλη γλώσσα, η οποία ονομάζεται γλώσσα στόχος. Παραδοσιακά, η γλώσσα πηγής ήταν μια γλώσσα υψηλού επιπέδου όπως η C++ και η γλώσσα στόχος ήταν μια γλώσσα χαμηλού επιπέδου όπως η γλώσσα Assembly. Έτσι, γενικά οι μεταγλωττιστές μπορούν να θεωρηθούν ως μεταφραστές που μεταφράζουν από τη μια γλώσσα στην άλλη. Το Pass και το Phase είναι δύο όροι που χρησιμοποιούνται συχνά με μεταγλωττιστές. Ο αριθμός των περασμάτων ενός μεταγλωττιστή είναι ο αριθμός των φορών που περνά πάνω από την πηγή (ή κάποια μορφή αναπαράστασής του). Ένας μεταγλωττιστής αναλύεται σε μέρη για ευκολία κατασκευής. Η φάση χρησιμοποιείται συχνά για την κλήση ενός τέτοιου ανεξάρτητου τμήματος ενός μεταγλωττιστή.

Τι είναι ένα πέρασμα σε έναν μεταγλωττιστή;

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

Όπως υποδηλώνει το όνομα, οι μεταγλωττιστές με ένα πέρασμα μεταγλωττίζονται σε ένα μόνο πέρασμα. Είναι πιο εύκολο να γράψετε έναν μεταγλωττιστή με ένα πέρασμα και επίσης αποδίδουν πιο γρήγορα από τους μεταγλωττιστές πολλαπλών περασμάτων. Επομένως, ακόμη και τη στιγμή που είχατε περιορισμούς πόρων, οι γλώσσες σχεδιάστηκαν έτσι ώστε να μπορούν να μεταγλωττίζονται με ένα πέρασμα (π.χ. Pascal). Από την άλλη πλευρά, ένας τυπικός μεταγλωττιστής πολλαπλών περασμάτων αποτελείται από πολλά κύρια στάδια. Το πρώτο στάδιο είναι ο σαρωτής (γνωστός και ως λεξικός αναλυτής). Ο σαρωτής διαβάζει το πρόγραμμα και το μετατρέπει σε μια σειρά από διακριτικά. Το δεύτερο στάδιο είναι ο αναλυτής. Μετατρέπει τη συμβολοσειρά των διακριτικών σε ένα δέντρο ανάλυσης (ή ένα αφηρημένο δέντρο σύνταξης), το οποίο καταγράφει τη συντακτική δομή του προγράμματος. Το επόμενο στάδιο είναι αυτό που ερμηνεύει τη σημασιολογία της συντακτικής δομής. Τα στάδια βελτιστοποίησης κώδικα και το τελικό στάδιο δημιουργίας κώδικα ακολουθούν αυτό.

Τι είναι μια φάση σε έναν μεταγλωττιστή;

Ο όρος φάση εμφανίζεται συχνά όταν μιλάτε για κατασκευή μεταγλωττιστή. Αρχικά, οι μεταγλωττιστές ήταν κάθε απλό κομμάτι ενός, μονολιθικού λογισμικού που γράφτηκε από ένα άτομο για τη σύνταξη μιας απλής γλώσσας. Όταν όμως ο πηγαίος κώδικας της γλώσσας που πρόκειται να μεταφραστεί γίνεται πολύπλοκος και μεγάλος, ο μεταγλωττιστής αναλύθηκε σε πολλαπλές (σχετικά ανεξάρτητες) φάσεις. Το πλεονέκτημα της ύπαρξης διαφορετικών φάσεων είναι ότι η ανάπτυξη του μεταγλωττιστή μπορεί να διανεμηθεί σε μια ομάδα προγραμματιστών. Επιπλέον, βελτιώνει την αρθρωτή και επαναχρησιμοποίηση επιτρέποντας την αντικατάσταση φάσεων από βελτιωμένες ή πρόσθετες φάσεις (όπως περαιτέρω βελτιστοποιήσεις) να προστεθούν στον μεταγλωττιστή. Η διαδικασία διαίρεσης της μεταγλώττισης σε φάσεις εισήχθη από το PQCC (Production Quality Compiler-Compiler Project) στο Πανεπιστήμιο Carnegie Melon. Εισήγαγαν τους όρους front end, middle end και back end. Οι περισσότεροι μεταγλωττιστές έχουν τουλάχιστον δύο φάσεις. Αλλά συνήθως, το πίσω άκρο και το μπροστινό άκρο περικλείουν αυτές τις φάσεις.

Ποια είναι η διαφορά μεταξύ Phase και Pass στον Compiler;

Phase και Pass είναι δύο όροι που χρησιμοποιούνται στην περιοχή των μεταγλωττιστών. Ένα πέρασμα είναι μια μεμονωμένη φορά που ο μεταγλωττιστής περνά (διέρχεται) από τον πηγαίο κώδικα ή κάποια άλλη αναπαράστασή του. Συνήθως, οι περισσότεροι μεταγλωττιστές έχουν τουλάχιστον δύο φάσεις που ονομάζονται front end και back end, ενώ θα μπορούσαν να είναι είτε one-pass είτε multi-pass. Το Phase χρησιμοποιείται για την ταξινόμηση μεταγλωττιστών σύμφωνα με την κατασκευή, ενώ το pass χρησιμοποιείται για την ταξινόμηση μεταγλωττιστών σύμφωνα με τον τρόπο λειτουργίας τους.

Συνιστάται: