Music for everyone...

Friday 26 November 2010

For those about to flex...

Προσπαθώντας να λύσω ασκήσεις στους compilers χρειάστηκε όπως πολλοί άλλοι, να μάθω flex. Οι περισσότεροι λογικά θα έχουν ιδέα του περί τίνος πρόκειται αλλά είμαι σίγουρος ότι όσοι δεν είχαν την άσκηση 8, μάλλον δεν έμαθαν και πολλά για αυτό. Επειδή λοιπόν εγώ είμαι ένας από αυτούς που είχαν την 8, είπα να γράψω 2-3 γενικά πράγματα για να καταλάβουν όλοι τι είναι.
Πρώτα από όλα πρέπει να το κατεβάσουμε από εδώ για linux και από εδώ για windows(εκτελείται μέσω cygwin, γι αυτό καλύτερα είναι δουλέψουμε μέσω linux).
Αφού είμαστε σίγουροι οτι η εγκατάσταση του έγινε σωστά(μπορείτε να το βρείτε και μέσω του paskage manager στο ubuntu), τότε μπορούμε να αρχίσουμε να δουλεύουμε.
Το flex είναι ένα μεταεργαλείο στο οποίο περιγράφουμε με ένα εύκολο πακέτο εντολών τον λεκτικό αναλυτή μας και το αυτό αναλαμβάνει την ευθύνη να τον κατασκευάσει έτσι ώστε:
  1. Nα είναι σωστός στο compile(μιάς και είναι δύσκολο να συντάξουμε ΛΑ από μόνοι μας σε c#),
  2. Να είναι γρήγορος ο ΛΑ μας(το flex παράγει αρκετά γρήγορους ΛΑ από μόνο του) και
  3. Να είναι εύκολη η αποσφαλμάτωση του
Ξεκινάμε γράφοντας το αρχείο π.χ. test.l το οποίο περιέχει τους κανόνες που θα διαβάσει το flex για να δημιουργήσει τον ΛΑ(οδηγίες για τη σύνταξη μπορείτε να βρείτε στο site του μαθήματος όπως και στο site του flex.)



Εδώ είναι και το μέρος όπου εγώ μπερδευόμουν, μιάς και μας έχουν δωθεί κάποιες οδησίες σχετικά με το flex και το πώς συντάσσεται το αρχείο με κατάληξη .l αλλά δεν μας είπαν πως εκτελείται και πώς μπορούμε να κάνουμε την αποσφαλμάτωση.




Ορίστε και ένα παράδειγμα!


Αφού συντάξουμε το κείμενο αυτό το τρέχουμε με το flex πηγαίνοντας στο φάκελο που βρίσκεται αυτό και πληκτρολογώντας "flex test.l". Άν δεν βγάλει κάτι πάει να πεί ότι όλα πήγαν καλά έως εδώ, διαφορετικά κάναμε κάποιο λάθος.
Στη συνέχεια το flex θα παράγει το αρχείο "lex.yy.c" το οποίο είναι και ο ΛΑ μας, έτσι τον κάνουμε compile με τον gcc ώς εξής: "gcc -lbf lex.yy.c" , για να δούμε αν έχει σφάλματα. Άν δέν έχει τότε είμαστε έτοιμοι να τον τρέξουμε και να δούμε τι αποτελέσματα δίνει για κάθε είσοδο, αλλιώς πρέπει να γυρίσουμε στον κώδικα του test.l που γράψαμε πρίν και να δούμε τι κάναμε λάθος. Είναι αρκετά δύσκολη διαδικασία γι αυτό και δεν ασχολούνται αρκετοί συνάδελφοι.
Άν αποφασίσετε να ασχοληθείτε να ξέρετε ότι μπορείτε να βρείτε σημαντικές πληροφορίες και μέσα στο βιβλίο, καλό διάβασμα!

No comments:

Post a Comment