Άσκηση 1 Σειρά Προβλημάτων 3 Λύσεις Να δώσετε ασυμφραστικές γραμματικές που να παράγουν τις πιο κάτω γλώσσες: (α) { a m b n c p m,n,p 0 και είτε m + n = p είτε m = n + p } (β) { xx rev yy rev x, y {a,b} * } (γ) { 1 p +1 q >1 r p + q>r και p,q,r > 0 } (Παράδειγμα: λέξεις της γλώσσας περιλαμβάνουν τις 11+1> 11, 1111+ 11111> 111, ) (α) Θα δημιουργήσουμε δύο ξεχωριστές γραμματικές για κάθε μια από τις συνιστώσες της γλώσσας: { a m b n c p m,n,p 0 και m + n = p } A ε aab B B ε bbc { a m b n c p m,n,p 0 και m = n + p } C ε acc D D ε adb Στη συνέχεια θα συνδέσουμε τις δύο γραμματικές μέσω μιας αρχική μεταβλητής: A C (β) Δημιουργούμε δύο λέξεις της μορφής xx rev την μία μετά από την άλλη. ΤΤ Τ ata btb ε (γ) Η γραμματική μας ξεκινά εισάγοντας το σύμβολο 1 στην αρχή της λέξης. Για κάθε εμφάνιση στην αρχή μπορούμε να τοποθετήσουμε και ένα 1 στο τέλος στης λέξης. Με αυτό τον τρόπο ξέρουμε ότι τα σύμβολα 1 που βρίσκονται στην αρχή της λέξης είναι περισσότερα ή ίσα από τα 1 που βρίσκονται στο τέλος: 1 11 Μετά από το πρώτο 1, υπάρχει και η δυνατότητα εισαγωγής του συμβόλου +: 1+Τ Προχωρούμε τώρα για να ορίσουμε κανόνες για τη μεταβλητή Τ η οποία περιγράφει την έκφραση που υπάρχει δεξιά από το σύμβολο + ως εξής: Τ 1Τ 1Τ1 1 >1 Οι κανόνες αυτοί εκφράζουν ότι η συμβολοσειρά δεξιά από το + ξεκινά με το σύμβολο 1. Για κάθε τέτοιο σύμβολο μπορούμε να εισάγουμε και ένα σύμβολο στο τέλος της λέξης (κανόνας Τ 1Τ1) ή όχι (κανόνας Τ 1Τ). Με αυτό τον τρόπο γνωρίζουμε ότι δεν θα προσθέσουμε περισσότερα 1 στο τέλος της λέξης από αυτά που υπάρχουν ανάμεσα στο + και το >. Τέλος, μετά από κάποιο 1, δυνατόν να βρίσκεται το σύμβολο > το οποίο οφείλει να ακολουθείται από τουλάχιστον ένα 1 (κανόνας Τ 1>1). Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 1
Άσκηση 2 Να κτίσετε αυτόματα στοίβας για τις πιο κάτω γλώσσες: (α) { 1 p +1 q >1 r p + q>r, p,q,r > 0 } Ακολουθεί το ζητούμενο αυτόματο. 1, ε 1 1, ε 1 1 ε, ε $ 2 1, ε 1 3 +, ε ε 4 1, ε 1 >, ε ε 5 6 1, 1 ε 8 ε, $ ε 7 1, 1 ε Ξεκινώντας, το αυτόματο τοποθετεί το $ στη στοίβα έτσι ώστε να αναγνωρίζει ότι η στοίβα είναι κενή. Στη συνέχεια, διαβάζει ένα ή περισσότερα 1 και τα τοποθετεί στη στοίβα. Συνεχίζει διαβάζονται το σύμβολο + και ένα ή περισσότερα 1 τα οποία επίσης τοποθετεί στη στοίβα. Μετά από το σύμβολο > θα πρέπει να διαβάσει τουλάχιστον ένα 1. Μετά από τον πρώτο 1, το οποίο και αφαιρεί από τη στοίβα, είναι σε θέση να αποδεχθεί τη λέξη. Αν ακολουθήσουν και άλλα 1 τα αποδέχεται εφόσον η στοίβα δεν είναι κενή. Παρατηρούμε ότι ο ρόλος της στοίβας είναι να φυλάει ανά πάσα στιγμή τα 1 που έχουν διαβαστεί και δεν έχουν «ακυρωθεί». Το αυτόματο αποδέχεται εφόσον από την κατάσταση 6 διαβάσει το σύμβολο 1 από την είσοδο ακυρώνοντας ένα 1 από τη στοίβα ή εφόσον διαβάσει το σύμβολο 1 από την κατάσταση 7 προτού αδειάσει η στοίβα. (β) {a 3i b j 0 < i j i +2} 1 ε, ε $ 2 a, ε ε 3 a, ε ε 4 a, ε 1 5 6 a, ε ε b, 1 ε 7 11 10 9 b, ε ε b, ε ε ε, $ ε 8 b, 1 ε Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 2
Ξεκινώντας, το αυτόματο τοποθετεί το $ στη στοίβα έτσι ώστε να αναγνωρίζει ότι η στοίβα είναι κενή. Στη συνέχεια, διαβάζει τρία ή περισσότερα a και, για κάθε τριάδα από a που διαβάζει, τοποθετεί ένα 1 στη στοίβα. Συνεπώς, κάθε φορά που βρισκόμαστε στην κατάσταση 5, έχουν διαβαστεί 3i σύμβολα a αν και μόνο αν υπάρχουν i σύμβολα 1 στη στοίβα. Σε περίπτωση που διαβάσουμε το σύμβολο b στην είσοδο, τότε θα αφαιρεθεί ένα 1 από τη στοίβα και θα προχωρήσουμε στην κατάσταση 8 από όπου μπορούμε να συνεχίσουμε να διαβάζουμε και άλλα b εφόσον η στοίβα δεν είναι κενή. Μόλις αδειάσει η στοίβα είμαστε σε θέση να αποδεκτούμε τη λέξη. Επίσης μπορούμε να μεταβούμε σε κατάσταση αποδοχής (καταστάσεις 10 και 11) για τα επόμενα 2 b που μπορεί να ακολουθήσουν. (γ) {xx rev yy rev x, y {a,b} * } a, ε a b, ε b a, a ε b, b ε a, ε a b, ε b a, a ε b, b ε 1 ε, ε $ 2 ε, ε ε 3 4 5 6 ε, $ $ ε, ε ε ε, $ ε Άσκηση 3 Θεωρείστε την ασυμφραστική γραμματική G = ({}, {a,b}, R, ), όπου R το πιο κάτω σύνολο κανόνων: a ab ε (α) Να δείξετε ότι η γραμματική αυτή είναι πολύτροπη επιδεικνύοντας δύο διαφορετικά συντακτικά δέντρα για τη λέξη aab. (β) Να δείξετε ότι η γραμματική παράγει όλες τις λέξεις των οποίων όλα τα προθήματα περιέχουν τουλάχιστον τόσα a όσα και b. (Υπενθύμιση: Πρόθημα μια λέξης είναι ένα αρχικό της τμήμα. Για παράδειγμα τα ε, 0, 01, 011 και 0111 είναι όλα προθήματα της λέξης 0111). (γ) Να προτείνετε μια μονότροπη γραμματική η οποία να παράγει την ίδια γλώσσα με την G. (α) Για να δείξουμε ότι γραμματική είναι πολύτροπη είναι αρκετό να δείξουμε ότι υπάρχει λέξη που παράγεται από τη γραμματική και η οποία μπορεί να παραχθεί μέσω περισσότερων από μίας εξ αριστερών παραγωγές. Μία τέτοια λέξη είναι η aab η οποία παράγεται μέσω των δύο πιο κάτω συντακτικών δέντρων. Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 3
a b a a ε a b ε ε ε (β) Για να δείξουμε ότι η γραμματική παράγει όλες τις λέξεις των οποίων όλα τα προθήματα περιέχουν τουλάχιστον τόσα a όσα και b, μπορούμε να χρησιμοποιήσουμε επαγωγή στο μήκος της λέξης. Βασικές περιπτώσεις: Αν το μήκος της λέξης είναι ίσο με 1 τότε η λέξη είναι η a, ενώ αν το μήκος της λέξης είναι 2 τότε η λέξη είναι μια εκ των aa και ab. Σε όλες τις περιπτώσεις, όλα τα προθήματα των λέξεων περιέχουν τουλάχιστον τόσα a όσα και b και το ζητούμενο έπεται. Υπόθεση της επαγωγής: Ας υποθέσουμε ότι το ζητούμενο ισχύει για όλες τις λέξεις με μήκος < n. Βήμα της επαγωγής: Ας υποθέσουμε ότι η λέξη w έχει μήκος n. Αν η λέξη έχει παραχθεί από τον κανόνα a τότε έχει την μορφή aw, όπου w είναι μια λέξη που παράγεται από τη γραμματική με μήκος n 1. Από την υπόθεση της επαγωγής όλα τα προθήματα του w περιέχουν τουλάχιστον τόσα a όσα και b. Αφού κάθε πρόθημα της w περιέχει ένα περισσότερο a από ότι η w, έπεται ότι όλα τα προθήματα της w επίσης περιέχουν τουλάχιστον τόσα a όσα και b. Αν η λέξη έχει παραχθεί από τον κανόνα ab τότε έχει την μορφή aw bw, όπου w και w είναι λέξεις που παράγονται από τη γραμματική με μήκος < n. Από την υπόθεση της επαγωγής όλα τα προθήματα των w και w περιέχουν τουλάχιστον τόσα a όσα και b. Αφού κάθε πρόθημα της w περιέχει ένα περισσότερο a από ότι οι w και w, έπεται ότι όλα τα προθήματα της w επίσης περιέχουν τουλάχιστον τόσα a όσα και b. (γ) Ισοδύναμη μονότροπη γραμματική είναι η πιο κάτω. a aτ ε Τ aττb ε Άσκηση 4 Να δείξετε ότι οι πιο κάτω γλώσσες δεν είναι ασυμφραστικές αιτιολογώντας με ακρίβεια τις απαντήσεις σας. (α) { a m b n c m d n+m m, n 0} Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 4
(β) {w#w rev #w w {0,1} * } (γ) [Προαιρετική] { n 0} (α) Λ 1 = { a m b n c m d n+m m, n 0} Υποθέτουμε για να φτάσουμε σε αντίφαση ότι η Λ 1 είναι ασυμφραστική. Τότε, σύμφωνα με το Λήμμα της Άντλησης, υπάρχει p, το μήκος άντλησης της γλώσσας, τέτοιο ώστε κάθε λέξη της γλώσσας με μήκος μεγαλύτερο από p να ικανοποιεί την ιδιότητα που περιγράφεται στο λήμμα. Ας επιλέξουμε τη λέξη w = a p b p c p d 2p και ας ονομάσουμε τα τμήματα της λέξης ως Α, Β, Γ, Δ, όπου w = ΑΒΓΔ, και Α=a p, Β = b p, Γ=c p, Δ= d 2p. Τότε, σύμφωνα με το λήμμα, w = uvxyz έτσι ώστε η υπολέξη vxy περιέχει το πολύ p σύμβολα ( vxy p), τουλάχιστον μία από τις v και y να είναι μη κενή ( vy > 0) και οποιαδήποτε ταυτόχρονη επανάληψη των υπολέξεων v και y να διατηρεί την προκύπτουσα λέξη εντός της γλώσσας (uv i xy i z Λ 1, i 0). Αφού vxy p, τότε η λέξη αυτή δεν μπορεί να εκτείνεται σε περισσότερα από δύο τμήματα της λέξης. Διακρίνουμε τις πιο κάτω περιπτώσεις. Αν η vxy εκτείνεται μόνο στο τμήμα Α, τότε τα v και y θα αποτελούνται μόνο από a. Επομένως, αν αντλήσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας: uv 2 xy 2 z = a p+μ+λ b p c p d 2p Λ 1, για μ = v, λ = y. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί για να δείξουμε ότι, αν η vxy εκτείνεται σε ένα από τα τμήματα Β, Γ και Δ, τότε και πάλι η λέξη δεν επιδέχεται άντλησης. Αν η vxy εκτείνεται στα δύο συνεχόμενα τμήματα Α και Β, τότε τα v και y θα αποτελούνται τόσο από a όσο και από b. Επομένως, αν αντλήσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας αφού το πλήθος των a Α θα είναι μεγαλύτερο από το πλήθος των c. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί δείχνοντας ότι αν η vxy εκτείνεται σε κάποια άλλα συνεχόμενα τμήματα (Β και Γ ή Γ και Δ), τότε, και πάλι, η λέξη δεν θα επιδέχεται άντλησης. Αυτό μας οδηγεί σε αντίφαση και επομένως η υπόθεσή μας ότι η γλώσσα Λ 1 είναι ασυμφραστική ήταν εσφαλμένη. Συμπέρασμα: Η Λ 1 είναι μη ασυμφραστική. (β) Λ 2 = {w#w rev #w w {0,1} * } Υποθέτουμε για να φτάσουμε σε αντίφαση ότι η Λ 2 είναι ασυμφραστική. Τότε, σύμφωνα με το Λήμμα της Άντλησης, υπάρχει p, το μήκος άντλησης της γλώσσας, τέτοιο ώστε κάθε λέξη της γλώσσας με μήκος μεγαλύτερο από p να ικανοποιεί την ιδιότητα που περιγράφεται στο λήμμα. Ας επιλέξουμε τη λέξη w = 0 p #0 p #0 p και ας ονομάσουμε τα τμήματα της λέξης ως Α, Β,Γ,Δ,Ε, όπου w = ΑΒΓΔΕ, και Α = 0 p, Β = #, Γ = 0 p, Δ = # και Ε = 0 p. Τότε, σύμφωνα με το λήμμα, w = uvxyz έτσι ώστε η υπολέξη vxy περιέχει το πολύ p σύμβολα ( vxy p), τουλάχιστον μία από τις v και y να είναι μη κενή ( vy > 0) και Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 5
οποιαδήποτε ταυτόχρονη επανάληψη των υπολέξεων v και y να διατηρεί την προκύπτουσα λέξη εντός της γλώσσας (uv i xy i z Λ 2, i 0). Διακρίνουμε τις πιο κάτω περιπτώσεις. Αν η vxy εκτείνεται μόνο στο τμήμα Α, τότε τα v και y θα αποτελούνται μόνο από 0. Επομένως, αν αντλήσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας: uv 2 xy 2 z = 0 p+μ+λ #0 p #0 p 1 Λ 2, για μ = v, λ = y. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί για να δείξουμε ότι, αν η vxy εκτείνεται σε ένα από τα τμήματα Γ και Ε, τότε και πάλι η λέξη δεν επιδέχεται άντλησης. Αν η vxy εκτείνεται στα δύο συνεχόμενα τμήματα Α και Β, τότε τα v και y δυνατόν να αποτελούνται από 0 και από #. Επομένως, αν αντλήσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας αφού το πλήθος των 0 ή/και ΤΩΝ # στα τμήματα Α και Β θα είναι μεγαλύτερα από το επιθυμητό πλήθος. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί δείχνοντας ότι αν η vxy εκτείνεται σε κάποια άλλα δύο συνεχόμενα τμήματα (Β και Γ,Γ και Δ, Δ και Ε), τότε, και πάλι, η λέξη δεν θα επιδέχεται άντλησης. Αν η vxy εκτείνεται στα τρία συνεχόμενα τμήματα Α, Β, και Γ, τότε τα v και y θα αποτελούνται από 0 ή και #. Επομένως, αν αντλήσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας αφού το πλήθος των 0 στο Ε θα μείνει αμετάβλητο ή θα αυξηθεί το πλήθος των #. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί δείχνοντας ότι αν η vxy εκτείνεται στα τρία συνεχόμενα τμήματα Γ, Δ και Ε, τότε, και πάλι, η λέξη δεν θα επιδέχεται άντλησης. Αυτό μας οδηγεί σε αντίφαση και επομένως η υπόθεσή μας ότι η γλώσσα Λ 2 είναι ασυμφραστική ήταν εσφαλμένη. Συμπέρασμα: Η Λ 2 είναι μη ασυμφραστική. (γ) Λ 3 = { n 0} Υποθέτουμε για να φτάσουμε σε αντίφαση ότι η Λ 3 είναι ασυμφραστική. Τότε, σύμφωνα με το Λήμμα της Άντλησης, υπάρχει p, το μήκος άντλησης της γλώσσας, τέτοιο ώστε κάθε λέξη της γλώσσας με μήκος μεγαλύτερο από p να ικανοποιεί την ιδιότητα που περιγράφεται στο λήμμα. Ας επιλέξουμε τη λέξη w = ( ) =. Τότε, σύμφωνα με το λήμμα, w = uvxyz έτσι ώστε η υπολέξη vxy περιέχει το πολύ p σύμβολα ( vxy p), τουλάχιστον μία από τις v και y να είναι μη κενή ( vy > 0) και οποιαδήποτε ταυτόχρονη επανάληψη των υπολέξεων v και y να διατηρεί την προκύπτουσα λέξη εντός της γλώσσας (uv i xy i z Λ 3, i 0). Για παράδειγμα, η λέξη uv 2 xy 2 z πρέπει να ανήκει στη Λ 3. Από τη στιγμή που vxy p, η λέξη uv 2 xy 2 z περιέχει το πολύ p περισσότερα σύμβολα από τη w. Είναι όμως δυνατόν μια λέξη με το πολύ + συνεχόμενα a να ανήκει στη Λ 3 ; Μόνο αν το μήκος αυτό είναι το τετράγωνο κάποιου αριθμού. Επομένως το ερώτημα μας μετατρέπεται στο ερώτημα κατά πόσο υπάρχει κάποιο τετράγωνο ανάμεσα στις τιμές +1 και +. Ας θεωρήσουμε το αμέσως μεγαλύτερο τετράγωνό από το ( ). Αυτό είναι το ( +1) = +2 +1. Παρατηρούμε ότι αυτό το τετράγωνο είναι μεγαλύτερο από το + ( +2 +1> + ). Συνεπώς, δεν υπάρχει κανένα τετράγωνο ακέραιου ανάμεσα στις τιμές +1 και + και, κατ επέκταση, η λέξη uv 2 xy 2 z δεν μπορεί να ανήκει στη γλώσσα Λ 3. Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 6
Αυτό μας οδηγεί σε αντίφαση και επομένως η υπόθεσή μας ότι η γλώσσα Λ 3 είναι ασυμφραστική ήταν εσφαλμένη. Συμπέρασμα: Η Λ 3 είναι μη ασυμφραστική. Άσκηση 5 Να προτείνετε μια ασυμφραστική γραμματική για τις εντολές μιας απλής διαδικαστικής γλώσσας, όπου μια εντολή μπορεί να έχει μια από τις πιο κάτω μορφές: (1) Εντολή ανάθεσης: Μια εντολή μπορεί να έχει την μορφή V:= E, όπου V είναι το όνομα μιας μεταβλητής που αποτελείται από κεφαλαία και πεζά γράμματα του αγγλικού αλφάβητου, ενώ Ε είναι μια έκφραση που ορίζεται όπως φαίνεται στη διαφάνεια 4 22. (2) Εντολή if: Μια εντολή μπορεί να έχει τη μορφή while V<E do εντολή (3) Εντολή while: Μια εντολή μπορεί να έχει τη μορφή if V<E then εντολή (4) Εντολή με ονομασία: Μια εντολή μπορεί να έχει τη μορφή L: εντολή, όπου το L είναι μια ακολουθία που αποτελείται από ακέραιους και πεζά γράμματα του αγγλικού αλφάβητου. (5) Εντολή goto: Μια εντολή μπορεί να έχει τη μορφή goto L, όπου το L είναι μια ονομασία εντολής όπως έχει οριστεί στο (4). (6) Ακολουθία: Μια εντολή μπορεί να έχει τη μορφή E 1 ;E 2 όπου τα E 1 και E 2 είναι δύο οποιεσδήποτε εντολές (δυνατό να αποτελούνται από επιμέρους εντολές χωρισμένες με ; ). Είναι η γραμματική σας πολύτροπη; Σχολιάστε την απάντησή σας. Αφού έχουμε ήδη ορίσει γραμματική για αριθμητικές εκφράσεις, στη γραμματική που θα ακολουθήσει θα χρησιμοποιήσουμε το σύμβολο Ε ως να είναι τερματικό σύμβολο. Η γραμματική που θα ορίσουμε είναι η (V,, Ρ, ), όπου V = {L, T, V, C, L, Kefalaio, Pezo, Akeraios, M, U, E}, Σ = {:, 1,,9, a,,z, A,,Z, =, <, while, do, if, then, ;} και R είναι οι πιο κάτω κανόνες. L : T /* Μια εντολή μπορεί να έχει τη μορφή L: εντολή */ T /* Μια εντολή μπορεί να μην έχει οποιαδήποτε ονομασία */ Τ V:= E /* Ανάθεση */ Τ if V C E then /* Εντολή if */ Τ while V C E do /* Εντολή while */ Τ goto L /* Εντολή goto */ Τ T; /* Ακολουθία */ Kefalaio A Z /* Τα κεφαλαία γράμματα του Αγγλικού αλφαβήτου */ Pezo a z /* Τα πεζά γράμματα του Αγγλικού αλφαβήτου */ Akeraios 1 9 /* Οι ακέραιοι */ Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 7
L Pezo M Akeraios M /* Ονομασία εντολής */ M Pezo M Akeraios M ε V Pezo U Kefalaio U U Pezo U Kefalaio U ε /* Ονομασία μεταβλητής*/ C < /* Ακολουθία */ H πιο πάνω γραμματική δεν είναι μονότροπη. Για παράδειγμα η εντολή x:= 1; y:=2; z:= 3, μπορεί να διαβαστεί ως x:= 1; (y:=2; z:=3) ή (x:= 1; y:=2;) z:=3 Εντούτοις, η προσεταιριστικότητα του τελεστή ; έχει σαν αποτέλεσμα η πολυτροπία αυτή να μην είναι προβληματική: και οι δύο ερμηνείες της πιο πάνω εντολής είναι ισοδύναμες μεταξύ τους. Σημείωση: Για όλες σχεδόν τις ασκήσεις αυτής της σειράς ασκήσεων υπάρχουν περισσότερες από μία ορθές απαντήσεις. Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2013 Σελίδα 8