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

Κύριες καινοτομίες στην έκδοση 1.2:

  • Προστέθηκε ένας νέος (απλοποιημένος) τρόπος ελέγχου για το τέλος των δεδομένων εισόδου
    (Αγγλικά «κανόνας ΕΟΦ»).
    Για αυτό, έχει προστεθεί η διαμόρφωση re2c:eof,
    σας επιτρέπει να επιλέξετε τον τερματικό χαρακτήρα,
    και ένας ειδικός κανόνας $ που πυροδοτεί εάν το lexer
    έφτασε με επιτυχία στο τέλος των δεδομένων εισόδου.
    Ιστορικά, το re2c παρέχει μια επιλογή από διάφορες μεθόδους επαλήθευσης για
    το τέλος των εισροών ποικίλλει ως προς τον περιορισμό, την αποτελεσματικότητα και την απλότητα
    εφαρμογές. Η νέα μέθοδος έχει σχεδιαστεί για να απλοποιεί τη σύνταξη κώδικα, ενώ
    ενώ παραμένει αποτελεσματική και ευρέως εφαρμόσιμη. Παλιοί τρόποι
    εξακολουθεί να λειτουργεί και μπορεί να προτιμάται σε ορισμένες περιπτώσεις.

  • Προστέθηκε η δυνατότητα συμπερίληψης εξωτερικών αρχείων χρησιμοποιώντας μια οδηγία
    /*!include:re2c "file.re" */ όπου file.re
    αυτό είναι το όνομα του αρχείου συμπερίληψης. Το Re2c αναζητά αρχεία στον κατάλογο αρχείων συμπεριλαμβανομένων,
    καθώς και στη λίστα των διαδρομών που καθορίζονται χρησιμοποιώντας την επιλογή -I.
    Τα αρχεία που περιλαμβάνονται ενδέχεται να περιλαμβάνουν άλλα αρχεία.
    Το Re2c παρέχει "τυποποιημένα" αρχεία στον κατάλογο include/
    έργο - αναμένεται ότι θα συσσωρευτούν χρήσιμοι ορισμοί
    κανονικές εκφράσεις, κάτι σαν την τυπική βιβλιοθήκη.
    Μέχρι στιγμής, κατόπιν αιτήματος των εργαζομένων, έχει προστεθεί ένα αρχείο με ορισμούς κατηγοριών Unicode.

  • Προστέθηκε η δυνατότητα δημιουργίας αρχείων κεφαλίδας με αυθαίρετα
    περιεχόμενο χρησιμοποιώντας τις επιλογές -t --type-header (ή κατάλληλη
    διαμορφώσεις) και νέες οδηγίες /*!header:re2c:on*/ και
    /*!header:re2c:off*/. Αυτό μπορεί να είναι χρήσιμο σε περιπτώσεις όπου
    όταν το re2c χρειάζεται να δημιουργήσει ορισμούς μεταβλητών, δομών και μακροεντολών,
    χρησιμοποιείται σε άλλες μεταφραστικές ενότητες.

  • Το Re2c καταλαβαίνει πλέον τα κυριολεκτικά UTF8 και τις κατηγορίες χαρακτήρων σε κανονικές εκφράσεις.
    Από προεπιλογή, το re2c αναλύει εκφράσεις όπως "∀x ∃y" ως.
    ακολουθία χαρακτήρων ASCII 1 bit e2 88 80 78 20 e2 88 83 79
    (δεκαεξαδικοί κωδικοί) και οι χρήστες πρέπει να διαφύγουν από τους χαρακτήρες Unicode με μη αυτόματο τρόπο:
    "u2200x u2203y". Αυτό είναι πολύ άβολο και απροσδόκητο για πολλούς
    χρήστες (όπως αποδεικνύεται από συνεχείς αναφορές σφαλμάτων). Ωστε τώρα
    Το re2c παρέχει μια επιλογή --input-encoding ,
    που σας επιτρέπει να αλλάξετε τη συμπεριφορά και να αναλύσετε το "∀x ∃y" ως
    2200 78 20 2203 79.

  • Το Re2c επιτρέπει τώρα τη χρήση κανονικών μπλοκ re2c σε λειτουργία -r --reuse.
    Αυτό είναι βολικό εάν το αρχείο εισόδου περιέχει πολλά μπλοκ και μόνο μερικά από αυτά
    πρέπει να επαναχρησιμοποιηθεί.

  • Τώρα μπορείτε να ορίσετε τη μορφή των προειδοποιήσεων και των μηνυμάτων σφαλμάτων
    χρησιμοποιώντας τη νέα επιλογή --location-format . Εμφανίζεται η μορφή GNU
    ως όνομα αρχείου: γραμμή: στήλη: και τη μορφή MSVC ως όνομα αρχείου (γραμμή, στήλη).
    Αυτή η δυνατότητα μπορεί να είναι χρήσιμη για τους λάτρεις του IDE.
    Έχει επίσης προστεθεί μια επιλογή --verbose, η οποία εκτυπώνει ένα σύντομο μήνυμα νίκης εάν είναι επιτυχές.

  • Η λειτουργία "συμβατότητας" με το flex έχει βελτιωθεί - ορισμένα σφάλματα ανάλυσης έχουν διορθωθεί και
    λανθασμένη προτεραιότητα χειριστή σε σπάνιες περιπτώσεις.
    Ιστορικά, η επιλογή -F --flex-support σας επέτρεπε να γράψετε κώδικα
    ανάμειξη σε στυλ flex και στυλ re2c, γεγονός που καθιστά την ανάλυση λίγο δύσκολη.
    Η λειτουργία ευέλικτης συμβατότητας χρησιμοποιείται σπάνια σε νέο κώδικα,
    αλλά το re2c συνεχίζει να το υποστηρίζει για συμβατότητα προς τα πίσω.

  • Ο τελεστής αφαίρεσης κατηγορίας χαρακτήρων / τώρα ισχύει
    πριν από την επέκταση της κωδικοποίησης, η οποία επιτρέπει τη χρήση της σε μεγαλύτερο αριθμό περιπτώσεων,
    εάν χρησιμοποιείται κωδικοποίηση μεταβλητού μήκους χαρακτήρων (για παράδειγμα UTF8).

  • Το αρχείο εξόδου δημιουργείται πλέον ατομικά: το re2c δημιουργεί πρώτα ένα προσωρινό αρχείο
    και εγγράφει το αποτέλεσμα σε αυτό και, στη συνέχεια, μετονομάζει το προσωρινό αρχείο στην έξοδο
    μία επέμβαση.

  • Η τεκμηρίωση συμπληρώθηκε και ξαναγράφτηκε. ειδικότερα προστέθηκαν νέα
    κεφάλαια σχετικά με την πλήρωση του buffer
    и σχετικά με τους τρόπους ελέγχου για το τέλος των δεδομένων εισόδου.
    Η νέα τεκμηρίωση συλλέγεται στη φόρμα
    ένα ολοκληρωμένο μονοσέλιδο εγχειρίδιο
    με παραδείγματα (οι ίδιες πηγές αποδίδονται στη manpage και στην ηλεκτρονική τεκμηρίωση).
    Έχουν γίνει κακές προσπάθειες για τη βελτίωση της αναγνωσιμότητας του ιστότοπου στα τηλέφωνα.

  • Από την πλευρά των προγραμματιστών, το re2c έχει αποκτήσει ένα πιο ολοκληρωμένο υποσύστημα
    αποσφαλμάτωση Ο κώδικας εντοπισμού σφαλμάτων είναι πλέον απενεργοποιημένος στις εκδόσεις και
    μπορεί να ενεργοποιηθεί χρησιμοποιώντας την επιλογή διαμόρφωσης --enable-debug.

