Δευτέρα 3 Ιουνίου 2013

Μεταγλωττιστής (compiler - μεταφραστής)

Μεταγλωττιστής (compiler) είναι ένα πρόγραμμα που μεταφράζει άλλα προγράμματα, που είναι γραμμένα σε μια γλώσσα πηγής (source language), σε μια ισοδύναμη γλώσσα στόχο (object language). Η γλώσσα πηγής είναι συνήθως μια γλώσσα προγραμματισμού υψηλού επιπέδου ενώ η γλώσσα στόχος είναι συχνότερα η γλώσσα μηχανής ενός υπολογιστή. Πιο συγκεκριμένα ο μεταφραστής (translator) προσδιορίζει την σημασιολογία της γλώσσας προγραμματισμού, μετατρέπει τις λειτουργίες που είναι καθορισμένες από την σύνταξη σε λειτουργίες του υπολογιστικού μοντέλου κάποιας πραγματικής ή εικονικής μηχανής.
Ένας τυπικός μεταγλωττιστής συνίσταται από αρκετές φάσεις η καθεμία από τις οποίες περνά την έξοδό (output) της στην επόμενή της φάση :

Η Λεξική Ανάλυση (lexical analysis) ομαδοποιεί τους χαρακτήρες σε λεξικές μονάδες (lexical units) ή αναγνωριστικά (tokens). Η είσοδος (input) σε αυτήν την φάση είναι ένα ρεύμα χαρακτήρων (character stream). Η έξοδος είναι ένα ρεύμα αναγνωριστικών (stream of tokens). Οι κανονικές εκφράσεις (regular expressions) χρησιμοποιούνται για να προσδιορίσουν τα αναγνωριστικά που προέκυψαν από τον λεξιλογικό αναλυτή. Ο λεξιλογικός αναλυτής ή αλλιώς σαρωτής (scanner) λειτουργεί ως μηχανή πεπερασμένης κατάστασης. Παράδειγμα εργαλείων για την δημιουργία λεξιλογικών αναλυτών είναι τα Lex και Flex. Τα προγράμματα αυτά αναγνωρίζουν λεξιλογικά πρότυπα (ή δείγματα) μέσα σε κείμενο.
Στην Συντακτική Ανάλυση (syntax analysis or parse) ομαδοποιούνται τα αναγνωριστικά σε συντακτικές μονάδες (syntactical units). Η έξοδος σε αυτή την φάση είναι μια δενδρική αναπαράσταση της σύνταξης του προγράμματος. Το δένδρο χρησιμοποιεί φυσική γλώσσα και καθορίζει την δομή του προγράμματος που αναγνωρίστηκε απ’ τον συντακτικό αναλυτή.
Κατά την Σημασιολογική Ανάλυση (semantic analysis) αναλύεται το συντακτικό δένδρο έτσι ώστε να εντοπιστούν οι πληροφορίες που δεν μπορούν να καθοριστούν πλήρως απ’ την συντακτική ανάλυση. Οι πληροφορίες αυτές συγκροτούν την στατική σημασία (static semantics) του προγράμματος. Η έξοδος της φάσης αυτής είναι ένα συντακτικό δένδρο με σχόλια. Χαρακτηριστική γραμματική χρησιμοποιείται για να γίνει κατανοητή η στατική σημασία του προγράμματος.
Κατά την Βελτιστοποίηση (optimizing) εφαρμόζονται σημασιολογικές μετατροπές στο προαναφερθέν σχολιασμένο δένδρο για να απλοποιηθεί η δομή του και για να διευκολυνθεί η παραγωγή πιο αποδοτικού κώδικα.
Στην φάση της Δημιουργίας του Κώδικα (code generating) μετατρέπεται το απλοποιημένο πλέον δένδρο σε κώδικα γραμμένο στην γλώσσα στόχο χρησιμοποιώντας κανόνες που υποδηλώνουν την σημασία της γλώσσας πηγής.
Κατά την Βελτιστοποίηση του Τελικού Προγράμματος (peer-hole optimizing) εξετάζεται ο κώδικας (της γλώσσας στόχου) και επιχειρούνται βελτιώσεις πάνω στον εξαρτώμενο από την μηχανή κώδικα.


by: Πληροφορική Online
Πληροφορική Online Updated at: 2:59 π.μ.
◄ Newer Post Older Post ►