Τι είναι η Λεξική Ανάλυση;
Η ΛΕΞΙΚΗ ΑΝΑΛΥΣΗ είναι η πρώτη φάση στο σχεδιασμό του μεταγλωττιστή. Το Lexer παίρνει τον τροποποιημένο πηγαίο κώδικα που γράφεται με τη μορφή προτάσεων. Με άλλα λόγια, σας βοηθά να μετατρέψετε μια ακολουθία χαρακτήρων σε μια ακολουθία διακριτικών. Ο λεξικός αναλυτής σπάει αυτή τη σύνταξη σε μια σειρά από διακριτικά. Καταργεί τυχόν επιπλέον χώρο ή σχόλιο γραμμένο στον πηγαίο κώδικα.
Τα προγράμματα που εκτελούν λεξική ανάλυση ονομάζονται λεξικά αναλυτές ή λεξέρ. Ένα lexer περιέχει tokenizer ή σαρωτή. Εάν ο λεξικός αναλυτής εντοπίσει ότι το διακριτικό δεν είναι έγκυρο, δημιουργεί σφάλμα. Διαβάζει ροές χαρακτήρων από τον πηγαίο κώδικα, ελέγχει νομικά διακριτικά και διαβιβάζει τα δεδομένα στον αναλυτή σύνταξης όταν απαιτεί.
Παράδειγμα
How Pleasant Is The Weather?
Δείτε αυτό το παράδειγμα. Εδώ, μπορούμε εύκολα να αναγνωρίσουμε ότι υπάρχουν πέντε λέξεις How Pleasant, The, Weather, Is. Αυτό είναι πολύ φυσικό για εμάς, καθώς μπορούμε να αναγνωρίσουμε τα διαχωριστικά, τα κενά και το σύμβολο στίξης.
HowPl easantIs Th ewe ather?
Τώρα, ελέγξτε αυτό το παράδειγμα, μπορούμε επίσης να το διαβάσουμε. Ωστόσο, θα χρειαστεί λίγος χρόνος επειδή τα διαχωριστικά τοποθετούνται στα Odd Places. Δεν είναι κάτι που σας έρχεται αμέσως.
Σε αυτό το σεμινάριο, θα μάθετε
- Βασικές ορολογίες:
- Lexical Analyzer Architecture: Πώς αναγνωρίζονται τα διακριτικά
- Ρόλοι του Lexical αναλυτή
- Λεξικά σφάλματα
- Ανάκτηση σφαλμάτων στο Lexical Analyzer
- Lexical Analyzer εναντίον Parser
- Γιατί να διαχωρίσετε το Lexical και το Parser;
- Πλεονεκτήματα της λεξικής ανάλυσης
- Μειονέκτημα της λεξικής ανάλυσης
Βασικές ορολογίες
Τι είναι το λεξιλόγιο;
Το lexeme είναι μια ακολουθία χαρακτήρων που περιλαμβάνονται στο πρόγραμμα προέλευσης σύμφωνα με το αντίστοιχο μοτίβο ενός διακριτικού. Δεν είναι παρά μια παρουσία ενός διακριτικού.
Τι είναι ένα διακριτικό;
Το διακριτικό είναι μια ακολουθία χαρακτήρων που αντιπροσωπεύει μια ενότητα πληροφοριών στο πρόγραμμα προέλευσης.
Τι είναι το μοτίβο;
Ένα μοτίβο είναι μια περιγραφή που χρησιμοποιείται από το διακριτικό. Στην περίπτωση μιας λέξης-κλειδιού που χρησιμοποιεί ως διακριτικό, το μοτίβο είναι μια ακολουθία χαρακτήρων.
Lexical Analyzer Architecture: Πώς αναγνωρίζονται τα διακριτικά
Το κύριο καθήκον της λεξικής ανάλυσης είναι η ανάγνωση χαρακτήρων εισαγωγής στον κώδικα και η παραγωγή διακριτικών.
Το Lexical analyzer σαρώνει ολόκληρο τον πηγαίο κώδικα του προγράμματος. Προσδιορίζει κάθε διακριτικό ένα προς ένα. Οι σαρωτές εφαρμόζονται συνήθως για την παραγωγή διακριτικών μόνο όταν ζητηθεί από έναν αναλυτή. Εδώ είναι πώς λειτουργεί-
- Το "Get next token" είναι μια εντολή που αποστέλλεται από τον αναλυτή στον λεξικό αναλυτή.
- Με τη λήψη αυτής της εντολής, ο λεξικός αναλυτής σαρώνει την είσοδο μέχρι να βρει το επόμενο διακριτικό.
- Επιστρέφει το διακριτικό στο Parser.
Η Lexical Analyzer παραλείπει κενά διαστήματα και σχόλια κατά τη δημιουργία αυτών των διακριτικών. Εάν υπάρχει κάποιο σφάλμα, τότε η Lexical analyzer θα συσχετίσει αυτό το σφάλμα με το αρχείο προέλευσης και τον αριθμό γραμμής.
Ρόλοι του Lexical αναλυτή
Το Lexical analyzer εκτελεί τις παρακάτω εργασίες:
- Βοηθά στην αναγνώριση του διακριτικού στον πίνακα συμβόλων
- Αφαιρεί κενά διαστήματα και σχόλια από το πρόγραμμα προέλευσης
- Συσχετίζει μηνύματα σφάλματος με το πρόγραμμα προέλευσης
- Σας βοηθά να επεκτείνετε τις μακροεντολές εάν βρίσκονται στο πρόγραμμα προέλευσης
- Διαβάστε χαρακτήρες εισαγωγής από το πρόγραμμα προέλευσης
Παράδειγμα Λεξικής Ανάλυσης, Διακριτικών, Μη Διακριτικών
Σκεφτείτε τον ακόλουθο κώδικα που τροφοδοτείται στη Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Δημιουργήθηκαν παραδείγματα κουπονιών
Lexeme | Ενδειξη |
int | Λέξη-κλειδί |
το μέγιστο | Αναγνωριστικό |
( | Χειριστής |
int | Λέξη-κλειδί |
Χ | Αναγνωριστικό |
, | Χειριστής |
int | Λέξη-κλειδί |
Γ | Αναγνωριστικό |
) | Χειριστής |
{ | Χειριστής |
Αν | Λέξη-κλειδί |
Παραδείγματα Nontokens
Τύπος | Παραδείγματα |
Σχόλιο | // Αυτό θα συγκρίνει 2 αριθμούς |
Οδηγία πριν από τον επεξεργαστή | # συμπερίληψη |
Οδηγία πριν από τον επεξεργαστή | # καθορισμός ΑΡΙΘΜΩΝ 8,9 |
Μακροεντολή | ΑΡΙΘΜΟΙ |
Κενός χώρος | / n / b / t |
Λεξικά σφάλματα
Μια ακολουθία χαρακτήρων που δεν είναι δυνατή η σάρωση σε οποιοδήποτε έγκυρο διακριτικό είναι λεξικό. Σημαντικά γεγονότα σχετικά με το λεξικό σφάλμα:
- Τα λεξικά λάθη δεν είναι πολύ συνηθισμένα, αλλά πρέπει να τα διαχειρίζεται ένας σαρωτής
- Η λανθασμένη ορθογραφία αναγνωριστικών, τελεστών, λέξεων-κλειδιών θεωρείται ως λεξικά λάθη
- Γενικά, ένα λεξικό σφάλμα προκαλείται από την εμφάνιση κάποιου παράνομου χαρακτήρα, κυρίως στην αρχή ενός διακριτικού.
Ανάκτηση σφαλμάτων στο Lexical Analyzer
Εδώ είναι μερικές από τις πιο κοινές τεχνικές αποκατάστασης σφαλμάτων:
- Αφαιρεί έναν χαρακτήρα από την υπόλοιπη είσοδο
- Στη λειτουργία πανικού, οι διαδοχικοί χαρακτήρες αγνοούνται πάντα μέχρι να φτάσουμε σε ένα καλά διαμορφωμένο διακριτικό
- Εισάγοντας τον χαρακτήρα που λείπει στην υπόλοιπη είσοδο
- Αντικαταστήστε έναν χαρακτήρα με έναν άλλο χαρακτήρα
- Μεταφέρετε δύο σειριακούς χαρακτήρες
Lexical Analyzer εναντίον Parser
Λεξικός αναλυτής | Αναλυτής |
Πρόγραμμα σάρωσης εισόδου | Εκτελέστε ανάλυση σύνταξης |
Προσδιορίστε τα κουπόνια | Δημιουργήστε μια αφηρημένη αναπαράσταση του κώδικα |
Εισαγωγή διακριτικών στον πίνακα συμβόλων | Ενημέρωση καταχωρίσεων πίνακα συμβόλων |
Δημιουργεί λεξικά λάθη | Δημιουργεί ένα δέντρο ανάλυσης του πηγαίου κώδικα |
Γιατί να διαχωρίσετε το Lexical και το Parser;
- Η απλότητα του σχεδιασμού: Διευκολύνει τη διαδικασία της λεξικής ανάλυσης και τη σύνταξη της ανάλυσης εξαλείφοντας τα ανεπιθύμητα σύμβολα
- Για να βελτιώσετε την απόδοση του μεταγλωττιστή: Σας βοηθά να βελτιώσετε την απόδοση του μεταγλωττιστή
- Ειδίκευση: εξειδικευμένες τεχνικές μπορούν να εφαρμοστούν για τη βελτίωση της διαδικασίας λεξικής ανάλυσης
- Φορητότητα: μόνο ο σαρωτής απαιτεί επικοινωνία με τον έξω κόσμο
- Υψηλότερη φορητότητα: οι ιδιαιτερότητες της συσκευής εισόδου περιορίζονται στο lexer
Πλεονεκτήματα της λεξικής ανάλυσης
- Η μέθοδος Lexical analyzer χρησιμοποιείται από προγράμματα όπως μεταγλωττιστές που μπορούν να χρησιμοποιήσουν τα αναλυμένα δεδομένα από τον κώδικα ενός προγραμματιστή για να δημιουργήσουν έναν μεταγλωττισμένο δυαδικό εκτελέσιμο κώδικα
- Χρησιμοποιείται από προγράμματα περιήγησης ιστού για τη μορφοποίηση και προβολή μιας ιστοσελίδας με τη βοήθεια αναλυμένων δεδομένων από JavsScript, HTML, CSS
- Ένας ξεχωριστός λεξικός αναλυτής σάς βοηθά να δημιουργήσετε έναν εξειδικευμένο και ενδεχομένως πιο αποτελεσματικό επεξεργαστή για την εργασία
Μειονέκτημα της λεξικής ανάλυσης
- Πρέπει να αφιερώσετε σημαντικό χρόνο διαβάζοντας το πρόγραμμα προέλευσης και να το διαχωρίσετε με τη μορφή διακριτικών
- Ορισμένες τυπικές εκφράσεις είναι αρκετά δύσκολο να κατανοηθούν σε σύγκριση με τους κανόνες PEG ή EBNF
- Απαιτείται περισσότερη προσπάθεια για την ανάπτυξη και τον εντοπισμό σφαλμάτων του lexer και των περιγραφών του
- Απαιτείται επιπλέον επιβάρυνση χρόνου εκτέλεσης για τη δημιουργία των πινάκων lexer και την κατασκευή των διακριτικών
Περίληψη
- Η λεξική ανάλυση είναι η πρώτη φάση στο σχεδιασμό του μεταγλωττιστή
- Το lexeme είναι μια ακολουθία χαρακτήρων που περιλαμβάνονται στο πρόγραμμα προέλευσης σύμφωνα με το αντίστοιχο μοτίβο ενός διακριτικού
- Το Lexical analyzer εφαρμόζεται για τη σάρωση ολόκληρου του πηγαίου κώδικα του προγράμματος
- Το Lexical analyzer βοηθά στην αναγνώριση του διακριτικού στον πίνακα συμβόλων
- Μια ακολουθία χαρακτήρων που δεν είναι δυνατή η σάρωση σε οποιοδήποτε έγκυρο διακριτικό είναι λεξικό
- Αφαιρεί έναν χαρακτήρα από την υπόλοιπη εισαγωγή είναι χρήσιμη Μέθοδος ανάκτησης σφαλμάτων
- Το Lexical Analyzer σαρώνει το πρόγραμμα εισόδου ενώ ο αναλυτής εκτελεί ανάλυση σύνταξης
- Διευκολύνει τη διαδικασία της λεξικής ανάλυσης και της σύνταξης ανάλυσης εξαλείφοντας τα ανεπιθύμητα tokens
- Το Lexical analyzer χρησιμοποιείται από προγράμματα περιήγησης ιστού για τη μορφοποίηση και προβολή μιας ιστοσελίδας με τη βοήθεια αναλυμένων δεδομένων από JavsScript, HTML, CSS
- Το μεγαλύτερο μειονέκτημα της χρήσης του Lexical analyzer είναι ότι χρειάζεται επιπλέον επιβάρυνση χρόνου εκτέλεσης απαιτείται για τη δημιουργία των πινάκων lexer και την κατασκευή των διακριτικών