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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

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

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

Ψευδοκώδικας. November 7, 2011

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

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

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

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

ΑΕΠΠ Ερωτήσεις θεωρίας

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

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

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

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

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

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

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

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

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

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

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

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

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

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

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

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

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

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

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

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

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

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

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

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

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

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

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

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

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

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

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

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

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

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

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

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 να παραδοθούν χειρόγραφες. Κάθε άσκηση να παραδοθεί σε ξεχωριστές κόλλες από τις υπόλοιπες.

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

8 5. Να δεσμεύει θέσεις στο χώρο δεδομένων (ΧΔ) για τις μεταβλητές του προγράμματος, δημιουργώντας πίνακες δέσμευσης για κάθε εμβέλεια που μεταφράζεται. Για τη γλώσσα της εργασίας σας καθορίστε τις κατηγορίες αποθήκευσης που υποστηρίζονται, το δέσιμο των μεταβλητών, το φώλιασμα των εμβελειών, και συμπληρώστε στον ΠΣ τα στοιχεία που θεωρείτε απαραίτητα για την παραγωγή τελικού κώδικα της επίλυσης αναφοράς κάθε μεταβλητής. 6. Να εκτελεί των έλεγχο των σημασιολογικών κανόνων της γλώσσας. Πιο συγκεκριμένα: (α) Να ελέγχει την ορθότητα όλων των δηλώσεων. Έτσι για παράδειγμα δεν πρέπει να υπάρχουν πολλαπλές δηλώσεις για το ίδιο αναγνωριστικό στην ίδια εμβέλεια. Ή ακόμα οι δηλώσεις συναρτήσεων πρέπει να ταιριάζουν με πιθανή προηγούμενη δήλωση των πρωτοτύπων τους, ο τύπος δήλωσης μιας σταθεράς πρέπει να ταιριάζει με την τιμή που της αποδίδεται, και ο τύπος μιας μεταβλητής πρέπει να ταιριάζει με την πιθανή αρχική της τιμή. (β) Να ελέγχει τη χρήση όλων των αναγνωριστικών σε σχέση με τη δήλωσή τους. Η χρήση αυτών πρέπει να γίνεται με τρόπο συμβατό με την αντίστοιχη δήλωση και στην εμβέλεια στην οποία έχουν δηλωθεί. (γ) Να ελέγχει τους τύπους των επιμέρους εκφράσεων σε μεγαλύτερες εκφράσεις. Αν αυτό κριθεί αναγκαίο, κόμβοι μετατροπής συμβατών τύπων πρέπει να εισάγονται στο ΑΣΔ. (δ) Να ελέγχει τη σημασιολογική ορθότητα των εντολών του προγράμματος. Για παράδειγμα, εδώ ελέγχονται οι τύποι στις αναθέσεις και προστίθενται τελικοί κόμβοι μετατροπής τύπων από το δεξί στο αριστερό μέλος μιας ανάθεσης, αν αυτό είναι απαραίτητο. Επίσης ελέγχονται οι κλήσεις υποπρογραμμάτων για την ορθότητα του αριθμού και του τύπου των παραμέτρων. Ή ακόμα ελέγχονται οι τύποι παραστάσεων που υπεισέρχονται σε συγκεκριμένες εντολές, όπως εντολές διακλαδώσεων και εντολές βρόχων. Τέλος, εδώ ελέγχονται τα άλματα πιθανών εντολών goto, και γενικά κάθε είδους εντολές ελέγχου ροής σε καθεμιά από τις τρεις γλώσσες της εργασίας σας. 7. Σε περίπτωση σφάλματος συντακτικής ανάλυσης να σταματά την παραγωγή κώδικα. Σε περίπτωση σημασιολογικού σφάλματος, ο ΣΣΑ να τερματίζει άμεσα τη λειτουργία του. 8. Για τους σκοπούς της παρούσας άσκησης να εκτυπώνει με κατάλληλο τρόπο το ΑΣΔ και το ΧΔ στο τέλος κάθε μονάδας του προγράμματος εισόδου. Η σημασιολογική ανάλυση γίνεται μέσα από τις ενέργειες του μετα-εργαλείου Bison. Ας σημειωθεί ότι επειδή το Bison υποστηρίζει ένα μόνο κατηγόρημα ανά σύμβολο της γραμματικής, η υλοποίηση πολλαπλών κατηγορημάτων θα πρέπει να γίνει με το δομημένο τύπο struct της C. Τις πιο πολλές φορές, ένα σύμβολο της γραμματικής αποδίδει έναν κόμβο του ΑΣΔ, οπότε τα κατηγορήματα του συμβόλου μπορούν να ενσωματωθούν στη δομή του αντίστοιχου κόμβου.