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

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

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

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

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

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

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

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

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

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

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

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

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

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

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

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

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

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

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

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

Περιεχόμενα 1 Πρωτοβάθμια Λογική Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων ) / 60

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

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

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

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

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

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

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

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

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

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

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

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

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

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

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

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

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

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

Παραδείγματα Απαλοιφή Gauss Απαλοιφή Gauss Jordan

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

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

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

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

turnin Lab4.pro

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

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

Κεφάλαιο 4: Συντακτική ανάλυση

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Λογική. Δημήτρης Πλεξουσάκης

Περιεχόμενα Τι περιγράφει ένα ΣΔ ΣΔ και παραγωγές Θεωρία Υπολογισμού Ενότητα 15: Συντακτικά Δέντρα Επ. Καθ. Π. Κατσαρός Τμήμα Πληροφορικής Επ. Καθ. Π.

Τεχνητή Νοημοσύνη. 21η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

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

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

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

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

A Τελική Εξέταση του μαθήματος «Αριθμητική Ανάλυση» Σχολή Θετικών Επιστημών, Τμήμα Μαθηματικών, Πανεπιστήμιο Αιγαίου

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Ενότητα 2. Ζωγραφίζοντας με το ΒΥΟΒ

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

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

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

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

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

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

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

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

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

ΚΕΦΑΛΑΙΟ 3: Συνθήκες Αλυσίδων

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

Μ Α Θ Η Μ Α Τ Ι Κ Α Γ ΓΥΜΝΑΣΙΟΥ ΖΕΡΒΟΣ ΜΑΝΟΛΗΣ

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Υπολογιστικά & Διακριτά Μαθηματικά

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

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

a = 10; a = k; int a,b,c; a = b = c = 10;

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

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

K15 Ψηφιακή Λογική Σχεδίαση 4+5: Άλγεβρα Boole

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

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

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

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

. (1) , lim να υπάρχουν και να είναι πεπερασμένα, δηλαδή πραγματικοί αριθμοί.

Μη γράφετε στο πίσω μέρος της σελίδας

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

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

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

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

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

