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

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

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

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

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

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

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

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

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

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

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

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

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

Συνδυαστικά Λογικά Κυκλώματα

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

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

Η δυαδική σχέση M ( «παράγει σε ένα βήμα» ) ορίζεται ως εξής: (q, w) M (q, w ), αν και μόνο αν w = σw, για κάποιο σ Σ

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

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

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα

Θέματα Μεταγλωττιστών

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

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

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

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

Θέματα Μεταγλωττιστών

HEAD INPUT. q0 q1 CONTROL UNIT

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

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

Πληροφορική. Ενότητα 4 η : Κωδικοποίηση & Παράσταση Δεδομένων. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Ελίνα Μακρή

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

Αριθμητικά Συστήματα = 3 x x x x 10 0

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

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

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3

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

Πρόβλημα 29 / σελίδα 28

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

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

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

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

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

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

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Εξετάσεις Προσομοίωσης 24/04/2019

1. Μία συνάρτηση δεν μπορεί να έχει παραπάνω από μία παραμέτρους.

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

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

Αριθμητική Ανάλυση και Εφαρμογές

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

Φροντιστήριο 9 Λύσεις

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

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

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης;

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

Κεφ 2. Βασικές Έννοιες Αλγορίθμων

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

Αριθμητική Ανάλυση & Εφαρμογές

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

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

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Επαναληπτικό διαγώνισμα στην Α.Ε.Π.Π - 18 / Απριλίου / 2010 ΘΕΜΑ 1

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

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

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

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

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

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

Κ15 Ψηφιακή Λογική Σχεδίαση 2: Δυαδικό Σύστημα / Αναπαραστάσεις

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

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

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

Φροντιστήριο 10 Λύσεις

CSC 314: Switching Theory

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 7 και 8: Αναπαραστάσεις. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Κατ οίκον Εργασία ΚE5

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

Θέματα Μεταγλωττιστών

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. 5 ο Μάθημα. Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ. url:

Γράψτε ένα πρόγραμμα που θα προσομοιώνει τη ρίψη ενός νομίσματος και θα εμφανίζει στην οθόνη Κορώνα» ή «Γράμματα».

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

Οργάνωση Υπολογιστών

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

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

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

επιµέλεια Θοδωρής Πιερράτος

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

Transcript:

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Πρώτη Σειρά Ασκήσεων 27 Οκτωβρίου 2016 Μέρος Α. (χειρόγραφη και ηλεκτρονική παράδοση 11 Νοεμβρίου) Άσκηση 1: Θεωρήστε το ακόλουθο παιχνίδι τύπου φλίπερ: Έχουμε ένα ταμπλώ στο οποίο υπάρχουν τέσσερεις τρύπες, a, b, c και d, και στο οποίο εισάγονται διαδοχικές μπίλιες. Η επόμενη μπίλια εισάγεται μόλις η προηγούμενη πέσει σε μία από τις τρύπες. Αν μια μπίλια πέσει στην τρύπα b, τότε αυτή κλείνει, μέχρι κάποια επόμενη μπίλια να πέσει στην τρύπα a. Η τρύπα a κλείνει μόλις πέσουν σε αυτήν 2 μπίλιες, ενώ η c κλείνει μόλις πέσουν σε αυτήν 3 μπίλιες. Η τρύπα d είναι αρχικά κλειστή, και ανοίγει μόνο όταν πέσουν στην b 2 μπίλιες. Οι υπόλοιπες τρύπες είναι αρχικά ανοικτές. Το παιχνίδι τελειώνει μόλις κλείσουν οι τρύπες a και c. Μοντελοποιήστε το παιχνίδι ως ένα ΝΠΑ, με αλφάβητο εισόδου το {a, b, c, d} και κατάλληλες καταστάσεις και μεταβάσεις μεταξύ αυτών, ώστε να έχετε αναγνώριση των συμβολοσειρών που αντιστοιχούν σε διαδοχικές τρύπες ενός ολοκληρωμένου παιχνιδιού. Για παράδειγμα, η συμβολοσειρά abcabdcdc πρέπει να αναγνωρίζεται, ενώ οι συμβολοσειρές ε, aa, adbcabcc, ababdcbdcdc πρέπει να απορρίπτονται από το ΝΠΑ. Να ελαχιστοποιήσετε το ΝΠΑ που κατασκευάσατε. Άσκηση 2: Α. Θεωρήστε την κατασκευή Thompson για αναγωγή μιας ΚΕ σε ΜΠΑ-ε. Η κατασκευή αυτή οδηγεί σε μεγάλο αριθμό καταστάσεων που αυξάνει απαγορευτικά την πολυπλοκότητα περαιτέρω επεξεργασίας. Μελετήστε τις ακόλουθες απλές βελτιστοποιήσεις που μειώνουν σημαντικά τον αριθμό των παραγόμενων καταστάσεων: (α) ε a a (β) a ε a (γ) ε a όπου a οποιοδήποτε σύμβολο του αλφαβήτου του ΠΑ ή το ε. a

