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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HY340, 2009 Α. Σαββίδης Slide 2 / 26. HY340, 2009 Α. Σαββίδης Slide 3 / 26. HY340, 2009 Α. Σαββίδης Slide 4 / 26

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

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

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

Αυτόματα. Παράδειγμα: πωλητής καφέ (iii) Παράδειγμα: πωλητής καφέ (iv) Εισαγωγή στην Επιστήμη των Υπολογιστών 6

Εισαγωγή στην Επιστήμη των Υπολογιστών

Παρουσίαση του εργαλείου. flex. γεννήτρια λεκτικών αναλυτών. για το µάθηµα: Μεταγλωττιστές. Χανιά, flex 1

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

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

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

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

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

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

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 7: Ασυμφραστικές Γλώσσες (Γλώσσες Ελεύθερες Συμφραζομένων)

Μοντελοποίηση Υπολογισμού. Γραμματικές Πεπερασμένα Αυτόματα Κανονικές Εκφράσεις

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

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

Κατηγορικές Γραµµατικές

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

Στοιχεία Θεωρίας Υπολογισµού (1): Τυπικές Γλώσσες, Γραµµατικές

Ποιές οι θεµελιώδεις δυνατότητες και ποιοί οι εγγενείς περιορισµοί των υπολογιστών ; Τί µπορούµε και τί δε µπορούµε να υπολογίσουµε (και γιατί);

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

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

Εργαστήριο 3 Εισαγωγή στο Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (1)

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

Αυτόματα. Παράδειγμα: πωλητής καφέ (iii) Παράδειγμα: πωλητής καφέ (iv) Εισαγωγή στην Επιστήμη των Υπολογιστών. Προδιαγραφές

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Λογισμικό Συστήματος. Κλειώ Σγουροπούλου

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

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

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

Ορισµοί. Τυπικές Γλώσσες Γραµµατικές και Μεταφραστές. Αλφάβητο: ένα οποιδήποτε µη κενό και πεπερασµένο σύνολο Σ αποτελούµενο από σύµβολα

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

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

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

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

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

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

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

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

Κανονικές Γλώσσες. Κανονικές Γλώσσες. Κανονικές Γλώσσες και Αυτόματα. Κανονικές Γλώσσες και Αυτόματα

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

Εισαγωγή στην Επιστήμη των Υπολογιστών

Θέματα υπολογισμού στον πολιτισμό

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

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

Περιεχόμενα Ορισμός και λειτουργία των μηχανών Turing Θεωρία Υπολογισμού Ενότητα 20: Μηχανές Turing: Σύνθεση και Υπολογισμοί Επ. Καθ. Π. Κατσαρός Τμήμ

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

ΚΕΦΑΛΑΙΟ 6: Γλώσσες. 6.1 Ιστορική εξέλιξη 6.4 Υλοποίηση γλώσσας. Κεφάλαιο 6: «Γλώσσες Προγραµµατισµού»

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

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

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

Κανονικές Γλώσσες. ιδάσκοντες: Φ. Αφράτη,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

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

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

Θεωρία Υπολογισμού και Πολυπλοκότητα

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

Θεωρία Υπολογισμού Αλφάβητα, Γλώσσες, Κανονικές Εκφράσεις

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

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

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

Προγραμματισμός Ι (ΗΥ120)

Περιεχόμενα. 1 Υπολογισιμότητα. Ιστορία - Εισαγωγή. Μαθηματικό Υπόβαθρο. LOOP: Μια απλή γλώσσα προγραμματισμού

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

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

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

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

Περιεχόμενα Συμβολοσειρές Γλώσσες ΘΥ 6: Συμβολοσειρές & γλώσσες Επ. Καθ. Π. Κατσαρός 24/07/2014 Επ. Καθ. Π. Κατσαρός ΘΥ 6: Συμβολοσειρές & γλώσσες

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

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Επανάληψη Μαθήματος

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο 2: Τυπικές γλώσσες

Transcript:

Γλώσσες Προγραμματισμού Μεταγλωττιστές Λεκτική Ανάλυση Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου

