Κατηγορικές Γραµµατικές
Γραµµατικές Χωρίς περιορισµούς Με συµφραζόµενα Χωρίς συµφραζόµενα Κανονικές Πεπερασµένων επιλογών Κατηγορικές Ενεργοποίησης
Γραµµατικές G = { T, N, P, S } Τ: αλφάβητο τερµατικών συµβόλων Ν: αλφάβητο µητερµατικών συµβόλων T N = P: πεπερασµένο σύνολο κανόνων παραγωγής P ( T N ) * x ( T N ) * συµβολισµός: α -> β S: αρχικό σύµβολο
Ιεραρχία Chomsky Γλώσσες Γραµµατικές Μηχανές Κανονικές Γλώσσες Κανονικές Γραµµατικές Πεπερασµένα αυτόµατα Γλώσσες Χωρίς Συµφραζόµενα Γλώσσες Με Συµφραζόµενα Υπολογίσιµες γλώσσες Γραµµατικές Χωρίς Συµφραζόµενα Γραµµατικές Με Συµφραζόµενα Γραµµατικές χωρίς περιορισµούς Μη-Ντετερµινιστικά Αυτόµατα Με Στοίβα Γραµµικά Πεπερασµένα Αυτόµατα Μηχανή Turing
Γραµµατικές χωρίς περιορισµούς Γραµµατικές χωρίς περιορισµούς τύπου 0 προτασιακής σύνταξης κανόνες της µορφής σ -> τ σ V +, V = T N τ V * οι γραµµατικές αυτές είναι δύσκολο να συνταχθούν και ο τρόπος αυτός παράστασης δεν είναι φιλικός προς τον άνθρωπο. Οι πρακτικέςτουςεφαρµογές είναι ελάχιστες έως ανύπαρκτες
Γραµµατικές µε συµφραζόµενα Γραµµατικές µε συµφραζόµενα τύπου 1 κανόνες της µορφής ααβ -> αxβ Α Ν x V + α,β V * κατ εξαίρεση: επιτρέπεται το S -> εώστεναπαράγεταιηκενήσυµβολοσειρά αρκεί το S να µην υπάρχει σε δεξί µέλος κανόνα
Γραµµατικές µε συµφραζόµενα Ισοδύναµη µορφή γραµµατικών µε συµφραζόµενα, καλούνται µονότονες γραµµατικές κανόνες της µορφής α -> β α,β V + η α περιέχει τουλάχιστόν ένα µη τερµατικό σύµβολο α β κατ εξαίρεση: επιτρέπεται το S -> ε ώστεναπαράγεταιηκενήσυµβολοσειρά αρκεί το S να υπάρχει µόνο σε δεξί µέλος κανόνα
Γραµµατικές µε συµφραζόµενα Παράδειγµα κατασκευής γραµµατικής τύπου 1 θα κατασκευάσουµε γραµµατική για τη γλώσσα: α n b n c n αποδεικνύεται ότι δε µπορεί να κατασκευαστεί γραµµατική τύπου 2 για τη γλώσσα αυτή αρχίζοντας από την απλή περίπτωση S -> abc αν προσθέσουµε έναa στην αρχή θα πρέπει να προσθέσουµε κάτι και στο τέλος S -> asq στο τέλος πρέπει να υπάρχει κάτι µε b και c αλλά όχι απλά να προσθέσουµε bc αφού όλα τα b πρέπει να βρίσκονται πριν τα c
Γραµµατικές µε συµφραζόµενα κάτι τέτοιο επιτρέπει το b να είναι πάντα πριν το c bqc -> bbcc πάλι δεν τελειώσαµε αφούταq βρίσκονται δεξιά από τα c, αυτό µπορεί να διορθωθεί µε τον κανόνα cq -> Qc ηγραµµατική ολοκληρώθηκε
Γραµµατικές µε συµφραζόµενα - παράδειγµα S ::= assignments assignments ::= assign ; assignments assignments ::=. \%variable is set assign ::= x := exp (setx) assign ::= y := exp (sety) \% rules for an expression exp ::= [exp] exp ::= exp op exp
Γραµµατικές µε συµφραζόµενα - παράδειγµα \% marks can move at the end (setx) ; ::= ; (setx) (sety) ; ::= ; (sety) (setx) exp ::= exp (setx) (sety) exp ::= exp (sety) (setx) op ::= op (setx) (sety) op ::= op( sety) (setx) [ ::= [ (setx) (sety) [ ::= [ (sety) (setx) ] ::= ] (setx) (sety) ] ::= ] (sety)
Γραµµατικές µε συµφραζόµενα - παράδειγµα (setx) y ::= y (setx) (sety) x ::= x (sety) (setx) x ::= x (setx) (sety) y ::= y (sety) (setx) num ::= num (setx) (sety) num ::= num (sety) (setx) := ::= := (setx) (sety) := ::= := (sety)
Γραµµατικές µε συµφραζόµενα - παράδειγµα \% marks can change positions (setx) (sety) ::= (sety) (setx) (sety) (setx) ::= (setx) (sety) \%use a variable, move at the end exp (setx) ::= x (setx) exp (sety) ::= y (sety)
Γραµµατικές µε συµφραζόµενα - παράδειγµα \% marks can move after the dot (setx). ::=. @ (sety). ::=. @ \% terminal symbols exp ::= num op ::= + - * /
Γραµµατικές χωρίς συµφραζόµενα Γραµµατικές χωρίς συµφραζόµενα - τύπου 2 κανόνες της µορφής Α -> α Α Ν α V * Παράδειγµα <name> ::= tom john harry <sentence> ::= name <list> and <name> <list> ::= <name>, <list> name
Γραµµατικές χωρίς συµφραζόµενα Γραµµατική τύπου LL(1) L: Left to right - αναφέρεται στον τρόπο που σαρώνεται η συµβολοσειρά εισόδου, από τα αριστερά στα δεξιά L: Left most derivation η διαδικασία κατασκευής του συντακτικού δέντρου αντιστοιχεί στην αριστερότερη παραγωγή (1): one look ahead symbol για να επιλέξουµε ανάµεσα σε πιθανούς κανόνες ποιος είναι ο επόµενος κανόνας που πρέπει να εφαρµοσθεί αρκεί να γνωρίζουµε το επόµενο σύµβολο της συµβολοσειράς εισόδου
Γραµµατικές χωρίς συµφραζόµενα Παράδειγµα γραµµατικής τύπου LL(1) Ε -> ΤΕ Ε -> +ΤΕ ε Τ -> FT T -> x FT ε F -> (E) id id -> a b c d Παραγωγή: (a+bxc+bx(a+c))xd
Κανονικές γραµµατικές Κανονικές γραµµατικές τύπου 3 γραµµατικές πεπερασµένων καταστάσεων κανόνες της µορφής Α -> α Α -> ββ Α,Β Ν α Τ {ε} β Τ
Κανονικές γραµµατικές Παράδειγµα S -> a A A -> a A A -> d A A -> ε Παραγωγή: σειρές από α και d που ξεκινούν υποχρεωτικά από α
Γραµµατικές πεπερασµένων επιλογών Γραµµατικές πεπερασµένων επιλογών ή τύπου 4 κανόνες της µορφής Α -> α Α Ν α Τ {ε}
Κατηγορικές Γραµµατικές Attribute Grammars D. Knuth
Κατηγορικές Γραµµατικές Μπορούν να εκφράζουν σηµασιολογικούς κανόνες των γλωσσών προγραµµατισµού Περιγράφουν µία απεικόνιση µιας γλώσσας που περιγράφεται από µία γραµµατική χωρίς συµφραζόµενα σε κάποια ισοδύναµη διαφορετική της µορφή Η µορφή τους είναι εκτελέσιµη. Μπορεί δηλαδή να κατασκευαστεί αυτόµατα ένα πρόγραµµα το οποίο να κάνει ό,τι η κατηγορική γραµµατική περιγράφει Γενικά µπορούν να χρησιµοποιηθούν για περιγραφή υπολογιστικών διαδικασιών καθοδηγούµενες από τη σύνταξη
Ένα παράδειγµα Υπολογισµός ενός δεκαδικού αριθµού εκφρασµένου σε δυαδική µορφή Ηακόλουθηγραµµατική χωρίς συµφραζόµενα περιγράφει έναν δυαδικό αριθµό µε τερµατικά σύµβολα τα 0, 1 και. p1: Z::=L p2: Z::=L.L p3: L::=LB p4: L::=B p5: B::=1 p6: B::=0
Κατηγορήµατα Συσχετίζουµε κάθε µη τερµατικό σύµβολο µε ένα σύνολο από κατηγορήµατα, τα οποία µπορούν να θεωρηθούν σαν µεταφορείς πληροφορίας (µεταβλητές) Κάθε τερµατικό σύµβολο αναπαραστά λέξεις της γλώσσας, κάθε µη τερµατικό σύµβολο σχέσεις ανάµεσα στα τερµατικά σύµβολα Η πληροφορία που αποθηκεύεται στα κατηγορήµατα µπορεί να είναι ο,τιδήποτε µας εξυπηρετεί στη λύση του προβλήµατός µας π.χ. πίνακες συµβόλων, τµήµατα κώδικα, τµήµατακώδικαπου έχει παραχθεί, τύποι εκφράσεων, τιµές σταθερών, µεταβλητές
Το κατηγόρηµα v Κατηγόρηµα v (value): η δεκαδική τιµή της υποσυµβολοσειράς που αναγνωρίζεται από ένα µη τερµατικό σύµβολο. Είναι πραγµατικός αριθµός και αφορά τα µη τερµατικά σύµβολα Z, L, B p1: Z::=L p2: Z::=L.L p3: L::=LB p4: L::=B p5: B::=1 p6: B::=0
Σηµασιολογικοί κανόνες Πέρα από τα κατηγορήµατα σε κάθε κανόνα µπορούµε να αντιστοιχίσουµε σηµασιολογικούς κανόνες Οι σηµασιολογικοί κανόνες είναι εξισώσεις που εκφράζουν το πως σχετίζονται τα κατηγορήµατα µεταξύ τους
Σηµασιολογικοί κανόνες για το v p1: Z::=L Z.v = L.v p2: Z::=L 1.L 2 Z.v = L 1.ν + L 2.v p3: L 0 ::=L 1 B L o.v = L 1.v + B.v p4: L::=B L.v = B.v p5: B::=1 B.v = 1 p6: B::=0 B.v = 2 B.s
Το κατηγόρηµα s Αναπαριστά τη θέση του ψηφίου στον αριθµό Πρέπει να είναι µηδέν αµέσως αριστερά από την τελεία, ένα για το αµέσως αριστερά ψηφίο, δύο για το επόµενο κ.ο.κ Αντίστοιχα πρέπει να είναι -1 για το ψηφίο αµέσως δεξιά από την τελεία, -2 για το πιο δεξία, κ.ο.κ Το πρόβληµα µετατίθεται στη σωστή εκχώρηση τιµής στο s
Σηµασιολογικοί κανόνες για το s Bήµα 1 p1: Z::=L p2: Z::=L 1.L 2 p3: L 0 ::=L 1 B B.s = L 0.s L 1.s = L 0 s + 1 p4: L::=B B.s = L.s p5: B::=1 p6: B::=0
Σηµασιολογικοί κανόνες για το s Bήµα 2 p1: Z::=L L.s = 0 p2: Z::=L 1.L 2 L 1.s =0 p3: L 0 ::=L 1 B B.s = L 0.s L 1.s = L 0 s + 1 p4: L::=B B.s = L.s p5: B::=1 p6: B::=0
Σηµασιολογικοί κανόνες για το s Bήµα 3 p1: Z::=L L.s = 0 p2: Z::=L 1.L 2 L 1.s =0 L 2.s=-L 2.l p3: L 0 ::=L 1 B B.s = L 0.s L 1.s = L 0 s + 1 p4: L::=B B.s = L.s p5: B::=1 p6: B::=0
Το κατηγόρηµα l Αναπαριστά το µήκος της συµβολοσειράς του κατηγορήµατος Χρησιµοποιείται για να δώσει τιµή στο κατηγόρηµα s
Σηµασιολογικοί κανόνες για το l p1: Z::=L p2: Z::=L 1.L 2 L 2.s = -L 2.l p3: L 0 ::=L 1 B L o.l = L 1.l + 1 p4: L::=B L.l = 1 p5: B::=1 p6: B::=0
Η πλήρης κατηγορική γραµµατική
Ένα παράδειγµα εκτέλεσης
Γραµµατικές ενεργοποίησης Υποπερίπτωση των κατηγορικών γραµµατικών Αποδεικνύεται ότι ό,τι µπορεί να περιγράψει µία γραµµατική ενεργοποίησης περιγράφεται και από µία κατηγορική γραµµατική Κώδικας ενεργοποιείται καθώς αναγνωρίζεται η συµβολοσειρά εισόδου
Το παράδειγµα p1: S ::= Z. D p2: Z ::= n B p3: Z ::= ε p4: D ::= n D p5: D ::= ε
Το παράδειγµα int value,dlen; p1: S ::= value=0; dlen=0; Z. D p2: Z ::= n value=value*10+n B p3: Z ::= ε p4: D ::= n dlen++; value=value+n/10 dlen ; D p5: D ::= ε