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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Εργαστήριο 09 Δημιουργία Νέων Συντακτικών Αναλυτών

Υπολογισμός - Εντολές Επανάληψης

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

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

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

ΘΕΜΑ 1 ο. Στήλη Β Προτάσεις. β. Ο βρόχος επανάληψης τερµατίζεται, όταν η συνθήκη είναι αληθής. όταν η συνθήκη είναι ψευδής.

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Τύποι Δεδομένων Είσοδος/Έξοδος

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

Γ ΤΑΞΗ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ÑÏÌÂÏÓ

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

Ενδεικτικές λύσεις και στατιστικά

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

Χpήσιµες Βιβλιοθήκες της γλώσσας C

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

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

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

Στήλη Β Προτάσεις. 1. Όσο συνθήκη επανάλαβε εντολές Τέλος_επανάληψης 2. Αρχή_επανάληψης εντολές Μέχρις_ότου συνθήκη

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

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

είκτες και Πίνακες (2)

Προγραμματισμός ΙI (Θ)

Transcript:

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 5 Ο Εργαστηριακό Μάθημα Δημιουργία Νέων Λεξικών Αναλυτών Σκοπός: Το μάθημα αυτό αναφέρεται: Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex. Στην υλοποίησή τους. Θεωρία Πρόλογος Στο προηγούμενο εργαστήριο κάναμε μια εισαγωγή στο lex γνωρίζοντας τις δομές και τις συναρτήσεις που αυτό προσφέρει. Επίσης παρουσιάσαμε τον τρόπο που αυτό το εργαλείο μπορεί να χρησιμοποιηθεί για την κατασκευή του ενός Λεξικού Αναλυτή. Υπενθύμιση Η δημιουργία ενός λεξικού αναλυτή, ξεκινά με τη σύνταξη ενός αρχείου περιγραφής που διοχετεύεται ως είσοδος στο lex. Ο κώδικας που προκύπτει είναι ένα πρόγραμμα γραμμένο σε c, το οποίο αποθηκεύεται στο αρχείο με όνομα lexyy.c ή lex.yy.c και περιλαμβάνει τη συνάρτηση yylex() που υλοποιεί τον λεξικό αναλυτή. Η συνάρτηση αυτή αναγνωρίζει την επόμενη λεξική μονάδα και επιστρέφει το αντίστοιχο αναγνωριστικό (token). Η ακολουθία των χαρακτήρων που απαρτίζουν την αναγνωρισθείσα λεξική μονάδα είναι διαθέσιμη στη μεταβλητή yytext. Αν το αρχείο περιγραφής περιλαμβάνει συνάρτηση main() τότε το πρόγραμμα που παράχθηκε μπορεί να λειτουργήσει αυτόνομα και για να γίνει αυτό πρέπει να περάσει από ένα μεταγλωττιστή της C. Αν όχι, τότε για να χρησιμοποιηθεί ο παραγόμενος κώδικας στο πλαίσιο ενός άλλου προγράμματος (ενός μεταγλωττιστή) θα πρέπει το αρχείο lexyy.c να δηλωθεί ως κεφαλίδα include στο κώδικα περιγραφής της συντακτικής ανάλυσης. Εκεί η συνάρτηση yylex() καλείται, όποτε αυτό απαιτείται, από τη συντακτική ανάλυση του πηγαίου προγράμματος, επιστρέφοντας κάθε φορά μία μόνο από τις επόμενες λεξικές μονάδες.

Το αρχείο περιγραφής που δίνεται ως είσοδος στο lex περιέχει τρία μέρη, τα οποία χωρίζονται με την ακολουθία χαρακτήρων. Η γενική μορφή ενός αρχείου περιγραφής είναι: Μέρος Α Μέρος Β Μέρος Γ Στο μέρος Α περιλαμβάνονται: o o o Σχόλια, τα οποία ακολουθούν τη σύμβαση της C Κώδικας C, που περικλείεται από %{ και %}. Ο κώδικας αυτός συνήθως περιέχει δηλώσεις μακροεντολών, τύπων δεδομένων και μεταβλητών που χρησιμοποιούνται από τον λεξικό αναλυτή. Μνημονικά ονόματα, που χρησιμοποιούνται στο μέρος Β ως συντομογραφίες για κανονικές εκφράσεις. Το μέρος Β περιέχει κανόνες, κάθε ένας από τους οποίους περιγράφει μια ομάδα λεξικών μονάδων και τις ενέργειές που θα γίνουν μετά την αναγνώρισή της. Η μορφή του μέρους αυτού είναι γενικά η εξής: Κανονική έκφραση1 ενέργεια1 Κανονική έκφραση2 ενέργεια2.. Κανονική έκφρασην ενέργειαν Οι κανονικές εκφράσεις συντάσσονται κανονικά, με τους γνωστούς συμβολισμούς ενώ κάθε ενέργεια είναι μια εντολή της C ή μια ομάδα εντολών που περικλείεται από άγκιστρα. Συνήθως η ενέργεια αυτή επιστρέφει το αναγνωριστικό (token) της λεξικής μονάδας που αναγνωρίστηκε. Για τις περιπτώσεις ασάφειας, όταν κάποιες συμβολοσειρές ταιριάζουν σε περισσότερες της μίας κανονικής έκφρασης και υπάρχει σύγχυση για το ποια είδους ενέργεια θα εκτελεστεί υπάρχουν 2 σαφείς κανόνες προτεραιότητας: o o Ο λεξικός αναλυτής έχει την τάση να δημιουργεί / αναγνωρίζει τη μεγαλύτερη δυνατού μήκους λεξική μονάδα από την ακολουθία συμβόλων που δέχεται ως είσοδο. Για λεξικές μονάδες ίδιου μήκους, δηλαδή για συμβολοσειρές που ταιριάζουν σε περισσότερες της μίας κανονικής έκφρασης, προτεραιότητα έχει εκείνη η κανονική έκφραση που είναι γραμμένη υψηλότερα στο αρχείο περιγραφής άρα και εκτελείται η αντίστοιχη ενέργεια της. Στο μέρος Γ περιλαμβάνεται κώδικας σε C. Συνήθως σε αυτό το μέρος υλοποιούνται οι βοηθητικές συναρτήσεις που καλούνται από το μέρος Β και, αν ο παραγόμενος κώδικας λειτουργεί ως αυτόνομο πρόγραμμα, τότε στο μέρος αυτό περιλαμβάνεται και η συνάρτηση main().

