Copyright © 2005 Elsevier Κεφάλαιο 2 :: Σύνταξη των γλωσσών προγραμματισμού Πραγματολογία των Γλωσσών Προγραμματισμού Michael L. Scott
Copyright © 2005 Elsevier Κανονικές Εκφράσεις •Μια κανονική έκφραση είναι ένα από τα εξής: –Ένας χαρακτήρας –Η κενή συμβολοσειρά, που συμβολίζεται με –Δύο κανονικές εκφράσεις η μια δίπλα στην άλλη –Δυο κανονικές εκφράσεις διαχωρισμένες με μια κατακόρυφη γραμμή, | (“ή”) –Μια κανονική έκφραση ακολουθούμενη από το άστρο του Kleene (συνένωση καμίας ή περισσότερων συμβολοσειρών)
Copyright © 2005 Elsevier Κανονικές Εκφράσεις •Οι αριθμητικές σταθερές στην Pascal μπορούν να παραχθούν από τις εξής κανονικές εκφράσεις:
Copyright © 2005 Elsevier Γραμματικές χωρίς συμφραζόμενα •Η σημειογραφία των γραμματικών χωρίς συμφραζόμενα ονομάζεται συχνά μορφή Backus-Naur (Backus-Naur Form, BNF) •Μια γραμματική χωρίς συμφραζόμενα αποτελείται από –Ένα σύνολο τερματικών συμβόλων T –Ένα σύνολο μη τερματικών συμβόλων N –Ένα αρχικό σύμβολο S (μη τερματικό) –Ένα σύνολο συντακτικών κανόνων
Copyright © 2005 Elsevier Γραμματικές χωρίς συμφραζόμενα •Γραμματική εκφράσεων με προτεραιότητα και προσεταιριστικότητα
Copyright © 2005 Elsevier Γραμματικές χωρίς συμφραζόμενα •Συντακτικό δένδρο για τη γραμματική των εκφράσεων (με προτεραιότητα) για το * 5
Copyright © 2005 Elsevier Γραμματικές χωρίς συμφραζόμενα •Συντακτικό δένδρο για τη γραμματική των εκφράσεων (με αριστερή προσεταιριστικότητα) για το
Copyright © 2005 Elsevier Λεκτική ανάλυση •Θυμηθείτε ότι η λεκτική ανάλυση –ομαδοποιεί τους χαρακτήρες εισόδου σε λεκτικές μονάδες –αφαιρεί τα σχόλια –(συνήθως) χειρίζεται τις οδηγίες (σημαντικά σχόλια) –αποθηκεύει το κείμενο των αναγνωριστικών, των αριθμητικών σταθερών και των συμβολοσειρών –αποθηκεύει τα σημεία του αρχικού κώδικα (αρχείο, γραμμή, στήλη) για την παραγωγή μηνυμάτων σφάλματος
Copyright © 2005 Elsevier Λεκτική ανάλυση •Θεωρήστε ότι κατασκευάζουμε έναν αυτοσχέδιο λεκτικό αναλυτή για την Pascal: –Διαβάζουμε τους χαρακτήρες έναν-έναν (διαβάζουμε μπροστά τον επόμενο χαρακτήρα όταν χρειάζεται) •Αν είναι κάποια από τις λεκτικές μονάδες του ενός χαρακτήρα { ( ) [ ], ; = + - κλπ } την επιστρέφουμε •Αν είναι. κοιτάζουμε τον επόμενο χαρακτήρα –Αν είναι. επιστρέφουμε.. –Διαφορετικά επιστρέφουμε. και ξαναχρησιμοποιούμε την προανάγνωση
Copyright © 2005 Elsevier Λεκτική Ανάλυση •Αν είναι < κοιτάζουμε τον επόμενο χαρακτήρα –αν είναι = επιστρέφουμε <= –διαφορετικά επιστρέφουμε < και ξαναχρησιμοποιούμε την προανάγνωση, κλπ. •Αν είναι γράμμα διαβάζουμε οσαδήποτε επόμενα γράμματα, αριθμούς ή και “_” μέχρι να μην υπάρχει επόμενο –στη συνέχεια ελέγχουμε αν είναι λέξη κλειδί
Copyright © 2005 Elsevier Λεκτική Ανάλυση •Αν είναι ψηφίο, συνεχίζουμε την ανάγνωση μέχρι να βρούμε κάτι που δεν είναι ψηφίο –αν δεν είναι. επιστρέφουμε μια ακέραια σταθερά –διαφορετικά συνεχίζουμε να διαβάζουμε μια πραγματική σταθερά –αν ο χαρακτήρας μετά το. δεν είναι ψηφίο επιστρέφουμε μια ακέραια σταθερά και ξαναχρησιμοποιούμε το. και την πρόγνωση
Copyright © 2005 Elsevier Λεκτική Ανάλυση •Σχηματική αναπαράσταση ενός λεκτικού αναλυτή για την Pascal ως πεπερασμένου αυτομάτου
Copyright © 2005 Elsevier Λεκτική Ανάλυση •Είναι ένα Ντετερμινιστικό Πεπερασμένο Αυτόματο (ΝΠΑ) –Τα εργαλεία lex, scangen, κλπ. τα παράγουν αυτόματα από ένα σύνολο κανονικών εκφράσεων –Ειδικότερα, κατασκευάζουν μια μηχανή που αποδέχεται τη γλώσσα identifier | int const | real const | comment | symbol |...
Copyright © 2005 Elsevier Λεκτική Ανάλυση •Εκτελούμε συνεχώς τη μηχανή για να παράγουμε συνεχόμενες λεκτικές μονάδες –Σχεδόν καθολικός κανόνας: •πάντα διάβαζε τη μεγαλύτερη πιθανή λεκτική μονάδα από την είσοδο δηλαδή το foobar είναι foobar, ποτέ f ή foo ή foob •ειδικότερα, το είναι πραγματική σταθερά και ποτέ 3,., και •Οι κανονικές εκφράσεις “παράγουν” μια κανονική γλώσσα· τα ΝΠΑ την “αναγνωρίζουν”
Copyright © 2005 Elsevier Λεκτική Ανάλυση •Οι λεκτικοί αναλυτές συνήθως κατασκευάζονται με τρείς τρόπους –αυτοσχέδιοι –ημι-αυτόματα αμιγή ΝΠΑ (συνήθως υλοποιημένα με ένθετες εντολές case) –ΝΠΑ που κάνουν χρήση πινάκων •Οι αυτοσχέδιοι είναι πιο γρήγοροι και μικροί σε μέγεθος κώδικα και με ειδικές λειτουργίες· όμως, καλοί λεκτικοί αναλυτές που έχουν παραχθεί αυτόματα τους πλησιάζουν