Ορισµοί Τυπικές Γλώσσες Γραµµατικές και Μεταφραστές Αλφάβητο: ένα οποιδήποτε µη κενό και πεπερασµένο σύνολο Σ αποτελούµενο από σύµβολα { 0, } δυαδικό αλφάβητο { Α, Β, Γ,, Ω } κεφαλαία ελληνικά γράµµατα Κάθε στοιχείο ενός αλφαβήτου Σ ονοµάζεται σύµβολο του αλφαβήτου Γιώργος Μανής Ορισµοί Ορισµοί Συµβολοσειρά: µία πεπερασµένη σειρά από σύµβολα του αλφαβήτου 0000 ΑΒΓΑΑΒΒΓ Οι συµβολοσειρές θα παριστάνονται µε µικρά ελληνικά γράµµατα Η συµβολοσειρά που δεν περιέχει κανένα σύµβολο ονοµάζεται κενή συµβολοσειρά και παριστάνεται µε το σύµβολο ε Μήκος συµβολοσειράς είναι ο αριθµός των συµβόλων που την αποτελούν και συµβολίζεται µε α = ΑΒΒΒΑ = 5 Το σύνολο των συµβολοσειρών µήκους n ενός αλφαβήτου συµβολίζεται µε Σ n Το σύνολο όλων των συµβολοσειρών ενός αλφαβήτου συµβολίζεται µε Σ* (περιλαµβανοµένης της κενής συµβολοσειράς) Σ* είναι η ένωση όλων των Σ n Το σύνολο όλων των συµβολοσειρών ενός αλφαβήτου µη περιλαµβανοµένης της κενής συµβολοσειράς συµβολίζεται µε Σ + Ορισµοί Ορισµοί Παράθεση δύο συµβολοσειρών αβ όλατασύµβολα της α ακολουθούµενααπόόλατασύµβολα της β Παράθεση n φορές α n = ααα α ήπιοαυστηρά: α 0 = { ε }, α n+ = αα n Πρόθεµα: η αονοµάζεται πρόθεµα τηςβεάνόλαταστοιχείατηςα εµφανίζονται µε τη σειρά στην αρχή της β Επίθεµα: η αονοµάζεται επίθεµα τηςβεάνόλαταστοιχείατηςα εµφανίζονται µε τη σειρά στο τέλος της β Υποσυµβολοσειρά: η αονοµάζεται υποσυµβολοσειράτηςβεάνόλατα στοιχεία της α εµφανίζονται µε τη σειρά στο εσωτερικό της β
Γλώσσες Γλώσσες Γλώσσα επί αλφάβητου Σ ονοµάζουµε κάθε σύνολο συµβολοσειρών του Σ, δηλαδή κάθε υποσύνολο του Σ*, π.χ. L = { n 2 n n N } L 2 = { } L 3 = { x x: τα έγκυρα προγράµµατα Pscl } Ένωση L L 2 = { α α L ήα L 2 } Παράθεση L L 2 = { αβ α L, β L 2 } Ουδέτερο στοιχείο η γλώσσα { ε } για την οποία L{ε }={ε }L=L Παράθεση µετονεαυτότηςn φορές L 0 = { ε }, L n+ = L L n Κλείσιµο τουkleene = U * n L L n=0 Γραµµατικές Παραγωγή Συµβολοσειρών από Γραµµατική Γραµµατική ονοµάζεται µία ένα σύστηµα παραγωγής συµβολοσειρών G που ορίζεται από µία διατεταγµένη τετράδα της µορφής (T,N,P,S) όπου: Τ: αλφάβητο τερµατικών συµβόλων Ν: αλφάβητο µη τερµατικών συµβόλων T N = P: πεπερασµένο σύνολο κανόνων παραγωγής P ( T N ) * x ( T N ) * συµβολισµός: α -> β S: αρχικό σύµβολο Γιαναπαράξουµε όλες τις σειρές που µπορεί να παράξει µία γραµµατική εφαρµόζουµε τον παρακάτω αλγόριθµο. Στον αλγόριθµο αυτόν χρειαζόµαστε τρία σύνολα ένα σύνολο Α περιέχει τις συµβολοσειρές που πρέπει ακόµα ναελεγχθούν. Αρχικά περιέχει µόνο το αρχικό σύµβολο της γραµµατικής ένα σύνολο Χ περιέχει τις συµβολοσειρές που παρήχθησαν από τη γραµµατική και αρχικά είναι κενό ένα σύνολο περιέχει τις συµβολοσειρές που έχουν ήδη ελεγχθεί και αρχικά είναι κενό Παραγωγή Συµβολοσειρών από Γραµµατική Τυπικές Γλώσσες αφαιρούµε µία συµβολοσειρά από το Α και τη διαπερνούµε από αριστερά προς τα δεξιά ψάχνοντας για υποσυµβολοσειρές που ταιριάζουν µε το αριστερό µέλος κάποιου γραµµατικού κανόνα για κάθε τέτοια υποσυµβολοσειρά που βρίσκουµε δηµιουργούµε καιένα αντίγραφο της συµβολοσειράς εισόδου και αντικαθιστούµε την υποσυµβολοσειρά που βρίσκουµε στο αριστερό µέλος του κανόνα µε αυτό που βρίσκεται στο δεξιό µέλος του κανόνα αν η συµβολοσειρά που παράχθηκε δεν περιέχει µη τερµατικά σύµβολα τότε την τοποθετούµε στο σύνολο που περιέχει τις συµβολοσειρές που παράχθηκαν αν η συµβολοσειρά που παράχθηκε περιέχει µη τερµατικά σύµβολα τότε αν δεν ανήκει στο την τοποθετούµε στο και το Α όσο το Α δεν είναι κενό εκτελούµε τα τέσσερα προηγούµενα βήµατα Κάθε γραµµατική G=(T,N,P,S) ορίζει µία γλώσσα L(G) T * Λέµε ότιηγραµµατική παράγει τη γλώσσα και ορίζεται ως L(G) = { α T * S + α } το σύµβολο + σηµαίνει ότι η συµβολοσειρά παράγεται σε ένα ή περισσότερα βήµατα παραγωγή σε µηδέν βήµατα α βσηµαίνει α=β Μία γλώσσα λέγεται τυπική όταν υπάρχει γραµµατική που την παράγει 2
Ιεραρχία Chomsky Γραµµατικές χωρίς Περιορισµούς Γραµµατικές Γραµµατικές Χωρίς Περιορισµούς Γραµµατικές Με Συµφραζόµενα Γραµµατικές χωρίς περιορισµούς τύπου 0 προτασιακής σύνταξης κανόνες της µορφής σ -> τ σ V +, V = T N τ V * Γραµµατικές Χωρίς Συµφραζόµενα Κανονικές Γραµµατικές Γραµµατικές µε Συµφραζόµενα Γραµµατικές µε Συµφραζόµενα Γραµµατικές µε συµφραζόµενα τύπου κανόνες της µορφής ααβ -> αxβ Α Ν x V + α,β V * κατ εξαίρεση: επιτρέπεται το S -> ε ώστε να παράγεται η κενή συµβολοσειρά αρκεί το S να µην υπάρχει σε δεξί µέλος κανόνα Ισοδύναµη µορφή γραµµατικών µε συµφραζόµενα, καλούνται µονότονες γραµµατικές κανόνες της µορφής α -> β α,β V + η α περιέχει τουλάχιστόν ένα µη τερµατικό σύµβολο α β κατ εξαίρεση: επιτρέπεται το S -> ε ώστε να παράγεται η κενή συµβολοσειρά αρκεί το S να υπάρχει µόνο σε δεξί µέλος κανόνα Γραµµατικές µε Συµφραζόµενα Γραµµατικές µε Συµφραζόµενα - Παράδειγµα θα κατασκευάσουµε γραµµατική για τη γλώσσα: α n n c n αρχίζοντας από την απλή περίπτωση S -> c αν προσθέσουµε ένα στην αρχή θα πρέπει να προσθέσουµε κάτι και στο τέλος S -> SQ στο τέλος πρέπει να υπάρχει κάτι µε και c αλλά όχι απλά να προσθέσουµε c αφού όλα τα πρέπει να βρίσκονται πριν τα c κάτι τέτοιο επιτρέπει το να είναι πάντα πριν το c Qc -> cc πάλι δεν τελειώσαµε αφού τα Q βρίσκονται δεξιά από τα c, αυτό µπορεί να διορθωθεί µε τον κανόνα cq -> Qc S ::= ssignments ssignments ::= ssign ; ssignments ssignments ::=. \%vrile is set ssign ::= x := exp (setx) ssign ::= y := exp (sety) \% rules for n expression exp ::= [exp] exp ::= exp op exp 3
Γραµµατικές µε Συµφραζόµενα - Παράδειγµα Γραµµατικές µε Συµφραζόµενα - Παράδειγµα \% mrks cn move t 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) Γραµµατικές µε Συµφραζόµενα - Παράδειγµα Γραµµατικές µε Συµφραζόµενα - Παράδειγµα \% mrks cn chnge positions (setx) (sety) ::= (sety) (setx) (sety) (setx) ::= (setx) (sety) \% mrks cn move fter the dot (setx). ::=. @ (sety). ::=. @ \%use vrile, move t the end exp (setx) ::= x (setx) exp (sety) ::= y (sety) \% terminl symols exp ::= num op ::= + - * / Γραµµατικές χωρίς Συµφραζόµενα Κανονικές Γραµµατικές Γραµµατικές χωρίς συµφραζόµενα - τύπου 2 κανόνες της µορφής Α -> α Α Ν α V * Παράδειγµα <nme> ::= tom john hrry <sentence> ::= nme <list> nd <nme> <list> ::= <nme>, <list> nme Κανονικές γραµµατικές τύπου 3 γραµµατικές πεπερασµένων καταστάσεων κανόνες της µορφής Α -> α Α -> ββ Α,Β Ν α Τ {ε} β Τ 4
Κανονικές Γραµµατικές Γραµµατικές Πεπερασµένων Επιλογών Παράδειγµα S -> A A -> A A -> d A A -> ε Γραµµατικές πεπερασµένων επιλογών ή τύπου 4 κανόνες της µορφής Α -> α Α Ν α Τ {ε} Παραγωγή: σειρές από α και d που ξεκινούν υποχρεωτικά από α Αναγνωριστές Μηχανή Turing Μηχανές Πεπερασµένα αυτόµατα Αυτόµατα Στοίβας Γραµµικά Περιορισµένες Μηχανές Turing Μηχανή Turing διαθέτει µία ταινία άπειρου µήκους διαθέτει µία κεφαλή ανάγνωσης-εγγραφής που µπορείνακινείταιστην ταινία σε διακριτές θέσεις στην ταινία µπορούν να γράφονται σύµβολα που ανήκουν σε ένα πεπερασµένο αλφάβητο κάθε στιγµή η µηχανή βρίσκεται σε µία κατάσταση που ανήκει σε ένα πεπερασµένο σύνολο καταστάσεων αρχικά η µηχανή βρίσκεται σε κάποια αρχική κατάσταση, η ταινία περιέχει µία συµβολοσειρά και η κεφαλή βρίσκεται στην αρχή της συµβολοσειράς Μηχανή Turing Άλλοι Αναγνωριστές ανάλογα µε το χαρακτήρα στην κεφαλή της ταινίας και την τρέχουσα κατάσταση η µηχανή µεταφέρεται σε µία νέα κατάσταση ή τερµατίζει ένας νεός χαρακτήρας γράφεται στη θέση που βρίσκεται η κεφαλή η κεφαλή κινείται αριστερά ή δεξιά ή παραµένει στάσιµη Γραµµικά Περιορισµένη Μηχανή Turing: είναι µία µηχανή Turing της οποίας η ταινία έχει µήκος Ο(n) όπου n το µήκος της συµβολοσειράς εισόδου αυτόµατο στοίβας η µηχανή Turing µπορεί να υπολογίσει ο,τιδήποτε είναι υπολογίσιµο πεπερασµένο αυτόµατο 5
Κανονικές Εκφράσεις Κανονικές Εκφράσεις Παραδοσιακά χρησιµοποιούνται για την περιγραφή των λεκτικών µονάδων µιας γλώσσας προγραµµατισµού Κάθε κανονική έκφαση r ορίζει µία γλώσσα L(r) Έστω ένα αλφάβητο Σ ηκενήσυµβολοσειρά είναι µία κανονική έκφραση L(ε)={ε} κάθε σύµβολο α του Σ είναι µία κανονική έκφραση L(α)={α} αν r και s κανονικές εκφράσεις τοτε η (rs) είναι κανονική έκφραση και αντιστοιχεί στην παράθεση των r και s, δηλ. L(rs)=L(r)L(s) αν r και s κανονικές εκφράσεις τοτε η (r s) είναι κανονική έκφραση και αντιστοιχεί στην διάζευξη των r και s, δηλ. L(r s)=l(r)ul(s) αν r κανονική έκφραση τοτε η (r*) είναι κανονική έκφραση και αντιστοιχεί στο κλείσιµο Kleene της r, δηλ. L(r*)=L(r)* Συντοµογραφίες οι παρενθέσεις συνήθως παραλείπονται. Μεγαλύτερη προτεραιότητα έχει ο τελεστής * µετά της παράθεσης και µετά της διάζευξης οσυµβολισµός r + χρησιµοποιείται για το θετικό κλείσιµο τουkleene, δηλαδή r + = rr* οσυµβολισµός [,,c,d] χρησιµοποιείται αντί του α c d οσυµβολισµός r? χρησιµοποιείται για να δείξει ότι η έκφραση είναι προαιρετική η τελεία χρησιµοποιείται για να παραστήσει κάποιο σύµβολο του αλφαβήτου το σύµβολο / υποδηλώνει ότι ο επόµενος χαρακτήρας που ακολουθεί είναι σύµβολο του αλφαβήτου και όχι κάποιος ειδικός χαρακτήρας. π.χ. η έκφραση /( /) µας περιγράφει την συµβολοσειρά ( ) Κανονικές Εκφράσεις Ντετερµινιστικά Πεπερασµένα Αυτόµατα Παράδειγµα [-9][0-9]* 0] (/.[0-9] + )? ((E e)(+ -)?[0-9] + )? περιγράφει τις σταθερές κινητής υποδιαστολής χωρίς πρόσηµο της γλώσσας C Ένα ντετερµινιστικό πεπερασµένο αυτόµατο είναι µία διατεταγµένη πεντάδα M=(A,Q,δ,q 0,F) όπου Ατοαλφάβητοτουαυτοµάτου Q ένα µη κενό πεπερασµένο σύνολο καταστάσεων δ: Q x A -> Q ησυνάρτησηµετάβασης q 0 єq η αρχική κατάσταση F Q οι τελικές καταστάσεις Ντετερµινιστικά Πεπερασµένα Αυτόµατα Πεπερασµένα Αυτόµατα ντετερµινιστικά περασµένα αυτόµατα (ΝΠΑ) Αρχικά το αυτόµατο βρίσκεται στην κατάσταση q o από τη συµβολοσειρά εισόδου διαβάζεται ένα σύµβολο κάθε φορά αν το αυτόµατο βρίσκεται στην κατάσταση q και διαβαστεί το σύµβολο α τότε το αυτόµατο µεταβαίνει στην κατάσταση δ(q,α) η διαδικασία συνεχίζεται µέχρι να εξαντληθεί η συµβολοσειρά είσόδου τότε, αν η κατάσταση στην οποία έχει µεταβεί το αυτόµατο είναι µία από τις καταστάσεις του συνόλου F η συµβολοσειρά έχει αναγνωριστεί επιτυχώς, αλλιώς οδηγούµαστε σε αποτυχία µη ντετερµινιστικά περασµένα αυτόµατα (ΜΠΑ) ορίζεται όπως ένα ΝΠΑ µόνο που η συνάρτηση µετάβασης δ δεν επιστρέφει µόνο µία κατάσταση αλλά ένα σύνολο πιθανών επόµενων καταστάσεων µη ντετερµινιστικά περασµένα αυτόµατα µε µηδενικές µεταβάσεις (ΜΠΑ) ορίζεται όπως ένα ΜΠΑ µε τη διαφορά ότι επιτρέπονται µεταβάσεις από κατάσταση σε κατάσταση χωρίς να διαβαστεί χαρακτήρες από τη συµβολοσειρά είσόδου Τα τρία αυτά ήδη αυτοµάτων είναι ισοδύναµα µεταξύ τους 6
Παράδειγµα Μετατροπής ΜΠΑ σε ΝΠΑ Παράδειγµα Μετατροπής ΜΠΑ σε ΝΠΑ 0/ 0, eof ok 0 0/ {} {} 0 {} {} {} eof ok {} {} {} ok ΜΠΑ σε Πίνακα Μετάβασης ΝΠΑ σε Πίνακα Μετάβασης 0/ 0 0/ 0 eof 0 eof, ok ok ok Γραµµατικές χωρίς Συµφραζόµενα Γραµµατικές χωρίς Συµφραζόµενα Τα αριστερά µέλη των κανόνων αποτελούνται από ένα µη τερµατικό σύµβολο σε κάθε βήµα αντικαθίσταται ένα µη τερµατικό σύµβολο αν υπάρχουν περισσότερα από ένα µη τερµατικά σύµβολα που είναι δυνατόν να αντικατασταθούν τότε αντικαθίσταται οποιδήποτε από αυτά έτσι µία συµβολοσειρά που παράγεται από µία γραµµατική µπορεί να έχει περισσότερες από µία παραγωγές αυτό είναι ανεπιθύµητο και το αποφεύγουµε ονοµάζουµε αριστερότερη παραγωγή µιας συµβολοσειράς την παραγωγή εκείνη στην οποία σε κάθε βήµα αντικαθίσταται το αριστερότερο µη τερµατικό σύµβολο. Συµβολίζεται ως εξής: α L β ονοµάζουµε δεξιότερη παραγωγή µιας συµβολοσειράς την παραγωγή εκείνη στην οποία σε κάθε βήµα αντικαθίσταται το δεξιότερο µη τερµατικό σύµβολο. Συµβολίζεται ως εξής: α R β 7
Συντακτικό έντρο Συντακτικό έντρο Η ρίζα του δέντρου περιέχει το αρχικό µη τερµατικό σύµβολο κάθε κόµβος του δέντρου που δεν είναι φύλλο περιέχει ένα µη τερµατικό σύµβολο της γραµµατικής κάθε φύλλο του δέντρου περιέχει ένα τερµατικό σύµβολο της γραµµατικής οι απόγονοι κάθε κόµβου του δέντρου που δεν είναι φύλλο υπακούουν στους κανόνες της γραµµατικής S -> ABc A -> A A-> csb B -> B B -> S -> ε S A B c A c S B ε Γραµµατική Tύπου LL() Γραµµατική Tύπου LL() L: Left to right - αναφέρεται στον τρόπο που σαρώνεται η συµβολοσειρά εισόδου, απότααριστεράσταδεξιά L: Left most derivtion η διαδικασία κατασκευής του συντακτικού δέντρου αντιστοιχεί στην αριστερότερη παραγωγή (): one look hed symol γιαναεπιλέξουµε ανάµεσα σε πιθανούς κανόνες ποιος είναι ο επόµενος κανόνας που πρέπει να εφαρµοσθεί αρκεί να γνωρίζουµετοεπόµενο σύµβολο της συµβολοσειράς εισόδου Παράδειγµα γραµµατικής τύπου LL() Ε -> ΤΕ Ε -> +ΤΕ ε Τ -> FT T -> x FT ε F -> (E) id id -> c d Παραγωγή: (+xc+x(+c))xd Ισοδύναµες Γραµµατικές ιφορούµενες Γραµµατικές ύο γραµµατικές είναι ισοδύναµες όταν παράγουν την ίδια γλώσσα Το πρόβληµα αν δύο γραµµατικές είναι ισοδύναµο είναι µη υπολογίσιµο Μία γράµµατική λέγεται διφορούµενη αν υπάρχουν δύο ή περισσότερα συντακτικά δέντρα για την ίδια παραγόµενη συµβολοσειρά Στην παρακάτω γραµµατική το else δεν µπορεί να αποφασιστεί σε πιο if ανήκει stmt -> if cond stmt else stmt if cond stmt s s2 cond -> c c2 Οι διφορούµενες γραµµατικές πρέπει να αποφεύγονται στην κατασκευή των µεταγλωττιστών 8
Αυτόµατα Στοίβας Αυτόµατα Στοίβας Ένα αυτόµατο στοίβας είναι µία διατεταγµένη επτάδα M=(A,Q,Η,δ, q 0, h 0,F) όπου Ατοαλφάβητοτηςσυµβολοσειράς εισόδου Q ένα µη κενό πεπερασµένο σύνολο καταστάσεων Ητοαλφάβητοτηςστοίβας δ: Q x Η x (A U {ε}) -> Ρ(Η* x Q) ησυνάρτησηµετάβασης q 0 є Q η αρχική κατάσταση h 0 є H το αρχικό σύµβολο της στοίβας F Q οι τελικές καταστάσεις αρχικά το αυτόµατο βρίσκεται στην κατάσταση q 0 και στη στοίβα βρίσκεται το σύµβολο h 0 στη συνέχεια και ανάλογα µε την τρέχουσα κατάσταση q το σύµβολο h που υπάρχει στην κορυφή της στοίβας, το αυτόµατο αφαιρεί το h από τη στοίβα και ακολουθεί έναν από τους εξής δρόµους: αν το τρέχον σύµβολο της συµβολοσειράς εισόδου είναι το α και το σύνολο κινήσεων δ(q,h,) δεν είναι κενό τότε επιλέγεται µίακίνησηαπόαυτότο σύνολο και εκτελείται. Στην περίπτωση αυτή λέµε ότι το αυτόµατο πραγµατοποιεί µετάβαση ανάγνωσης και το α καταναλώνεται αν το σύνολο κινήσεων δ(q,h,ε) δεν είναι κενό τότε επιλέγεται µία κίνηση απόαυτότοσύνολοκαιεκτελείται. Στην περίπτωση αυτή λέµε ότι το αυτόµατο πραγµατοποιεί ε-µετάβαση ανάγνωσης και δεν καταναλώνεται κάποιο σύµβολο από τη συµβολοσειρά εισόδου Αυτόµατα Στοίβας Αυτόµατα Στοίβας µία εκτέλεση ενός αυτοµάτου στοίβας αναγνωρίζει τη συµβολοσειρά εισόδου αν µετά το τέλος της εκτέλεσης έχει εξαντληθεί η συµβολοσειρά εισόδου και η τρέχουσα κατάσταση ανήκει στο σύνολο F των τελικών καταστάσεων µία εκτέλεση ενός αυτοµάτου στοίβας δεν αναγνωρίζει τη συµβολοσειρά εισόδου αν: έχει εξαντληθεί η συµβολοσειρά εισόδου και η τρέχουσα κατάσταση δεν ανήκει στο σύνολο F των τελικών καταστάσεων δεν έχει εξαντληθεί η συµβολοσειρά εισόδου και η στοίβα είναι άδεια η αφαίρεση του συµβόλου h από την κορυφή της στοίβας η οποία και γίνεται αυτόµατα σε κάθε βήµα τηςεκτέλεσηςσυµβολίζεται µε pop η προσθήκη συµβόλων στη στοίβα συµβολίζεται µε push η µετάβαση στην κατάσταση q συµβολίζεται µε move(q ) µία ακολουθία της µορφής pop, push(hc) απλοποιείται σε push(c) η push(ε) παραλείπεται η move(q) παραλείπεται αν η τρέχουσα κατάσταση είναι η q δεν έχει εξαντληθεί η συµβολοσειρά εισόδου και δεν υπάρχει δυνατή µετάβαση Αυτόµατα Στοίβας σαν Πίνακας Μετάβασης Αυτόµατα Στοίβας σαν Πίνακας Μετάβασης Α = { [, ]} η πρώτη γραµµή περιέχει το αλφάβητο της στοίβας επαυξηµένο µε το σύµβολο ~ ηπρώτηστήλητοσύνολοτωνκαταστάσεων το αρχικό σύµβολο της στοίβας και η αρχική κατάσταση εµφανίζονται πρώτα στη σειρά οσυµβολισµός red() αντιστοιχεί σε µετάβαση ανάγνωσης του α οσυµβολισµός keep αντιστοιχεί σε ε-µετάβαση Q = { S, T } H = { X, I } δ = δ( S,X,[ ) = { (XI, S) } δ( S, I, [ ) = { (II, S) } δ( S, X, ε ) = { (Χ, Τ) } δ( S, I, ] ) = { (ε, S) } q 0 = S h 0 = X F = { T } 9
Αυτόµατα Στοίβας σαν Πίνακας Μετάβασης Είδη Αυτοµάτων Στοίβας πραγµατικού χρόνου: αν δεν έχει ε-µεταβάσεις S X I red( [ ) push(i) red( [ ) push(i) keep move(t) red( ] ) pop ~ ντετερµινιστικό: για µία δεδοµένη συµβολοσειρά εισόδου µπορεί να ακολουθήσει µία και µοναδική εκτέλεση T OK µη-ντετερµινιστικό: για µία δεδοµένη συµβολοσειρά εισόδου µπορεί να ακολουθήσει περισσότερες από µία εκτελέσεις Ισοδυναµία Γλωσσών, Γραµµατικών, Μηχανών Κατηγορικές Γραµµατικές Γλώσσες Γραµµατικές Μηχανές Κανονικές Γλώσσες Κανονικές Γραµµατικές Πεπερασµένα αυτόµατα µία κατηγορική γραµµατική ορίζεται σαν µία διατεταγµένη τριάδα Κ=(G,V,F) όπου G=(T,N,P,S) µία γραµµατική χωρίς συµφραζόµενα Γλώσσες Χωρίς Συµφραζόµενα Γραµµατικές Χωρίς Συµφραζόµενα Αυτόµατα Στοίβας V ένα πεπερασµένοσύνολοσυµβόλων που ονοµάζονται κατηγορήµατα F ένα σύνολο δηλώσεων Γλώσσες Με Συµφραζόµενα Γραµµατικές Με Συµφραζόµενα Γραµµικά Περιορισµένες Μηχανές Turing Υπολογίσιµες γλώσσες Γραµµατικές χωρίς περιορισµούς Μηχανή Turing Κατηγορικές Γραµµατικές Κατηγορικές Γραµµατικές κάθε κατηγόρηµα αντιστοιχεί σε ένα µοναδικό τερµατικό ή µη τερµατικό σύνολο το σύνολο των κατηγορηµάτων που αντιστοιχούν σε ένα τερµατικό ή µη τερµατικό σύµβολο είναι συγκεκριµένο καθώς και ο τύπος των τιµών που µπορεί να πάρει οι τιµές όµως αυτές είναι διαφορετικές για κάθε εµφάνιση ενός συµβόλου σε ένα συντακτικό δέντρο ένα κατηγόρηµα ονοµάζεται συνθετικό αν η τιµή του σε ένα κόµβο του συντακτικού δέντρου υπολογίζεται από τις τιµές άλλων κατηγορηµάτων που ανήκουν στους άµεσους απόγονούς του κόµβου αυτού ένα κατηγόρηµα ονοµάζεται κληρονοµούµενο αν η τιµή του σε ένα κόµβο του συντακτικού δέντρου υπολογίζεται από τις τιµές άλλων κατηγορηµάτων που ανήκουν στόν γονέα ή τα αδέρφια του κόµβου αυτού το σύνολο των δηλώσεων καθορίζει τον τρόπο που θα συνδυαστούν κάποια κατηγορήµατα για να πάρουν άλλα κατηγορήµατα Το υποσύνολο των δηλώσεων που αντιστοιχεί σε ένα κανόνα ονοµάζεται σηµασιολογικός κανόνας 0
Κατηγορικές Γραµµατικές Κατηγορικές Γραµµατικές και Μεταφραστές E -> E + T { E.vl = E 2.vl + T.vl } E -> T { E.vl = T.vl } T -> T * F { T.vl = T 2.vl + F.vl } T -> F { T.vl = F.vl } F -> ( E ) { F.vl = E.vl } F -> num { F.vl = num.vl } η προηγούµενη γραµµατική είχε µόνο συνθετικά κατηγορήµατα τέτοιες γραµµατικές καλούνται S-κατηγορικές γραµµατικές οι γραµµατικές αυτές είναι πολύ ευκολότερο να χρησιµοποιηθούν στους µεταγλωττιστές χρησιµοποιούνται αποκλειστικά αυτές οι γραµµατικές συνήθως στους µεταγλωττιστές χρησιµοποιείται µία γενικότερη µορφή σηµασιολογικών κανόνων που εκτός από τον υπολογισµό τωντιµών των κατηγορηµάτων εκτελούν και κώδικα (π.χ. ενηµερώνουν τον πίνακα συµβόλων, εµφανίζουν µηνύµατα σφάλµατος κλπ.). Οι κανόνες αυτοί ονοµάζονται σηµασιολογικές ρουτίνες. Κατηγορικές Γραµµατικές και Μεταφραστές Ένα πιο Σύνθετο Παράδειγµα µπορούν να εκφράζουν σηµασιολογικούς κανόνες των γλωσσών προγραµµατισµού περιγράφουν µία απεικόνιση µιας γλώσσας που περιγράφεται από µία γραµµατική χωρίς συµφραζόµενα σε κάποια ισοδύναµη διαφορετική της µορφή η µορφή τους είναι εκτελέσιµη. Μπορεί δηλαδή να κατασκευαστεί αυτόµατα ένα πρόγραµµα το οποίο να κάνει ό,τι η κατηγορική γραµµατική περιγράφει γενικά µπορούν να χρησιµοποιηθούν για περιγραφή υπολογιστικών διαδικασιών καθοδηγούµενες από τη σύνταξη υπολογισµός ενός δεκαδικού αριθµού εκφρασµένου σε δυαδική µορφή ηακόλουθηγραµµατική χωρίς συµφραζόµενα περιγράφει έναν δυαδικό αριθµό µε τερµατικά σύµβολα τα 0, και. p: Z::=L p2: Z::=L.L p3: L::=LB p4: L::=B p5: B::= p6: B::=0 Το Κατηγόρηµα v Σηµασιολογικοί Κανόνες για το v κατηγόρηµα v (vlue): η δεκαδική τιµή της υποσυµβολοσειράς που αναγνωρίζεται από ένα µη τερµατικό σύµβολο. Είναι πραγµατικός αριθµός και αφορά τα µη τερµατικά σύµβολα Z, L, B p: Z::=L p2: Z::=L.L p3: L::=LB p4: L::=B p5: B::= p6: B::=0 p: Z::=L Z.v = L.v p2: Z::=L.L 2 Z.v = L.ν + L 2.v p3: L 0 ::=L B L o.v = L.v + B.v p4: L::=B L.v = B.v p5: B::= B.v = 2 B.s p6: B::=0 B.v = 0
Το Κατηγόρηµα s Σηµασιολογικοί Κανόνες για το s αναπαριστά τη θέση του ψηφίουστοναριθµό πρέπει να είναι µηδέν αµέσως αριστερά από την τελεία, ένα για το αµέσως αριστερά ψηφίο, δύο για το επόµενο κ.ο.κ αντίστοιχα πρέπει να είναι - για το ψηφίο αµέσως δεξιά από την τελεία, -2 για το πιο δεξία, κ.ο.κ το πρόβληµα µετατίθεται στη σωστή εκχώρηση τιµής στο s Bήµα p: Z::=L p2: Z::=L.L 2 p3: L 0 ::=L B B.s = L 0.s L.s = L 0 s + p4: L::=B B.s = L.s p5: B::= p6: B::=0 Σηµασιολογικοί Κανόνες για το s Σηµασιολογικοί Κανόνες για το s Bήµα 2 p: Z::=L L.s = 0 p2: Z::=L.L 2 L.s =0 p3: L 0 ::=L B B.s = L 0.s L.s = L 0 s + p4: L::=B B.s = L.s p5: B::= p6: B::=0 Bήµα 3 p: Z::=L L.s = 0 p2: Z::=L.L 2 L.s =0 L 2.s=-L 2.l p3: L 0 ::=L B B.s = L 0.s L.s = L 0 s + p4: L::=B B.s = L.s p5: B::= p6: B::=0 Το Κατηγόρηµα l Σηµασιολογικοί Κανόνες για το l αναπαριστά το µήκος της συµβολοσειράς του κατηγορήµατος χρησιµοποιείται για να δώσει τιµή στο κατηγόρηµα s p: Z::=L p2: Z::=L.L 2 L 2.s = -L 2.l p3: L 0 ::=L B L o.l = L.l + p4: L::=B L.l = p5: B::= p6: B::=0 2
Η Πλήρης Κατηγορική Γραµµατική Ένα Παράδειγµα Εκτέλεσης Γραµµατικές Ενεργοποίησης Ένα Παράδειγµα υποπερίπτωση των κατηγορικών γραµµατικών αποδεικνύεται ότι ό,τι µπορεί να περιγράψει µία γραµµατική ενεργοποίησης περιγράφεται και από µία κατηγορική γραµµατική κώδικας ενεργοποιείται καθώς αναγνωρίζεται η συµβολοσειρά εισόδου p: S ::= Z. D p2: Z ::= n B p3: Z ::= ε p4: D ::= n D p5: D ::= ε Ένα Παράδειγµα υναµικότητα Γραµµατικών και Μεταφραστές int vlue,dlen; p: S ::= vlue=0; dlen=0; Z. D p2: Z ::= n vlue=vlue*0+n B p3: Z ::= ε p4: D ::= n dlen++; vlue=vlue+n/0 dlen ; D p5: D ::= ε Το σύνολο όλων των λεκτικά ορθών προγραµµάτων µπορεί να περιγραφεί από µία κανονική γραµµατική δεν υπάρχουν λευκοί χαρακτήρες ανάµεσα σε δεσµευµένες λέξεις δε συναντάµε end-of-file ενώ έχουν ανοίξει σχόλια και δεν έχουν κλείσει τα αναγνωριστικά ξεκινούν από γράµµα καιακολουθείµία σειρά γραµµάτων και αριθµών κλπ 3
υναµικότητα Γραµµατικών και Μεταφραστές υναµικότητα Γραµµατικών και Μεταφραστές Το σύνολο των συντακτικά ορθών προγραµµάτων περιγράφεται από µία γραµµατική χωρίς συµφραζόµενα βρέθηκε else χωρίς if εκχώρηση σε αριθµητική σταθερά κλπ. Το σύνολο των σηµασιολογικά ορθών προγραµµάτων περιγράφεται από µία γραµµατική µε συµφραζόµενα η µεταβλητή αυτή έχει δηλωθεί; πρόκειται για απλή µεταβλητή ή πίνακα; γράφουµε µήπως έξω από τα όρια ενός πίνακα; Το σύνολο των προγραµµάτων που τερµατίζουν σε πεπερασµένο χρόνο µε συγκεκριµένη είσοδο µπορεί να περιγραφεί από µία (πολύ πολύπλοκη) γραµµατική χωρίς περιορισµούς Το σύνολο των προγραµµάτων που λύνουν ένα συγκεκριµένο πρόβληµα δε µπορεί να περιγραφεί από καµία γραµµατική 4