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

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

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

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

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

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

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

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

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

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

Στοιχεία Θεωρίας Υπολογισµού (2): Πεπερασµένα Αυτόµατα, Κανονικές Εκφράσεις

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

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

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

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

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

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

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

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

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

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Εργαστηριακή Άσκηση Αρχές Γλωσσών Προγραμματισμού Εαρινό εξάμηνο 2011

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

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

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Αποτελέσματα προόδου

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

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

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

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

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Προγραμματισμός PASCAL

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

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

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

ιαφάνειες παρουσίασης #4

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

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

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

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

Λογισµικό (Software SW) Γλώσσες

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ:

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος

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

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

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

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

Σειρά Προβλημάτων 1 Λύσεις

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

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

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

Μεταγλωττιστές Βελτιστοποίηση

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

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

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

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

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

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

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

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

Μονάδες 4. β. x=20 και y=10

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

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

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

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

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

Pascal. 15 Νοεμβρίου 2011

Computing. Νοέμβριος Έκδοση 1.0

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

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

ιαφάνειες παρουσίασης #3

Δομές ελέγχου. ομαδοποίηση εντολών εκτέλεση εντολών υπό συνθήκη επανάληψη εντολών

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

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

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

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαµήνου: Υλοποίηση ενός Μεταγλωττιστή για τη γλώσσα προγραµµατισµού Robin

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

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

Transcript:

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2011-2012 Γιάννης Γαροφαλάκης, Καθηγητής Αθανάσιος Ν.Νικολακόπουλος, Υποψήφιος Διδάκτορας 28 Μαρτίου 2012 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές της λεκτικής και συντακτικής ανάλυσης. Η εργασία αποτελείται από ένα θεωρητικό μέρος που αφορά τα βασικά θεωρητικά εργαλεία που πρέπει κανείς να γνωρίζει πριν καταπιαστεί με την υλοποίηση ενός λεκτικού/συντακτικού αναλυτή και έπειτα σας ζητά να φτιάξετε με την βοήθεια των μεταεργαλείων flex και bison έναν parser για μία απλή γλώσσα προγραμματισμού. Θεωρητικό Τμήμα Ζήτημα 1 Αυτόματα και Κανονικές Γλώσσες 1. Να σχεδιαστεί ένα ντετερμινιστικό πεπερασμένο αυτόματο και μία κανονική έκφραση που να αναγνωρίζουν τη γλώσσα L με αλφάβητο Σ = {0, 1}, η οποία αποτελείται από συμβολοσειρές που περιέχουν υποχρεωτικά μία και μόνο μία φορά την υποσυμβολοσειρά 000. Για παράδειγμα, οι συμβολοσειρές: 10001011, 010110001, 000 ανήκουν στην L, ενώ οι συμβολοσειρές 1000011, 111, 10100 όχι. 2. Να σχεδιαστεί ένα ντετερμινιστικό πεπερασμένο αυτόματο, που να αναγνωρίζει τη γλώσσα L με αλφάβητο Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} που αποτελείται από την δεκαδική αναπαράσταση όλων των φυσικών αριθμών που διαιρούνται ακριβώς με το 3. Υπενθυμίζεται ότι ένας φυσικός αριθμός διαιρείται ακριβώς με το 3, αν και μόνο αν το άθροισμα των ψηφίων του (στο δεκαδικό σύστημα αρίθμησης) διαιρείται ακριβώς με το 3. (Το αυτόματο δεν πρέπει να αναγνωρίζει την κενή συμβολοσειρά. Επίσης, για απλοποίηση επιτρέπεται η ύπαρξη μηδενικών στην αρχή ενός φυσικού αριθμού.) 3. Έστω ότι Σ = {a, b}. Να βρεθεί μία κανονική έκφραση που να παράγει τη γλώσσα L η οποία αποτελείται από όλες τις λέξεις w όπου αρχίζουν και τελειώνουν με b, και δεν περιέχουν ποτέ την υπολέξη bab.