Transcript:

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Δεύτερη Σειρά Ασκήσεων 22 Νοεμβρίου 2016 (χειρόγραφη και ηλεκτρονική παράδοση 9 Δεκεμβρίου) Άσκηση 1: Θεωρήστε τη γραμματική με κανόνες: Α B a A a c B B b A b d όπου a, b, c και d είναι τερματικά σύμβολα. Α. Παρατηρήστε τη γραμματική και εξηγήστε γιατί δεν είναι LL(1). Β. Να μετασχηματίσετε τη γραμματική σε μια νέα, ισοδύναμή της, απαλείφοντας πλήρως τα προφανή χαρακτηριστικά που την κάνουν να μην είναι LL(1). Γ. Υπολογίστε και εξετάστε τα σύνολα FIRST και FOLLOW της νέας γραμματικής, ώστε να βρείτε αν αυτή είναι LL(1). Σε περίπτωση που η νέα γραμματική δεν είναι LL(1), να εξετάσετε αν αυτή μπορεί να είναι LL(k) για κάποιο k. Δ. Να κατασκευάσετε τον πίνακα ΣΑ LL(1) για τη νέα γραμματική, επιτρέποντας πολλαπλές κινήσεις σε κάθε θέση, ώστε να εντοπίσετε όλες τις συγκρούσεις που πιθανά εμφανίζονται. Για κάθε περίπτωση σύγκρουσης, εξηγήστε αν αυτή μπορεί να επιλυθεί με επιλογή μιας από τις κινήσεις, αν δηλαδή διαγράφοντας τις υπόλοιπες κινήσεις προκύπτει ντετερμινιστικός πίνακας ΣΑ ο οποίος όμως να μπορεί να αναγνωρίσει τη γλώσσα της γραμματικής. Ε. Με βάση τον πίνακα που κατασκευάσατε, να περιγράψετε τα βήματα για την αναγνώριση ή απόρριψη των συμβολοσειρών daabbbaaa και cbbabbaaa. Ειδικότερα, αν ο πίνακας είναι μη ντετερμινιστικός επειδή δεν καταφέρατε να επιλύσετε κάποια σύγκρουση, χρησιμοποιήστε οπισθοδρόμηση, ώστε να δοκιμάσετε όσες επιλογές απαιτούνται πριν αποφασίσετε. Άσκηση 2: Θεωρήστε τη γραμματική που σας δόθηκε στην προηγούμενη άσκηση, καθώς και τη νέα που βρήκατε μετά τους μετασχηματισμούς. Α. Να κατασκευάσετε πλήρως τις καταστάσεις ΣΑ LR(0), SLR(1), LALR(1) και LR(1) των δύο γραμματικών, και να εξετάσετε αν αυτές ανήκουν σε μία ή περισσότερες από τις τέσσερεις κατηγορίες ΣΑ τύπου LR. Εντοπίστε όλες τις συγκρούσεις που τυχόν εμφανίζονται στις καταστάσεις, χωρίς να κατασκευάσετε κανέναν πίνακα ΣΑ. Β. Για όποια από τις δύο γραμματικές δεν είναι LR(1), να εξηγήσετε αν μπορεί να είναι LR(k) για κάποιο k ή όχι και γιατί. Διαφορετικά, να κατασκευάσετε τον απλούστερο σύμφωνα με την πιο πάνω σειρά πίνακα ΣΑ από τους τέσσερεις τύπους LR που μπορεί να κατασκευαστεί ντετερμινιστικά για την κάθε γραμματική. Γ. Για όποια από τις δύο γραμματικές δεν είναι LR(1), να κατασκευάσετε τον πίνακα ΣΑ LR(1) με πολλαπλές κινήσεις στις θέσεις όπου υπάρχει σύγκρουση, και στη συνέχεια να εξετάσετε αν επιλέγοντας μία κίνηση ανά περίπτωση μπορείτε να επιλύσετε τη σύγκρουση, αν

