Λεκτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Εργαστήριο 08 Εισαγωγή στo Yacc

Παρουσίαση του εργαλείου FLEX

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

Η γλώσσα προγραμματισμού Strange

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

Ανάπτυξη και Σχεδίαση Λογισμικού

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Υλοποίηση ΛΑ με το flex

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Συντακτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Υλοποίηση ΣΑ με το bison

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών

Υλοποίηση ΣΑ με το bison

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εισαγωγή στη γλώσσα προγραμματισμού C++14

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Κεφάλαιο 2: Τυπικές γλώσσες. Νίκος Παπασπύρου, Κωστής Σαγώνας Μεταγλωττιστές Μάρτιος / 216

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Προγραμματισμός Η/Υ (ΤΛ2007 )

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Λεκτική Ανάλυση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

Η γλώσσα προγραμματισμού EEL

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

Γλώσσα Προγραμματισμού C

Εισαγωγή στη γλώσσα προγραμματισμού C++

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Περιεχόμενα. Πρόλογος...11

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

ΜΑΘΗΜΑ: Μεταγλωττιστές

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Διαδικασιακός Προγραμματισμός

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

S, (5, -3, 34, -23, 7) ( *, _

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Εργασία Προγραµµατισµού

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Η γλώσσα προγραμματισμού C

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Μεταγλωττιστές Ενότητα 1: Εισαγωγή

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet.

Κεφ 2. Βασικές Έννοιες Αλγορίθμων

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Αρχές Προγραμματισμού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Διαδικασιακός Προγραμματισμός

Παρουσίαση του εργαλείου BISON

Να γράψετε τους αριθμούς 1, 2, 3 από τη Στήλη Α και δίπλα το γράμμα α, β, γ, δ, ε από τη Στήλη Β που δίνει τη σωστή αντιστοιχία.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ.

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Περιεχόμενα. Πρόλογος... 21

Εργαστήριο 08 Δημιουργία 1 ου Συντακτικού Αναλυτή

Δομημένος Προγραμματισμός (ΤΛ1006)

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Εισαγωγή στον Προγραμματισμό

Απάντηση: (func endfunc)-([a-za-z])+

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

Transcript:

Λεκτικός Αναλυτής Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Οι Φάσεις της Μεταγλώττισης λεκτική ανάλυση συντακτική ανάλυση Πίνακας Συμβόλων σημασιολογική ανάλυση παραγωγή ενδιάμεσου κώδικα Διαχείριση λαθών βελτιστοποίηση ενδιάμεσου κώδικα παραγωγή τελικού κώδικα βελτιστοποίηση τελικού κώδικα

Λεκτική Ανάλυση Αρχικό πρόγραμμα Χαρακτήρας-χαρακτήρας Λεκτική Ανάλυση Λεκτικές μονάδες Διαγνωστικά μηνύματα

Διαπροσωπεία Λεκτικού Αναλυτή Καλείται ως συνάρτηση από το συντακτικό αναλυτή Διαβάζει γράμμα-γράμμα το πηγαίο πρόγραμμα Κάθε φορά που καλείται επιστρέφει την επόμενη λεκτική μονάδα Επιστρέφει στο συντακτικό αναλυτή έναν ακέραιο που χαρακτηρίζει τη λεκτική μονάδα τη λεκτική μονάδα

Εσωτερική Λειτουργία Ο λεκτικός αναλυτής εσωτερικά λειτουργεί σαν ένα αυτόματο καταστάσεων το οποίο ξεκινά από μία αρχική κατάσταση, με την είσοδο κάθε χαρακτήρα αλλάζει κατάσταση έως ότου συναντήσει μία τελική κατάσταση Το αυτόματο καταστάσεων αναγνωρίζει δεσμευμένες λέξεις πχ. if, for, while σύμβολα της γλώσσας π.χ. «+», «;», «=» αναγνωριστικά και σταθερές π.χ. counter, a12, 32768 λάθη π.χ. μη επιτρεπτός χαρακτήρας, κλείσιμο σχολίων χωρίς να έχουν ανοίξει προηγουμένως

Παράδειγμα Αυτόματου Το αυτόματο του επόμενου παραδείγματος αναγνωρίζει: αναγνωριστικά που ξεκινούν από γράμμα και αποτελούνται από γράμματα ή ψηφία φυσικούς αριθμούς ως αριθμητικές σταθερές τα αριθμητικά σύμβολα + - * / τους σχεσιακούς τελεστές < > = >= <= <> τα σύμβολα := ( ), ; σχόλια που περικλείονται σε άγκιστρα { } και αγνοούνται

λευκός χαρακτήρας αρχική κατάσταση 0 γράμμα / γράμμα 1 αναγνωριστικό 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 όταν στην αρχική κατάσταση έρθει λευκός χαρακτήρας, ουσιαστικά αγνοείται και μένουμε στην ίδια κατάσταση γράμμα / γράμμα 1 αναγνωριστικό 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 όταν στην αρχική κατάσταση έρθει γράμμα, τότε μεταβαίνουμε στην κατάσταση 1 που θα μας οδηγήσει σε αναγνωριστικό γράμμα 1 γράμμα / αναγνωριστικό 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα στη συνέχεια όσο λαμβάνουμε γράμμα ή μένουμε στην ίδια κατάσταση, προσθέτοντας το γράμμα ή το στο αναγνωριστικό που θα καταλήξουμε γράμμα / 1 αναγνωριστικό 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα 1 γράμμα / αν έρθει κάτι που δεν είναι γράμμα ή τότε θεωρούμε ότι το αναγνωριστικό ολοκληρώθηκε και πηγαίνουμε σε τελική κατάσταση αναγνωριστικό 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα / γράμμα 1 αναγνωριστικό 2 έτσι αναγνωρίσαμε λεκτική μονάδα και ο λεκτικός αναλυτής τερματίζει αφού την επιστρέψει στον συντακτικό αναλυτή αριθμ. σταθερά

όταν ξανακληθεί ο λεκτικός αναλυτής θα ξεκινήσει πάλι από την αρχική κατάσταση, αλλά θα διαβάζει τους χαρακτήρες από εκεί που σταμάτησε 0 λευκός χαρακτήρας γράμμα / γράμμα 1 αναγνωριστικό 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα / γράμμα 1 αναγνωριστικό όταν στην αρχική κατάσταση έρθει, τότε μεταβαίνουμε στην κατάσταση 2 που θα μας οδηγήσει σε αριθμητική σταθερά 2 αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα / γράμμα 1 αναγνωριστικό 2 στη συνέχεια όσο λαμβάνουμε μένουμε στην ίδια κατάσταση, προσθέτοντας το στην αριθμητική σταθερά που θα καταλήξουμε αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα / γράμμα 1 αναγνωριστικό 2 αν έρθει κάτι που δεν είναι τότε θεωρούμε ότι η αριθμητική σταθερά ολοκληρώθηκε και πηγαίνουμε σε τελική κατάσταση αριθμ. σταθερά

λευκός χαρακτήρας 0 γράμμα / γράμμα 1 αναγνωριστικό 2 έτσι αναγνωρίσαμε αριθμητική σταθερά και ο λεκτικός αναλυτής τερματίζει αφού την επιστρέψει στον συντακτικό αναλυτή αριθμ. σταθερά

+ - * / = + - * / = όταν από την αρχική κατάσταση έρθει το σύμβολο «+» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «-» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «*» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «/» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «=» το αναγνωρίζουμε

όταν από την αρχική κατάσταση έρθει το σύμβολο «<» τότε υπάρχουν τρεις περιπτώσεις < 3 = > <= <> < > 4 = >= >

< 3 = <= να ακολουθεί «=» οπότε αναγνωρίζουμε «<=» > <> να ακολουθεί «>» οπότε αναγνωρίζουμε «<>» < > 4 = >= >

< 3 = <= > <> < οτιδήποτε άλλο και να ακολουθεί αναγνωρίζουμε «<» > 4 = >= >

< 3 = <= > <> < > 4 = >= όμοια και εδώ, αν το «>» το ακολουθεί «=» αναγνωρίζουμε «<=» >

< 3 = <= > <> < > 4 = >= > οτιδήποτε άλλο και να ακολουθεί αναγνωρίζουμε «>»

: 5 = := λάθος αν από την αρχική κατάσταση συναντήσουμε μια «:», τότε υπάρχει μόνο μία επιλογή να καταλήξουμε σε «:=» έτσι αν μετά την «:» έρθει «=» αναγνωρίζουμε «:=», ενώ σε κάθε άλλη περίπτωση αναγνωρίζουμε λάθος εδώ δεν μπορούμε να αναγνωρίσουμε την «:» ως λεκτική μονάδα όπως κάναμε για το «<» και το «>» αφού το «:» δεν αποτελεί σύμβολο της γλώσσας

αν από την αρχική κατάσταση συναντήσουμε άνοιγμα σχολίων τότε ό,τι ακολουθήσει αγνοείται έως ότου βρεθεί κλείσιμο σχολίων οπότε μεταβαίνουμε στην κατάσταση 0, που είναι η αρχική κατάσταση { 6 } 0 eof λάθος

{ 6 } 0 eof λάθος αν πριν βρεθεί κλείσιμο σχολίων βρεθεί τέλος αρχείου σημαίνει ότι άνοιξαν σχόλια χωρίς να κλείσουν. Προφανώς έχουμε εδώ λάθος θα μπορούσε να τροποποιηθεί το αυτόματο αν επιθυμούμε να θεωρούνται διαφορετικά πράγματα λάθος, για παράδειγμα αν θέλουμε το {{ } να μην είναι επιτρεπτό

, ; ) ( eof, ; ) ( eof όταν από την αρχική κατάσταση έρθει το σύμβολο «,» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «;» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «)» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το σύμβολο «(» το αναγνωρίζουμε όταν από την αρχική κατάσταση έρθει το τέλος αρχείου το αναγνωρίζουμε λάθος

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

λευκός χαρακτήρας 0 γράμμα 1 γράμμα / από τα αναγνωριστικά ξεχωρίζουμε τις δεσμευμένες λέξεις αναγνωριστικό for id while do else

Οπισθοδρόμηση Για να αναγνωρίσουμε μία λεκτική μονάδα μερικές φορές καταναλώνουμε ένα χαρακτήρα από την επόμενη λεκτική μονάδα Ο χαρακτήρας αυτός πρέπει να ενσωματωθεί στην επόμενη λεκτική μονάδα Αυτό συμβαίνει στο παράδειγμά μας στα αναγνωριστικά και στις αριθμητικές σταθερές στα δεσμευμένα σύμβολα < και >

Παράδειγμα Υλοποίησης Αυτόματου με Πίνακα Έστω το αυτόματο το οποίο αναγνωρίζει λεκτικές μονάδες που αποτελούνται από μία σειρά από 1 ή περισσότερα x ακολουθούμενη από ένα y ακριβώς και μετά από μία σειρά από 0 ή περισσότερα x, δηλαδή x + yx* x x x y 0 1 2 OK y error

Υλοποίηση με Πίνακα #define x 0 #define y 1 #define other 2 #define state0 0 #define state1 1 #define state2 2 #define error -1 #define OK -2 x y other state0 state1 state2 state1 error error state1 state2 error state2 error OK

Υλοποίηση με Πίνακα state = state0; while (state!=ok && state!=error) { newsymbol(&inp); state = Trans_Diagram [state][inp]; }

Εναλλακτική Υλοποίηση με Σειρά Εντολών Απόφασης state = state0; while (state!=ok && state!=error) { if (state==state0 && input==x) state=state1; else if (state==state0) state=error; else if (state==state1 && input==x) state=state1; else if (state==state1 && input==y) state=state2; else if (state==state1) state=error; else if (state==state2 && input==x) state=state2 else if (state==state2 && input==y) state=error else if (state==state2) state=ok }

Το Εργαλείο Lex (flex) Lex Μεταπρόγραμμα yylex() Διαγνωστικά μηνύματα

Μετάφραση με τα Eργαλεία Lex-Yacc

Αναγνώριση με Κανονικές Εκφράσεις

Παράδειγμα Αναγνώρισης με το Lex letter [a-za-z] digit [0-9] delim [" "\t\n] id {letter}({letter} {digit})* number {digit}+