Εργαστηριακή Άσκηση 2011-2012 2 4. ***(bonus) Σχεδιάστε ένα ντετερμινιστικό πεπερασμένο αυτόματο που αποδέχεται τις συμβολοσειρές δυαδικών αριθμών w που έχουν την εξής ιδιότητα: αν τις διαβάσεις από το τέλος προς την αρχή παίρνεις ένα δυαδικό ακέραιο που διαιρείται ακριβώς με το 5. Για παράδειγμα, το αυτόματο αποδέχεται την συμβολοσειρά 10011, επειδή όταν την αντιστρέψεις παίρνεις (11001) 2 = (25) 10, που είναι πολλαπλάσιο του 5. Ζήτημα 2 Γραμματικές 1. Δίνεται η παρακάτω γραμματική σε συμβολισμό EBNF που περιγράφει, χωρίς πολλές λεπτομέρειες, τους ορισμούς συναρτήσεων της C και ένα μικρό υποσύνολο των εντολών της. (Παραλείπονται οι ορισμοί των μη τερματικών συμβόλων simple, formals και expr.) <decl> ::= <result> <id> ( <formals> ) { <stmt> } <result> ::= <type> void <stmt> ::= <simple> break ; continue ; return [ <expr> ] ; while ( <expr> ){ <stmt> } swit ( <expr> ) { <stmt> } Στη γραμματική αυτή, λείπουν οι εξής περιορισμοί που επιβάλλει η γλώσσα C: Στο εσωτερικό μιας συνάρτησης που επιστρέφει void δεν μπορεί να εμφανίζεται η εντολή return συνοδευόμενη από έκφραση. Στο εσωτερικό μιας συνάρτησης που δεν επιστρέφει void, αν εμφανίζεται η εντολή return θα πρέπει να συνοδεύεται από έκφραση. Η εντολή break μπορεί να εμφανίζεται μόνο στο εσωτερικό μιας εντολής while ή μιας εντολής swit. Η εντολή continue μπορεί να εμφανίζεται μόνο στο εσωτερικό μιας εντολής while. Να τροποποιήσετε κατάλληλα την παραπάνω γραμματική ώστε οι παραγόμενες συμβολοσειρές να πληρούν αυτούς τους περιορισμούς. 2. Θεωρήστε την παρακάτω γραμματική: <S> ::= [ <S> <X> ] a <X> ::= ϵ + <S> <Y> <Y> b <Y> ::= ϵ - <S> <X> c (αʹ) Να υπολογίσετε τα σύνολα FIRST, FOLLOW και PREDICT για την παραπάνω γραμματική. Είναι η γλώσσα LL(1)? Δικαιολογήστε την απάντησή σας.

Εργαστηριακή Άσκηση 2011-2012 3 (βʹ) Να φτιάξετε τον πίνακα συντακτικής ανάλυσης για την παραπάνω γλώσσα (όπως στην εικόνα 2.19 του βιβλίου του Sco ). Να περιγράψετε την εκτέλεση της καθοδικής συντακτικής ανάλυσης για μία είσοδο της επιλογής σας με τουλάχιστον 7 χαρακτήρες (βλέπε εικόνα 2.20 του βασικού συγγράμματος). Θεωρείστε, τέλος, έναν συντακτικό αναλυτή αναδρομικής κατάβασης που εκτελείται με την ίδια είσοδο. Να περιγράψετε συνοπτικά τα περιεχόμενα της στοίβας εκτέλεσης του αναλυτή κατά τη διάρκεια αναγνώρισης της εισόδου. 3. Τί είναι η σύγκρουση ολίσθησης-ελάττωσης (shi -reduce conflict); Πώς επιλύεται στα διάφορα είδη συντακτικών αναλυτών της οικογένειας LR; Δείξτε πως η παρακάτω γραμματική είναι LR(1) αλλά όχι SLR(1): <S> ::= a <A> b <A> c d c b d a <A> ::= d Υλοποιηση: Parser της γλώσσας Buzen Να φτιάξετε έναν λεκτικό και συντακτικό αναλυτή για την παρακάτω γλώσσα της οποίας η περιγραφή σε σημειογραφία EBNF δίνεται παρακάτω: <program> ::= program <id> ; <block>. <block> ::= ( <local-definition> ) <compound-statement> <local-definition> ::= <variable-definition> <procedure-definition> <function-definition> <variable-definition> ::= var ( <def-some-variables> ; ) + <def-some-variables> ::= <id> (, <id> ) : <data-type> <procedure-definition> ::= <procedure-header> <block> ; <procedure-header> ::= procedure <id> <formal-parameters> ; <function-definition> ::= <function-header> <block> ; <function-header> ::= function <id> <formal-parameters> : <data-type> ; <formal-parameters> ::= [ ( <formal-parameter> ( ; <formal-parameter> ) ) ] <formal-parameter> ::= <id> (, <id> ) : <data-type> <data-type> ::= integer boolean