2 δηλαδή διαγράφοντας τις υπόλοιπες κινήσεις προκύπτει ντετερμινιστικός πίνακας ΣΑ ο ο- ποίος να μπορεί να αναγνωρίσει τη γλώσσα της γραμματικής. Δ. Με βάση τους δύο πίνακες που κατασκευάσατε, να περιγράψετε τα βήματα για την αναγνώριση ή απόρριψη των συμβολοσειρών daabbbaaa και cbbabbaaa. Ειδικότερα, αν ο πίνακας είναι μη ντετερμινιστικός επειδή δεν καταφέρατε να επιλύσετε κάποια σύγκρουση, χρησιμοποιήστε οπισθοδρόμηση, ώστε να δοκιμάσετε όσες επιλογές απαιτούνται πριν αποφασίσετε. Άσκηση 3: Θεωρήστε τη γραμματική: D ( X E ; F ) X ( Χ F ; X Ε ) E Y a F Y b Y όπου (, ), a, b και ; τα τερματικά σύμβολα αυτής. Α. Εξετάστε με τη σειρά αν η παραπάνω γραμματική είναι LL(1), LR(0), SLR(1), LALR(1) και LR(1), μόνο με βάση τις συγκρούσεις FIRST/FIRST και FIRST/FOLLOW ή ολίσθησης/ελάττωσης και ελάττωσης/ελάττωσης, χωρίς να προσπαθήσετε να κατασκευάσετε κανέναν πίνακα ΣΑ. Β. Κατασκευάστε τον ντετερμινιστικό πίνακα ΣΑ για κάθε περίπτωση που αυτό είναι δυνατό, και δείξτε τις κινήσεις του αντίστοιχου ΣΑ για την αναγνώριση της συμβολοσειράς: (b;(b;;b;(;;b;b;(a) Γ. Δείξτε ότι κάθε γραμματική LL(1) είναι και LR(1). Άσκηση 4: Θεωρήστε τη γραμματική: Ε Ε + Τ T T Τ + T * F F F F * ( E ) a όπου a, (, ), * και + τα τερματικά σύμβολα αυτής. Α. Δείξτε με τη σειρά ότι η παραπάνω γραμματική δεν είναι LL(1), LR(0), SLR(1), LR(1) ούτε LALR(1), χωρίς να κατασκευάσετε πίνακες ΣΑ. Β. Για την περίπτωση LL(1): Μετασχηματίστε τη γραμματική, απαλείφοντας τα προφανή χαρακτηριστικά που την κάνουν να μην είναι LL(1), και δείξτε ότι και πάλι προκύπτει γραμματική που δεν είναι LL(1). Στη συνέχεια, κατασκευάστε τον πίνακα ΣΑ LL(1), υποδεικνύοντας τα κελιά στα οποία εμφανίζεται σύγκρουση. Για τα κελιά αυτά, προσπαθήστε να επιλέξετε κανόνα με βάση το αμέσως επόμενο προπορευόμενο σύμβολο, δημιουργώντας έτσι μικρότερα εσωτερικά κελιά για κάθε διαφορετικό επόμενο σύμβολο. Αν οι συγκρούσεις επιλυθούν με αυτό τον τρόπο, θα έχετε δείξει ότι η νέα γραμματική είναι LL(2)! Γ. Για τις περιπτώσεις SLR(1), LALR(1) και LR(1): Κατασκευάστε τους αντίστοιχους πίνακες ΣΑ, υποδεικνύοντας τα κελιά στα οποία εμφανίζεται σύγκρουση. Για τα κελιά αυτά, προσπαθήστε να επιλέξετε κίνηση με βάση το αμέσως επόμενο προπορευόμενο σύμβολο, δημιουργώντας όπως και πριν μικρότερα εσωτερικά κελιά για κάθε διαφορετικό επόμενο σύμβολο. Στον ΣΑ SLR μια τέτοια επιλογή ελάττωσης θα γίνεται για όλα τα ζεύγη διαδοχικών συμβόλων που μπορούν να ακολουθούν το μη τερματικό σύμβολο του αριστερού μέλους. Για τον

3 ΣΑ LR(1) - και κατ' επέκταση και τον LALR(1) - η επιλογή ελάττωσης θα γίνεται για τα α- κριβή ζεύγη διαδοχικών συμβόλων που μπορούν να ακολουθούν το μη τερματικό σύμβολο του αριστερού μέλους, όπως αυτά προκύπτουν από την εφαρμογή της συνάρτησης CLO- SURE. Αν οι συγκρούσεις επιλυθούν με αυτό τον τρόπο, θα έχετε δείξει ότι η γραμματική είναι SLR(2), LALR(2) ή LR(2), αντίστοιχα! Δ. Για κάθε περίπτωση ΣΑ στον οποίο επιλύσατε τις συγκρούσεις, δείξτε τις κινήσεις του για την αναγνώριση της συμβολοσειράς: (a++a*)+*a+a+*(a**+a+)* Υπόδειξη: Ακόμα και στις περιπτώσεις που χρησιμοποιούμε δύο προπορευόμενα, η είσοδος καταναλώνεται πάντα με ρυθμό ενός συμβόλου με κάθε απορρόφηση ή ολίσθηση. Άσκηση 5: Μια απλή γλώσσα συναρτησιακού προγραμματισμού υποστηρίζει τις εξής δομές εκφράσεων: λ ID 1 ID n : e συνάρτηση με όρισμα μια λίστα n μεταβλητών και σώμα την έκφραση e e 1 OP e 2 εφαρμογή τελεστή OP με ορίσματα τις εκφράσεις e 1 και e 2 e e 1 e n εφαρμογή της συνάρτησης e με όρισμα μια λίστα n εκφράσεων ( e ) παρενθέσεις για την ομαδοποίηση των εκφράσεων ID μεταβλητές CONST σταθερές Η άτυπη σύνταξη της γλώσσας καθορίζει ότι: Στη δομή λ... : e το σώμα της συνάρτησης εκτείνεται όσο το δυνατόν περισσότερο. Η εφαρμογή συνάρτησης έχει υψηλότερη προτεραιότητα από τους τελεστές OP. Οι τελεστές OP δίνονται αναλυτικά μαζί με την προτεραιότητα και την προσεταιριστικότητά τους στον παρακάτω πίνακα: Λεκτική Μονάδα Τελεστής Προτεραιότητα Προσεταιριστικότητα OR ελάχιστη αριστερή AND && αριστερή REL <, >, >=, <= καμία EQ ==,!= καμία ADD +, - αριστερή MUL *, / αριστερή POW ^ μέγιστη δεξιά Α. Να δώσετε μια διφορούμενη γραμματική για τις δομές εκφράσεων της παραπάνω γλώσσας που να αγνοεί τους άτυπους κανόνες. Εξηγήστε γιατί η γραμματική είναι διφορούμενη. Β. Να δώσετε μια μη διφορούμενη γραμματική, η οποία να περιλαμβάνει αναλυτικότερα τους τελεστές της γλώσσας, λαμβάνοντας πλήρως υπόψη την προτεραιότητα και την προσεταιριστικότητά τους, και να λαμβάνει ακόμα υπόψη και τους υπόλοιπους άτυπους κανόνες της γλώσσας. Γ. Να εξετάσετε αν η γραμματική του ερωτήματος B είναι LL(1). Αν ναι, τότε δώστε τον πίνακα συντακτικής ανάλυσης LL(1) γι αυτή τη γραμματική. Διαφορετικά, να εξετάσετε αν αυτή μπορεί να μετατραπεί σε LL(1), και αν ναι, δώστε τον πίνακα συντακτικής ανάλυσης LL(1) για τη μετασχηματισμένη γραμματική. Δ. Να εξετάσετε αν η γραμματική του ερωτήματος Β είναι SLR(1). Αν ναι, τότε δώστε τον πίνακα συντακτικής ανάλυσης SLR(1) γι αυτή τη γραμματική. Διαφορετικά, να εξετάσετε αν αυτή είναι LR(1), και αν ναι, δώστε τον πίνακα συντακτικής ανάλυσης LR(1) γι αυτή τη γραμματική.

4 Ε. Να εξηγήσετε γιατί η γραμματική του ερωτήματος Α δεν είναι SLR(1) ούτε LR(1). Μολαταύτα, να κατασκευάσετε τον πίνακα συντακτικής ανάλυσης SLR(1) για τη γραμματική αυτή, υποδεικνύοντας όλες τις συγκρούσεις που εμφανίζονται σε αυτόν. Εξηγήστε με ποια κριτήρια μπορείτε να υλοποιήσετε ντετερμινιστικό συντακτικό αναλυτή τύπου LR με βάση τον πίνακα αυτόν, χρησιμοποιώντας τους άτυπους κανόνες της γλώσσας, και δείξτε τη λειτουργία του για την αναγνώριση της συμβολοσειράς: (x<y&&3+z*(λ x y:x+y*y-(λ x:1/x-1)(x+y)) 2 5^(λ x:x+1/x) 3^2/2>w) Άσκηση 6: Θεωρήστε τη γραμματική ενός συνόλου αριθμητικών εκφράσεων που αποτελούν συναρτήσεις μίας μεταβλητής x: Ε E + E E * E Ε ^ iconst ( E ) x iconst όπου x, iconst, +, *, ^, ( και ) τερματικά σύμβολα. Το τερματικό σύμβολο iconst παριστάνει μη προσημασμένες ακέραιες σταθερές, η τιμή των οποίων λαμβάνεται από κάποιο λεκτικό αναλυτή μέσω ενός κατηγορήματος val. Εάν τα τερματικά σύμβολα +, * και ^ παριστάνουν τις πράξεις πρόσθεσης, πολλαπλασιασμού και ύψωσης σε δύναμη, αντίστοιχα, με τις συνήθεις προτεραιότητες και προσεταιριστικότητες της άλγεβρας, ορίστε κατηγορήματα για το μη τερματικό σύμβολο Ε και κανόνες αποτίμησης αυτών σε μορφή ψευδοκώδικα, ώστε η προκύπτουσα κατηγορική γραμματική να υπολογίζει την έκφραση της πρώτης παραγώγου της αριθμητικής έκφρασης που δίνεται ως είσοδος. Στη συνέχεια, βελτιώστε τους κανόνες αποτίμησης, ώστε η τελική μορφή της παραγώγου να είναι πολυώνυμο ως προς x με εκθέτες σε φθίνουσα σειρά, με τη μέγιστη δυνατή απλοποίηση στις τιμές των συντελεστών και των εκθετών. Για παράδειγμα, με είσοδο την έκφραση: (x^3+4)*x+x^2*3 η γραμματική με τους βελτιωμένους κανόνες πρέπει να εκτυπώνει: 4*x^3+6*x+4 ενώ η αρχική προσέγγιση που κάνετε θα μπορεί να εκτυπώνει: (3*x^2+0)*x+(x^3+4)*1+2*x^1*3 ή ο,τιδήποτε ισοδύναμο. Δείξτε σε μορφή δέντρου τη διαδικασία αποτίμησης των κατηγορημάτων για κάθε μία από τις δύο υλοποιήσεις κατηγορικής γραμματικής, με είσοδο την παραπάνω έκφραση. Υπόδειξη: Υπενθυμίζεται ότι: (f+g) = f +g, (f*g) = f *g+f*g, και ότι (f n ) = n*f n-1 *f. Χρησιμοποιήστε δύο σύνολα κατηγορημάτων για το Ε, το ένα να αναφέρεται στην παράγωγο, και το άλλο στην αρχική μορφή της έκφρασης, με το δεύτερο να απαιτείται για τον πολλαπλασιασμό και την ύψωση σε δύναμη. Κάθε σύνολο θα πρέπει να περιλαμβάνει τουλάχιστον ένα ακέραιο κατηγόρημα για την τιμή του σταθερού συντελεστή της έκφρασης, καθώς και ένα κατηγόρημα πίνακα χαρακτήρων για την έκφραση. Άσκηση 7 (προαιρετική συμπληρωματική του ΣΑ της εργασίας): Έστω οι αριθμητικές εκφράσεις μεταξύ μη προσημασμένων ακεραίων σταθερών κάποιας γλώσσας προγραμματισμού που παράγονται από τη γραμματική: E E + E E - E E * E E / E E ** E ( E ) ICONST όπου ICONST η λεκτική μονάδα των σταθερών, οι +, -, * και / είναι τελεστές με τη συνήθη σημασιολογική ερμηνεία πράξης, προτεραιότητας και προσεταιριστικότητας, ενώ

5 ** είναι ο τελεστής ύψωσης σε δύναμη, έχει δε τη μέγιστη προτεραιότητα και δεξιά προσεταιριστικότητα. Αν οι σταθερές περιγράφονται ως ένας ή περισσότεροι αριθμητικοί χαρακτήρες, κατασκευάστε με τα μετα-εργαλεία flex και bison ένα πρόγραμμα, το οποίο να μετατρέπει τις παραπάνω εκφράσεις σε επιθεματική μορφή, χωρίς παρενθέσεις. Για παράδειγμα, η έκφραση: 10 + 3 * (2 + 50) ** 4 + 8 θα πρέπει να μετατρέπεται στην: 10 3 2 50 + 4 ** * + 8 + Να παραδώσετε ηλεκτρονικά τα αρχεία εισόδου των εργαλείων flex και bison που κατασκευάσατε. Άσκηση 8 (προαιρετική συμπληρωματική του ΣΑ της εργασίας): Η παρούσα άσκηση μελετάει τους ΣΑ αναδρομικής κατάβασης, τόσο ντετερμινιστικούς όσο και μη ντετερμινιστικούς. Οι ΣΑ αναδρομικής κατάβασης υλοποιούν μια συνάρτηση ανάλυσης για κάθε μη τερματικό σύμβολο της γραμματικής, η οποία, για κάθε δεξί μέλος κανόνα, καλεί συναρτήσεις για άλλα μη τερματικά σύμβολα και προχωράει την είσοδο για τερματικά σύμβολα. Κάθε συνάρτηση μπορεί να προχωράει με έναν από τους ακόλουθους τρόπους: 1. Ντετερμινιστικά: Συνήθως, τα περισσότερα μη τερματικά σύμβολα της γραμματικής έ- χουν εναλλακτικά δεξιά μέλη κανόνων, οπότε ο ΣΑ έχει επιλογές κίνησης στην ανάλυση αυτών των συμβόλων. Όμως, είναι δυνατό να μπορούμε να επιλέξουμε κανόνα, με επισκόπηση ενός αριθμού προπορευόμενων συμβόλων. Τότε, η ανάλυση είναι πλήρως ντετερμινιστική, ακριβώς όπως σε έναν ΣΑ LL(k). Στην ακραία περίπτωση χωρίς εναλλακτικά δεξιά μέλη κανόνων έχουμε έναν εκφυλισμένο ΣΑ, όπου η ανάλυση είναι επίσης πλήρως ντετερμινιστική αφού δεν υπάρχουν επιλογές κίνησης. 2. Μη ντετερμινιστικά: Στη γενική περίπτωση μη τερματικών συμβόλων με πολλαπλά ε- ναλλακτικά δεξιά μέλη κανόνων, μπορούμε να δοκιμάζουμε όλα τα δεξιά μέλη με τη σειρά, και κάθε φορά που μια συνάρτηση αποτυγχάνει, αντί να τερματίζει την ανάλυση, να επιστρέφει κατάλληλη ένδειξη, ώστε να οπισθοδρομούμε και να προχωράμε στο επόμενο δεξί μέλος. Έτσι, καταλήγουμε σε μία τελείως μη ντετερμινιστική ανάλυση, όπου δεν κάνουμε καμία επιλογή κίνησης, και απλά εξαντλούμε όλες τις εναλλακτικές κινήσεις. 3. Μερικώς ντετερμινιστικά: Για τις περιπτώσεις που μπορούμε να επιλέξουμε δεξί μέλος με βάση κάποια προπορευόμενα σύμβολα, είναι προτιμότερο να προχωράμε ντετερμινιστικά χωρίς οπισθοδρόμηση. Μόνο όταν δε μπορούμε να κάνουμε επιλογή, προχωράμε όπως στο μη ντετερμινιστικό ΣΑ. Μ άλλα λόγια, αν χρησιμοποιούμε k προπορευόμενα σύμβολα, προχωράμε με τον πρώτο τρόπο, όπου τα k σύμβολα μας παρέχουν επιλογή, και με το δεύτερο στις υπόλοιπες περιπτώσεις. Στη συνέχεια σας ζητείται να υλοποιήσετε και τους τρεις τρόπους ανάλυσης σε αντίστοιχα προγράμματα C, κατ αρχήν για μια διφορούμενη γραμματική, και στη συνέχεια σε δύο ισοδύναμές τις γραμματικές. Α. Να σχεδιάσετε και να υλοποιήσετε έναν ΣΑ αναδρομικής κατάβασης, συμπεριλαμβανομένου ενός πολύ απλού ΛΑ, για τη γραμματική με κανόνες: E Ε = Ε Ε + Ε Ε - E + Ε - Ε ( E ) V V i ( E ) i όπου i, =, +, -, ( και ) τα τερματικά σύμβολα της γραμματικής. Η γραμματική αυτή είναι διφορούμενη, οπότε ο ΣΑ θα είναι μη ντετερμινιστικός και θα πρέπει να οπισθοδρομεί, δοκιμάζοντας δηλαδή όλες τις εναλλακτικές επιλογές πριν συμπεράνει αποτυχία. Να ακολουθήσετε τον δεύτερο από τους πιο πάνω τρόπους ανάλυσης, χωρίς δηλαδή χρήση προπορευόμενων συμβόλων για επιλογή κίνησης. Στη συνέχεια, να εφαρμόσετε τον κώδικά σας στη συμβολοσειρά:

6 i=-i(i((i+-i(-i)))-i)=-(i(+i(i=(i=-i+(+i))-i))+i) και να δώσετε το δέντρο συντακτικής ανάλυσης που προκύπτει από τη σειρά με την οποία καλούνται οι συναρτήσεις του ΣΑ. Πόσες φορές καλούνται οι συναρτήσεις του ΣΑ; Β. Να εφαρμόσετε στην παραπάνω γραμματική απαλοιφή αριστερής αναδρομής και αριστερή παραγοντοποίηση. Δείξτε ότι ούτε η νέα γραμματική μπορεί να έχει ντετερμινιστικό ΣΑ αναδρομικής κατάβασης. Υλοποιήστε έτσι ένα δεύτερο μη ντετερμινιστικό ΣΑ αναδρομικής κατάβασης για τη νέα γραμματική, ο οποίος όμως να ακολουθεί τον τρίτο από τους πιο πάνω τρόπους ανάλυσης, προχωρώντας ντετερμινιστικά με χρήση ενός προπορευόμενου συμβόλου όπου δεν υπάρχει σύγκρουση στην ανάλυση, και μη ντετερμινιστικά στις υπόλοιπες περιπτώσεις, ώστε να οπισθοδρομεί όσο λιγότερες φορές γίνεται. Εφαρμόστε τον κώδικά σας στην παραπάνω συμβολοσειρά, και δώστε το νέο δέντρο συντακτικής ανάλυσης που προκύπτει. Πόσες φορές καλούνται οι συναρτήσεις του δεύτερου αυτού ΣΑ; Γ. Θεωρήστε τώρα την παρακάτω ισοδύναμη μη διφορούμενη γραμματική με κανόνες: E + Ε - E ( E ) E V E E = E + Ε - E V i V V ( E ) Όπως και στα προηγούμενα ερωτήματα, να υλοποιήσετε ένα ΣΑ αναδρομικής κατάβασης για τη νέα γραμματική, με τη διαφορά ότι ο τρίτος αυτός ΣΑ θα πρέπει να μην οπισθοδρομεί, επιλέγοντας κίνηση με βάση ένα προπορευόμενο σύμβολο. Εξηγήστε γιατί είναι δυνατή μια τέτοια υλοποίηση. Εφαρμόστε τον κώδικά σας στην πιο πάνω συμβολοσειρά, και δώστε το νέο δέντρο συντακτικής ανάλυσης που προκύπτει. Πόσες φορές καλούνται τώρα οι συναρτήσεις του ΣΑ; Οι τρεις αναλυτές που υλοποιήσατε θα πρέπει να παραδοθούν ηλεκτρονικά. ΠΡΟΣΟΧΗ: Όλες οι ασκήσεις εκτός του κώδικα των Ασκήσεων 7 και 8 να παραδοθούν χειρόγραφες. Κάθε άσκηση να παραδοθεί σε ξεχωριστές κόλλες από τις υπόλοιπες.