Λεκτική ανάλυση: Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
μ Αντικατάσταση παρωχημένου προτύπου με references tag
Διάσωση 1 πηγών και υποβολή 0 για αρχειοθέτηση.) #IABot (v2.0
Γραμμή 93:
Οι κανονικές εκφράσεις αναπαριστούν με συντομία τις διάφορες μορφές που μπορούν να έχουν τα lexeme. Για παράδειγμα, σε μια γλώσσα βασισμένη στα [[Αγγλική γλώσσα|Αγγλικά]], μια λεκτική μονάδα NAME μπορεί να είναι κάθε αλφαβητικός χαρακτήρας των Αγγλικών ή μια κάτω παύλα, ακολουθούμενα από έναν αριθμό αλφαριθμητικών χαρακτήρων ASCII ή κάτω παύλα. Αυτό μπορεί να αναπαρασταθεί από την κανονική έκφραση <code>[a-zA-Z_][a-zA-Z_0-9]*</code> που σημαίνει «κάθε χαρακτήρας a-z, A-Z ή _, που ακολουθείται από 0 ή περισσότερα a-z, A-Z, _ ή 0-9».
 
Οι κανονικές εκφράσεις και οι μηχανές πεπερασμένων καταστάσεων που κατασκευάζουν δεν είναι αρκετά ισχυρές για να χειριστούν [[Αναδρομή|αναδρομικές]] δομές, όπως οι «''n'' παρενθέσεις που ανοίγουν, που ακολουθούνται από μια εντολή, που ακολουθείται από ''n'' παρενθέσεις που κλείνουν». Σε αυτήν την περίπτωση, δε μπορούν να κρατήσουν κάπου τον αριθμό των παρενθέσεων που διαβάζονται, ώστε να βεβαιωθούν ότι το ''n'' είναι το ίδιο και στις δύο πλευρές &mdash; εκτός και αν το ''n'' μπορεί να παίρνει μόνο συγκεκριμένες τιμές. Γενικά χρειάζεται ένας πιο πολύπλοκος συντακτικός αναλυτής για να αναγνωρίσει τέτοιες δομές. Ένας συντακτικός αναλυτής μπορεί να βάζει τις παρενθέσεις σε μια [[Στοίβα (δομή δεδομένων)|στοίβα]] και στη συνέχεια να τις αφαιρεί, και στο τέλος να ελέγχει αν η στοίβα είναι άδεια (βλ. παράδειγμα<ref>[{{Cite web |url=http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-31.html#%_sec_5.1.4 |title=mitpress.mit.edu] |accessdate=2013-02-08 |archiveurl=https://web.archive.org/web/20121030233934/http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-31.html#%_sec_5.1.4 |archivedate=2012-10-30 |url-status=dead }}</ref>).
 
Το εργαλείο [[Lex]] και ο μεταγλωττιστής του έχουν σχεδιαστεί ώστε να παράγουν κώδικα για γρήγορους λεκτικούς αναλυτές με βάση μια τυπική περιγραφή της λεκτικής σύνταξης. Γενικά δε θεωρείται αρκετά ισχυρό εργαλείο για εφαρμογές με πολύπλοκο σύνολο λεκτικών κανόνων και απαιτήσεις ταχύτητας. Για παράδειγμα, ο [[gcc]] χρησιμοποιεί λεκτικούς αναλυτές γραμμένους στο χέρι.