Εργαστηριακή Άσκηση 2011-2012 4 <statement> ::= <assignment> <if-statement> <while-statement> <proc-func-call> <compound-statement> <assignment> ::= <id> := <expression> <if-statement> ::= if <expression> then <statement> [ else <statement> ] <while-statement> ::= while <expression> do <statement> <proc-func-call> ::= <id> [ ( <actual-parameters> ) ] <actual-parameters> ::= <expression> (, <expression> ) <compound-statement> ::= begin [ <statement> ( ; <statement> ) ] end <expression> ::= <expression> <binary-operator> <expression> <unary-operator> <expression> <proc-func-call> ( <expression> ) <integer-constant> <id> <binary-operator> ::= = <> or and < > >= <= + - * div mod <unary-operator> ::= + - not Για την παραπάνω γλώσσα η έγκυρη μορφή των αναγνωριστικών καθώς και η προτεραιότητα των τελεστών θεωρούμε πως ακολουθούν τους αντίστοιχους κανόνες της γλώσσας C. Επίσης, η γλώσσα buzen υποστηρίζει την ύπαρξη C-like σχολίων σε οποιοδήποτε σημείο του προγράμματος (/* sxolio */). Σημειώνεται τέλος ότι η γραμματική της γλώσσας, στη μορφή που δίνεται, δεν ανήκει στον τύπο LL(1). Κατά συνέπεια για να μπορεί να χρησιμοποιηθεί στην κατασκευή συντακτικού αναλυτή αναδρομικής κατάβασης θα πρέπει να τροποποιηθεί κατάλληλα. 1. Να υλοποιηθεί ένας προεπεξεργαστής και ένας λεκτικός και συντακτικός αναλυτής για την παραπάνω γλώσσα με χρήση των μεταεργαλείων flex και bison. Ο parser που θα υλοποιήσετε θα πρέπει να δέχεται ως είσοδο ένα κείμενο γραμμένο στην παραπάνω γλώσσα το οποίο θα έχει κατάληξη ".buz" και θα ελέγχει αν το πρόγραμμα είναι συντακτικά ορθό. Αρχικά θα καλείται ο προεπεξεργαστής ο οποίος θα παίρνει ως είσοδο ένα πρόγραμμα γραμμένο στην παραπάνω γλώσσα και θα παράγει ένα ενδιάμεσο πρόγραμμα χωρίς σχόλια, το οποίο θα δίνεται ως είσοδος για λεκτική και συντακτική ανάλυση. Ο συνολικός parser θα καλείται από τη γραμμή εντολών ως εξής:

Εργαστηριακή Άσκηση 2011-2012 5 prompt> myparser.exe file.buz και θα επιστρέφει διαγνωστικό μήνυμα για το αν ήταν ορθά γραμμένο, ή κατάλληλο μήνυμα σφάλματος ( Θα πρέπει να φαίνεται η γραμμή όπου υπάρχει το σφάλμα) Παρατηρήσεις - Διαδικαστικά Για τη χρήση των εργαλείων Flex και Bison μπορείτε να βρείτε πληροφορίες στη σελίδα του μαθήματος. Για την άσκηση μπορείτε να δουλέψετε σε ομάδες έως 4 ατόμων. Η βαθμολογία της άσκησης προκύπτει μετά από ατομική προφορική εξέταση που αφορά τόσο τις λεπτομέρειες της υλοποίησης όσο και την ύλη που καλύπτεται από το θεωρητικό τμήμα της άσκησης. Ώς ημερομηνία παράδοσης της άσκησης ορίζεται η ημερομηνία γραπτής εξέτασης περιόδου Ιουνίου και Σεπτεμβρίου αντίστοιχα. Παραδοτέα Γραπτή Τυπωμένη Αναφορά που περιλαμβάνει: Τις αναλυτικές λύσεις του θεωρητικού τμήματος μαζί με τις απαραίτητες επεξηγήσεις και τεκμηριώσεις όπου αυτό είναι απαραίτητο. Τα αρχεία περιγραϕής της γλώσσας, τα οποία δίνονται ως είσοδος στα μεταεργαλεία Flex και Bison. Screenshots παραδειγμάτων εϕαρμογής του parser. Ένα αρχείο zip, rar, tar.gz που περιλαμβάνει: Την αναφορά σε ηλεκτρονική μορφή Όλα τα αρχεία που αφορούν την υλοποίηση (συμπεριλαμβανομένων των αρχείων που δόθηκαν σαν είσοδο στον parser για να ελεγχθεί η σωστή λειτουργία του). Το αρχείο zip (ή tar.gz) πρέπει να έχει όνομα τους αριθμούς μητρώου των ατόμων της ομάδας διαχωρισμένα με το χαρακτήρα _ από τον μικρότερο στο μεγαλύτερο (π.χ. 3000_3543_4788_4972.zip), και να σταλεί (ΥΠΟΧΡΕΩΤΙΚΑ) με email στο nikolako@ με θέμα ASKISI ARXES GLWSSWN. Στο μήνυμα να αναφέρονται τα ονοματεπώνυμα, το έτος και οι αντίστοιχοι αριθμοί μητρώου των μελών της ομάδας. Για τυχόν απορίες σχετικά με την άσκηση τηρούνται ώρες γραφείου Δευτέρες 12:00-14:00 στο γραφείο του υποψήφιου διδάκτορα Θάνου Νικολακόπουλου στα ΠΡΟΚΑΤ δίπλα στο γραφείο του κ.τσακαλίδη.