Διαφορά μεταξύ της φάσης και της μετάβασης στο Compiler

Anonim

Φάση vs Pass σε Compiler

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

Τι είναι το Pass σε ένα Compiler;

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

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

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

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

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

Phase and Pass είναι δύο όροι που χρησιμοποιούνται στον τομέα των μεταγλωττιστών. Ένα πέρασμα είναι μια φορά που ο μεταγλωττιστής περνάει πέρα ​​από τον πηγαίο κώδικα ή κάποια άλλη αναπαράσταση του. Συνήθως, οι περισσότεροι μεταγλωττιστές έχουν τουλάχιστον δύο φάσεις που ονομάζονται εμπρόσθιο και οπίσθιο άκρο, ενώ θα μπορούσαν να είναι είτε μονοφασικοί είτε πολλαπλοί. Η φάση χρησιμοποιείται για την ταξινόμηση των μεταγλωττιστών σύμφωνα με την κατασκευή, ενώ το pass χρησιμοποιείται για την ταξινόμηση των μεταγλωττιστών ανάλογα με τον τρόπο λειτουργίας τους.