Δομή Λεκτική Ανάλυση Τυπικές Γλώσσες Κανονικές Εκφράσεις Υλοποίηση Λεκτικών Αναλυτών Γεννήτριες Λεκτικών Αναλυτών FLEX Παράδειγματα

Φάσεις Μεταγλώττισης Αρχικό Πρόγραμμα Λεκτική Ανάλυση λεκτικές μονάδες Πίνακας Συμβόλων Τελικό Πρόγραμμα Συντακτική Ανάλυση συντακτικό δένδρο Σημασιολογική Ανάλυση συντακτικό δένδρο Παραγωγή Ενδιάμεσου Κώδικα ενδιάμεσος κώδικας Βελτιστοποίηση Ενδιάμεσου Κώδικα ενδιάμεσος κώδικας Παραγωγή Τελικού Κώδικα τελικός κώδικας Βελτιστοποίηση Τελικού Κώδικα Χειριστής Σφαλμάτων

Λεκτική Ανάλυση Αποδοχή μιας συμβολοσειράς χαρακτήρων που αποτελούν το αρχικό πρόγραμμα και εξαγωγή των λεκτικών μονάδων (tokens). Οι λεκτικές μονάδες χρησιμοποιούνται σαν είσοδος στην φάση της συντακτικής ανάλυσης. Αποτελούν τερματικά σύμβολα της γλώσσας. Υλοποιείται από τον λεκτικό αναλυτή (lexical analyser, scanner). Αποθήκευση λεκτικών μονάδων στον πίνακα συμβόλων. Ανίχνευση σφαλμάτων Διαγραφή σχολίων, διαστημάτων, κενών γραμμών.

Αλληλεπιδράσεις ΛΑ και ΣΑ Πηγαίο Πρόγραμμα Λεκτικός Αναλυτής Πίνακας Συμβόλων Επόμενη Λεκτική Μονάδα Λεκτική Μονάδα Σφάλματα Συντακτικός Αναλυτής Έξοδος προς Σημασιολογική Ανάλυση

Ορισμοί Λεκτική Μονάδα (token) Ζεύγος αποτελούμενο από όνομα και τιμή ιδιότητας Πρότυπα ή περιγραφές (pattern) Περιγραφή της μορφής που θα έχει η λεκτική μονάδα. Λέξημα (lexeme) Η συγκεκριμένη ακολουθία χαρακτήρων που ικανοποιεί το πρότυπο και αποτελεί στιγμιότυπο της λεκτικής μονάδας.

Παράδειγμα Λεκτική Μονάδα Άτυπη περιγραφή Λέξηματα if χαρακτήρες i και f if then χαρακτήρες t,h,e και n then comparison > ή < ή <= ή => ή == ή!= <= id γράμμα ακολουθούμενο x, rate, από γράμματα ή αριθμούς position literal οτιδήποτε εκτός του που περιλαμβάνεται σε rate

Λεκτικές Μονάδες σε μια Γλώσσα Μια λεκτική μονάδα για κάθε λέξη κλειδί (keyword) Λεκτικές μονάδες για κάθε τελεστή ή μια ομάδα για κάθε τελεστή (operator) Μια λεκτική μονάδα για τα αναγνωριστικά (identifiers) Λεκτικές Μονάδες για σταθερές (αριθμητικές, συμβολοσειρές) Λεκτικές Μονάδες για συντακτικά σύμβολα (παρενθέσεις, κόμματα, κλπ)

Τιμές Ιδιοτήτων (Attribute values) Πως ξεχωρίζουν τα λεξήματα που αντιστοιχούν στην ίδια λεκτική μονάδα; πχ. id <- x, rate, position number <- 23 1123.345 1 0 Τιμές ιδιοτήτων που περιγράφουν το λέξημα Ιδιαίτερα σημαντικό στα αναγνωριστικά (id), όπου συνήθως αποθηκεύεται ένας δείκτης στον πίνακα συμβόλων. Για τους αριθμούς μπορεί να είναι η τιμή που αντιστοιχεί στον αριθμό, ή ένας δείκτης στην συμβολοσειρά που αναπαριστά τον αριθμό.