Αυτή η κυκλοφορία πήρε πολύ χρόνο - σχεδόν έναν ολόκληρο χρόνο.
Ο περισσότερος χρόνος, όπως πάντα, αφιερώθηκε στην ανάπτυξη ενός θεωρητικού πλαισίου και στη συγγραφή
Άρθρο "Αποτελεσματική εξαγωγή δευτερεύοντος αντιστοίχισης POSIX στο NFA".
Οι αλγόριθμοι που περιγράφονται στο άρθρο υλοποιούνται στην πειραματική βιβλιοθήκη libre2c
(η δημιουργία της βιβλιοθήκης και των σημείων αναφοράς είναι απενεργοποιημένη από προεπιλογή και ενεργοποιείται από την επιλογή διαμόρφωσης
--enable-libs). Η βιβλιοθήκη δεν θεωρείται ως ανταγωνιστής της υπάρχουσας
έργα όπως το RE2, αλλά ως ερευνητική πλατφόρμα για την ανάπτυξη νέων
αλγόριθμους (που στη συνέχεια μπορούν να χρησιμοποιηθούν στο re2c ή σε άλλα έργα).
Είναι επίσης βολικό από την άποψη της δοκιμής, των σημείων αναφοράς και της δημιουργίας δεσμεύσεων σε άλλες γλώσσες.

Ευχαριστώ από τους προγραμματιστές του re2c σε όλους όσους βοήθησαν να πραγματοποιηθεί αυτή η κυκλοφορία,
και στην κοινότητα γενικότερα για ιδέες, αναφορές σφαλμάτων, ενημερώσεις κώδικα, ηθικό κ.λπ. ;]

Πηγή: linux.org.ru

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