2 Αν οι παραπάνω περιπτώσεις αντιστοιχούν σε αποσπάσματα κάποιων ΠΑ, και επομένως είναι πιθανό οι παραπάνω καταστάσεις να συνδέονται με άλλες, εξηγήστε κάτω από ποιες προϋποθέσεις συνδέσεων μπορούν να πραγματοποιούνται αυτές οι βελτιστοποιήσεις, δίνοντας παραδείγματα στα οποία αυτές οι βελτιστοποιήσεις οδηγούν σε σφάλμα. Β. Δώστε μια ΚΕ που να περιγράφει τις συμβολοσειρές στο αλφάβητο {a, b, c} της γλώσσας {a n b m c k, όπου n+m+k άρτιος για μεταβλητούς ακέραιους n,m,k}. Για παράδειγμα, οι συμβολοσειρές ε, ab, abbccc ανήκουν στη γλώσσα, ενώ οι συμβολοσειρές acca, abc, aabcc δεν ανήκουν σε αυτήν. Γ. Με βάση την ΚΕ που βρήκατε, χρησιμοποιήστε την κατασκευή Thompson χωρίς βελτιστοποιήσεις για να σχεδιάστε ένα ΜΠΑ-ε για την αναγνώριση των παραπάνω συμβολοσειρών. Να μετατρέψετε το ΠΑ που βρήκατε σε ντετερμινιστικό με τον ελάχιστο αριθμό καταστάσεων. Δ. Στη συνέχεια χρησιμοποιήστε τις παραπάνω βελτιστοποιήσεις για να πάρετε ένα απλούστερο ΠΑ από το ΜΠΑ-ε που κατασκευάσατε στο προηγούμενο ερώτημα. Να μετατρέψετε το ΠΑ αυτό σε ντετερμινιστικό με τον ελάχιστο αριθμό καταστάσεων, και να επαληθεύσετε ότι καταλήξατε στο ίδιο ελάχιστο ΝΠΑ όπως προηγουμένως. Άσκηση 3: Να σχεδιάσετε τρία ΝΠΑ σε μορφή γράφου μετάβασης που να αναγνωρίζουν τις συμβολοσειρές των γλωσσών με αλφάβητο {0, 1} και τους παρακάτω περιορισμούς ανά περίπτωση: 1. Μεταξύ δύο 1 υπάρχει πάντα μη μηδενικός αριθμός από συνεχόμενα 0, ο οποίος είναι πολλαπλάσιο του 3 ή πολλαπλάσιο του 5, πχ. οι συμβολοσειρές ε, 00, 01, 10001, 01000100000100 αναγνωρίζονται, ενώ οι 11, 0100100000100 απορρίπτονται. 2. Οι ακολουθίες 010 και 111 εμφανίζονται ακριβώς δύο φορές η καθεμία (όχι απαραίτητα σε διαφορετική ακολουθία ψηφίων), πχ. οι συμβολοσειρές 0101001111, 0100101110111, 11100100111010 αναγνωρίζονται, ενώ οι ε, 11101000111, 01010111000 απορρίπτονται. 3. Η τιμή του (μη προσημασμένου) δυαδικού αριθμού που σχηματίζεται από τη συμβολοσειρά καθώς διαβάζεται από αριστερά προς τα δεξιά είναι είτε πολλαπλάσιο του 6 είτε πολλαπλάσιο του 4, πχ. οι συμβολοσειρές 0100, 110, 10010 αναγνωρίζονται, ενώ οι ε, 00, 1100, 11101 απορρίπτονται. Στη συνέχεια να ελαχιστοποιήσετε τα τρία ΝΠΑ που βρήκατε, και να τα ανάγετε σε αντίστοιχες κανονικές γραμματικές και κανονικές εκφράσεις. Άσκηση 4: Θεωρήστε την ΚΕ: (a b c)*a(a b c)(a b c) (a b c) η οποία έχει στο τέλος τον όρο (a b c) n-1 φορές, και περιγράφει στο αλφάβητο { a, b, c } τη γλώσσα από συμβολοσειρές στις οποίες το n-στό σύμβολο από το τέλος είναι το a. Πόσες τουλάχιστον καταστάσεις θα πρέπει να έχει οποιοδήποτε ΝΠΑ αναγνωρίζει τις συμβολοσειρές της παραπάνω ΚΕ και γιατί; Πώς αλλάζει η απάντησή σας, αν ο n-στός όρος από το τέλος γίνει (a b) αντί a και γιατί; Πώς αλλάζουν οι απαντήσεις σας, αν στο τέλος των ΚΕ των δύο περιπτώσεων προστεθεί ο όρος (a b c)* και γιατί; Άσκηση 5: Έστω η γραμματική χωρίς συμφραζόμενα (ΓΧΣ) με τους παρακάτω κανόνες: Ε Ε,Ε Ε=Ε Ε+Ε Ε-Ε Ε*Ε Ε/Ε E(Ε) E[E]

