Πεπερασμένα αυτόματα και κανονικές εκφράσεις
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Εισαγωγή
- Ο σχεδιασμός και η υλοποίηση γλωσσικών εργαλείων υποστηρίζεται
από ένα ευρύ φάσμα θεωρητικής γνώσης.
- Αυτή περιλαμβάνει μεταξύ άλλων:
- τον αφηρημένο ορισμό μιας γλώσσας,
- τον ορισμό ενός αυτομάτου που μπορεί να αναγνωρίσει μια γλώσσα,
- τον ορισμό γραμματικών που περιγράφουν μια γλώσσα,
- την ισοδυναμία αυτομάτων και γλωσσών και
- αλγορίθμους για την αποδοτική υλοποίηση των παραπάνω.
Συμβολισμοί
- Αλφάβητο (alphabet):
-
Πεπερασμένο σύνολο συμβόλων
- Συμβολοσειρά (string):
-
Πεπερασμένη ακολουθία συμβόλων. Το μήκος της συμβολοσειράς
χ συμβολίζεται ως |χ|.
- Κενή συμβολοσειρά (empty string):
-
Συμβολοσειρά με μήκος 0. Συμβολίζεται ως ε.
- Παράθεση (concatenation):
-
Η δημιουργία μιας νέας συμβολοσειράς από δύο άλλες (x, y) με τη σειριακή παράθεση
των συμβόλων τους. Συμβολίζεται ως xy
- Γλώσσα (language):
-
Ένα υποσύνολο των συμβολοσειρών που μπορούν να δημιουργηθούν από ένα συγκεκριμένο
αλφάβητο.
Με βάση τον ορισμό της γλώσσας ορίζουμε:
Πεπερασμένα αυτόματα
Το θεωρητικό μοντέλο για την αναγνώριση μιας γλώσσας είναι ένα
αυτόματο (automaton).
Δύο αυτόματα τα οποία θα εξετάσουμε είναι τα:
Τα πεπερασμένα αυτόματα ορίζονται από την πεντάδα
Μ = (Κ, Σ, δ, S, F):
- K
- Πεπερασμένο σύνολο καταστάσεων
- Σ
- Πεπερασμένο αλφάβητο εισόδου
- δ
- συνάρτηση αλλαγής κατάστασης (transition function)
από μια κατάσταση Χ σε μια Χ' με βάση ένα σύμβολο εισόδου σ.
δ(Χ, σ) = Χ'
- S
- Αρχική κατάσταση
- F
- Σύνολο τελικών καταστάσεων
Αν η συνάρτηση δ είναι μονότιμη τότε το αυτόματο αυτόματο καλείται
ντετερμινιστικό πεπερασμένο αυτόματο (ΝΠΑ) (deterministic finite automaton (DFA)).
Αντίθετα, αν για κάποιες τιμές (Χ, σ) της δ υπάρχουν πολλές πιθανές νέες
καταστάσεις X' τότε το αυτόματο καλείται
μη ντετερμινιστικό πεπερασμένο αυτόματο (ΜΠΑ) (non-deterministic finite automaton (NFA)).
Οι γλώσσες που αναγνωρίζονται από τα πεπερασμένα αυτόματα λέγονται
κανονικές γλώσσες (regular languages).
Οι γλώσσες αυτές είναι κατάλληλες για να περιγράψουν τις λεκτικές μονάδες
ενός προγράμματος.
Ένα πεπερασμένο αυτόματο μπορεί να παρασταθεί ως:
Κανονικές εκφράσεις
Μια κανονική έκφραση (regular expression)
είναι ένας συμβολισμός κατάλληλος για την περιγραφή μιας
κανονικής γλώσσας.
Πολλά εργαλεία προγραμματισμού βασίζονται σε κανονικές εκφράσεις
για την περιγραφή και την αναγνώριση συμβολοσειρών.
Μπορούμε να ορίσουμε μια κανονική έκφραση σύμφωνα με τους παρακάτω
κανόνες:
- Για ένα σύμβολο της αλφαβήτου a η κανονική έκφραση a συμβολίζει τη γλώσσα
{a}.
- Αν R και S δύο κανονικές εκφράσεις για τις γλώσσες
LR και LS τότε:
- η έκφραση R|S συμβολίζει τη γλώσσα LR U LS.
- η έκφραση R.S συμβολίζει τη γλώσσα LR . LS.
- η έκφραση R* συμβολίζει τη γλώσσα LR*.
- η έκφραση R+ συμβολίζει τη γλώσσα LR+.
Ο τελεστής * έχει την υψηλότερη και ο τελεστής | τη χαμηλότερη προτεραιότητα.
Κανονικές εκφράσεις στο Unix
Σε πολλά εργαλεία του Unix
οι κανονικές εκφράσεις επιτρέπουν τον ορισμό σύνθετων συμβολοσειρών με
δηλωτικό τρόπο.
Η εντολή egrep επιτρέπει την αναζήτηση γραμμών που ικανοποιούν μια κανονική
έκφραση μέσα σε ένα αρχείο.
Τα παρακάτω σύμβολα έχουν ειδικό νόημα:
- ^
- Αρχή της γραμμής
- $
- Τέλος της γραμμής
- .
- Οποιοδήποτε γράμμα
- [abc]
- Ένα από τα γράμματα a, b, ή c
- [a-z]
- Ένα από τα γράμματα a μέχρι z
- [^abc]
- Οποιοδήποτε γράμμα εκτός από τα a, b, και c.
- Έκφραση*
- Η έκφραση μηδέν ή περισσότερες φορές
- Έκφραση+
- Η έκφραση μία ή περισσότερες φορές
- Έκφραση?
- Η έκφραση μία ή καμία φορά
- Έκφραση1|Έκφραση1
- Η έκφραση1 ή η έκφραση2
- (Έκφραση)
- Το περιεχόμενο στην παρένθεση
Παράδειγμα:
(με την εντολή cd ~dspin φτάνετε σε έναν κατάλογο που περιέχει ένα αρχείο με πολλές λέξεις (words))
athena:~> egrep 'abo' words
...
sabotage
seaboard
taboo
thereabouts
turnabout
vagabond
whereabout
...
athena:~> egrep '^abo' words
aboard
abode
abolish
abolition
abominable
abominate
aboriginal
athena:~> egrep bent words
absorbent
bent
benthic
debenture
incumbent
recumbent
athena:~> egrep 'bent$' words
absorbent
bent
incumbent
recumbent
athena:~> egrep "heaven|hell" words
eggshell
heaven
heavenly
heavens
hell
hellfire
hellish
hello
hells
...
athena:~> egrep "(ga)(ba)+" words
gabardine
megabaud
athena:~> egrep pe+l words
..
peel
peeled
...
Ασκήσεις
- Να γράψετε ως κανονικές εκφράσεις τις παρακάτω εκφράσεις του egrep:
w[xyz]k*
a[^a-x]q
a(b?)
- Να σχεδιάσετε ένα γράφο μετάβασης που να αναγνωρίζει τη γλώσσα με τις
παρακάτω συμβολοσειρές:
Kadafi
Gadafi
Ghadafi
Khadafi
- Να σχεδιάσετε ένα γράφο μετάβασης που να αναγνωρίζει την κανονική
έκφραση a* . (b | c) . (d | b)+.
Βιβλιογραφία
- Alfred V. Aho, John E.
Hopcroft, and Jeffrey D. Ullman.
The
Design and Analysis of Computer Algorithms, pages 318–3335.
Addison-Wesley, 1974.
- Alfred V. Aho, Ravi Sethi,
and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools, pages 83–157.
Addison-Wesley, 1985.