Παραδείγματα αρχείων περιγραφής του lex 1 o ) Παράδειγμα Το παρακάτω αρχείο περιγραφής ορίζει έναν λεξικό αναλυτή που αναγνωρίζει αναγνωρίζει ψηφία σε επανάληψη με το [0-9]+ (άρα κάθε πιθανό αριθμό) το σύμβολο «+» (και όχι το μετασύμβολο +) τους διαχωριστές [ \f\n\r\t]+(αλλαγή γραμμής, κενό κτλ) και οποιοδήποτε άλλο χαρακτήρα του κώδικα ASCII εκτός της αλλαγής γραμμής με την τελεία. %{ #include <stdio.h> %} [0-9]+ { printf("%s\n",yytext);} "+" { printf("%s\n",yytext);} [ \f\n\r\t]+ {printf("%s",yytext);}. { printf(".agnostos xaraktiras: %s\n",yytext);} int yywrap(){ return 1; } void main(void) { yylex(); } Οδηγίες Εκτέλεσης 1. flex file.l 2. gcc lex.yy.c -lfl 3../a.out

Ασκήσεις 1 η )Σωστού Λάθους. Κρίνετε αν οι παρακάτω προτάσεις είναι σωστές ή λανθασμένες. Α) Το lex είναι ένα εργαλείο κατασκευής Συντακτικών αναλυτών. Β) Η δημιουργία ενός λεξικού αναλυτή, ξεκινά με τη σύνταξη ενός αρχείου περιγραφής που διοχετεύεται ως είσοδος στο lex. Γ) Ο κώδικας που προκύπτει από τη Λεξική ανάλυση είναι ένα πρόγραμμα γραμμένο σε c, το οποίο αποθηκεύεται στο αρχείο με όνομα lexyy.c ή lex.yy.c Δ) Η yylex() είναι η συνάρτηση η οποία υλοποιεί τον Λεξικό αναλυτή. Ε) Η yytext είναι η μεταβλητή που περιέχει τη συμβολοσειρά εισόδου. Ζ) Το αρχείο περιγραφής που δίνεται ως είσοδος στο lex περιέχει τέσσερα μέρη, τα οποία χωρίζονται με την ακολουθία χαρακτήρων &&. Η) Στο μέρος Α του αρχείου περιγραφής που δίνεται ως είσοδος στο lex περιλαμβάνονται μεταξύ άλλων και κώδικάς σε c που περικλείεται από %{ και %}. Θ) Στο μέρος Β του αρχείου περιγραφής που δίνεται ως είσοδος στο lex περιλαμβάνονται μεταξύ άλλων οι δηλώσεις μνημονικών ονομάτων ως συντομογραφίες για κανονικές εκφράσεις που χρησιμοποιούνται στο μέρος Γ.