Τιμές Ιδιοτήτων (Attribute values) II Ε = Μ * C ** 2 (id, δείκτης στον πίνακα για το Ε) (assign_op) (id, δείκτης στον πίνακα για το M) (mult_op) (id, δείκτης στον πίνακα για το C) (exp_op) (number,2) Τα ονόματα ιδιοτήτων χρησιμοποιούνται συνήθως στην φάση της συντακτικής ανάλυσης ενώ τα οι τιμές ιδιοτήτων σε μεταγενέστερες φάσεις.

Περιγραφές Σε μερικές περιπτώσεις η περιγραφή των λεκτικών μονάδων είναι σχετικά απλή. Σε άλλες η περιγραφή είναι περισσότερο πολύπλοκη. Πώς θα περιγραφούν τα patterns? Λεκτική Μονάδα Άτυπη περιγραφή Λέξηματα if χαρακτήρες i και f if then χαρακτήρες t,h,e και n then comparison > ή < ή <= ή => ή == ή!= <= id γράμμα ακολουθούμενο x, rate, από γράμματα ή αριθμούς position number ακολουθία ενός ή περισσοτέρων ψηφίων. 123, 234, 897

There is nothing more practical than a good theory. Τυπικές Γλώσσες (Formal Languages) (ή τυποκρατικές γλώσσες)

Αλφάβητο Μη κενό, πεπερασμένο σύνολο από σύμβολα Σ ονομάζεται αλφάβητο. {0,1} {α,β,γ,δ...ω} {2,3,7} σύνολο ASCII χαρακτήρων Συμβολοσειρά: πεπερασμένη παράθεση από σύμβολα. 010111, μεταγλωττιστές, 77733 κενή συμβολοσειρά ε Μήκος της συμβολοσειράς είναι ο αριθμός των συμβόλων που περιέχει. 010111 = 6, 77733 =5

Συμβολοσειρές Σ n Σύνολο συμβολοσειρών μήκους n. Σ 0 ={ε}, Σ 2 ={00,01,10,11} Με Σ* συμβολίζεται η ένωση όλων των Σ n Σ * = n=0 Σ n Με Σ + η ένωση όλων των μη-κενών συνόλων. Σ + = n=1 Σ n

Παράθεση και Δυνάμεις Παράθεση δύο συμβολοσειρών α και β αποτελείται από τα σύμβολα της α ακολουθούμενα από όλα τα σύμβολα της β. α=011 β=000 αβ=011000 Ύψωση σε δύναμη n είναι η παράθεση n μιας συμβολοσειράς n φορές με τον εαυτό της. α 0 = ε α n+1 = αα n

Συμβολοσειρές Πρόθεμα (prefix) Η συμβολοσειρά α είναι πρόθεμα της συμβολοσειράς β εάν υπάρχει συμβολοσειρά γ τέτοια ώστε β = αγ wh while Επίθεμα ή κατάληξη (suffix) Η συμβολοσειρά α είναι επίθεμα της συμβολοσειράς β εάν υπάρχει συμβολοσειρά γ τέτοια ώστε β = γα ile while Υποσυμβολοσειρά (substring) Η συμβολοσειρά α είναι υποσυμβολοσειρά της συμβολοσειράς β εάν υπάρχουν συμβολοσειρές γ και δ τέτοιες ώστε β = δαγ hil while

Γλώσσες Μια γλώσσα L ενός αλφαβήτου Σ είναι ένα υποσύνολο του Σ*, δηλαδή: Ένα απαριθμήσιμο σύνολο συμβολοσειρών ενός πεπερασμένου αλφάβητου. Έστω το αλφάβητο Σ={a,b,c,d,e...y,z}. Παραδείγματα γλωσσών είναι: L={if} L={if, then, else, while, repeat} L={a n b 2n n ακέραιος} H κενή γλώσσα L = {ε} Η πλήρης γλώσσα

