re2c 1.2

Le vendredi 2 août, la sortie de re2c, un générateur gratuit d'analyseurs lexicaux pour les langages C et C++, a été publiée. Re2c a été écrit en 1993 par Peter Bamboulis en tant que générateur expérimental d'analyseurs lexicaux très rapides, se distinguant des autres générateurs par la vitesse du code généré et une interface utilisateur inhabituellement flexible qui permet aux analyseurs d'être intégrés facilement et efficacement dans une base de code existante. Depuis, le projet a été développé par la communauté et continue d'être une plateforme d'expérimentation et de recherche dans le domaine des grammaires formelles et des machines à états finis.

Principales innovations de la version 1.2 :

  • Ajout d'une nouvelle façon (simplifiée) de vérifier la fin des données d'entrée
    (en anglais « règle EOF »).
    Pour cela, la configuration re2c:eof a été ajoutée,
    permet de sélectionner le caractère du terminal,
    et une règle $ spéciale qui se déclenche si le lexer
    atteint avec succès la fin des données d'entrée.
    Historiquement, re2c propose un choix de plusieurs méthodes de vérification pour
    fin des intrants variant en limitation, efficacité et simplicité
    applications. La nouvelle méthode est conçue pour simplifier l'écriture du code, tout en
    tout en restant efficace et largement applicable. Vieilles manières
    fonctionnent toujours et peuvent être préférés dans certains cas.

  • Ajout de la possibilité d'inclure des fichiers externes à l'aide d'une directive
    /*!include:re2c "fichier.re" */ où fichier.re
    c'est le nom du fichier d'inclusion. Re2c recherche les fichiers dans le répertoire de fichiers inclus,
    ainsi que dans la liste des chemins spécifiés à l'aide de l'option -I.
    Les fichiers inclus peuvent inclure d'autres fichiers.
    Re2c fournit des fichiers "standard" dans le répertoire include/
    projet - on s'attend à ce que des définitions utiles s'y accumulent
    expressions régulières, quelque chose comme la bibliothèque standard.
    Jusqu'à présent, à la demande des travailleurs, un fichier contenant les définitions des catégories Unicode a été ajouté.

  • Ajout de la possibilité de générer des fichiers d'en-tête avec des paramètres arbitraires
    contenu en utilisant les options -t --type-header (ou approprié
    configurations) et nouvelles directives /*!header:re2c:on*/ et
    /*!en-tête:re2c:off*/. Cela peut être utile dans les cas où
    lorsque re2c a besoin de générer des définitions de variables, de structures et de macros,
    utilisé dans d’autres unités de traduction.

  • Re2c comprend désormais les littéraux UTF8 et les classes de caractères dans les expressions régulières.
    Par défaut, re2c analyse les expressions telles que "∀x ∃y" comme suit.
    séquence de caractères ASCII de 1 bit e2 88 80 78 20 e2 88 83 79
    (codes hexadécimaux), et les utilisateurs doivent échapper manuellement les caractères Unicode :
    "u2200x u2203y". C'est très gênant et inattendu pour beaucoup
    utilisateurs (comme en témoignent les rapports de bogues constants). Alors maintenant
    re2c fournit une option --input-encoding ,
    ce qui vous permet de changer le comportement et d'analyser "∀x ∃y" comme
    2200 78 20 2203 79.

  • Re2c permet désormais l'utilisation de blocs re2c réguliers en mode -r --reuse.
    Ceci est pratique si le fichier d'entrée contient de nombreux blocs et seulement certains d'entre eux.
    doit être réutilisé.

  • Vous pouvez désormais définir le format des avertissements et des messages d'erreur
    en utilisant la nouvelle option --location-format . Le format GNU s'affiche
    comme nom de fichier:ligne:colonne:, et le format MSVC comme nom de fichier(ligne,colonne).
    Cette fonctionnalité peut être utile pour les amateurs d'IDE.
    Une option --verbose a également été ajoutée, qui affiche un court message de victoire en cas de succès.

  • Le mode "compatibilité" avec flex a été amélioré - certaines erreurs d'analyse ont été corrigées et
    priorité des opérateurs incorrecte dans de rares cas.
    Historiquement, l'option -F --flex-support vous permettait d'écrire du code
    mélangé dans le style flex et le style re2c, ce qui rend l'analyse un peu difficile.
    Le mode de compatibilité Flex est rarement utilisé dans le nouveau code,
    mais re2c continue de le prendre en charge pour une compatibilité ascendante.

  • L'opérateur de soustraction de classe de caractères / s'applique désormais
    avant d'élargir le codage, ce qui permet de l'utiliser dans un plus grand nombre de cas,
    si un codage à longueur de caractère variable est utilisé (par exemple UTF8).

  • Le fichier de sortie est maintenant créé atomiquement : re2c crée d'abord un fichier temporaire
    et y écrit le résultat, puis renomme le fichier temporaire en sortie
    une opération.

  • La documentation a été complétée et réécrite ; en particulier, de nouveaux ont été ajoutés
    chapitres à propos du remplissage du tampon
    и sur les façons de vérifier la fin des données d'entrée.
    La nouvelle documentation est collectée sous la forme
    un manuel complet d'une page
    avec des exemples (les mêmes sources sont rendues dans la page de manuel et dans la documentation en ligne).
    De mauvaises tentatives ont été faites pour améliorer la lisibilité du site sur les téléphones.

  • Du point de vue des développeurs, re2c a acquis un sous-système plus complet
    débogage Le code de débogage est désormais désactivé dans les versions finales et
    peut être activé à l'aide de l'option de configuration --enable-debug.

Cette sortie a pris beaucoup de temps – presque une année entière.
La plupart du temps, comme toujours, a été consacré à l'élaboration d'un cadre théorique et à la rédaction d'un
articles "Extraction efficace de sous-correspondances POSIX sur NFA".
Les algorithmes décrits dans l'article sont implémentés dans la bibliothèque expérimentale libre2c
(la construction de la bibliothèque et des benchmarks est désactivée par défaut et est activée par l'option de configuration
--enable-libs). La bibliothèque n'est pas conçue comme un concurrent des bibliothèques existantes.
des projets comme RE2, mais comme plateforme de recherche pour le développement de nouveaux
algorithmes (qui peuvent ensuite être utilisés dans re2c ou dans d'autres projets).
C'est également pratique du point de vue des tests, des benchmarks et de la création de liaisons avec d'autres langages.

Merci des développeurs de re2c à tous ceux qui ont contribué à la réalisation de cette version,
et à la communauté en général pour les idées, les rapports de bugs, les correctifs, le moral, etc. ;]

Source: linux.org.ru

Ajouter un commentaire