Ι) Στο μέρος Γ του αρχείου περιγραφής που δίνεται ως είσοδος στο lex περιλαμβάνεται υποχρεωτικά η συνάρτηση main(). Κ) Για τις περιπτώσεις ασάφειας, όταν κάποιες συμβολοσειρές ταιριάζουν σε περισσότερες της μίας κανονικής έκφρασης και υπάρχει σύγχυση για το ποια είδους ενέργεια θα εκτελεστεί υπάρχουν 3 σαφείς κανόνες προτεραιότητας. Λ) Ένας από τους κανόνες προτεραιότητας σε περιπτώσεις ασάφειας λέει ότι, ο λεξικός αναλυτής έχει την τάση να δημιουργεί / αναγνωρίζει τη μικρότερη δυνατού μήκους λεξική μονάδα από την ακολουθία συμβόλων που δέχεται ως είσοδο. Μ) Ένας από τους κανόνες προτεραιότητας σε περιπτώσεις ασάφειας λέει ότι, για λεξικές μονάδες ίδιου μήκους, δηλαδή για συμβολοσειρές που ταιριάζουν σε περισσότερες της μίας κανονικής έκφρασης, προτεραιότητα έχει εκείνη η κανονική έκφραση που είναι γραμμένη υψηλότερα στο αρχείο περιγραφής άρα και εκτελείται η αντίστοιχη ενέργεια της. 2 η )Συσχέτισης. Στις παρακάτω ασκήσεις δίνεται το μέρος Β αρχείων περιγραφής λεξικών αναλυτών. Έχοντας στο νου σας τους δύο βασικούς κανόνες προτεραιότητας προσπαθήστε να συσχετίσετε τις εισόδους που δέχεται ο λεξικός αναλυτής με τις εξόδους που αυτός θα εκτυπώσει. Είναι δυνατόν να μην υπάρχει συσχέτιση ή να υπάρχει πολλαπλή συσχέτιση ανάμεσα στα στοιχεία των δύο στηλών. Α) Μέρος Β: 1[03-67]5 {printf("1\n ");} [2-7]{2,3} {printf("2\n ");} [0-9]+[A-Za-z]* {printf("3\n ");}.?? {printf("4\n ");} [^a-cy]{ 3,6 } {printf("5\n ");}

Είσοδοι: i) 1675 ii).? iii) 431 iv) test v) 3+21 232 Είσοδος Αντιστοιχίστε Έξοδος 1675 1.? 2 431 3 Test 4 3+21 232 5 Β) Μέρος Β: [34-78] {printf("1\n");} [0-9] [0-9]?[0-9]* {printf("2\n ");}. {printf("3\n ");} [^42]{4,6} {printf("4\n "); } [A-Z][A-Za-z][a-z]* {printf("5\n ");} Είσοδοι: i) 45 ii) 10 Ι0ΥΝΙΟΥ iii) Iounios10 iv) Yacc125 v) Hello WORLD Είσοδος Αντιστοιχίστε Έξοδος 45 1 10 IOYNIOY 2 Iounios10 3 Yacc125 4 Hello WORLD 5

Γ) Μέρος Β: [13-59] {printf( 1\n );} [0-9]?[0-9] { printf( 2\n );} [.] {printf( 3\n );} [0-9]*[Α-Ζa-z]+[a-o]? [^3]* [A-U]E+L{1,3}[F-Z]? {printf( 4\n );} {printf( 5\n );} {printf( 6\n );} Είσοδοι: i) 19, ii) 4, iii) HELLO iv) HELLO WORLD, v) 6004353 Είσοδος Αντιστοιχίστε Έξοδος 1 19 4 2 HELLO 3 HELLO WORLD 4 6004353 5 6 Δ) Μέρος Β: [23-67] {printf( 1\n );} [0-9][a-z]*[0-9]+ { printf( 2\n );}. {printf( 3\n );} [0-9]+ {printf( 4\n );}

x [A-U]E?L{2}[F-W] {printf( 5\n );} {printf( 6\n );}.* {printf( 7\n ); } Είσοδοι: i) 4, ii) 49, iii) 266, iv) HELLO, v) HELLO WORLD Είσοδος 4 49 266 HELLO HELLO WORLD Αντιστοιχίστε Έξοδος 1 2 3 4 5 6 7 3 η )Σύντομης απάντησης. Δημιουργήστε αρχείο περιγραφής που ορίζει λεξικό αναλυτή ο οποίος: Α) Αναγνωρίζει και εκτυπώνει ι) όλους τους αριθμούς ακεραίους και δεκαδικούς, με πρόσημο ή χωρίς, ιι) όλα τα ονόματα μεταβλητών.

Β) Επισυνάπτει αριθμούς γραμμής στο κείμενο που δέχεται ως είσοδο και εκτυπώνει το αποτέλεσμα στην οθόνη. Γ) Αναγνωρίζει ι) γραμμές σε ένα κείμενο που αρχίζουν από «α» ιι) γραμμές σε ένα κείμενο που τελειώνουν σε «α» ιιι) όλες τις υπόλοιπες γραμμές. Στην οθόνη να εμφανίζονται μόνο οι δύο πρώτες περιπτώσεις (βοήθεια: στην τρίτη περίπτωση αρκεί να βάλετε κενή ενέργεια {}).

Δ) Τροποποιήστε τον Λεξικό Αναλυτή της προηγούμενης άσκησης (Γ) έτσι ώστε στο τέλος της λειτουργίας του να μας ενημερώνει πόσες από τις γραμμές του κειμένου που ανέλυσε αρχίζουν από «α» και πόσες τελειώνουν σε «α»(βοήθεια: δηλώστε δύο μετρητές count1 και count2 οι οποίοι θα αυξάνουν κάθε φορά που αναγνωρίζεται η αντίστοιχη σειρά). Συμπληρωματική ερώτηση: Τι θα μετρήσει στην περίπτωση που μια σειρά και αρχίζει και τελειώνει με «α»;