Πράξεις στις Γλώσσες I Εφόσον οι γλώσσες είναι σύνολα, ορίζονται σε αυτές πράξεις συνόλων: ένωση, τομή, διαφορά. Ένωση δύο γλωσσών L1 και L2 L 1 L 2 ={ L 1 L 2 } Η παράθεση L δύο γλωσσών L1 και L2 είναι η γλώσσα που περιέχει συμβολοσειρές που είναι παραθέσεις μιας συμβολοσειράς της L1 και μιας συμβολοσειράς της L2. L 1 L 2 ={ L 1 L 2 }

Πράξεις στις Γλώσσες II Παράθεση μιας γλώσσας με τον εαυτό της n φορές. L 0 ={ε} Κλείσιμο Kleene (Kleene closure) μιας γλώσσας L, είναι η παράθεση με τον εαυτό της μηδέν η περισσότερες φορές. Θετικό κλείσιμο Kleene είναι η παράθεση μιας γλώσσας με τον εαυτό της, μια η περισσότερες φορές. L n =L L n 1 L * = n = 0 L + = n =1 L + =L L * L n L n

Περιγραφή Γλωσσών Έστω αλφάβητο Σ={a,b} και Σ* είναι το σύνολο των συμβολοσειρών που είναι δυνατό να παραχθούν. Πώς μπορώ να περιγράψω μια γλώσσα η οποία περιέχει συμβολοσειρές με: Έχει ίδιο αριθμό a και b ; Να ξεκινά με aa και να τελειώνει με bab, με όλες τις συμβολοσειρές να έχουν μήκος > 5; Να περιέχει μόνο τα {aa, bb, ab}; Πως μπορώ να υλοποιήσω ένα πρόγραμμα που να την αναγνωρίζει ;

Υπολογίσιμες Γλώσσες Γλώσσες για τις οποίες είναι δυνατό να κατασκευαστούν προγράμματα τα οποία να παίρνουν σαν είσοδο μια τυχαία συμβολοσειρά και να αποφαίνονται αν η συμβολοσειρά ανήκει στην γλώσσα. Τυπικές γλώσσες ορίζονται μέσω γραμματικών και κατατάσσονται ανάλογα με την πολυπλοκότητά τους σε μια ιεραρχία.

Γραμματική Σύστημα παραγωγής συμβολοσειρών G, που αποτελείται από μια τετράδα (T,N,P,S) T τερματικά σύμβολα (terminals) που αποτελούν το αλφάβητο της γλώσσας. N μη-τερματικά σύμβολα (non-terminals) P κανόνες παραγωγής (production rules) της μορφής α β, όπου α και β (Τ Ν)* S αρχικό σύνολο, το οποίο είναι στοιχείο το Ν (start symbol)

Πως παράγεται μια συμβολοσειρά; Η διαδικασία αρχίζει με το αρχικό σύμβολο. Αντικαθιστούμε μια υποσυμβολοσειρά α της τρέχουσας δ με την β εάν υπάρχει κανόνας παραγωγής α β Αν δ = γαγ' τότε από γαγ' -> γβγ' Όταν η συμβολοσειρά περιέχει μόνο τερματικά σύμβολα, λέμε ότι αυτή παράγεται από την γραμματική.

Παράδειγμα I Έστω η γραμματική Τ = {a,b} N = {I,S,U} P = {I asb, S ε S as, S bs} S = I Ι asb ab (παραγωγή) Ι asb absb abasb ababb

Παράδειγμα II Έστω η γραμματική Τ = {0,1-9,.,e} N = {Ν,D,Ds,E} P = {Ν DsE, D 0, D 1, D 2, D 3,...,D 9 Ds DDs, Ds D, E eds, E ε} S = Ν Ν 2DsE 24E 24 (παραγωγή) N 4DsE 45E 45eDs 45e6 45e6

Μερικοί Ορισμοί Συμβολοσειρά α Τ* παράγεται από την G όταν υπάρχει μια ακολουθία παραγωγών τέτοια ώστε α 1 = S α n = α και ισχύει α i α i+1 για κάθε i, 0 < i < n Μεταβατικό κλείσιμο α + β Ανακλαστικό Μεταβατικό κλείσιμο α β Η γραμματική G παράγει την γλώσσα L(G), για την οποία L(G) = {α T* S + α}

