Skip to content

panos1962/totem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Το πρόγραμμα "totem" σκοπό έχει να καταδείξει την ευκολία με την οποία μπορούμε
να διαχειριστούμε «ελεύθερο» input χρησιμοποιώντας εργαλεία ανάπτυξης των compilers,
όπως είναι το flex και το bison. Με τον όρο ελεύθερο input εννοούμε input το οποίο
ακολουθεί κάποιους κανόνες γραφής, χωρίς όμως οι κανόνες αυτοί να ορίζουν επακριβώς
τη μορφή του input με την κλασική, αυστηρή έννοια καθορισμού της μορφής δεδομένων
μέσω συγκεκριμένης γραμμογράφησης κλπ. Όταν μιλάμε για ελεύθερο input, οι κανόνες
γραφής θυμίζουν μάλλον κανόνες γραφής ενός προγράμματος σε κάποια σύγχρονη γλώσσα
προγραμματισμού, παρά κανόνες καταγραφής δεδομένων.

Ένας compiler αποτελείται, συνήθως, από δύο βασικά modules, τον lexical analyzer
και τον parser. Ο lexical analyzer «σπάζει» το input σε tokens, όπου tokens
είναι τα δομικά στοιχεία μιας γλώσσας, π.χ. λέξεις, σημεία στίξης, αριθμοί κλπ.
Ο lexical analyzer διοχετεύει κατόπιν τα tokens στον parser, ο οποίος αναλαμβάνει
να ταιριάξει αυτά τα tokens σε συντακτικές δομές «κατανοώντας» τελικά το input
και κάνοντας κάτι μ αυτό. Τόσο ο lexical analyzer, όσο και ο parser, λειτουργούν
βάσει κανόνων που ορίζει ο κατασκευαστής του compiler.

Τα προγράμματα flex και bison δημιουργούν τον lexical analyzer και τον parser
αντίστοιχα, διαβάζοντας το καθένα τούς σχετικούς κανόνες που έχουν καθοριστεί.
Οι κανόνες που διαβάζει ο flex βασίζονται κατά κύριο λόγο στις regular expressions,
ενώ οι κανόνες του bison είναι κανόνες γραμματικής που περιγράφουν έναν LALR parser.
Τόσο ο flex, όσο και o bison είναι γεννήτριες κώδικα σε γλώσσα C, όπου ο μεν flex
παράγει την function yylex(), ενώ ο bison παράγει την function yyparse().

Για την ιστορία αναφέρουμε εδώ ότι ο flex είναι ο διάδοχος του παλαιότερου lex,
ενώ ο bison διαδέχτηκε τον yacc (yet another compiler compiler). Ο lex και ο
yacc είναι προγράμματα που γράφτηκαν κατά τη δεκαετία του 1970 και έδωσαν
μεγάλη ώθηση στην επιστήμη των ηλεκτρονικών υπολογιστών, καθώς απλούστευσαν
κατά πολύ τη διαδικασία γραφής των compilers. Να σημειώσουμε στο σημείο αυτό
ότι ενώ ένας lexical analyzer μπορεί να γραφτεί και «με το χέρι», χωρίς δηλαδή
τη χρήση του lex ή του flex, η γραφή του parser αποτελεί συνήθως άθλο που
φαίνεται αδύνατον να επιτευχθεί χωρίς τη βοήθεια ενός compiler compiler
όπως είναι ο yacc ή ο bison.

Το πρόγραμμα "totem" ακολουθώντας τις τεχνικές γραφής των compilers, επιχειρεί να
κατανοήσει ένα input αποτελούμενο από αριθμούς τους οποίους αθροίζει σε διάφορα
επίπεδα και κατά στήλες. Τα επίπεδα διάρθρωσης των δεδομένων καθορίζονται με
άγκιστρα, ενώ οι στήλες με παρενθέσεις. Κάθε φορά που «κλείνει» μια ενότητα
δεδομένων, το πρόγραμμα υπολογίζει και εκτυπώνει το άθροισμα των αριθμών τής
συγκεκριμένης ενότητας, ενώ όλα αυτά μπορούν να γίνουν είτε με μεμονωμένους
αριθμούς, είτε με διανύσματα, δηλαδή πολλούς αριθμούς γραμμένους μέσα σε
παρενθέσεις, οπότε τα αθροίσματα δημιουργούνται σε στήλες.

Όλα αυτά ακούγονται κάπως περίπλοκα, καταδεικνύουν όμως την αξία των εργαλείων
κατασκευής των compilers στη γενικότερη διαχείριση ενός ελεύθερου input, καθώς
το συγκεκριμένο πρόγραμμα δεν υπερβαίνει τις 300 γραμμές, ενώ η ουσία του
προγράμματος περιορίζεται σε λιγότερες από 50 γραμμές.

About

Simple bison/flex tutorial application

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published