Τυπική γραμματική: Διαφορά μεταξύ των αναθεωρήσεων
Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
μ robot Adding: es:Gramática formal, pt:Gramática formal Modifying: en:Formal grammar |
αλλαγή |
||
Γραμμή 1:
Στην [[Επιστήμη Υπολογιστών]] μια '''τυπική γραμματική''' (formal grammar) είναι μια [[αφηρημένη δομή]] που περιγράφει μια [[Τυπική γλώσσα]] επακριβώς, δηλαδή είναι ένα σύνολο κανόνων που απεικονίζουν με μαθηματικά το [[Σύνολο|σύνολο]], (συνήθως [[Σύνολο|απειροσύνολο]]), των πεπερασμένου μήκους [[
Οι τυπικές γραμματικές ονομάστηκαν έτσι κατ’ αναλογία των [[Γραμματική|γραμματικών]] των γλωσσών που μιλούν οι άνθρωποι, αλλά τα αλφάβητά τους δεν περιέχουν κατ’ ανάγκη γράμματα. Οι τυπικές γραμματικές διαχωρίζονται σε δυο κύριες κατηγορίες : ''γενετικές'' (generative) και ''αναλυτικές'' (analytic).
Μια [[Γενετική γραμματική]], (το πιο γνωστό είδος, που θα μπορούσε να ονομάζεται γεννητική ή παραγωγική γραμματική), είναι ένα σύνολο κανόνων με το οποίο
:Συνοπτικά για την γενετική γραμματική :
:* λειτουργεί ως δημιουργός
:* η πορεία είναι από την γραμματική προς τις
:* εφαρμόζεται παραγωγική (top-down) προσέγγιση, από το γενικό προς το μερικό.
Μια [[Αναλυτική γραμματική]], αντιθέτως, είναι ένα σύνολο κανόνων που υποθέτουν ότι
* ΑΛΗΘΗΣ, αν
* ΨΕΥΔΗΣ, αν
:Συνοπτικά για την αναλυτική γραμματική :
:* σαρώνει
:* η πορεία είναι από τις
:* εφαρμόζεται επαγωγική (bottom-up) προσέγγιση, από το μερικό προς το γενικό.
== Γενετικές γραμματικές ==
Μια γενετική γραμματική συνίσταται από ένα σύνολο κανόνων για μετασχηματισμό
Για παράδειγμα, υποθέτουμε ότι το αλφάβητο αποτελείται από '<math>a</math>' και '<math>b</math>', το σύμβολο έναρξης είναι '<math>S</math>' και ισχύουν οι παρακάτω κανόνες (ή νόμοι) παραγωγής:
Γραμμή 27:
: 2. <math>S \longrightarrow ba</math>
και ξεκινάμε με
Κάνοντας διάφορες επιλογές κανόνων κατά την διαδικασία δημιουργίας
=== Τυπικός ορισμός ===
Στην κλασσική τυποποίηση των γενετικών γραμματικών, που πρώτος παρουσίασε ο [[Νόαμ Τσόμσκι]] το [[1956]], μια γραμματική ''G'' αποτελείται από τα παρακάτω μέρη:
* Ένα πεπερασμένο σύνολο <math>N</math> ''μη–τελικών'' (nonterminal) συμβόλων.
* Ένα πεπερασμένο σύνολο <math>\Sigma</math> ''τελικών'' (terminal) συμβόλων, το οποίο έχει [[Τομή συνόλων|τομή]] με το <math>N</math> το [[Σύνολο|κενό σύνολο]].
* Ένα πεπερασμένο σύνολο <math>P</math> ''κανόνων παραγωγής'', όπου κάθε κανόνας έχει την μορφή
::
:(όπου <math>{}^{*}</math> είναι [[Αστέρι Κλέινι]] και <math>\cup</math> είναι [[Ένωση συνόλων|ένωση συνόλων]]) με τον περιορισμό ότι η αριστερή πλευρά του κανόνα (δηλαδή το μέρος που βρίσκεται αριστερά από το <math>\longrightarrow</math>) πρέπει να περιέχει τουλάχιστον ένα μη–τελικό σύμβολο.
* Ένα σύμβολο <math>S</math> που ανήκει στο <math>N</math> και προσδιορίζεται ως ''αρχικό σύμβολο δημιουργίας
Συνήθως, η τυπική γραμματική δηλώνεται ως μια διατεταγμένη τετράδα
:: <math>G</math> = <math>(N, \Sigma, P, S)</math>.
Η ''γλώσσα'' μιας τυπικής γραμματικής <math>G = (N, \Sigma, P, S)</math>, που συμβολίζεται <math>\boldsymbol{L}(G)</math>, ορίζεται ως το σύνολο όλων των
=== Παράδειγμα ===
''Για τα παραδείγματα αυτά, τα σχετικά με τις τυπικές γλώσσες σύνολα καθορίζονται με τον [[Συμβολισμός δόμησης συνόλου|συμβολισμό δόμησης συνόλου]]''.
Γραμμή 57:
: 4. <math>Bb \longrightarrow bb </math>
και το μη–τελικό σύμβολο <math>S</math> ως αρχικό σύμβολο. Μερικά δείγματα παραγωγής
* <math>\boldsymbol{S} \longrightarrow (2) abc</math>
* <math>\boldsymbol{S} \longrightarrow (1) aB\boldsymbol{S}c \longrightarrow (2) a\boldsymbol{Ba}bcc \longrightarrow (3) aa\boldsymbol{Bb}cc \longrightarrow (4) aabbcc</math>
* <math>\boldsymbol{S} \longrightarrow (1) aB\boldsymbol{S}c \longrightarrow (1) aBaB\boldsymbol{S}cc \longrightarrow (2) a\boldsymbol{Ba}Babccc</math> <math>\longrightarrow (3) aaB\boldsymbol{Ba}bccc \longrightarrow (3) aa\boldsymbol{Ba}Bbccc \longrightarrow (3) aaaB\boldsymbol{Bb}ccc</math> <math>\longrightarrow (4) aaa\boldsymbol{Bb}bccc \longrightarrow (4) aaabbbccc</math>
Είναι φανερό ότι αυτή η γραμματική ορίζει την γλώσσα, (''έστω ότι την ονομάζουμε γλώσσα-1''), <math>\left \{ a^{n}b^{n}c^{n} | n > 0 \right \}</math>, όπου <math>a^{n}</math> είναι
==== Συστήματα-L ====
Οι τυπικές γενετικές γραμματικές είναι παρόμοιες με τα [[Σύστημα-L|συστήματα-L]] (συστήματα Lindenmayer), με τις εξής διαφορές:
* τα συστήματα-L δεν έχουν διάκριση μεταξύ τελικών και μη–τελικών συμβόλων,
* τα συστήματα-L έχουν περιορισμούς στην σειρά εφαρμογής των κανόνων,
* τα συστήματα-L δεν έχουν πέρας εφαρμογής των κανόνων, και δημιουργούν μια άπειρη ακολουθία
Τυπικά, κάθε
=== Η Ιεραρχία του Τσόμσκι ===
Όταν πρώτος ο [[Νόαμ Τσόμσκι]] περιέγραψε τυπικά τις γενετικές γραμματικές το [[1956]], τις ταξινόμησε σε τέσσερις τύπους, που τώρα είναι γνωστοί ως [[Ιεραρχία του Τσόμσκι]].
Δυο σημαντικοί τύποι είναι η [[Γραμματική χωρίς συμφραζόμενα]] (context-free grammar) και η [[Κανονική γραμματική]] (regular grammar), και οι γλώσσες που παράγονται από τέτοιες γραμματικές ονομάζονται αντίστοιχα ''[[Γλώσσα χωρίς συμφραζόμενα]]'' και ''[[Κανονική γλώσσα]]''. Αν και δεν είναι τόσο δυνατές γραμματικές, όσο είναι η ''απεριόριστη γραμματική'' (unrestricted grammar) που μπορεί να εκφράσει οποιαδήποτε γλώσσα μπορεί να γίνει αποδεκτή από μια [[Μηχανή Τούρινγκ]] (Turing machine), αυτοί οι δυο τύποι περιορισμένων γραμματικών χρησιμοποιούνται πολύ συχνά επειδή μπορούν να δημιουργηθούν εύκολα [[Συντακτική ανάλυση
==== Γραμματικές χωρίς συμφραζόμενα ====
Σε μια [[Γραμματική χωρίς συμφραζόμενα]], το αριστερό μέρος του κανόνα παραγωγής περιέχει μόνο ένα μη–τελικό σύμβολο. Η γλώσσα-1 που ορίστηκε προηγουμένως δεν είναι «Γλώσσα χωρίς συμφραζόμενα», αλλά η επόμενη είναι:
Γραμμή 90:
==== Κανονικές γραμματικές ====
Σε μια [[Κανονική γραμματική]], το αριστερό μέρος του κανόνα παραγωγής περιέχει μόνο ένα μη–τελικό σύμβολο, αλλά και το δεξιό μέρος του κανόνα έχει περιορισμό: Επιτρέπεται να είναι κενό, ή να περιέχει μόνο ένα μη–τελικό σύμβολο, ή να περιέχει μόνο ένα τελικό σύμβολο ακολουθούμενο από ένα μη–τελικό σύμβολο. (Ενίοτε χρησιμοποιείται ένας ευρύτερος ορισμός: επιτρέπονται
Είναι «Κανονική γλώσσα» η γλώσσα, (''έστω ότι την ονομάζουμε γλώσσα-3''), <math>\left \{ a^{n}b^{m} | m, n > 0 \right \}</math> (οποιοδήποτε θετικό πλήθος χαρακτήρων 'a', ακολουθούμενο από οποιοδήποτε θετικό πλήθος χαρακτήρων 'b', όπου τα δύο πλήθη μπορεί να διαφέρουν), καθώς μπορεί να οριστεί από την γραμματική <math>G3</math> με <math>N=\left \{S, A, B\right \}</math>, <math>\Sigma=\left \{a, b\right \}</math>, αρχικό σύμβολο <math>S</math>, και τους ακόλουθους κανόνες παραγωγής:
Γραμμή 101:
: 5. <math>B \longrightarrow \epsilon</math>
(όπου <math>\epsilon</math> συμβολίζει
Πρακτικά, οι κανονικές γραμματικές συνήθως ορίζονται με [[Κανονική έκφραση|κανονικές εκφράσεις]].
==== Σύγκριση Κανονικής γλώσσας με Γλώσσα χωρίς συμφραζόμενα ====
Πέρα από τις διαφορές στους κανόνες παραγωγής, που απαιτούνται για να παραχθούν οι δυο τύποι γλωσσών, η ουσιαστική διαφορά μεταξύ της χωρίς συμφραζόμενα γλώσσας-2
:<math>\left \{ a^{n}b^{n} | n > 0 \right \}</math>
και της κανονικής γλώσσας-3
:<math>\left \{ a^{n}b^{m} | n, m > 0 \right \}</math>
είναι η προδιαγραφή ότι το πλήθος των χαρακτήρων 'a' πρέπει να είναι ίσο με το πλήθος των χαρακτήρων 'b' στην χωρίς συμφραζόμενα γλώσσα-2. Επομένως, οποιοδήποτε [[Θεωρία αυτομάτων|αυτόματο]] που θα προσπαθήσει να αναλύσει συντακτικά
Για περισσότερες λεπτομέρειες, δείτε [[Γλώσσα χωρίς συμφραζόμενα]] και [[Κανονική γλώσσα]].
=== Άλλοι τύποι γενετικών γραμματικών ===
Πολλές επεκτάσεις και παραλλαγές της πρωτότυπης ιεράρχησης, (Ιεραρχία Τσόμσκι), των τυπικών γραμματικών έχουν πρόσφατα αναπτυχθεί, και από γλωσσολόγους και από πληροφορικούς, είτε για αυξήσουν την εκφραστική ισχύ των γραμματικών, είτε για να τις κάνουν προσιτές σε συντακτική (ή άλλη) ανάλυση. Βέβαια αυτοί οι δυο στόχοι είναι αντιδιαμετρικοί : όσο περισσότερο εκφραστική είναι μια τυπική γραμματική, τόσο δυσκολότερο είναι να αναλυθεί, συντακτικά ή αλλιώς, με αυτοματοποιημένες μεθόδους. Μερικοί τύποι γραμματικών, που έχουν αναπτυχθεί πρόσφατα, είναι:
* Η [[Γραμματική προσάρτησης δένδρων]] (Tree-adjoining grammar) αυξάνει την εκφραστικότητα της συμβατικής γενετικής γραμματικής με το να επιτρέπει στους κανόνες παραγωγής να επενεργούν σε δένδρα συντακτικής ανάλυσης και όχι μόνο σε
* Η [[Γραμματική παραθημάτων]] (Affix grammar) και η [[Γραμματική ιδιοτήτων]] (attribute grammar) επιτρέπουν την επαύξηση των παραγωγικών κανόνων με σημασιολογικές ιδιότητες και λειτουργίες, και είναι και οι δύο χρήσιμες στην αύξηση της εκφραστικότητας της γραμματικής και στην κατασκευή εύχρηστων εργαλείων μετάφρασης γλωσσών.
Ένα [http://www.formalgrammar.tk ετήσιο συνέδριο] είναι αφιερωμένο στις τυπικές γραμματικές.
== Αναλυτικές γραμματικές ==
Αν και υπάρχει τεράστιο πλήθος δημοσιεύσεων για αλγορίθμους συντακτικών αναλυτών, οι πλείστοι των αλγορίθμων αυτών θεωρούν ότι η γλώσσα που πρόκειται να αναλυθεί συντακτικά πρέπει αρχικά να ''περιγραφεί'' με μια γενετική τυπική γραμματική, και ότι ο στόχος είναι να μετασχηματιστεί αυτή η γενετική γραμματική σε έναν λειτουργικό συντακτικό αναλυτή. Η εναλλακτική προσέγγιση είναι να τυποποιηθεί αρχικά η γλώσσα μέσω μιας '''αναλυτικής γραμματικής''', η οποία έχει αμεσότερη αντιστοιχία με την δομή ενός συντακτικού αναλυτή της γλώσσας αυτής. Ακολουθούν παραδείγματα τυποποιήσεων με αναλυτικές γραμματικές:
* [http://languagemachine.sourceforge.net Η γλωσσομηχανή] (The Language Machine) εφαρμόζει άμεσα απεριόριστες αναλυτικές γραμματικές. Χρησιμοποιούνται κανόνες αντικατάστασης για τον μετασχηματισμό μιας εισόδου σε εξόδους και συμπεριφορές. Το σύστημα μπορεί επίσης να παραγάγει [http://languagemachine.sourceforge.net/picturebook.html το διάγραμμα-lm] (the lm-diagram) που δείχνει τι συμβαίνει όταν εφαρμόζονται οι κανόνες της
* [[Γλώσσα παραγωγικής συντακτικής ανάλυσης]] (Top-down parsing language, TDPL) : ένας εξαιρετικά μινιμαλιστικός φορμαλισμός αναλυτικών γραμματικών που αναπτύχθηκε στην αρχή της δεκαετίας 1970 για την μελέτη των παραγωγικών (top-down) [[Συντακτική ανάλυση (προγραμματισμός)|συντακτικών αναλυτών]] (parser).
* [[Γραμματική συντακτικής ανάλυσης εκφράσεων]] (Parsing expression grammar, PEG) : μια πρόσφατη γενίκευση της TDPL σχεδιασμένη να αντιμετωπίσει τις ανάγκες [[Εκφραστικότητα|εκφραστικότητας]] (expressiveness) για συγγραφείς [[Γλώσσα προγραμματισμού|γλωσσών προγραμματισμού]] και [[Συμβολομεταφραστής|συμβολομεταφραστών]].
|