Στην επιστήμη υπολογιστών μια τυπική γραμματική (formal grammar)[1] είναι μια αφηρημένη δομή που περιγράφει μια τυπική γλώσσα επακριβώς, δηλαδή είναι ένα σύνολο κανόνων που απεικονίζουν μαθηματικώς το σύνολο, (συνήθως απειροσύνολο), των πεπερασμένου μήκους στοιχειοσειρών / συμβολοσειρών που σχηματίζονται με διακριτά στοιχεία / σύμβολα (π.χ. γράμματα), τα οποία ανήκουν σε ένα σύνολο, συνήθως πεπερασμένο, που το λέμε αλφάβητο. Οι τυπικές γραμματικές ονομάστηκαν έτσι κατ’ αναλογία των γραμματικών των γλωσσών που μιλούν οι άνθρωποι, αλλά τα αλφάβητα τους δεν περιέχουν κατ’ ανάγκη γράμματα. Οι τυπικές γραμματικές διαχωρίζονται σε δυο κύριες κατηγορίες: γενετικές (generative) και αναλυτικές (analytic).
Μια γενετική γραμματική, (το πιο γνωστό είδος, που θα μπορούσε να ονομάζεται γεννητική ή παραγωγική γραμματική), είναι ένα σύνολο κανόνων με το οποίο όλες οι συμβολοσειρές που μπορούν να υπάρξουν σε μια γλώσσα μπορούν να παραχθούν με διαδοχικά επιθέματα ξεκινώντας από ένα προκαθορισμένο αρχικό σύμβολο δημιουργίας στοιχειοσειράς. Μια γενετική γραμματική ουσιαστικά είναι η τυπική μορφή του αλγορίθμου παραγωγής στοιχειοσειρών που ανήκουν στην γλώσσα.[2]
Μια αναλυτική γραμματική, αντιθέτως, είναι ένα σύνολο κανόνων που υποθέτουν ότι μία αυθαίρετη στοιχειοσειρά δίνεται προς επεξεργασία και με διαδοχικά βήματα ανάλυσης προκύπτει ως αποτέλεσμα η τιμή μιας λογικής μεταβλητής:
Μια γενετική γραμματική συνίσταται από ένα σύνολο κανόνων για μετασχηματισμό στοιχειοσειρών. Για να δημιουργηθεί μια στοιχειοσειρά της γλώσσας, αρχίζουμε με μια στοιχειοσειρά που περιέχει μόνο το προκαθορισμένο αρχικό σύμβολο δημιουργίας στοιχειοσειράς, (συνήθως το ''), και εφαρμόζοντας διαδοχικά τους κανόνες (οσεσδήποτε φορές, με οποιαδήποτε σειρά) την τροποποιούμε. Η γλώσσα αποτελείται από όλες τις στοιχειοσειρές που μπορούν να δημιουργηθούν με αυτόν τον τρόπο.
Για παράδειγμα, υποθέτουμε ότι το αλφάβητο αποτελείται από '' και '', το σύμβολο έναρξης είναι '' και ισχύουν οι παρακάτω κανόνες (ή νόμοι) παραγωγής:
και ξεκινάμε με την στοιχειοσειρά "", και μπορούμε να επιλέξουμε έναν κανόνα για να τον εφαρμόσουμε στην στοιχειοσειρά. Αν επιλέξουμε τον κανόνα 1, αντικαθιστούμε το '' με '' και παίρνουμε την "". Αν επιλέξουμε πάλι τον κανόνα 1, αντικαθιστούμε το '' με '' και παίρνουμε την "". Η διαδικασία συνεχίζεται μέχρι η στοιχειοσειρά να περιέχει μόνο στοιχεία από το αλφάβητο (δηλαδή '' και ''). Για να περαιωθεί το παράδειγμα, αν επιλέξουμε τώρα τον κανόνα 2, αντικαθιστούμε το '' με '' και παίρνουμε την "", οπότε τελειώσαμε. Μπορούμε να γράψουμε αυτή την σειρά επιλογών πιο συνοπτικά, χρησιμοποιώντας σύμβολα : . Η γλώσσα της γραμματικής είναι το σύνολο όλων των στοιχειοσειρών που μπορούν να παραχθούν με εφαρμογή αυτής της διαδικασίας : .
Κάνοντας διάφορες επιλογές κανόνων κατά την διαδικασία δημιουργίας στοιχειοσειράς, παράγουμε μιά συγκεκριμένη στοιχειοσειρά. Αν αυτή η στοιχειοσειρά μπορεί να δημιουργηθεί και με διαφορετική σειρά επιλογών, τότε λέμε ότι η γραμματική είναι ασαφής ή ότι παράγει αμφισημίες. [3][4]
Στην κλασσική τυποποίηση των γενετικών γραμματικών, που πρώτος παρουσίασε ο Νόαμ Τσόμσκι το 1956, μια γραμματική G αποτελείται από τα παρακάτω μέρη:
Συνήθως, η τυπική γραμματική δηλώνεται ως μια διατεταγμένη τετράδα
Η γλώσσα μιας τυπικής γραμματικής , που συμβολίζεται , ορίζεται ως το σύνολο όλων των στοιχειοσειρών του που μπορούν να παραχθούν ξεκινώντας από μια στοιχειοσειρά με περιεχόμενο το αρχικό σύμβολο και εφαρμόζοντας επαναληπτικά στην στοιχειοσειρά τους κανόνες παραγωγής του μέχρι να μη περιέχει η στοιχειοσειρά μη–τελικά σύμβολα.
Για τα παραδείγματα αυτά, τα σχετικά με τις τυπικές γλώσσες σύνολα καθορίζονται με τον συμβολισμό δόμησης συνόλου.
Θεωρούμε, για παράδειγμα, την γραμματική με , , το να απαρτίζεται από τους ακόλουθους κανόνες παραγωγής
και το μη–τελικό σύμβολο ως αρχικό σύμβολο. Μερικά δείγματα παραγωγής στοιχειοσειρών της γλώσσας ακολουθούν, (και σημειώνουμε σε παρένθεση τον αριθμό του κανόνα που χρησιμοποιείται, και με έντονη γραφή το τμήμα της στοιχειοσειράς που αντικαθίσταται):
Είναι φανερό ότι αυτή η γραμματική ορίζει την γλώσσα, (έστω ότι την ονομάζουμε γλώσσα-1), , όπου είναι μια στοιχειοσειρά μήκους n αποτελούμενη από χαρακτήρες . Επομένως, η πλήρης γλώσσα συνίσταται από στοιχειοσειρές που έχουν στην αρχή τους ένα θετικό πλήθος από χαρακτήρες 'a', ακολουθούμενο από ίσο πλήθος χαρακτήρων 'b', ακολουθούμενο από ίσο πλήθος χαρακτήρων 'c'.
Οι τυπικές γενετικές γραμματικές είναι παρόμοιες με τα συστήματα-L (συστήματα Lindenmayer)[5], με τις εξής διαφορές:
Τυπικά, κάθε στοιχειοσειρά σχετίζεται με ένα σύνολο σημείων του χώρου, και το εξαγόμενο ενός συστήματος-L ορίζεται ότι είναι το όριο αυτών των συνόλων.
Όταν πρώτος ο Νόαμ Τσόμσκι περιέγραψε τυπικά τις γενετικές γραμματικές το 1956, τις ταξινόμησε σε τέσσερις τύπους, που τώρα είναι γνωστοί ως Ιεραρχία του Τσόμσκι. Η διαφοροποίηση μεταξύ των τύπων έγκειται στο ότι διαδοχικά αυτοί έχουν κανόνες παραγωγής αυξανόμενης αυστηρότητας, οπότε μπορούν να εκφράσουν λιγότερες τυπικές γλώσσες.
Δυο σημαντικοί τύποι είναι η Γραμματική χωρίς συμφραζόμενα (context-free grammar) και η Κανονική γραμματική (regular grammar), και οι γλώσσες που παράγονται από τέτοιες γραμματικές ονομάζονται αντίστοιχα Γλώσσα χωρίς συμφραζόμενα και Κανονική γλώσσα. Αν και δεν είναι τόσο δυνατές γραμματικές, όσο είναι η απεριόριστη γραμματική (unrestricted grammar) που μπορεί να εκφράσει οποιαδήποτε γλώσσα μπορεί να γίνει αποδεκτή από μια Μηχανή Τούρινγκ (Turing machine), αυτοί οι δυο τύποι περιορισμένων γραμματικών χρησιμοποιούνται πολύ συχνά επειδή μπορούν να δημιουργηθούν εύκολα συντακτικοί αναλυτές γι’ αυτές. Πράγματι, για τις γραμματικές χωρίς συμφραζόμενα υπάρχουν πολύ γνωστοί αλγόριθμοι για την δημιουργία αποδοτικών συντακτικών αναλυτών, που είναι γραμμικοί από αριστερά ή από δεξιά.
Σε μια Γραμματική χωρίς συμφραζόμενα, το αριστερό μέρος κάθε κανόνα παραγωγής περιέχει μόνο ένα μη–τελικό σύμβολο. Η γλώσσα-1 που ορίστηκε προηγουμένως δεν είναι «Γλώσσα χωρίς συμφραζόμενα», αλλά η επόμενη είναι:
Είναι «Γλώσσα χωρίς συμφραζόμενα» η γλώσσα, (έστω ότι την ονομάζουμε γλώσσα-2), (οποιοδήποτε θετικό πλήθος χαρακτήρων 'a', ακολουθούμενο από ίσο πλήθος χαρακτήρων 'b'), που ορίζεται με την γραμματική που έχει , , αρχικό σύμβολο , και τους παρακάτω κανόνες παραγωγής:
Σε μια Κανονική γραμματική, το αριστερό μέρος κάθε κανόνα παραγωγής περιέχει μόνο ένα μη–τελικό σύμβολο, αλλά και το δεξιό μέρος του κανόνα έχει περιορισμό: Επιτρέπεται να είναι κενό, ή να περιέχει μόνο ένα μη–τελικό σύμβολο, ή να περιέχει μόνο ένα τελικό σύμβολο ακολουθούμενο από ένα μη–τελικό σύμβολο. (Ενίοτε χρησιμοποιείται ένας ευρύτερος ορισμός: επιτρέπονται μακρύτερες στοιχειοσειρές τελικών συμβόλων ή μόνο μη–τελικά σύμβολα, ώστε να είναι ευκολότερη η περιγραφή της γλώσσας, χωρίς να αλλάζει ο τύπος της γλώσσας). Η γλώσσα-2 που ορίσαμε προηγουμένως δεν είναι κανονική, αλλά η επόμενη είναι:
Είναι «Κανονική γλώσσα» η γλώσσα, (έστω ότι την ονομάζουμε γλώσσα-3), (οποιοδήποτε θετικό πλήθος χαρακτήρων 'a', ακολουθούμενο από οποιοδήποτε θετικό πλήθος χαρακτήρων 'b', όπου τα δύο πλήθη μπορεί να διαφέρουν), καθώς μπορεί να οριστεί από την γραμματική με , , αρχικό σύμβολο , και τους ακόλουθους κανόνες παραγωγής:
(όπου συμβολίζει την κενή στοιχειοσειρά, δηλαδή μια στοιχειοσειρά με μήκος μηδενικό).
Πρακτικά, οι κανονικές γραμματικές συνήθως ορίζονται με κανονικές εκφράσεις.
Πέρα από τις διαφορές στους κανόνες παραγωγής, που απαιτούνται για να παραχθούν οι δυο τύποι γλωσσών, η ουσιαστική διαφορά μεταξύ της χωρίς συμφραζόμενα γλώσσας-2
και της κανονικής γλώσσας-3
είναι η προδιαγραφή ότι το πλήθος των χαρακτήρων 'a' πρέπει να είναι ίσο με το πλήθος των χαρακτήρων 'b' στην χωρίς συμφραζόμενα γλώσσα-2. Επομένως, οποιοδήποτε αυτόματο που θα προσπαθήσει να αναλύσει συντακτικά τις στοιχειοσειρές της γλώσσας χωρίς συμφραζόμενα πρέπει κατ’ ανάγκη να κρατάει λογαριασμό για περισσότερες πληροφορίες από εκείνο το αυτόματο που θα αναλύσει συντακτικά την κανονική γλώσσα. Το τελευταίο δεν χρειάζεται να μετρήσει το πλήθος των 'a' και των 'b', αλλά το μόνο που απαιτείται είναι να βεβαιώσει ότι το πλήθος καθενός δεν είναι μηδενικό.
Για περισσότερες λεπτομέρειες, δείτε Γλώσσα χωρίς συμφραζόμενα και Κανονική γλώσσα.
Πολλές επεκτάσεις και παραλλαγές της πρωτότυπης ιεράρχησης, (Ιεραρχία Τσόμσκι), των τυπικών γραμματικών έχουν πρόσφατα αναπτυχθεί, και από γλωσσολόγους και από πληροφορικούς, είτε για αυξήσουν την εκφραστική ισχύ των γραμματικών, είτε για να τις κάνουν προσιτές σε συντακτική (ή άλλη) ανάλυση. Βέβαια αυτοί οι δυο στόχοι είναι αντιδιαμετρικοί : όσο περισσότερο εκφραστική είναι μια τυπική γραμματική, τόσο δυσκολότερο είναι να αναλυθεί, συντακτικά ή αλλιώς, με αυτοματοποιημένες μεθόδους. Μερικοί τύποι γραμματικών, που έχουν αναπτυχθεί πρόσφατα, είναι:
Ένα ετήσιο συνέδριο Αρχειοθετήθηκε 2007-10-08 στο Wayback Machine. είναι αφιερωμένο στις τυπικές γραμματικές.
Αν και υπάρχει τεράστιο πλήθος δημοσιεύσεων για αλγορίθμους συντακτικών αναλυτών, οι πλείστοι των αλγορίθμων αυτών θεωρούν ότι η γλώσσα που πρόκειται να αναλυθεί συντακτικά πρέπει αρχικά να περιγραφεί με μια γενετική τυπική γραμματική, και ότι ο στόχος είναι να μετασχηματιστεί αυτή η γενετική γραμματική σε έναν λειτουργικό συντακτικό αναλυτή. Η εναλλακτική προσέγγιση είναι να τυποποιηθεί αρχικά η γλώσσα μέσω μιας αναλυτικής γραμματικής, η οποία έχει αμεσότερη αντιστοιχία με την δομή ενός συντακτικού αναλυτή της γλώσσας αυτής. Ακολουθούν παραδείγματα τυποποιήσεων με αναλυτικές γραμματικές:
Θεωρία αυτομάτων: τυπικές γλώσσες και τυπικές γραμματικές | |||
---|---|---|---|
Ιεραρχία Τσόμσκι | Γραμματικές | Γλώσσες | Ελάχιστο αυτόματο |
Τύπος-0 | Απεριόριστες | Αναδρομικά αριθμήσιμη | Μηχανή Τούρινγκ |
- | (χωρίς κοινό όνομα) | Αναδρομική | Αποφασιστής |
Τύπος-1 | Με συμφραζόμενα | Με συμφραζόμενα | Γραμμικό φραγμένο |
Τύπος-2 | Χωρίς συμφραζόμενα | Χωρίς συμφραζόμενα | Σωρού |
Τύπος-3 | Κανονική | Κανονική | Πεπερασμένο |
Κάθε κατηγορία γλώσσας ή γραμματικής είναι γνήσιο υποσύνολο της κατηγορίας που είναι ακριβώς από πάνω της. |