ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.1 Λεξική Ανάλυση Ι Πηγαίος κώδικας Λεξική ανάλυση Ενδιάμεση αναπαράσταση Συντακτική ανάλυση Λάθη αναγνωριστικό επόμενο αναγνωριστικό Λεξική ανάλυση δημιουργεί από μία ροή συμβόλων (συμβολοσειρά) αναγνωριστικά (tokens) Λεξικές μονάδες: Στοιχειώδεις μονάδες πληροφορίας από αυτές που περιλαμβάνονται στον ορισμό της γλώσσας (lexemes). Αναγνωριστικά: Συμβολικές τιμές που αντιστοιχούν σε τάξεις σύνταξης, π.χ. όνομα (IDentifier), τελεστής+, αριθμός (Number) κ.α. Λεξική μονάδα είναι η συμβολοσειρά που αντιστοιχεί στο αναγνωριστικό που εντοπίζεται. Η λεξική ανάλυση λειτουργεί ως συνάρτηση που καλείται από το συντακτικό αναλυτή.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.2 Λεξική Ανάλυση ΙΙ Οι λεξικές μονάδες διακρίνονται σε κατηγορίες όπως οι δεσμευμένες λέξεις ή λέξεις-κλειδιά, τα ειδικά σύμβολα, στα οποία περιλαμβάνονται οι τελεστές και οι διαχωριστές (‘;’, σχόλιο κ.α.), τα ονόματα, οι αριθμοί κ.α. Η αναγνώριση λεξικών μονάδων είναι ουσιαστικά αναγνώριση προτύπων. Λ.Μ.Πρότυπα αναγνώρισηςΑναγνωριστικά +χαρακτήρας ‘+’PLUS_OP a1συμβολοσειρά που αρχίζει με χαρακτήραID IFοι χαρακτήρες ‘I’ και ‘F’IF 1729συμβολοσειρά με δεκαδικά ψηφίαNUM
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.3 Λεξική Ανάλυση ΙΙΙ Ένα παράδειγμα Είναι η ροή των αναγνωριστικών αρκετή ως πληροφορία που διαβιβάζεται στη συντακτική ανάλυση; Πώς ξεχωρίζουν π.χ. τα ονόματα των μεταβλητών; Εκτός από τα αναγνωριστικά διαβιβάζεται στη συντακτική ανάλυση και πληροφορία για τις ιδιότητές τους. Η σημαντικότερη ιδιότητα για ένα ID είναι η συμβολοσειρά της λεξικής μονάδας και για ένα NUM είναι η αριθμητική τιμή που αντιστοιχεί στη λεξική μονάδα. if (i == j) z = 0; else z = 1; δίνει τα αναγνωριστικά IF, LPAREN, ID, EQEQ_OP, ID, RPAREN, ID, EQ_OP, NUM, SEMICOLON, ELSE, ID, EQ_OP, NUM, SEMICOLON IF, LPAREN,, EQEQ_OP,, RPAREN,, EQ,, SEMICOLON, ELSE,, EQ,, SEMICOLON
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.4 Λεξική Ανάλυση ΙV Μερικά πρότυπα αναγνώρισης είναι εύκολα Λέξεις κλειδιά και τελεστές Ορίζονται ως πρότυπα συμβολοσειρών: if, then, else, while, =, +, … Μερικά πρότυπα αναγνώρισης είναι πιο σύνθετα Ονόματα ένας χαρακτήρας που ακολουθείται από 0 ή περισσότερους χαρακτήρες ή/και ψηφία Αριθμοί Ακέραιος: 0 ή ένα ψηφίο μεταξύ 1 και 9 ακολουθούμενο από ψηφία μεταξύ 0 και 9
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.5 Κανονικές εκφράσεις Ι ΣΤΟΧΟΣ: Θέλουμε ακριβείς περιγραφές προτύπων αναγνώρισης και τη δυνατότητα αυτόματης παραγωγής κώδικα λεξικής ανάλυσης από τις περιγραφές αυτές. Κανονικές εκφράσεις, που χρησιμοποιούνται για την περιγραφή κανονικών γλωσσών. Κανονική έκφραση (Κ.Ε.) με αλφάβητο (κενή συμβολοσειρά) είναι η Κ.Ε. με γλώσσα την { } Αν a , τότε a είναι η Κ.Ε. με γλώσσα την {a} Αν x και y είναι Κ.Ε. Με γλώσσες τις L(x) και L(y) τότε –x | y είναι Κ.Ε. που εκφράζει την L(x) L(y) (διάζευξη) –xy είναι Κ.Ε. που εκφράζει την L(x)L(y) (παράθεση) –x * είναι Κ.Ε. που εκφράζει την L(x)* (κλειστότητα ή επανάληψη) Προτεραιότητα ε π ανάληψη, μετά π αράθεση, μετά διάζευξη Ε π ίσης αριστερά π ροσεταιριστικές x | y * z είναι η x | ((y * ) z)
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.6 Κανονικές εκφράσεις ΙΙ Επεκτάσεις συμβολισμού κανονικών εκφράσεων x+= x x*συμβολίζει L(x) + x? = x | συμβολίζει L(x) { } [abc] = a | b | c συμβολίζει ταύτιση με έναν από τους χαρακτήρες της αγκύλης a-z = a | b | c |... | z διάστημα χαρακτήρων [0-9a-z] = 0 | 1 | 2 |... | 9 | a | b | c |... | z [^abc]ταύτιση με οποιονδήποτε χαρακτήρα εκτός των a, b ή c. (τελεία) οποιοσδήποτε χαρακτήρας εκτός του newline. = [^\n] “[“ταύτιση με το χαρακτήρα [ \[αφαιρείται από το χαρακτήρα [ η ειδική σημασία του
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.7 Κανονικές εκφράσεις ΙΙΙ Μπορούμε να κάνουμε κανονικούς ορισμούς (macros) και να τους χρησιμοποιούμε στη συγγραφή Κ.Ε. γράμμα = [a-zA-Z] ψηφίο = [0-9] όνομα = {γράμμα}({γράμμα} | {ψηφίο})* Σημαντικό: Θα πρέπει οι κανονικοί ορισμοί να τίθενται σε σειρά γιατί μπορούν να χρησιμοποιούνται μόνο κανονικοί ορισμοί που προηγούνται της έκφρασης (δεν επιτρέπεται αναδρομή).
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.8 Κανονικές εκφράσεις ΙV Κανονικές εκφράσεις για αριθμητικές σταθερές: φυσικός = [0-9]+ ακέραιος = (+ | -)?{φυσικός} αριθμός = {ακέραιος}(“.” {φυσικός}) ? (E {ακέραιος})? Κανονικές εκφράσεις για δεσμευμένες λέξεις: δεσμευμένη = if | while | do |...
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.9 Κανονικές εκφράσεις V Κανονική έκφραση για αναγνώριση σχολίων (δεν είναι πάντα εφικτή): π.χ. {Σχόλιο σε πρόγραμμα Pascal} {([^}])*} Για τα σχόλια στη C (κώδικας στο flex): "/*"{ register int c; for(;;) { while( ((c=input()) != '*') && (c != EOF) ); if(c == '*') { while( (c=input()) == '*'); if(c == '/') break;} if(c == EOF) { printf("End-of-File in comment\n"); break;}}}
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.10 Κανονικές εκφράσεις VΙ ΑΣΑΦΕΙΕΣ: Οι συμβολοσειρές if και while μπορεί σύμφωνα με την περιγραφή, που δίνεται από ένα σύνολο κανονικών εκφράσεων, εκτός από λέξεις- κλειδιά να είναι και ονόματα. Τι προτιμάται; Τι γίνεται με τη συμβολοσειρά <>; Είναι μία λεξική μονάδα ή δύο; ΑΝΤΙΜΕΤΩΠΙΣΗ: Οι δύο κανόνες, που συνήθως εφαρμόζονται στις περιπτώσεις ασάφειας, έχουν ως εξής: - Όταν μία συμβολοσειρά μπορεί να ερμηνευθεί είτε ως όνομα, είτε ως λέξη κλειδί, προτιμάται η δεύτερη ερμηνεία. - Όταν μία συμβολοσειρά μπορεί να ερμηνευθεί, είτε ως μία μόνο λεξική μονάδα, είτε ως μία σειρά λεξικών μονάδων, προτιμάται η πρώτη ερμηνεία.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.11 Κανονικές εκφράσεις VΙΙ ΑΣΑΦΕΙΕΣ: Η γεννήτρια flex παράγει πάντα κώδικα, που επιλέγει το ταίριασμα της κάθε συμβολοσειράς με τη λεξική μονάδα του μεγαλύτερου δυνατού μήκους. Στην περίπτωση λεξικών μονάδων του ίδιου μήκους, προτιμάται αυτή, που αναφέρεται πρώτη. ΔΙΑΧΩΡΙΣΤΕΣ: Διαχωριστές είναι οι χαρακτήρες, που δεν υπάρχει περίπτωση να αποτελούν μέρος μιας μεγαλύτερης λεξικής μονάδας. Έτσι, π.χ. στη συμβολοσειρά x=y, το = διαχωρίζει το όνομα x από την υπόλοιπη συμβολοσειρά, καθώς το σύμβολο αυτό δεν μπορεί να αποτελέσει μέρος μιας άλλης λεξικής μονάδας.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.12 Κανονικές εκφράσεις VΙΙΙ ΔΙΑΧΩΡΙΣΤΕΣ: Στη λεξική ανάλυση δεν αρκεί η αναγνώριση του ρόλου των διαχωριστών, ως τελείωμα της τρέχουσας λεξικής μονάδας, αλλά επιβάλλεται και η αντιμετώπισή τους, ως αυτόνομες λεξικές μονάδες: Όταν ανιχνεύεται η ύπαρξη διαχωριστή, η λεξική μονάδα του πρέπει να καταστεί ξανά αναγνώσιμη στο πλαίσιο της συμβολοσειράς εισόδου. Έτσι, μετά την αναγνώριση της λεξικής μονάδας, που τελειώνει, η ανάλυση συνεχίζει με την αναγνώριση της λεξικής μονάδας του διαχωριστή. Ο αναλυτής, πριν από την ολοκλήρωση της ανάγνωσης του διαχωριστή από τη ροή εισόδου, ελέγχει πάντα έναν ή αν χρειαστεί και περισσότερους χαρακτήρες, από αυτούς, που ακολουθούν.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.13 Γεννήτριες λεξικών αναλυτών Ι Ορισμός αναγνωριστικών με κανονικές εκφράσεις Μετάφραση Κ.Ε. σε αυτόματα Χρήση πεπερασμένων αυτόματων για τη δημιουργία κώδικα λεξικής ανάλυσης Λ. Α. Γεννήτρια Λ. Α. Ορισμοί ( κανονικών εκφράσεων ) Πηγαίος κώδικας αναγνωριστικά κώδικας Λ. Α.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ.14 Γεννήτριες λεξικών αναλυτών ΙΙ Για τη χρήση γεννήτριας κώδικα λεξικής ανάλυσης: Συντάσσουμε το αρχείο περιγραφής το λεξικού αναλυτή: %{ /* πρόγραμμα αρίθμησης των γραμμών ενός κειμένου */ #include int lineno = 1; %} line.*\n % {line}{printf(“%5d %s”, lineno++, yytext);} % void main() { yylex();}
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών Το αρχείο περιγραφής διοχετεύεται ως είσοδος στη γεννήτρια κώδικα λεξικής ανάλυσης. Ο κώδικας που προκύπτει ως αποτέλεσμα περιλαμβάνεται στο αρχείο lexyy.c ή lex.yy.c και περιλαμβάνει σίγουρα τη συνάρτηση λεξικής ανάλυσης yylex(). Αν το αρχείο περιγραφής περιλαμβάνει συνάρτηση main(), τότε το πρόγραμμα που παράχθηκε μπορεί να λειτουργήσει αυτόνομα και για να γίνει αυτό πρέπει να περάσει από ένα μεταγλωττιστή της C. Αν όχι, τότε για να χρησιμοποιηθεί ο παραγόμενος κώδικας στο πλαίσιο ενός άλλου προγράμματος (μεταγλωττιστής) χρειάζεται να συμπεριληφθεί με την οδηγία include “lexyy.c”
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών ΔΟΜΗ ΑΡΧΕΙΟΥ ΠΕΡΙΓΡΑΦΗΣ ΛΕΞΙΚΗΣ ΑΝΑΛΥΣΗΣ ορισμοί % κανόνες αναγνώρισης % βοηθητικές συναρτήσεις Στους ορισμούς περιλαμβάνονται: Κώδικας, ο οποίος δεν ανήκει σε συγκεκριμένες συναρτήσεις και είναι επιθυμητή η συμπερίληψή του στον παραγόμενο λεξικό αναλυτή. Ο κώδικας αυτός εμφανίζεται ανάμεσα στους ειδικούς χαρακτήρες {% και %} και προηγείται του χαρακτήρα %, που διαχωρίζει το πρώτο από το δεύτερο μέρος της περιγραφής. Ορισμοί ονομάτων κανονικών εκφράσεων. Κάθε ένα από αυτά ορίζεται σε ξεχωριστή γραμμή, όπου προηγείται το όνομα και μετά από ένα ή περισσότερα κενά ακολουθεί η κανονική έκφραση από την οποία περιγράφεται.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών Στο δεύτερο μέρος του αρχείου περιγραφής του λεξικού αναλυτή περιλαμβάνονται οι κανόνες αναγνώρισης διατυπωμένοι στη μορφή, p 1 {ενέργεια 1 } p 2 {ενέργεια 2 } p n {ενέργεια n } όπου κάθε p i είναι μία κανονική έκφραση και κάθε ενέργεια i είναι μία ή περισσότερες εντολές της C, που εκτελούνται, κάθε φορά, που εντοπίζεται η αντίστοιχη λεξική μονάδα. Στο τελευταίο μέρος της περιγραφής του λεξικού αναλυτή περιλαμβάνονται οι όποιες συναρτήσεις καλούνται από το δεύτερο μέρος και δεν ορίζονται αλλού. Αν θέλουμε το αποτέλεσμα της επεξεργασίας της γεννήτριας να λειτουργεί ως αυτόνομο πρόγραμμα, τότε στο μέρος αυτό περιλαμβάνεται και η συνάρτηση main().
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών Η εντολή return επιστρέφει στο συντακτικό αναλυτή το αναγνωριστικό της τελευταίας λεξικής μονάδας, που αναγνωρίσθηκε. Για την επιστροφή τιμών ιδιοτήτων της λεξικής μονάδας, μπορεί να χρησιμοποιηθεί η εσωτερική μεταβλητή yylval της γεννήτριας. Ακόμη, είναι ιδιαίτερα χρήσιμη και η char * yytext, όπου αποθηκεύεται προσωρινά η συμβολοσειρά της λεξικής μονάδας, που αναγνωρίσθηκε.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών YYTYPE yylval Η μεταβλητή μέσω της οποίας επικοινωνεί ο λεξικός αναλυτής με το συντακτικό αναλυτή. Ο προκαθορισμένος τύπος YYTYPE είναι int, αλλά ο χρήστης μπορεί να τον ορίσει σύμφωνα με τις ανάγκες του στο πρώτο μέρος της περιγραφής του λεξικού ή του συντακτικού αναλυτή. Η τιμή της μεταβλητής yylval, πρέπει να ενημερώνεται, όποτε αυτή χρειάζεται, στα τμήματα κώδικα action i του δευτέρου μέρους της περιγραφής. char * yytext Η μεταβλητή αυτή παρέχει έναν προσωρινό χώρο αποθήκευσης της συμβολοσειράς, που αντιστοιχεί στη λεξική μονάδα που αναγνωρίσθηκε. Είναι ιδιαίτερα χρήσιμη κατά την αναγνώριση ονομάτων και σταθερών. int yyleng Η τιμή της εκφράζει το μήκος της λεξικής μονάδας, που αναγνωρίσθηκε. FILE * yyin Η τιμή της παρέχει ένα δείκτη στο αρχείου εισόδου του λεξικού αναλυτή (προκαθορισμένη τιμή: stdin ). FILE * yyout Η τιμή της παρέχει ένα δείκτη στο αρχείου εξόδου του λεξικού αναλυτή (προκαθορισμένη τιμή: stdout ). int yylex() Η παραγόμενη συνάρτηση λεξικής ανάλυσης. Επιστρέφει το αναγνωριστικό της λεξικής μονάδας, που διαβάζει.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών register int input() Επιστρέφει τον επόμενο χαρακτήρα της συμβολοσειράς εισόδου, στο λεξικό αναλυτή. void yymore() Επιτρέπει στο λεξικό αναλυτή να προχωρήσει στην αναγνώριση της επόμενης λεξικής μονάδας, διατηρώντας στην yytext τη συμβολοσειρά της λεξικής μονάδας, που αναγνωρίσθηκε τελευταία. void yyless(int n) Οπισθοδρόμηση n χαρακτήρων στη συμβολοσειρά εισόδου της λεξικής ανάλυσης. ECHO Εκτυπώνει την yytext στο yyout.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Γεννήτριες λεξικών αναλυτών ΠΑΡΑΔΕΙΓΜΑ: %{ /* πρόγραμμα αναπαραγωγής γραμμών που αρχίζουν ή κατα- λήγουν στο χαρακτήρα a */ #include %} ends_with_a.*a\n begins_with_aa.*\n % {ends_with_a}ECHO; {begins_with_a}ECHO;.*\n; % void main() { yylex();}
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα κανονική έκφραση για την αναγνώριση ονομάτων: όνομα = {γράμμα}({γράμμα} | {ψηφίο})* αντίστοιχο προσδιοριστικό πεπερασμένο: Γιατί μετατρέπουμε τις κανονικές εκφράσεις σε αυτόματα; Επειδή οι μηχανές πεπερασμένων καταστάσεων μας παρέχουν ένα θεωρητικό πλαίσιο και πλήθος αλγορίθμων για την ανάπτυξη αλγορίθμων αναγνώρισης της γλώσσας των εκφράσεων.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΙΙ πλήρες προσδιοριστικό αυτόματο για ονόματα: ΣΥΜΒΑΣΕΙΣ: Δεν απεικονίζουμε τις καταστάσεις λάθους. Χρησιμοποιούμε διπλό κύκλο για τις καταστάσεις κατάληξης.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΙΙΙ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟ ΠΕΠΕΡΑΣΜΕΝΟ ΑΥΤΌΜΑΤΟ
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΙV ΠΑΡΑΔΕΙΓΜΑΤΑ φυσικός = [0-9]+ ακέραιος = (+ | -)?{φυσικός} αριθμός = {ακέραιος}(“.” {φυσικός}) ? (E {ακέραιος})?
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα V Αυτόματο για τα σχόλια στη C:
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα VI ΠΡΟΣΟΜΟΙΩΣΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΩΝ ΠΕΠΕΡΑΣΜΕΝΩΝ ΑΥΤΌΜΑΤΩΝ Έστω το αυτόματο και ο πίνακας μετάβασης, που εκφράζει τη συνάρτηση μετάβασης του αυτόματου και δηλώνει τις καταστάσεις κατάληξης γράμμαψηφίοδιαχωριστή ς καταλήξεις «αρχή»«όνομα » ΟΧΙ «όνομα » «τέλος»ΟΧΙ «τέλος» ΝΑΙ
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα VIΙ ΠΡΟΣΟΜΟΙΩΣΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΩΝ ΠΕΠΕΡΑΣΜΕΝΩΝ ΑΥΤΌΜΑΤΩΝ Αλγόριθμος προσομοίωσης αυτόματων Είσοδος: Μία συμβολοσειρά εισόδου, ένας πίνακας μετάβασης Τ και ένας πίνακας KA λογικών τιμών, που δηλώνουν τις καταλήξεις του αυτόματου Έξοδος: Το αν η συμβολοσειρά εισόδου ανήκει στη γλώσσα του αυτόματου ή όχι Περιγραφή: κατάσταση:= «αρχή»; ch:= ο επόμενος χαρακτήρας εισόδου; Όσο ((όχι ΚΑ[κατάσταση]) ΚΑΙ (όχι Τ[κατάσταση, ch] κενό)) επανέλαβε νέα_κατάσταση:= Τ[κατάσταση, ch]; ch:= ο επόμενος χαρακτήρας εισόδου; κατάσταση:= νέα_κατάσταση; Τέλος επανάληψης αν (ΚΑ[κατάσταση]) τότε συμβολοσειρά αποδεκτή; διαφορετικά συμβολοσειρά μη αποδεκτή;
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα VIΙΙ ΠΡΟΣΟΜΟΙΩΣΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΩΝ ΠΕΠΕΡΑΣΜΕΝΩΝ ΑΥΤΌΜΑΤΩΝ Αλγόριθμος υπολογισμού πίνακα μετάβασης ενός αυτόματου Είσοδος: Ένα πρότυπο αναγνώρισης P Έξοδος: Ο πίνακας μετάβασης του αυτόματου που παράγεται από το πρότυπο P Περιγραφή: m:= μήκος(P); Για (s:=0 μέχρι m) επανέλαβε Για (κάθε ) επανέλαβε k:=min(m+1, s+2); Επανέλαβε k:=k-1; μέχρι (το strcat(πρόθεμα του P που έχει αναγνωρισθεί στο s, α) ταυτίζεται με τους k πρώτους χαρακτήρες του P) Τ[s, α]:=k; Τέλος επανάληψης
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΙΧ
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα Χ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ Στα μη προσδιοριστικά πεπερασμένα αυτόματα, το αλφάβητο Σ επεκτείνεται, έτσι ώστε να συμπεριλαμβάνει τη μετάβαση-ε, η οποία πραγματοποιείται χωρίς την ανάγνωση κάποιου χαρακτήρα της συμβολοσειράς εισόδου. Οι μεταβάσεις-ε είναι απαραίτητες, τόσο στην άμεση αναπαράσταση της κενής συμβολοσειράς, όσο και στην αναπαράσταση της επιλογής μεταξύ διαφορετικών εναλλακτικών περιπτώσεων. Μία άλλη επέκταση, σε σχέση με τον ορισμό των προσδιοριστικών πεπερασμένων αυτομάτων, είναι η επέκταση της συνάρτησης μετάβασης T, έτσι ώστε, για κάθε χαρακτήρα, να είναι δυνατή η πιθανότητα μετάβασης σε περισσότερες από μία καταστάσεις. Λέμε τότε ότι το πεδίο τιμών της συνάρτησης Τ είναι το δυναμοσύνολο του συνόλου καταστάσεων S και αυτό συμβολίζεται με (S).
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧI ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ Τα μη προσδιοριστικά αυτόματα χρησιμεύουν, ως ενδιάμεση μορφή αναπαράστασης, για διενέργεια λεξικής ανάλυσης. Κάθε κανονική έκφραση μετατρέπεται, από ένα κατάλληλο αλγόριθμο, σε μη προσδιοριστικό αυτόματο, που αναγνωρίζει τη γλώσσα της έκφρασης. Το αυτόματο με τη σειρά του μετατρέπεται με τη χρήση ενός άλλου αλγορίθμου, σε προσδιοριστικό και ακολουθεί ελαχιστοποίηση του αριθμού των καταστάσεών του.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧΙI ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ όνομα = {γράμμα}({γράμμα} | {ψηφίο})*
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧΙII ΜΕΤΑΤΡΟΠΗ ΚΑΝΟΝΙΚΩΝ ΕΚΦΡΑΣΕΩΝ ΣΕ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ (ΑΝΑΠΤΥΞΗ THOMPSON) Γίνεται συντακτική ανάλυση της κανονικής έκφρασης. Κατασκευάζονται τα αυτόματα που αντιστοιχούν σε κάθε μία από τις στοιχειώδεις κανονικές εκφράσεις που προκύπτουν. Αν θεωρήσουμε M(r) και M(s) τα αυτόματα των εκφράσεων r και s, τότε το αυτόματο M(r|s) είναι το:
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧΙV ΜΕΤΑΤΡΟΠΗ ΚΑΝΟΝΙΚΩΝ ΕΚΦΡΑΣΕΩΝ ΣΕ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ (ΑΝΑΠΤΥΞΗ THOMPSON) Για την κανονική έκφραση rs παράγεται το αυτόματο M(rs): Για την κανονική έκφραση r* παράγεται το αυτόματο Μ(r*): Για την κανονική έκφραση (r) χρησιμοποιείται το αυτόματο Μ(r).
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα XV ΜΕΤΑΤΡΟΠΗ ΚΑΝΟΝΙΚΩΝ ΕΚΦΡΑΣΕΩΝ ΣΕ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ (ΠΑΡΑΔΕΙΓΜΑ) όνομα = {γράμμα}({γράμμα} | {ψηφίο})* το δένδρο που προκύπτει από τη συντακτική ανάλυση της έκφρασης είναι το
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧVI ΜΕΤΑΤΡΟΠΗ ΚΑΝΟΝΙΚΩΝ ΕΚΦΡΑΣΕΩΝ ΣΕ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΑ ΑΥΤΟΜΑΤΑ (ΣΥΝΕΧΕΙΑ ΠΑΡΑΔΕΙΓΜΑΤΟΣ) το μη προσδιοριστικό αυτόματο, που προκύπτει με ανάπτυξη Thompson είναι το
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧVII ΜΕΤΑΤΡΟΠΗ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟΥ ΑΥΤΟΜΑΤΟΥ ΣΕ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟ (ΑΝΑΠΤΥΞΗ ΥΠΟΣΥΝΟΛΩΝ) Οι καταστάσεις του προσδιοριστικού αυτόματου, που προκύπτει ως αποτέλεσμα, είναι υποσύνολα των καταστάσεων του μη προσδιοριστικού αυτόματου. Δύο καταστάσεις «p» και «q» του αρχικού μη προσδιοριστικού αυτόματου ανήκουν στο ίδιο υποσύνολο αν για κάποιο χαρακτήρα-πρότυπο οι μεταβάσεις του μη προσδιοριστικού αυτόματου οδηγούν είτε στην «p», είτε στην «q». Αν υπάρχει μία μετάβαση από την κατάσταση «p» στην «q» μέσω του χαρακτήρα – πρότυπο a και μία μετάβαση-ε από την «q» στην «u», τότε οι καταστάσεις «q» και «u» ανήκουν στο ίδιο υποσύνολο καταστάσεων.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧVIII ΜΕΤΑΤΡΟΠΗ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟΥ ΑΥΤΟΜΑΤΟΥ ΣΕ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟ (ΑΝΑΠΤΥΞΗ ΥΠΟΣΥΝΟΛΩΝ) Συμβολίζουμε με reach(F, c i ) το σύνολο όλων των καταστάσεων, που είναι προσβάσιμες από τις καταστάσεις του F μέσω μιας μετάβασης με επιγραφή c i. Συμβολίζουμε με εsucc(F), το σύνολο των καταστάσεων, που είναι προσβάσιμες από το F, μετά από πεπερασμένο αριθμό μεταβάσεων-ε. Θεωρούμε ως νέα κατάσταση του προσδιοριστικού αυτόματου, το σύνολο εsucc({«αρχή»}). Για την κατάσταση αυτή και για κάθε νέο υποσύνολο F S, το σύνολο των προσβάσιμων καταστάσεων, μέσω μιας μετάβασης με επιγραφή a, δίνεται ως εsucc(reach(F,a)). Ο αλγόριθμος συνεχίζει για όλους τους χαρακτήρες a Σ. Μία νέα κατάσταση είναι κατάληξη, αν το υποσύνολο καταστάσεων στο οποίο αντιστοιχεί, περιέχει μία κατάληξη του μη προσδ. αυτόματου.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧIX ΜΕΤΑΤΡΟΠΗ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟΥ ΑΥΤΟΜΑΤΟΥ ΣΕ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟ (ΑΝΑΠΤΥΞΗ ΥΠΟΣΥΝΟΛΩΝ) – παράδειγμα
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧX ΜΕΤΑΤΡΟΠΗ ΜΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟΥ ΑΥΤΟΜΑΤΟΥ ΣΕ ΠΡΟΣΔΙΟΡΙΣΤΙΚΟ (ΑΝΑΠΤΥΞΗ ΥΠΟΣΥΝΟΛΩΝ) – αλγόριθμος Είσοδος: Ένα μη προσδιοριστικό πεπερασμένο αυτόματο Μ Έξοδος: Ένα προσδιοριστικό πεπερασμένο αυτόματο D με γλώσσα L(M) Περιγραφή: Ο αλγόριθμος κατασκευάζει τον πίνακα μεταβάσεων Τ, του D. Οι καταστάσεις και οι μεταβάσεις, που προστίθενται στο αυτόματο D, υπολογίζονται ως εξής: Η μοναδική κατάσταση του D είναι η εsucc({«αρχή»}), που δεν έχει ακόμη επιλεγεί. Όσο (υπάρχει κάποια μη επιλεγμένη κατάσταση ) επανέλαβε επέλεξε την p; Για (κάθε χαρακτήρα ) επανέλαβε q:= εsucc(reach(p, a )); αν (q D) τότε προσέθεσε την q στο D; T(p,a):=q; Τέλος επανάληψης Μία κατάσταση του D γίνεται κατάληξη, αν το αντίστοιχο σύνολο των καταστάσεων περιέχει τουλάχιστο μία κατάληξη του Μ.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧXI ΕΛΑΧΙΣΤΟΠΟΙΗΣΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΩΝ ΠΕΠΕΡΑΣΜΕΝΩΝ ΑΥΤΟΜΑΤΩΝ Τα προσδιοριστικά αυτόματα, που προκύπτουν ως αποτέλεσμα μιας διαδικασίας ανάπτυξης υποσυνόλων, χαρακτηρίζονται συχνά από μεγάλους πίνακες μεταβάσεων. Αυτό οφείλεται στην αύξηση του αριθμού των καταλήξεων. Έχει αποδειχθεί ότι για δοθέν προσδιοριστικό αυτόματο, υπάρχει ένα μοναδικό ισοδύναμο αυτόματο με τον ελάχιστο αριθμό καταστάσεων. Ο αλγόριθμος των Hopcroft & Ullman παράγει το ελάχιστο αυτόματο, διαιρώντας τις καταστάσεις του αρχικού σε σύνολα, έτσι ώστε όλες οι καταστάσεις του ίδιου συνόλου να αναγνωρίζουν τις ίδιες συμβολοσειρές.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧXII ΕΛΑΧΙΣΤΟΠΟΙΗΣΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΩΝ ΠΕΠΕΡΑΣΜΕΝΩΝ ΑΥΤΟΜΑΤΩΝ Λέμε ότι σε ένα αυτόματο, μία συμβολοσειρά w διακρίνει την κατάσταση «s» από την κατάσταση «t», αν ξεκινώντας από την «s» και διοχετεύοντας την w, οδηγούμαστε σε κατάλήξη, ενώ δε συμβαίνει το ίδιο με την κατάσταση «t». Η συμβολοσειρά ε διακρίνει τις καταλήξεις από τις υπόλοιπες καταστάσεις του αυτόματου. Αρχικά διακρίνουμε το χώρο των καταστάσεων σε καταλήξεις και μη καταλήξεις. Σταδιακά συγκροτούνται σύνολα καταστάσεων, έτσι ώστε για κάθε ζεύγος καταστάσεων από διαφορετικά σύνολα, αυτές να έχουν διακριθεί από κάθε συμβολοσειρά εισόδου, ενώ για κάθε ζεύγος καταστάσεων του ίδιου συνόλου να μην έχει συμβεί ακόμη κάτι τέτοιο.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧXIII (+ | -)? {ψηφίο} {ψηφίο}* Πρέπει να συμπεριλάβουμε και την κατάσταση «λάθος»
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧXIV Στη συνέχεια παρατηρούμε ότι και «λάθος» «λάθος». Εφόσον όμως για τις καταστάσεις 3 και «λάθος» έχει ήδη καταγραφεί στον πίνακα ότι διακρίνονται μεταξύ τους, συνάγεται το ίδιο και για τις 0 και «λάθος». Η διαδικασία συμπλήρωσης του πίνακα συνεχίζεται μέχρι το σημείο εκείνο στο οποίο δεν είναι δυνατή η εύρεση νέου ζεύγους καταστάσεων, που διακρίνονται από κάποιο χαρακτήρα εισόδου.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧXV Διαπιστώνεται ότι τελικά μόνο οι καταστάσεις 1 και 2 ανήκουν στην ίδια κλάση ισοδυναμίας. Μετονομάζουμε την κατάσταση 2 σε 1 και τελικά παίρνουμε το ελάχιστο αυτόματο του σχήματος
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής, Α.Π.Θ Λεξική Ανάλυση και Αυτόματα ΧXVΙ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗ ΠΡΟΣΔΙΟΡΙΣΤΙΚΩΝ ΠΕΠΕΡΑΣΜΕΝΩΝ ΑΥΤΟΜΑΤΩΝ (παράδειγμα) Οι μεταβάσεις όλων των καταλήξεων οδηγούν σε καταλήξεις, τόσο για την περίπτωση, που ο χαρακτήρας εισόδου είναι γράμμα, όσο και στην περίπτωση, που αυτός είναι ψηφίο. Άρα οι τρεις καταλήξεις δε διακρίνονται από κανένα χαρακτήρα.