Ιεραρχία Chomsky Γραμματικές τύπου 0. Γραμματικές τύπου 1 (γραμματικές με συμφραζόμενα context sensitive grammars) Γραμματικές τύπου 2 (γραμματικές χωρίς συμφραζόμενα context free grammars) Γραμματικές τύπου 3 (κανονικές γραμματικές regular grammars)

Ιεραρχία Chomsky Γραμματικές τύπου 0. Όλες οι γραμματικές χωρίς περιορισμούς. Γραμματικές τύπου 1 (γραμματικές με συμφραζόμενα context sensitive grammars) Γραμματικές της μορφής α β, έτσι ώστε η συμβολοσειρά α να περιέχει τουλάχιστον ένα μητερματικό σύμβολο και α β.

Ιεραρχία Chomsky Γραμματικές τύπου 2 (γραμματικές χωρίς συμφραζόμενα context free grammars) Οι κανόνες παραγωγής έχουν μορφή α β, όπου η συμβολοσειρά α αποτελείται από ένα μη-τερματικό σύμβολο και η β είναι συμβολοσειρά. Γραμματικές τύπου 3 (κανονικές γραμματικές regular grammars) Οι κανόνες παραγωγής έχουν την μορφή Α aβ Α a Α ε A,B μη τερματικά και a τερματικό.

Αναγνωριστές Μια αφηρημένη μηχανή που δέχεται ως είσοδο μια συμβολοσειρά ενός αλφαβήτου και δίνει έξοδο ναι ή όχι. Αναφέρονται και ως αυτόματα. Μηχανή Turing πολυπλοκότερο υπολογιστικό μοντέλο Γραμμικά Περιορισμένη Μηχανή Turing ΜΤ με περιορισμό Μνήμης Αυτόματα Στοίβας Πεπερασμένα Αυτόματα.

Αντιστοιχία Μοντέλων Γεννητικά Μοντέλα Γραμματικές τύπου 0. Γραμματικές με συμφραζόμενα Γραμματικές χωρίς συμφραζόμενα Κανονικές γραμματικές Αναγνωριστικά Μοντέλα Μηχανή Turing Γραμμικά Περιορισμένη Μηχανή Turing Αυτόματα Στοίβας Πεπερασμένα Αυτόματα.

Κανονικές Εκφράσεις

Κανονικές Εκφράσεις Χρησιμοποιούνται για την περιγραφή κανονικών γλωσσών. Κομψότερος και λακωνικότερος φορμαλισμός. Αντιστοιχία μεταξύ κανονικών εκφράσεων και κανονικής γραμματικής και πεπερασμένων αυτομάτων. Χρήση από εργαλεία κατασκευής λεκτικών αναλυτών.

Κανονικές Εκφράσεις Έστω ένα αλφάβητο Σ, μια κανονική έκφραση (KE) r ορίζει μια γλώσσα L(r) πάνω στο Σ. Αναδρομικός ορισμός Κανονική έκφραση είναι H κενή συμβολοσειρά Κάθε σύμβολο a του Σ L(ε)={ε} L(a) = {a} Η διάζευξη r s L(r s) = L(r) L(s) H παράθεση rs L(rs)=L(r)L(s) Το κλείσιμο Kleene r* L(r*)=L(r)* όπου τα r και s είναι κανονικές εκφράσεις.

Παραδείγματα Έστω το Σ = {a,b}. Ποιες είναι οι γλώσσες που παράγουν οι ακόλουθες κανονικές εκφράσεις: (a b) (a b)(a b) (ab)* (a b)* a(a b)*b {a,b} {aa,ab,ba,bb} {ε,ab,abab,ababab} {ε,a,b,aa,ab,bb,ba,...} {ab,aab,abb,aaab,...}

