Άσκηση 1 Φροντιστήριο 6 Λύσεις Θεωρήστε την πιο κάτω ασυμφραστική γραμματική: E E + (E) Να κατασκευάσετε μία παραγωγή και το αντίστοιχο συντακτικό δέντρο για τις πιο κάτω λέξεις: (α) (γ) + ( ) (β) ( + ) + (δ) (( + )) Μπορείτε να κατασκευάσετε παραγωγή για την έκφραση + ; Αριθμούμε τους κανόνες ως εξής: E E + (1) E (2) (3) (4) (E) (5) (6) (α) Ε Τ Κανόνας (2) Κανόνας (4) Κανόνας (6) Συντακτικό Δέντρο: Ε Φροντιστήριο 6 Λύσεις Εαρινό Εξάμηνο 2016 Σελίδα 1 από 6
(β) Ε Ε + Τ Κανόνας (1) Τ + Τ Kανόνας (2) + Τ Κανόνας (3) (E) + Τ Κανόνας (5) (E+) + Τ Κανόνας (1) (+) + Τ Κανόνας (2) (+) + Κανόνας (4) ( + ) + Κανόνας (6) Συντακτικό Δέντρο: Ε E + ( E ) E + Φροντιστήριο 6 Λύσεις Εαρινό Εξάμηνο 2016 Σελίδα 2 από 6
(γ) Ε Ε + Τ Κανόνας (1) Τ + Τ Kανόνας (2) + Τ Κανόνας (4) + Τ Κανόνας (6) + ( ) Κανόνας (3) + ( ) Κανόνας (4) + ( ) Κανόνας (6) Το συντακτικό δέντρο παραλείπεται. (δ) Ε Τ Κανόνας (2) Kανόνας (4) ((E)) Κανόνας (5) ((E + )) Κανόνας (1) (( + )) Κανόνας (2) (( + )) Κανόνας (4) (( + )) Κανόνας (6) Το συντακτικό δέντρο παραλείπεται. H λέξη + μπορεί να παραχθεί από τη γραμματική και, σε αντίθεση με τη γραμματική στη Διαφάνεια 4 22, η παρούσα γραμματική παράγει την λέξη αυτή μονότροπα. Συγκεκριμένα, η παραγωγή εμφανίζει το πιο κάτω συντακτικό δέντρο. Ε E + Φροντιστήριο 6 Λύσεις Εαρινό Εξάμηνο 2016 Σελίδα 3 από 6
Άσκηση 2 Σε κάθε σκέλος, να βρείτε μια CG που να παράγει την αντίστοιχη γλώσσα. Θεωρήστε ότι το αλφάβητο των γλωσσών είναι το {0,1}. (α) {w η w αρχίζει και τελειώνει με το ίδιο σύμβολο} (β) {w η w έχει περιττό μήκος} (γ) {w w = w rev, δηλαδή η w είναι καρκινική} (α) 1A1 0A0 1 0 A 1A 0A ε (β) 11 00 10 01 1 0 (γ) 11 00 1 0 ε Άσκηση 3 Να μεταγάγετε την πιο κάτω ασυμφραστική γραμματική σε κανονική μορφή Chomsky. AA B A B ε Ξεκινούμε εισάγοντας μια καινούρια αρχική μεταβλητή. Η καινούρια γραμματική είναι η: 0 AA B A B ε Απαλείφουμε τον κανόνα B ε: 0 AA B A B ε Απαλείφουμε τον νεοδημιουργηθέντα κανόνα Α ε: 0 AA B A Α A B Φροντιστήριο 6 Λύσεις Εαρινό Εξάμηνο 2016 Σελίδα 4 από 6
Απαλείφουμε τους μοναδιαίους κανόνες: Κανόνας 0 AA B A Α A B Κανόνας 0 0 AA B A Α AA B A Α A B Κανόνας A B 0 AA B A Α AA B A Α A b Κανόνας A 0 AA B A Α AA B A Α A b AA B A Α Μεταγράφουμε όσους κανόνες οδηγούν σε λέξεις με μήκος μεγαλύτερο από δύο εισάγοντας καινούριες μεταβλητές και σχετικούς κανόνες: 0 AV UB A Α AV UB A Α A b AV UB A Α V A U Αυτό ολοκληρώνει τη διαδικασία. Άσκηση 4 Θεωρήστε την πιο κάτω γραμματική με αλφάβητο το {if, b, then, else, }: if b then else if b then (α) Να δείξετε ότι η γραμματική αυτή είναι πολύτροπη. (β) Να προτείνετε αλλαγές στη γραμματική έτσι ώστε να καταστεί μονότροπη. (α) Θεωρήστε τη λέξη if b then if b then else Φροντιστήριο 6 Λύσεις Εαρινό Εξάμηνο 2016 Σελίδα 5 από 6
Η λέξη αυτή παράγεται πολύτροπα από τη δοθείσα γραμματική. Αυτό επιβεβαιώνεται από την ύπαρξη των δύο πιο κάτω συντακτικών δέντρων για δύο διαφορετικές παραγωγές τις λέξης. if b then if b then else if b then else if b then Σημείωση: Το φαινόμενο της πολυτροπίας είναι ανεπιθύμητο στα πλαίσια των γλωσσών προγραμματισμού. Αυτό οφείλεται στο γεγονός ότι οδηγούν σε πολλαπλές ερμηνείες του ίδιου προγράμματος οι οποίες δυνατόν να οδηγήσουν σε διαφορετικές εκτελέσεις. (β) Υπάρχουν διάφοροι τρόποι για να αποφευχθεί η πολυτροπία στη δοθείσα γραμματική. H πιο κάτω πρόταση ταιριάζει" κάθε else με το πιο εσωτερικό if το οποίο δεν διαθέτει ήδη κάποιο else. Mtched UnMtched Mtched if b then Mtched else Mtched UnMtched if b then if b then Mtched else UnMtched Φροντιστήριο 6 Λύσεις Εαρινό Εξάμηνο 2016 Σελίδα 6 από 6