3 +Ε -Ε *E (E) id η οποία παράγει αριθμητικές εκφράσεις με ονόματα, δείκτες, πίνακες και συναρτήσεις. Οι εκφράσεις της γραμματικής είναι πολύ γενικές και περιλαμβάνουν περιπτώσεις που συνήθως δεν επιτρέπουμε σε γλώσσες προγραμματισμού. Έτσι, αν θέλουμε να αφαιρέσουμε τέτοιες περιπτώσεις, πρέπει να ξαναγράψουμε τη γραμματική για το υποσύνολο της γλώσσας που μας ενδιαφέρει. Α. Γράψτε μια νέα ΓΧΣ με βάση την παραπάνω, η οποία να μην περιλαμβάνει τις εκφράσεις στις οποίες ένας τελεστής προσήμου ακολουθεί άμεσα άλλον τελεστή αριθμητικής πράξης. Για παράδειγμα, ενώ επιτρέπεται η έκφραση id=-id ή η έκφραση id[-id], δεν επιτρέπεται η έκφραση id+-id, αλλά επιτρέπεται η έκφραση id+(-id). Β. Στη συνέχεια, γράψτε μια νέα ΓΧΣ με βάση την προηγούμενη, η οποία να μην επιτρέπει σε αριστερό μέλος ανάθεσης άλλες εκφράσεις εκτός από ονόματα, δείκτες και πίνακες, εκτός αν προηγείται ο διαχωριστικός τελεστής,. Για παράδειγμα, ενώ επιτρέπεται η έκφραση id[-id*id]=id-id ή η έκφραση id,id=id-id, δεν επιτρέπεται η έκφραση id*id=id-id, αλλά επιτρέπεται η έκφραση id*(id=id)-id. Γ. Μετατρέψτε την τελευταία ΓΧΣ που γράψατε σε ισοδύναμη μη διφορούμενη ΓΧΣ, η οποία να παράγει τις συμβολοσειρές με τη συνήθη προτεραιότητα και προσεταιριστικότητα των αλγεβρικών πράξεων, και το πρόσημο να έχει χαμηλότερη προτεραιότητα από τις πράξεις του πολλαπλασιασμού και της διαίρεσης. Ο διαχωριστικός τελεστής, να έχει την ελάχιστη προτεραιότητα και αριστερή προσεταιριστικότητα, ενώ ο τελεστής ανάθεσης = να έχει την επόμενη ελάχιστη προτεραιότητα και δεξιά προσεταιριστικότητα. Οι τελεστές δείκτη, πίνακα και κλήσης συνάρτησης να έχουν μέγιστη προτεραιότητα και αριστερή προσεταιριστικότητα. Δ. Δώστε από μία αριστερότερη παραγωγή για την αρχική γραμματική και καθεμία από τις γραμματικές των προηγούμενων ερωτημάτων, για την είσοδο: id[id**id+id]=*(id,+id[-id]*id)=-id,id=id/*id(id)[+*id] Άσκηση 6: Θεωρήστε τις γλώσσες των παρακάτω συμβολοσειρών στο αλφάβητο {0,1}: 1. Συμβολοσειρές της μορφής 0 n 1 m 1 m 0 n, όπου n,m 0, πχ. οι συμβολοσειρές 0000, 0001111000, 111111 ανήκουν στη γλώσσα, ενώ οι 000, 00111111000 δεν ανήκουν σ αυτήν. 2. Συμβολοσειρές της μορφής 1 n 0 m 1 m 0 n, όπου n,m 0, πχ. οι συμβολοσειρές 10, 110100, 1100011100 ανήκουν στη γλώσσα, ενώ οι 1001, 1000110 δεν ανήκουν σ αυτήν. 3. Συμβολοσειρές στις οποίες κάθε 0 ακολουθείται από τουλάχιστον δύο 1, πχ. οι συμβολοσειρές ε, 11, 0111011 ανήκουν στη γλώσσα, ενώ οι 00, 010111 δεν ανήκουν σε αυτήν. 4. Συμβολοσειρές της μορφής αα για τυχαία συμβολοσειρά α, πχ. οι συμβολοσειρές ε, 0101, 0011000110 ανήκουν στη γλώσσα, ενώ οι 01, 10101, 0111001 δεν ανήκουν σε αυτήν. 5. Συμβολοσειρές της μορφής αβ για τυχαίες συμβολοσειρές α και β που όμως έχουν το ίδιο μήκος και α β, πχ. οι συμβολοσειρές 01, 0100, 11011100 ανήκουν στη γλώσσα, ενώ οι ε, 001, 1010 δεν ανήκουν σε αυτήν. Να εξετάσετε αν οι παραπάνω γλώσσες είναι κανονικές. Για όσες είναι κανονικές γλώσσες, να δώσετε ΚΓ που να τις παράγουν, καθώς και ΝΠΑ που να τις αναγνωρίζουν, ενώ στη συνέχεια, και για τις δοθείσες συμβολοσειρές, να δείξετε τις αντίστοιχες κινήσεις των ΝΠΑ και από μία αριστερότερη παραγωγή των ΚΓ. Για τις υπόλοιπες, να εξηγήσετε επαρκώς γιατί δεν είναι κανονικές, και στη συνέχεια, να εξετάσετε αν είναι γλώσσες χωρίς συμφραζόμενα. Για όσες από αυτές είναι γλώσσες χωρίς συμφραζόμενα, να δώσετε ΓΧΣ που να τις παράγουν, καθώς και ΑΣ που να τις αναγνωρίζουν, ενώ στη συνέχεια, και για τις δοθείσες συμβολοσειρές, να δείξετε τις αντίστοιχες κινήσεις των ΑΣ και από μία αριστερότερη παραγωγή των

4 ΓΧΣ. Για τις υπόλοιπες γλώσσες, να εξηγήσετε επαρκώς γιατί δεν είναι γλώσσες χωρίς συμφραζόμενα. Άσκηση 7 (προαιρετική αν παραδοθεί το Μέρος Β): Να γράψετε και να παραδώσετε ηλεκτρονικά ένα πρόγραμμα C το οποίο να προσομοιώνει ένα τυχαίο ΠΑ που να διαβάζει από κατάλληλο αρχείο κειμένου. Ειδικότερα, το αρχείο κειμένου πρέπει να έχει την ακόλουθη μορφή: Κάθε γραμμή αντιστοιχεί σε μία κατάσταση, έτσι ώστε κάθε κατάσταση αναφέρεται με τον αριθμό γραμμής του αρχείου. Στην αρχή μιας γραμμής υπάρχει είτε ο χαρακτήρας Τ για τελική κατάσταση, είτε ο χαρακτήρας Ν για μη τελική κατάσταση. Ακολουθεί το πλήθος μεταβάσεων από την κατάσταση. Για κάθε μετάβαση ακολουθεί πάντα στην ίδια γραμμή το σύμβολο μετάβασης σε μορφή string και ο αριθμός επόμενης κατάστασης. Τυχόν ε-μετάβαση δηλώνεται με το προκαθορισμένο σύμβολο epsilon. Αρχική κατάσταση του ΠΑ είναι η κατάσταση 1. Παράδειγμα αποδεκτής γραμμής είναι το ακόλουθο: Έτσι: N 5 a 2 b 4 b 6 0 10 epsilon 8 Α. Να γράψετε τον κώδικα ανάγνωσης του αρχείου περιγραφής του ΠΑ σε κατάλληλη δική σας δομή. Β. Να γράψετε τον κώδικα προσομοίωσης της διαδικασίας αναγνώρισης μιας συμβολοσειράς με βάση το ΠΑ που διαβάσατε. Στη γενική περίπτωση το ΠΑ είναι ΜΠΑ-ε, κι επομένως η διαδικασία είναι μη ντετερμινιστική και πρέπει να μπορεί να οπισθοδρομεί, ώστε να εξαντλεί όλες τις επιλογές κίνησης πριν καταλήξει σε απόρριψη μιας συμβολοσειράς εισόδου, αν δεν έχει στο μεταξύ επιτύχει να καταλήξει σε τελική κατάσταση και να την αναγνωρίσει. Γ. Να γράψετε τον κώδικα μετατροπής του αρχικού ΠΑ σε ΝΠΑ. Δ. Να γράψετε τον κώδικα προσομοίωσης της διαδικασίας αναγνώρισης με βάση το ΝΠΑ. Τώρα, ξεκινώντας στην αρχική κατάσταση, η διαδικασία είτε καταλήγει σε τελική κατάσταση και αναγνωρίζει, είτε καταλήγει σε μη τελική κατάσταση και απορρίπτει τη συμβολοσειρά. Ε. Δοκιμάστε τους δύο κώδικες προσομοίωσης για το αρχείο περιγραφής ΠΑ και τη συμβολοσειρά εισόδου που σας δίνονται. Προσέξτε ότι η συμβολοσειρά εισόδου δίνεται με τα σύμβολα διαχωρισμένα με κενά, χωρίς τα κενά να αποτελούν είσοδο. Άσκηση 8 (προαιρετική αν παραδοθεί το Μέρος Β): Θεωρήστε κάποια εφαρμογή λεκτικής ανάλυσης, με την οποία θέλουμε σε κάποιο αρχείο κειμένου να αναγνωρίζουμε αριθμητικές σταθερές. Οι σταθερές αυτές μπορούν να είναι από δυαδικές μέχρι δεκαεξαδικές, που διακρίνονται μεταξύ τους από ένα επίθεμα με τον ειδικό χαρακτήρα & ακολουθούμενο από τη βάση αρίθμησης (στο δεκαδικό σύστημα). Όλες οι σταθερές μπορούν να είναι ακέραιες ή πραγματικές (σταθερής ή κινητής υποδιαστολής), ενώ μπορούν να έχουν και πρόσημο σε παράσταση πρόσημο-μέτρο. Οι ακέραιες σταθερές έχουν μόνο ακέραιο μέρος. Στις πραγματικές σταθερές σταθερής υποδιαστολής, το ακέραιο μέρος χωρίζεται από το κλασματικό με ένα κόμμα, ενώ τόσο το ακέραιο, όσο και το κλασματικό μέρος πρέπει να έχουν τουλάχιστον ένα ψηφίο. Στις πραγματικές σταθερές κινητής υποδιαστολής ο συντελεστής μπορεί να είναι είτε ακέραιος είτε πραγματικός σταθερής υποδιαστολής, ενώ ο εκθέτης αρχίζει με Ε, ακολουθούμενο από υποχρεωτικό πρόσημο και το μέτρο του εκθέτη. Παραδείγματα τέτοιων σταθερών είναι τα ακόλουθα: -7140&9

5 89,4Ε+6&10 +32F90,7A71&16 +1001Ε-101&2-3210,456789ΑΒ&12 F71BE+E2&16 0,314159&10 Παραδείγματα συμβολοσειρών που δεν αναγνωρίζονται ως μεμονωμένες αριθμητικές σταθερές της παραπάνω γλώσσας είναι: +-3 19F&15 -,89&10 3,2&10E-2 0114&2 13,7E31 0,314&159 Σε κάθε περίπτωση αναγνωρίζεται η μέγιστη δυνατή συμβολοσειρά, ενώ δεν υπάρχει διάκριση μεταξύ κεφαλαίων και πεζών αλφαβητικών χαρακτήρων. Α. Να σχεδιάσετε το διάγραμμα μετάβασης (ΔΜ) που να αναγνωρίζει τις αριθμητικές σταθερές της πιο πάνω γλώσσας ως διαφορετικές λεκτικές μονάδες T_INT2,, T_INT16, T_REAL2,, T_REAL16, με προφανή ερμηνεία για κάθε περίπτωση. Ποιος είναι ο μέγιστος αριθμός χαρακτήρων οπισθοδρόμησης και πότε συμβαίνει; Β. Γράψτε και παραδώστε ηλεκτρονικά ένα πρόγραμμα προσομοίωσης του ΔΜ που δώσατε στο παραπάνω ερώτημα, το οποίο να αναγνωρίζει και να εκτυπώνει όλες τις αριθμητικές σταθερές ενός τυχόντος αρχείου κειμένου, μαζί με την αντίστοιχη λεκτική μονάδα. Στο τέλος, το πρόγραμμα θα πρέπει να εκτυπώνει πόσες λεκτικές μονάδες αναγνώρισε από κάθε κατηγορία. Γ. Κατασκευάστε και παραδώστε ηλεκτρονικά το αρχείο εισόδου του μετα-εργαλείου flex για την αναγνώριση των σταθερών των 30 παραπάνω μορφών. Δ. Πώς αλλάζει η απάντησή σας στα προηγούμενα ερωτήματα αν δεν υπάρχει ο ειδικός χαρακτήρας &, και η βάση αρίθμησης είναι απλά το ένα ή τα δύο τελευταία ψηφία της συμβολοσειράς; ΠΡΟΣΟΧΗ: Όλες οι ασκήσεις εκτός από όσες απαιτούν ηλεκτρονική παράδοση να παραδοθούν χειρόγραφες. Κάθε άσκηση να παραδοθεί σε ξεχωριστές κόλλες από τις υπόλοιπες. Η παράδοση θα συνοδευτεί από σύντομη εξέταση.

6 Μέρος Β. (χειρόγραφη και ηλεκτρονική παράδοση 9 Δεκεμβρίου) Να κατασκευάσετε το Λεκτικό και το Συντακτικό Αναλυτή (ΛΑ, ΣΑ) για τη γλώσσα της εργασίας σας. Για κάποιο τυχαίο πρόγραμμα εισόδου, ο ΣΑ καλείται μία μοναδική φορά, για να αποφασίσει αν το πρόγραμμα είναι συντακτικά ορθό, ενώ ο ΛΑ καλείται επαναληπτικά από το ΣΑ, κάθε φορά που ο δεύτερος χρειάζεται να προχωρήσει σε επόμενη ΛΜ του προγράμματος. Α. Πριν προχωρήσετε στην κατασκευή του ΛΑ, θα πρέπει να σχεδιάσετε το Διάγραμμα Μετάβασης (ΔΜ) της γλώσσας της εργασίας σας σε ενιαία μορφή. Τοποθετήστε πρώτα τις λέξεις-κλειδιά, στη συνέχεια προσθέστε τις σταθερές και τα αναγνωριστικά, και τέλος συμπληρώστε τους τελεστές και τα διαχωριστικά σύμβολα. Να κατασκευάσετε έναν πίνακα με όλες τις τελικές καταστάσεις του ΔΜ, όπου να σημειώσετε τις ΛΜ που επιστρέφονται, καθώς και την οπισθοδρόμηση που πρέπει να γίνεται σε κάθε τελική κατάσταση. Προχωρήστε τώρα στην υλοποίηση του ΛΑ, ο οποίος θα πρέπει: 1. Να επιστρέφει τον κωδικό της ΛΜ που βρίσκει κάθε φορά που καλείται. 2. Να επιστρέφει τα ονόματα των αναγνωριστικών που συναντά, ή εναλλακτικά να εισάγει στον ΠΣ τα αναγνωριστικά που συναντά, επιστρέφοντας το δείκτη στον ΠΣ που αντιστοιχεί στο τρέχον αναγνωριστικό. 3. Να επιστρέφει τις τιμές των σταθερών που συναντά. Για μη αριθμητικές σταθερές να ε- πιστρέφει τη συμβολοσειρά της λέξης που αναγνώρισε. 4. Να χειρίζεται σφάλματα λεκτικής ανάλυσης με εκτύπωση μηνύματος που να περιλαμβάνει τον αριθμό γραμμής και την ίδια τη γραμμή του αρχείου εισόδου στην οποία σημειώθηκε το σφάλμα. Να προσπαθεί να συνεχίσει σβήνοντας το λανθασμένο χαρακτήρα, και αν αυτό δεν είναι δυνατό, τότε να τερματίζει τη λειτουργία του. 5. Για τους σκοπούς της παρούσας άσκησης να εκτυπώνει κατάλληλα όλες τις τιμές που επιστρέφει, πέρα από τυχόν μηνύματα λάθους. Για την κατασκευή του ΛΑ μπορείτε να χρησιμοποιήσετε είτε τη μέθοδο του απ ευθείας προγραμματισμού του ΔΜ που σχεδιάσατε, είτε το μετα-εργαλείο flex. Η κωδικοποίηση των ΛΜ να γίνει με το συμβολισμό που δίνεται στην περιγραφή της γλώσσας που μεταφράζετε. Για παράδειγμα, το σύμβολο ID να χρησιμοποιηθεί για την κωδικοποίηση των αναγνωριστικών. Σε περίπτωση που χρησιμοποιήσετε το flex, θα πρέπει οι πληροφορίες που ο ΛΑ επιστρέφει πέρα από τον κωδικό της ΛΜ, να επιστρέφονται μέσω της μεταβλητής yylval. Για να γίνει δεκτή η παράδοση του ΛΑ αν χρησιμοποιήσετε το flex, θα πρέπει ο πιο πάνω πίνακας τελικών καταστάσεων του ΔΜ να συμπληρωθεί με την αντιστοίχηση κάθε αριθμού κατάστασης του δικού σας ΔΜ με τον αριθμό κατάστασης του ΔΜ που κατασκευάζει το flex. Για το σκοπό αυτό, θα πρέπει να ανοίξετε το αρχείο που παράγει το flex και να εντοπίσετε τις καταστάσεις του ΔΜ που αναγνωρίζουν τις ΛΜ της γλώσσας. Επειδή το αρχείο αυτό παράγεται αυτόματα, φροντίστε να το μετονομάσετε σε άλλο κατάλληλο όνομα, για να μην μπερδευτείτε και το χάσετε σε κάποια επόμενη εκτέλεση του flex. Το συγκεκριμένο αρχείο που χρησιμοποιήσατε θα πρέπει να παραδοθεί μαζί με το υπόλοιπο υλικό του ΛΑ. Β. Ο ΣΑ θα πρέπει: 1. Να αναγνωρίζει ή να απορρίπτει το πρόγραμμα με βάση τη γραμματική της γλώσσας. Πιο συγκεκριμένα: Για να κατασκευαστεί ένας ντετερμινιστικός ΣΑ για τη γλώσσα της εργασίας σας, πρέπει η γραμματική να μην είναι διφορούμενη. Για το σκοπό αυτό πρέπει να μετατρέψετε τη διφορούμενη γραμματική που σας δίνεται σε μη διφορούμενη με έναν από τους εξής δύο τρόπους: (α) Να μετασχηματίσετε τη γλώσσα σε μη διφορούμενη, ή (β) να χρησιμοποιήσετε την προτεραιότητα και την προσεταιριστικότητα των τελεστών της γλώσσας, ώστε η ανάλυση να οδηγεί σε μοναδικό συντακτικό δέντρο. Εναλλακτικά, για ορισμένους κανόνες, στους οποίους η σύγκρουση που εμφανίζεται λύνεται πάντα

7 προς μία κατεύθυνση όπως γίνεται στην περίπτωση του ξεκρέμαστου else, προτιμάμε να επιβάλλουμε αυτή την κατεύθυνση στο ΣΑ. 2. Να χειρίζεται σφάλματα συντακτικής ανάλυσης με εκτύπωση κατάλληλων μηνυμάτων που να περιλαμβάνουν τον αριθμό γραμμής και την ίδια τη γραμμή του αρχείου εισόδου στην οποία σημειώθηκε κάθε σφάλμα. Ειδικότερα: Για ανάνηψη από κάποιο σφάλμα να χρησιμοποιηθεί η μέθοδος πανικού σε συνδυασμό με τη στρατηγική των κανόνων παραγωγής σφαλμάτων για τα πιο κοινά σφάλματα, όπως η απουσία διαχωριστικών. Μετά το πρώτο σφάλμα να συνεχίζεται η ανάλυση μέχρι έναν αριθμό 5 το πολύ σφαλμάτων. 3. Να εισάγει στον ΠΣ τα αναγνωριστικά του προγράμματος, αν δεν έχουν εισαχθεί από το ΛΑ. Ακόμα, θα πρέπει να διαχειρίζεται τις εμβέλειες του προγράμματος στον ΠΣ, σύμφωνα με την περιγραφή της γλώσσας που μεταφράζετε. 4. Για τους σκοπούς της παρούσας άσκησης να εκτυπώνει με κατάλληλο τρόπο το περιεχόμενο του ΠΣ στο τέλος κάθε εμβέλειας. Η χρήση του μετα-εργαλείου bison είναι αναγκαία, τόσο για την κατασκευή του ΣΑ, όπου μπορούμε να χειριστούμε διφορούμενες γραμματικές χωρίς την ανάγκη μετασχηματισμού, όσο και για την ενσωμάτωση σε αυτόν του σημασιολογικού αναλυτή. Με το bison μπορούμε επίσης να υλοποιήσουμε ευκολότερα τη μέθοδο πανικού για ανάνηψη από συντακτικά σφάλματα. Για να γίνει δεκτή η παράδοση του ΣΑ, θα πρέπει να μελετήσετε το αρχείο ανάλυσης της γραμματικής που παράγει το bison (με επιλογή v ), και (α) σε περίπτωση που δεν μετασχηματίσετε τη γραμματική σας σε μη διφορούμενη, θα πρέπει να βρείτε και να υποδείξετε τις καταστάσεις στις οποίες εμφανίζονται συγκρούσεις, καθώς και τις καταστάσεις όπου οι συγκρούσεις του ΣΑ επιλύονται με βάση την προτεραιότητα και προσεταιριστικότητα των τελεστών, δίνοντας και τα εμπλεκόμενα στοιχεία του ΣΑ, ενώ (β) σε περίπτωση που μετασχηματίσετε τη γραμματική σας σε μη διφορούμενη, θα πρέπει να βρείτε και να υποδείξετε τις καταστάσεις στις οποίες εμφανίζονται συγκρούσεις πριν το μετασχηματισμό, δίνοντας και τα εμπλεκόμενα στοιχεία του ΣΑ, καθώς και τις νέες καταστάσεις που προκύπτουν μετά το μετασχηματισμό, όπου οι συγκρούσεις θα έχουν επιλυθεί. Όσο αφορά τον ΠΣ, μπορείτε να τον σχεδιάσετε με όποια δομή θέλετε, με βαθμολόγηση ό- μως ανάλογη της ταχύτητας προσπέλασής του. Προς το παρόν η μόνη πληροφορία που αποθηκεύεται στον ΠΣ για κάποιο αναγνωριστικό είναι το όνομά του και το βάθος φωλιάσματος της εμβέλειάς του. Για επαλήθευση τόσο του ΛΑ όσο και του ΣΑ χρησιμοποιήστε τα αρχεία εισόδου που επισυνάπτονται του αρχείου περιγραφής της γλώσσας της εργασίας σας.