Επέκταση Κανονικών Εκφράσεων Θετικό κλείσιμο Kleene r+ = rr* Έκφραση εμφανίζεται μία η περισσότερες φορές Μηδέν ή μια εμφανίσεις της r r? = r ε Κλάσεις χαρακτήρων [a,b,c]=a b c Διαστήματα χαρακτήρων [a-z]=a b... z Ειδικό σύμβολο για οποιονδήποτε χαρακτήρα Συνήθως είναι η τελεία Ειδικοί χαρακτήρες παριστάνονται με το σύμβολο \ να προηγείται. \) \( \[

Απαλοιφή Παρενθέσεων Προτεραιότητα τελεστών Κλείσιμο Kleene Παράθεση Διάζευξη Δηλαδή η έκφραση a b*c ισοδυναμεί με (a) ((b)*(c)). Μορφή των μη-προσημασμένων σταθερών κινητής υποσδιαστολής. πχ. 123, 1, 0.12, 1.2, 1.34Ε+23, 156e-34 ([1-9][0-9]* 0)(\.[0-9]+)?((E e)(+ -)?[0-9]+)?

Κανονικοί Ορισμοί Ακολουθία από κανόνες της μορφής d i r i όπου Κάθε d i είναι ένα νέο σύμβολο που δεν υπάρχει στο αρχικό αλφάβητο Σ Κάθε r i είναι μια κανονική έκφραση που ορίζεται στο αλφάβητο Σ r i-1 Για να χρησιμοποιηθεί ένας κανονικός ορισμός σε ένα άλλο θα πρέπει να έχει δηλωθεί πριν από αυτόν. (ΔΕΝ επιτρέπεται αναδρομή).

Αριθμοί Κινητής Υποδιαστολής nzdigit -> 1 2... 9 digits -> (nzdigit 0)+ optfr -> (\.digits)? optexp -> ((E e) (+ -)? digits)? number -> (nzdigit digits* 0) optfr optexp

Μη κανονικές Γλώσσες Υπάρχουν γλώσσες οι οποίες δεν είναι κανονικές, δηλαδή δεν υπάρχει κανονική έκφραση (ή πεπερασμένο αυτόματο) που να μπορεί να τις περιγράψει. Για παράδειγμα {( n ) n : n>=0} Περιγραφή και χειρισμός των γλωσσών χρησιμοποιώντας γραμματικές χωρίς συμφραζόμενα (context free grammars).

Μεταγλωττιστές Υλοποίηση Λεκτικών Αναλυτών

Υλοποίηση Λεκτικών Αναλυτών Υπάρχουν δύο προσεγγίσεις στην υλοποίηση λεκτικών αναλυτών Με την χρήση μιας γεννήτριας λεκτικών αναλυτών (π.χ. Flex) Χειρωνακτική υλοποίηση που περιλαμβάνει την χρήση ρουτινών Ι/Ο μιας γλώσσας (C,C++,JAVA) για την λεκτική ανάλυση. Σχεδίαση και Υλοποίηση Πεπερασμένων αυτομάτων που αντιστοιχούν στις κανονικές εκφράσεις της γλώσσας.

Γεννήτριες Λεκτικών Αναλυτών Ορισμός αναγνωριστικών με κανονικές εκφράσεις. Αυτόματη μετάφραση Κ.Ε. σε πεπερασμένα αυτόματα/διαγράμματα μετάβασης. Χρήση πεπερασμένων αυτόματων/διαγραμμάτων για τη δημιουργία κώδικα λεξικής ανάλυσης (αυτόματα).

Flex Ο Flex είναι μια γεννήτρια λεξικογραφικών αναλυτών για C/C++ Υλοποίηση του «κλασσικού» Lex του Unix Παράγει γρήγορους λεξικογραφικούς αναλυτές Flex := Fast Lexical Analyzer Generator Υπάρχουν εκδόσεις για όλα τα λειτουργικά συστήματα (link για download από την σελίδα του μαθήματος)

Κανονικές Εκφράσεις FLEX (ι) Οι κανονικές εκφράσεις (regular expressions) που υποστηρίζονται από το FLEX είναι: x : ο χαρακτήρας `x`. : οποιοσδήποτε χαρακτήρας εκτός του newline abc : η ακολουθία χαρακτήρων abc [xyz] : οποιοσδήποτε από τους χαρακτήρες x ή y ή z [a-z] : οποιοσδήποτε χαρακτήρας από a εως z [^a-z] : οποιοσδήποτε χαρακτήρας εκτός από a εως z

Κανονικές Εκφράσεις FLEX (ιι) r* : καμία ή περισσότερες επαναλήψεις της κανονικής έκφρασης r r+ : μία ή περισσότερες επαναλήψεις της r r? : μία ή καμία επανάληψη της r r{i,j} : (0<i<j) από i εως j επαναλήψεις της r π.χ. η.{3,4} περιγράφει λέξεις 3 ή 4 χαρακτήρων rs : ακολουθίες που προκύπτουν από την παράθεση των r και s (r) : οι παρενθέσεις ορίζουν την εφαρμογή των τελεστών r s : ακολουθίες που ικανοποιούν ή την r ή την s

Κανονικές Εκφράσεις FLEX (ιιι) ^r : ικανοποιείται μόνο αν η ακολουθία βρίσκεται στην αρχή της γραμμής r$ : ικανοποιείται μόνο αν η ακολουθία βρίσκεται στο τέλος της γραμμής \\, \, \(, \), \*, \+, \[, \], \$, \^, \{, \} : οι ίδιοι οι χαρακτήρες \,, (, ), *, +, [, ], $, ^, { και }

Δομή Προγράμματος Flex Ένα αρχείο flex αποτελείται από 3 μέρη που διαχωρίζονται από `%%` Κανονικοί Ορισμοί και δηλώσεις %% Κανόνες %% Κώδικας Χρήστη (Βοηθητικές Συναρτήσεις)

Κανονικοί Ορισμοί & Δηλώσεις Οι ορισμοί αποτελούνται από: κανονικούς ορισμούς που έχουν την μορφή: name regular expression digit [0-9] id [a-za-z][a-za-z_0-9]* κώδικα που θέλουμε να συμπεριληφθεί στον παραγώμενο λεξικό αναλυτή (συνήθως δηλώσεις μακροεντολών, μεταβλητών και τύπων δεδομένων) ανάμεσα σε %{ }% %{ #include <stdio.h> #define TK_IF 0 #define TK_ELSE 1 }%

Κανόνες Το τμήμα κανόνων είναι το κύριο τμήμα του προγράμματος και αποτελείται από κανόνες της μορφής: pattern1 {action1} pattern2 {action2} pattern3 {action3} pattern = κανονική έκφραση Για παράδειγμα: %% {id} {printf( Found id: %s\n,yytext) {digit} {printf( Found digit: %s\n, yytext); %%

Κώδικας Χρήστη και Βοηθητικές Συναρτήσεις Στο τελευταίο μέρος της περιγραφής του λεξικού αναλυτή περιλαμβάνονται οι όποιες συναρτήσεις καλούνται από το δεύτερο μέρος και δεν ορίζονται αλλού. Αν θέλουμε το αποτέλεσμα της επεξεργασίας της γεννήτριας να λειτουργεί ως αυτόνομο πρόγραμμα, τότε στο μέρος αυτό περιλαμβάνεται και η συνάρτηση main(). Διαφορετικά ο παραγόμενος κώδικας θα χρησιμοποιηθεί στο πλαίσιο ενός άλλου προγράμματος. Το τμήμα κώδικα χρήστη είναι προαιρετικό και ο κώδικας αντιγράφεται χωρίς αλλαγές στο παραγώμενο αρχείο.

Λειτουργία Όταν ικανοποιείται ένα pattern, ο κανόνας ενεργοποιείται και ο κώδικας που ακολουθεί εκτελείται. Όταν ικανοποιούνται περισσότεροι από ένας κανόνες τότε επιλέγεται αυτός που καταναλώνει περισσότερους χαρακτήρες. Εάν καταναλώνουν τον ίδιο αριθμό επιλέγεται αυτός που έχει δηλωθεί πρώτος.

Σημαντικές Μεταβλητές/Συναρτήσεις Flex (i) char *yytext: περιέχει το κομμάτι του κειμένου που έχει ικανοποιήσει την κανονική έκφραση (lexeme) int yyleng: ένας ακέραιος που δηλώνει το μέγεθος του yytext int yylex() : Η παραγόμενη συνάρτηση λεξικής ανάλυσης. Επιστρέφει το αναγνωριστικό της λεξικής μονάδας, που διαβάζει.

Σημαντικές Μεταβλητές/Συναρτήσεις Flex (ii) YYTYPE yylval :Η μεταβλητή μέσω της οποίας επικοινωνεί ο λεξικός αναλυτής με το συντακτικό αναλυτή. Ο προκαθορισμένος τύπος YYTYPE είναι int, αλλά ο χρήστης μπορεί να τον ορίσει σύμφωνα με τις ανάγκες του στο πρώτο μέρος της περιγραφής του λεξικού ή του συντακτικού αναλυτή. Η τιμή της μεταβλητής yylval, πρέπει να ενημερώνεται, όποτε αυτή χρειάζεται, στα τμήματα κώδικα action του δευτέρου μέρους της. Η εντολή return επιστρέφει στο συντακτικό αναλυτή το αναγνωριστικό της τελευταίας λεξικής μονάδας, που αναγνωρίσθηκε.

Ένα Απλό Παράδειγμα %{ #include <stdio.h> #include <string.h> int lineno = 1; %} line.*\n %% {line} {printf("%5d %s", lineno++, yytext);} %% int main() { yylex(); }

Διαδικασία Δημιουργίας ΛΑ Flex Source Program (test.l) F L e x c o m p ile r lex.yy.c (lexyy.c) lex.yy.c (lexyy.c) C c o m p ile r a.out Input Stream a.o u t Sequence of Tokens

Διαδικασία Δημιουργίας ΛΑ (ιι) Το αρχείο περιγραφής (test.l) διοχετεύεται ως είσοδος στη γεννήτρια κώδικα λεξικής ανάλυσης. flex test.l Ο κώδικας που προκύπτει ως αποτέλεσμα περιλαμβάνεται στο αρχείο lex.yy.c (lexyy.c)και περιλαμβάνει σίγουρα τη συνάρτηση λεξικής ανάλυσης yylex(). Αν το αρχείο περιγραφής περιλαμβάνει συνάρτηση main(), τότε το πρόγραμμα που παράχθηκε μπορεί να λειτουργήσει αυτόνομα και για να γίνει αυτό πρέπει να περάσει από ένα μεταγλωττιστή της C. gcc lex.yy.c -lfl Αν όχι, τότε για να χρησιμοποιηθεί ο παραγόμενος κώδικας στο πλαίσιο ενός άλλου προγράμματος (μεταγλωττιστής) χρειάζεται να συμπεριληφθεί με την οδηγία #include lex.yy.c

Παράδειγμα 2 - #define %{ #define T_IF 250 #define T_THEN 251... #define GTE 1100 #include <stdio.h>... int idnum=0;... %}

Παράδειγμα 2 Κανονικοί Ορισμοί ws [ \n\t]+ nzdigit [1-9] digit (0 {nzdigit}) digits {digit}+ optfr (\.{digits})? optexp ((E e)(\+ -)?{digits})? number ({nzdigit}{digits}* 0){optFr}{optExp} letter [A-Za-z] id {letter}({letter} {digit})* %%

Παράδειγμα 2 Κανόνες %% {ws} {/* do nothing */} if {attr=0;return(t_if);} then {attr=0;return(t_then);} else {attr=0;return(t_else);} {number} {attr=atoi(yytext); return(t_num);} {id} {attr=idnum++; return(t_id);} ">=" {attr=gte;return(t_relop);} "=" {attr=eq;return(t_relop);} "=<" {attr=lte;return(t_relop);}. {printf("error in %s \n",yytext);return(error);} %%

Παράδειγμα 2 Κώδικας Χρήστη %% int main() { int token; while ((token=yylex())!= 0) {printf("%s <%d,%d> \n",yytext,token,attr);} }

Σύνοψη Λεκτική Ανάλυση Τυπικές Γλώσσες Κανονικές Εκφράσεις Υλοποίηση Λεκτικών Αναλυτών Γεννήτριες Λεκτικών Αναλυτών FLEX Παράδειγματα Επόμενο Μάθημα: Κανονικές εκφράσεις και Πεπερασμένα Αυτόματα. Διαγράμματα Μετάβασης.