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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Ηλεκτρονικοί Υπολογιστές

Ειδικά Θέματα Προγραμματισμού

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

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

Δομημένος Προγραμματισμός

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

Αντικειμενοστραφής Προγραμματισμός

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Δομημένος Προγραμματισμός

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

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

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

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Ηλεκτρονικοί Υπολογιστές

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

{ int a = 5; { int b = 7; a = b + 3;

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Δομημένος Προγραμματισμός

Ειδικά Θέματα Προγραμματισμού

ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στην Πληροφορική

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

Ηλεκτρονικοί Υπολογιστές

Δομημένος Προγραμματισμός

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Υπολογιστικά Συστήματα

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

Προγραμματισμός H/Y Ενότητα 3: Πίνακες αριθμών και χαρακτήρων. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Cretive Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπ

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Δομημένος Προγραμματισμός

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

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Εισαγωγή στον δομημένο προγραμματισμό

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Βάσεις Δεδομένων. Ενότητα 5: ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων Ι Σύνολο- Περιεχόμενο Μαθήματος

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Transcript:

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

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Λεκτική ανάλυση (Μέρος 2 ο )

Σκοποί ενότητας Σκοπός της ενότητας είναι η περιγραφή της λεκτικής ανάλυσης. 5

Περιεχόμενα ενότητας Λεξική ανάλυση. Υλοποίηση ενός λεξικού αναλυτή. Λεξική ανάλυση κι αυτόματα. Γεννήτριες λεξικών αναλυτών. 6

Λεξική ανάλυση (1/7) Στόχος. Ο διαχωρισμός των χαρακτήρων του πηγαίου προγράμματος σε ομάδες. Λεξικές μονάδες. Με συγκεκριμένη σημασία, σύμφωνη με τον ορισμό της πηγαίας γλώσσας. Για κάθε λεξική μονάδα που αναγνωρίζεται. Μεταφέρεται το αντίστοιχο αναγνωριστικό (token) στον συντακτικό αναλυτή. 7

Λεξική ανάλυση (2/7) Παράδειγμα. Είσοδος είναι μία ακολουθία από χαρακτήρες. \tif (i == j)\n\t\tx = 10;\n\telse\n\t\tx = 0; 8

Λεξική ανάλυση (3/7) Στόχος. Διαχωρισμός των string εισόδου σε substrings. Και ταξινόμησή τους σύμφωνα με το ρόλο τους. 9

Λεξική ανάλυση (4/7) Οι λεξικές μονάδες διακρίνονται σε κατηγορίες όπως: Δεσμευμένες λέξεις ή λέξεις-κλειδιά. Ειδικά σύμβολα. Στα οποία περιλαμβάνονται οι τελεστές και οι διαχωριστές ( ;, σχόλιο κτλ.). Ονόματα. Αριθμοί κ.α. 10

Λεξική ανάλυση (5/7) Παράδειγμα. Η αναγνώριση λεξικών μονάδων είναι ουσιαστικά αναγνώριση προτύπων. IF, LPAREN, ID, EQEQ_OP, ID, RPAREN, ID, EQ_OP, NUM, SEMICOLON, ELSE, ID, EQ_OP, NUM, SEMICOLON Δίνει τα αναγνωριστικά. 11

Λεξική ανάλυση (6/7) Παραδείγματα προτύπων αναγνώρισης. Λέξεις κλειδιά και τελεστές. Ορίζονται ως πρότυπα συμβολοσειρών: if, then, else, while, =, +,. Ονόματα. Ένας χαρακτήρας που ακολουθείται από 0 ή περισσότερους χαρακτήρες ή/και ψηφία. 12

Λεξική ανάλυση (7/7) Παραδείγματα προτύπων αναγνώρισης (Συνέχεια). Αριθμοί. Ακέραιος. 0 ή ένα ψηφίο μεταξύ 1 και 9.» Ακολουθούμενο από ψηφία μεταξύ 0 και 9. 13

Υλοποίηση ενός λεξικού αναλυτή (1/9) Απαιτήσεις Υλοποίησης. Αναγνωρίζει τα substrings που αντιστοιχούν στα tokens. Επιστρέφει την τιμή ή τη λεκτική μονάδα του token. Η λεκτική μονάδα είναι το substring. 14

Υλοποίηση ενός λεξικού αναλυτή Παράδειγμα. (2/9) Είσοδος είναι μία ακολουθία από χαρακτήρες. \tif (i == j)\n\t\tx = 10;\n\telse\n\t\tx = 0; 15

Υλοποίηση ενός λεξικού αναλυτή (3/9) Ομαδοποίηση token - λεκτικών μονάδων. Αναγνωριστικό: i, j, z. Λέξη κλειδί: if, then, else. Σχέση: ==. Ακέραιος: 0, 1. (, ), =, ; Χαρακτήρες. 16

Υλοποίηση ενός λεξικού αναλυτή (4/9) Προβλήματα. Περιγραφή λεκτικών μονάδων. 2.e0 20.e-01 2.0000 Διάσπαση των χαρακτήρων του πηγαίου κώδικα. if (i == 0) x = i<<1; if (i == 0) x = i<1; 17

Υλοποίηση ενός λεξικού αναλυτή (5/9) Προβλήματα (Συνέχεια). Αποδοτική μετατροπή σε λεκτικές μονάδες. Λεκτικές μονάδες με ίδιο πρόθεμα. Ανάγκη για εξέταση χαρακτήρων που ακολουθούν. Look ahead. Π.χ. σε γλώσσες που δεν διαθέτουν δεσμευμένες λέξεις. 18

Υλοποίηση ενός λεξικού αναλυτή Χρειαζόμαστε. (6/9) Έναν τρόπο να περιγράψουμε τις λεκτικές μονάδες κάθε token. Να επιλύσουμε ασάφειες. Είναι if ή δύο μεταβλητές i και f;. Είναι το == δύο φορές ίσον;. 19

Υλοποίηση ενός λεξικού αναλυτή Λύση. (7/9) Χρήση κανονικών γλωσσών. Που μπορούν να περιγραφούν από κανονικές εκφράσεις. 20

Υλοποίηση ενός λεξικού αναλυτή (8/9) Ορισμός αναγνωριστικών με κανονικές εκφράσεις. Μετάφραση κανονικών εκφράσεων σε αυτόματα. Χρήση πεπερασμένων αυτόματων. Για τη δημιουργία κώδικα λεξικής ανάλυσης. 21

Υλοποίηση ενός λεξικού αναλυτή (9/9) Σχήμα 1. Υλοποίηση λεξικού αναλυτή, (πηγή: διδάσκων 2014). 22

Λεξική ανάλυση κι αυτόματα (1/2) Κανονική έκφραση για την αναγνώριση ονομάτων: όνομα = {γράμμα}({γράμμα} {ψηφίο})* Αντίστοιχο προσδιοριστικό πεπερασμένο: Σχήμα 2. προσδιοριστικό πεπερασμένο (πηγή: διδάσκων, 2014). 23

Λεξική ανάλυση κι αυτόματα (2/2) Λόγοι μετατροπής των κανονικών εκφράσεων σε αυτόματα. Διότι οι μηχανές πεπερασμένων καταστάσεων. Παρέχουν ένα θεωρητικό πλαίσιο. Και πλήθος αλγορίθμων. Για την ανάπτυξη αλγορίθμων αναγνώρισης της γλώσσας των εκφράσεων. 24

Γεννήτριες λεξικών αναλυτών (1/19) Για τη χρήση γεννήτριας κώδικα λεξικής ανάλυσης. Συντάσσουμε το αρχείο περιγραφής το λεξικού αναλυτή. 25

Γεννήτριες λεξικών αναλυτών (2/19) 26

Γεννήτριες λεξικών αναλυτών (3/19) Το αρχείο περιγραφής. Διοχετεύεται ως είσοδος στη γεννήτρια κώδικα λεξικής ανάλυσης. Ο κώδικας που προκύπτει ως αποτέλεσμα. Περιλαμβάνεται στο αρχείο lexyy.c ή lex.yy.c. Περιλαμβάνει σίγουρα τη συνάρτηση λεξικής ανάλυσης yylex(). 27

Γεννήτριες λεξικών αναλυτών (4/19) Αν το αρχείο περιγραφής περιλαμβάνει συνάρτηση main(). Το πρόγραμμα που παράχθηκε μπορεί να λειτουργήσει αυτόνομα. Για να γίνει αυτό πρέπει να περάσει από ένα μεταγλωττιστή της C. 28

Γεννήτριες λεξικών αναλυτών (5/19) Αν το αρχείο περιγραφής δεν περιλαμβάνει συνάρτηση main(). Για να χρησιμοποιηθεί ο παραγόμενος κώδικας στο πλαίσιο ενός άλλου προγράμματος (μεταγλωττιστής). Χρειάζεται να συμπεριληφθεί με την οδηγία include lexyy.c. 29

Γεννήτριες λεξικών αναλυτών (6/19) Δομή αρχείου περιγραφής λεξικής ανάλυσης. Ορισμοί. %%. Κανόνες αναγνώρισης. %%. Βοηθητικές συναρτήσεις. 30

Γεννήτριες λεξικών αναλυτών (7/19) Στους ορισμούς περιλαμβάνονται: Κώδικας. Δεν ανήκει σε συγκεκριμένες συναρτήσεις. Είναι επιθυμητή η συμπερίληψή του στον παραγόμενο λεξικό αναλυτή. Ο κώδικας αυτός εμφανίζεται ανάμεσα στους ειδικούς χαρακτήρες {% και %}. Προηγείται του χαρακτήρα %%.» Που διαχωρίζει το πρώτο από το δεύτερο μέρος της περιγραφής. 31

Γεννήτριες λεξικών αναλυτών (8/19) Ορισμοί ονομάτων κανονικών εκφράσεων. Κάθε όνομα ορίζεται σε ξεχωριστή γραμμή. Όπου προηγείται το όνομα. Μετά από ένα ή περισσότερα κενά ακολουθεί η κανονική έκφραση. Από την οποία περιγράφεται. 32

Γεννήτριες λεξικών αναλυτών (9/19) Στο δεύτερο μέρος του αρχείου περιγραφής του λεξικού αναλυτή. Περιλαμβάνονται οι κανόνες αναγνώρισης διατυπωμένοι στη μορφή. p 1 {ενέργεια 1} p 2 {ενέργεια 2}...... p n {ενέργεια n} 33

Γεννήτριες λεξικών αναλυτών (10/19) Κάθε p i είναι μία κανονική έκφραση. Κάθε ενέργεια i είναι μία ή περισσότερες εντολές της C. Που εκτελούνται κάθε φορά που εντοπίζεται η αντίστοιχη λεξική μονάδα. Στο τελευταίο μέρος της περιγραφής του λεξικού αναλυτή. Περιλαμβάνονται οι συναρτήσεις που καλούνται από το δεύτερο μέρος και δεν ορίζονται αλλού. 34

Γεννήτριες λεξικών αναλυτών (11/19) Αν θέλουμε το αποτέλεσμα της επεξεργασίας της γεννήτριας να λειτουργεί ως αυτόνομο πρόγραμμα. Στο σημείο αυτό περιλαμβάνεται και η συνάρτηση main(). 35

Γεννήτριες λεξικών αναλυτών Η εντολή return. (12/19) Επιστρέφει στο συντακτικό αναλυτή το αναγνωριστικό της τελευταίας λεξικής μονάδας, που αναγνωρίσθηκε. Για την επιστροφή τιμών ιδιοτήτων της λεξικής μονάδας. Μπορεί να χρησιμοποιηθεί η εσωτερική μεταβλητή yylval της γεννήτριας. 36

Γεννήτριες λεξικών αναλυτών (13/19) Ιδιαίτερα χρήσιμη είναι και η char * yytext. Όπου αποθηκεύεται προσωρινά η συμβολοσειρά της λεξικής μονάδας, που αναγνωρίσθηκε. 37

Γεννήτριες λεξικών αναλυτών (14/19) Μεταβλητή YYTYPE yylval. Μέσω αυτής της μεταβλητής, ο λεξικός αναλυτής επικοινωνεί με το συντακτικό αναλυτή. Ο προκαθορισμένος τύπος YYTYPE είναι int. Παρόλα αυτά, ο τύπος της μεταβλητής μπορεί να οριστεί σύμφωνα με τις ανάγκες του χρηστη. Αυτό μπορεί να γίνει στο πρώτο μέρος της περιγραφής του λεξικού ή του συντακτικού αναλυτή. Η τιμή της μεταβλητής yylval ενημερώνεται στα τμήματα κώδικα action i του δευτέρου μέρους της περιγραφής. 38

Γεννήτριες λεξικών αναλυτών Μεταβλητή char * yytext. (15/19) Αποθηκεύει προσωρινά τη συμβολοσειρά που αντιστοιχεί στη λεξική μονάδα που αναγνωρίσθηκε. Χρησιμεύει κατά την αναγνώριση ονομάτων και σταθερών. Μεταβλητή int yyleng. Εκφράζει το μήκος της λεξικής μονάδας που αναγνωρίσθηκε. 39

Γεννήτριες λεξικών αναλυτών (16/19) Μεταβλητή FILE * yyin. Δείκτης στο αρχείου εισόδου του λεξικού αναλυτή. Μεταβλητή FILE * yyout. Δείκτης στο αρχείου εξόδου του λεξικού αναλυτή. 40

Γεννήτριες λεξικών αναλυτών Συνάρτηση int yylex(). (17/19) Η συνάρτηση της λεξικής ανάλυσης. Επιστρέφει το αναγνωριστικό της λεξικής μονάδας που αναγνωρίσθηκε. Συνάρτηση void yymore(). Επιτρέπει στο λεξικό αναλυτή να αναγνωρίσει την επόμενη λεξική μονάδα. Αποθηκεύει στη μεταβλητή yytext τη συμβολοσειρά της λεξικής μονάδας που αναγνωρίσθηκε τελευταία. 41

Γεννήτριες λεξικών αναλυτών Συνάρτηση void yyless(int n) (18/19) Οπισθοδρόμηση n χαρακτήρων στη συμβολοσειρά εισόδου της λεξικής ανάλυσης. 42

Γεννήτριες λεξικών αναλυτών (19/19) Σχήμα 3. Γεννήτριες λεξικών αναλυτών - Σχηματική παράσταση, (πηγή: διδάσκων, 2014). 43

Γεννήτριες λεξικών αναλυτών - Παράδειγμα 44

Γεννήτριες λεξικών αναλυτών - Τρόποι Εκτέλεσης. Συνέχεια (1/2) Παράλληλα με τον συντακτικό αναλυτή. Κάθε λεκτική μονάδα που αναγνωρίζεται επιστρέφεται με χρήση της εντολής return(). 45

Γεννήτριες λεξικών αναλυτών - Συνέχεια (2/2) Τρόποι Εκτέλεσης (Συνέχεια). Σειριακά. Απαιτείται: Η αποθήκευση της εξόδου του λεκτικού αναλυτή. Ο ορισμός μίας νέας συνάρτησης yylex().» Η οποία θα καλεί τον λεκτικό αναλυτή.» Θα επιστρέφει τμηματικά την έξοδό του στο συντακτικό αναλυτή. 46

Λεξική ανάλυση κι αυτόματα - Συνέχεια (1/2) Πλήρες προσδιοριστικό ντετερμινστικό αυτόματο για ονόματα: Σχήμα 4. Πλήρες προσδιοριστικό ντετερμινστικό αυτόματο για ονόματα, (πηγή: διδάσκων, 2014). 47

Λεξική ανάλυση κι αυτόματα - Συμβάσεις. Συνέχεια (2/2) Δεν απεικονίζουμε τις καταστάσεις λάθους. Χρησιμοποιούμε διπλό κύκλο για τις καταστάσεις κατάληξης. 48

Βιβλιογραφία 1. «Μεταγλωττιστές γλωσσών Προγραμματισμού: Θεωρία και Πράξη», Λάζος, Κ.Ε., Κατσαρός και Π.Θ., Καραΐσκος, Ζ.Κ. (2004), Εκδόσεις Θεσσαλονίκη, [ISBN:960-87723-4-6]. 2. «Μεταγλωττιστές», Παπασπύρου, Ν.Σ. και Σκορδαλάκης, Ε.Σ (2002), Εκδόσεις Συμμετρία, 2002, [ISBN: 978-960-266-135-2]. 49

Τέλος Ενότητας 50