Θέμα 1ο [15]
Για τη γραμματική που ακολουθεί, να βρεθεί ο πίνακας συντακτικής ανάλυσης LL(1). Τα σύμβολα με έντονα γράμματα είναι τερματικά σύμβολα.
- Ε -> Τ Ε’
- Ε’ -> + Τ
- Ε’ -> - Τ
- Ε’ -> ε
- Τ -> F T’
- T’ -> * F
- T’ -> / F
- T’ -> ε
- F -> ( E )
- F -> id
- F -> * F
Στη συνέχεια να περιγραφούν να βήματα που ακολουθεί ο συντακτικός αναλυτής LL(1) προκειμένου να αναγνωρίσει τη συμβολοσειρά:
id + (*id) / id
Θέμα 2ο [20]
Να μεταγλωττιστεί χειρωνακτικά το παρακάτω πρόγραμμα Pascal. Ζητούνται ο ενδιάμεσος και ο τελικός κώδικας, καθώς και τα εγγραφήματα δραστηριοποίησης για όλες τις δομικές μονάδες.
program main; var x,y,z : integer; procedure sub (p : integer , var q : integer) var x : integer; begin if x * p > y then q := x else q := z end; begin sub (x+y,z) end.
Θέμα 3ο [15]
Ζητείται ένα σχέδιο παραγωγής ενδιάμεσου κώδικα για την εντολή for της γλώσσας προγραμματισμού C. Υπενθυμίζεται ότι η σύνταξη της εντολής αυτής είναι:
for (expr1 ; expr2 ; expr3) stmt
όπου expr1,expr2 και expr3 είναι οποιεσδήποτε εκφράσεις και stmt οποιαδήποτε εντολή. Να θεωρηθεί δεδομένο το σχέδιο παραγωγής κώδικα για εκφράσεις και για τις άλλες εντολές. Επιπλέον, μια και η γλώσσα C δεν κάνει διάκριση μεταξύ ακεραίων και λογικών εκφράσεων, να θεωρηθεί ότι όλες οι εκφράσεις είναι λογικές και ότι χρησιμοποιείται για αυτές η παράσταση δύο εξόδων (λίστες TRUE και FALSE)