Κυκλοφορία του re2c lexer generator 2.0

πήρε θέση απελευθέρωση re2c 2.0, μια δωρεάν γεννήτρια λεξικού αναλυτή για γλώσσες C και C++. Το έργο re2c δημιουργήθηκε αρχικά το 1993 από τον Peter Bamboulis ως μια πειραματική γεννήτρια πολύ γρήγορων λεξικών αναλυτών, που διακρίνονται από άλλες γεννήτριες από την ταχύτητα του παραγόμενου κώδικα και μια ασυνήθιστα ευέλικτη διεπαφή χρήστη που επιτρέπει στους αναλυτές να ενσωματώνονται εύκολα και αποτελεσματικά σε ένα υπάρχον βάση κώδικα. Έκτοτε, το έργο έχει αναπτυχθεί από την κοινότητα και συνεχίζει να είναι μια πλατφόρμα για πειράματα και έρευνες στον τομέα των τυπικών γραμματικών και των μηχανών πεπερασμένης κατάστασης.

Βασικές αλλαγές:

  • Προστέθηκε υποστήριξη για τη γλώσσα Go (ενεργοποιημένη είτε από την επιλογή "--lang go" για το re2c, είτε ως ξεχωριστό πρόγραμμα re2go). Η τεκμηρίωση για το C and Go δημιουργείται από το ίδιο κείμενο, αλλά με διαφορετικά παραδείγματα κώδικα. Το υποσύστημα δημιουργίας κώδικα στο re2c έχει επανασχεδιαστεί πλήρως, γεγονός που θα διευκολύνει την υποστήριξη νέων γλωσσών στο μέλλον.
  • Προστέθηκε εναλλακτικό σύστημα κατασκευής στο CMake (ευχαριστώ ligfx!). Οι προσπάθειες μετάφρασης του re2c σε CMake έγιναν εδώ και πολύ καιρό, αλλά μέχρι το ligfx κανείς δεν πρότεινε μια ολοκληρωμένη λύση. Το παλιό σύστημα κατασκευής Autotools συνεχίζει να υποστηρίζεται και να χρησιμοποιείται και δεν υπάρχουν σχέδια να το εγκαταλείψουμε στο άμεσο μέλλον (εν μέρει για να αποφευχθεί η δημιουργία προβλημάτων στους προγραμματιστές διανομής, εν μέρει επειδή το παλιό σύστημα κατασκευής είναι πιο σταθερό και πιο συνοπτικό από το νέο ). Και τα δύο συστήματα ελέγχονται συνεχώς χρησιμοποιώντας το Travis CI.
  • Προστέθηκε η δυνατότητα καθορισμού κώδικα διεπαφής σε διαμορφώσεις κατά τη χρήση του γενικού API. Προηγουμένως, τα περισσότερα API έπρεπε να προσδιορίζονται με τη μορφή συναρτήσεων ή μακροεντολών συναρτήσεων. Τώρα μπορούν να καθοριστούν με τη μορφή αυθαίρετων συμβολοσειρών με ονομασμένες παραμέτρους προτύπου της μορφής "@@{όνομα}" ή απλά "@@" (αν υπάρχει μόνο μία παράμετρος και δεν υπάρχει ασάφεια). Το στυλ API ορίζεται από τη διαμόρφωση re2c:api:style (η τιμή συναρτήσεων καθορίζει το λειτουργικό στυλ και η ελεύθερη μορφή καθορίζει ένα αυθαίρετο στυλ).
  • Η λειτουργία της επιλογής «-c», «—start-conditions» έχει βελτιωθεί, επιτρέποντάς σας να συνδυάσετε πολλά διασυνδεδεμένα lexers σε ένα μπλοκ re2c. Τώρα μπορείτε να χρησιμοποιήσετε κανονικά μπλοκ μαζί με υπό όρους και να ορίσετε πολλά άσχετα μπλοκ υπό όρους σε ένα αρχείο. Βελτιωμένη λειτουργία της επιλογής "-r", "--reuse" (επαναχρησιμοποίηση κώδικα από ένα μπλοκ σε άλλα μπλοκ) σε συνδυασμό με τα "-c", "--start-conditions" και "-f", "-- storable-state" επιλογές (ένας λεξικός κατάστασης που μπορεί να διακοπεί ανά πάσα στιγμή και να συνεχιστεί η εκτέλεση αργότερα).
  • Διορθώθηκε ένα σφάλμα στον πρόσφατα προστιθέμενο αλγόριθμο τέλους εισαγωγής (κανόνας EOF), το οποίο σε σπάνιες περιπτώσεις είχε ως αποτέλεσμα εσφαλμένη επεξεργασία επικαλυπτόμενων κανόνων.
  • Η διαδικασία του bootstrap έχει απλοποιηθεί. Προηγουμένως, το σύστημα κατασκευής προσπάθησε να βρει δυναμικά ένα ήδη κατασκευασμένο re2c που θα μπορούσε να χρησιμοποιηθεί για την ανακατασκευή του. Αυτό οδήγησε σε εσφαλμένες εξαρτήσεις (επειδή το γράφημα εξαρτήσεων ήταν δυναμικό, κάτι που δεν αρέσει στα περισσότερα συστήματα κατασκευής). Τώρα, για να αναδημιουργήσετε lexers, πρέπει να ρυθμίσετε ρητά το σύστημα κατασκευής και να ορίσετε τη μεταβλητή RE2C_FOR_BUILD.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο