Στο gist αυτό θα αναρτηθούν λύσεις και υποδείξεις κατά τη διεξαγωγή του εργαστηρίου.
-
-
Save mixstef/2d6d2998b81cbbb4a4b43e3b9df91384 to your computer and use it in GitHub Desktop.
Ξεκινάμε με άδεια σύνολα FIRST για κάθε μη τερματικό σύμβολο της γραμματικής
Για κάθε κανόνα της γραμματικής:
-
Αν το δεξιό μέρος του κανόνα ξεκινά με τερματικό a ή το ε, προσθέτουμε το a ή το ε στο σύνολο FIRST του μη τερματικού που βρίσκεται στο αριστερό μέρος του κανόνα
-
Αν το δεξιό μέρος του κανόνα ξεκινά με μη τερματικό A, προσθέτουμε τα σύμβολα του FIRST(Α) που ξέρουμε εκείνη τη στιγμή στο σύνολο FIRST του μη τερματικού που βρίσκεται στο αριστερό μέρος του κανόνα
- Αν το FIRST(Α) περιέχει το ε, προσθέτουμε αντί για αυτό, το σύνολο FIRST του συμβόλου μετά το Α
- Επαναλαμβάνουμε αν και το επόμενο σύμβολο παράγει ε. Αν όλα τα σύμβολα στο δεξιό μέρος του κανόνα παράγουν ε, προσθέτουμε το ε.
Επαναλαμβάνουμε τη διαδικασία από την αρχή, έως ότου να μην μπορεί να προστεθεί άλλο σύμβολο σε κάποιο σύνολο FIRST
Τα σύνολα FOLLOW αρχικά είναι κενά.
Για κάθε δεξί μέρος των κανόνων:
-
Για κάθε μη τερματικό Β και τυχαίες ακολουθίες συμβόλων α, β σε κανόνες της μορφής Α → α Β β, προσθέτουμε το FIRST(β) -εκτός από το ε- στο FOLLOW(B).
- το α μπορεί να μην υπάρχει
-
Για κάθε μη τερματικό Β και τυχαία ακολουθία συμβόλων α σε κανόνες της μορφής Α → α Β, προσθέτουμε το FOLLOW(Α) στο FOLLOW(B).
-
Για κάθε μη τερματικό Β και τυχαίες ακολουθίες συμβόλων α, β σε κανόνες της μορφής Α → α Β β, όπου το ε ανήκει στο FIRST(β), προσθέτουμε το FOLLOW(Α) στο FOLLOW(B).
Επαναλαμβάνουμε ξανά τη διαδικασία για όλους τους κανόνες, έως ότου να μην υπάρχουν νέες προσθήκες στα σύνολα FOLLOW.