Κανονικές Γραµµατικές Γραµµατικές για Κανονικές Γλώσσες Ταξινόµηση Γραµµατικών εξιά Παραγωγικές Γραµµατικές εξιά Παραγωγικές Γραµµατικές και NFA Αριστερά Παραγωγικές Γραµµατικές Κανονικές Γραµµατικές Γραµµατικές για Κανονικές Γλώσσες Όπως ήδη ξέρουµε: Η γλώσσα που περιγράφεται από ένα DFA ονοµάζεται κανονική γλώσσα. Κάθε DFA µπορεί να θεωρηθεί µία ειδική περίπτωση ενός NFA. Κάθε NFA µπορεί να µετατραπεί σε ένα ισοδύναµο DFA, έτσι, µία γλώσσα που περιγράφεται από ένα NFA είναι µία κανονική γλώσσα. Μία κανονική έκφραση µπορεί να µετατραπεί σε ένα ισοδύναµο NFA, έτσι, µία γλώσσα που περιγράφεται από µία κανονική έκφραση είναι µία κανονική γλώσσα. Ένα NFA µπορεί (µε κάποια προσπάθεια!) να µετατραπεί σε µία κανονική έκφραση. Έτσι τα DFA, NFA, και οι κανονικές εκφράσεις είναι όλα "ισοδύναµα", µε την έννοια ότι όποια γλώσσα περιγράφεται µε κάποιο από αυτά µπορεί να περιγραφεί και µε τα υπόλοιπα. Γνωρίζουµε επίσης ότι οι γλώσσες µπορούν να περιγραφούν από τις γραµµατικές. Παρακάτω θα ταξινοµήσουµε τις γραµµατικές. Το πρώτο είδος που θα µελετήσουµε είναι οι κανονικές γραµµατικές. Όπως θα περίµενε κανείς, οι κανονικές γραµµατικές είναι ισοδύναµες µε τα DFA, NFA, και τις κανονικές εκφράσεις. Ταξινόµηση Γραµµατικών
Υπενθυµίζουµε ότι µία γραµµατική αποτελείται από τέσσερα στοιχεία G = (V, T, S, P) όπου V είναι ένα πεπερασµένο σύνολο από (µετα) σύµβολα, ή µεταβλητές. T είναι ένα πεπερασµένο σύνολο από τερµατικά σύµβολα. S V είναι ένα ξεχωριστό στοιχείο του V που ονοµάζεται σύµβολο αρχής. P είναι ένα πεπερασµένο σύνολο κανόνων παραγωγής. Τα παραπάνω ισχύουν για όλες τις γραµµατικές. Χωρίζουµε τις γραµµατικές σε διάφορα είδη ανάλογα µε την µορφή των κανόνων παραγωγής. Αν οι κανόνες αυτοί ακολουθούν κάποια συγκεκριµένη διαδικασία, έχουµε ένα συγκεκριµένο είδος γραµµατικής. Αν οι κανόνες ταιριάζουν σε κάποια άλλη διαδικασία, έχουµε ένα διαφορετικό είδος γραµµατικής. Οι κανόνες παραγωγής έχουν την εξής µορφή: (V T)+ (V T)* ιαφορετικοί τύποι γραµµατικής µπορούν να περιγραφούν, αν βάλουµε περιορισµούς, είτε στο αριστερό µέλος των κανόνων, είτε στο δεξί µέλος, ή και στα δύο. εξιά Παραγωγικές Γραµµατικές Γενικά, οι κανόνες παραγωγής έχουν την εξής µορφή : (V T)+ (V T)* Σε µία δεξιά παραγωγική γραµµατική, όλοι οι κανόνες παραγωγής έχουν µία από τις δύο παρακάτω µορφές : ή V T*V V T* Αυτό επειδή, το αριστερό µέλος πρέπει να αποτελείται από µία µοναδική µεταβλητή, και το δεξί µέλος από οποιοδήποτε αριθµό τερµατικών συµβόλων
(που είναι µέλη του Σ) προαιρετικά ακολουθούµενα από µία µοναδική µεταβλητή. (Το "δεξιά" στην "δεξιά παραγωγική γραµµατική" αναφέρεται στο γεγονός ότι, σύµφωνα µε το βέλος, µία µεταβλητή µπορεί να προκύψει µόνο ως το δεξιότερο σύµβολο του κανόνα παραγωγής.) εξιά Παραγωγικές Γραµµατικές και NFA Υπάρχει µία απλή σχέση ανάµεσα στις δεξιά παραγωγικές γραµµατικές και στα NFA, όπως υποδεικνύεται από τα παρακάτω διαγράµµατα: A x B A x y z B A B A x Σαν παράδειγµα της αντιστοιχίας µεταξύ ενός NFA και µίας δεξιάς παραγωγικής γραµµατικής, βλέπουµε το παρακάτω αυτόµατο και την γραµµατική όπου και τα δύο αναγνωρίζουν το σύνολο συµβολοσειρών που απαρτίζονται από άρτιο αριθµό από 0 και άρτιο αριθµό από 1.
S ε S 0 B S 1 A A 0 C A 1 S B 0 S B 1 C C 0 A C 1 B Αριστερά Παραγωγικές Γραµµατικές Σε µια αριστερά παραγωγική γραµµατική, όλοι οι κανόνες παραγωγής έχουν τις εξής δύο µορφές: ή V VT* V T* Αυτό επειδή, το αριστερό µέλος πρέπει να αποτελείται από µία µοναδική µεταβλητή, και το δεξί µέλος από µια προαιρετική µοναδική µεταβλητή ακολουθούµενη από οποιοδήποτε αριθµό τερµατικών συµβόλων. Είναι το ίδιο µε την δεξιά παραγωγική γραµµατική εκτός από ότι, σύµφωνα µε το βέλος, µία µεταβλητή µπορεί να προκύψει µόνο στα αριστερά των τερµατικών συµβόλων, και όχι στα δεξιά. εν δίνουµε ιδιαίτερη προσοχή στις αριστερά παραγωγικές γραµµατικές, διότι όπως αποδεικνύεται είναι ισοδύναµες µε τις δεξιά παραγόµενες γραµµατικές. Αν έχουµε µία αριστερά παραγωγική γραµµατική για µια γλώσσα L, µπορούνε να κατασκευάσουµε µία δεξιά παραγόµενη γλώσσα ως εξής:
Βήµα Μέθοδος Κατασκευάζουµε µια δεξιά παραγόµενη γλώσσα για την (διαφορετική) γλώσσα L. Αντικαθιστούµε κάθε κανόνα παραγωγής A x της L µε τον κανόνα A x, και κάθε κανόνα A B x µε τον κανόνα A x B. Κατασκευάζουµε ένα NFA για την L από την δεξιά παραγόµενη γλώσσα. Αυτό το NFA θα πρέπει να έχει µοναδική τελική κατάσταση. Μιλήσαµε νωρίτερα για την παραγωγή ενός NFA από µία δεξιά παραγωγική γραµµατική σε προηγούµενη ενότητα. Αν το NFA έχει περισσότερες από µία τελικές καταστάσεις, µπορούµε να κάνουµε τις καταστάσεις αυτές µη τελικές, να προσθέσουµε µία νέα τελική κατάσταση, και ε µεταβάσεις για κάθε προηγούµενη τελική κατάσταση στην καινούργια τελική κατάσταση. Αντιστρέφουµε το NFA για την L για να πάρουµε ένα NFA για την L. 1. Κατασκευάζουµε ένα NFA που αναγνωρίζει την γλώσσα L. 2. Βεβαιωνόµαστε ότι το NFA έχει µία µόνο τελική κατάσταση. 3. Αντιστρέφουµε την φορά των βελών. 4. Κάνουµε την αρχική κατάσταση τελική και την τελική κατάσταση αρχική. Κατασκευάζουµε µια δεξιά παραγωγική γραµµατική για την L από το NFA για την L. Αυτή είναι η τεχνική για την οποία µιλήσαµε σε προηγούµενη ενότητα. Κανονικές Γραµµατικές Μία κανονική γραµµατική είναι είτε δεξιά παραγωγική γραµµατική είτε αριστερά παραγωγική γραµµατική. Για να είναι µία γραµµατική δεξιά παραγωγική, όλοι οι κανόνες παραγωγής της γραµµατικής πρέπει να έχουν µία από τις εξής µορφές:
V T*V ή V T* Για να είναι µία γραµµατική αριστερά παραγωγική, όλοι οι κανόνες παραγωγής της γραµµατικής πρέπει να έχουν µία από τις εξής µορφές: V VT* ή V T* εν πρέπει να ισχύουν και τα δύο. Για παράδειγµα, ας θεωρήσουµε µια γραµµατική µε τους παρακάτω κανόνες παραγωγής: S ε S a X X S b Η γραµµατική αυτή δεν είναι ούτε δεξιά παραγωγική, ούτε αριστερά παραγωγική, συνεπώς δεν είναι µία κανονική γραµµατική. εν υπάρχει λόγος να υποθέτουµε ότι η γλώσσα που παράγει, είναι µία κανονική γλώσσα (η αναγνωρίζεται από ένα DFA). Συγκεκριµένα, η γλώσσα που παράγει η πιο πάνω γραµµατική, είναι η γλώσσα της οποίας οι συµβολοσειρές είναι της µορφής a b. Αυτή η γλώσσα δεν αναγνωρίζεται από ένα DFA. (Γιατί;)