Sortie du générateur d'analyses lexicales re2c 1.2

A eu lieu la sortie re2c, générateur libre d'analyse lexicale pour les langages C et C++. Rappelons que re2c a été écrit en 1993 par Peter Bumbulis comme générateur expérimental d'analyseurs lexicaux très rapides, se distinguant des autres générateurs par la rapidité du code généré et une interface utilisateur particulièrement flexible, permettant d'intégrer facilement et efficacement les analyseurs dans une base de code existante. Depuis, le projet est développé par la communauté et reste une plateforme d'expérimentation et de recherche dans le domaine des grammaires formelles et des automates finis.

La préparation de la version a pris presque une année entière. La plupart du temps, comme toujours, a été consacrée au développement de la base théorique et à l'écriture
de l'article «Extraction efficace des sous-échantillons POSIX sur NFA«.
Les algorithmes décrits dans l'article sont implémentés dans une bibliothèque expérimentale libre2c
(la construction de la bibliothèque et des tests de performance est désactivée par défaut et s'active avec l'option de configuration «--enable-libs»). La bibliothèque n'est pas conçue comme concurrente des projets existants, tels que RE2, mais comme une plateforme de recherche pour le développement de nouveaux
algorithmes (qui peuvent ensuite être utilisés dans re2c ou dans d'autres projets). Il est également pratique pour les tests, la mesure des performances et la création de liaisons vers d'autres langages.

Les principales nouveautés de la version re2c 1.2 :

  • Ajout d'une nouvelle méthode simplifiée pour vérifier la fin des données d'entrée («règle EOF»). Pour cela, une configuration «re2c:eof» a été ajoutée,
    permettant de choisir un caractère terminal,
    et une règle spéciale «$», qui s'active si le lexer
    a atteint avec succès la fin des données d'entrée.
    Historiquement, re2c offre plusieurs méthodes pour vérifier la fin des données d'entrée, variant selon leur limitation, leur efficacité et leur simplicité
    d'utilisation. La nouvelle approche vise à simplifier l'écriture du code tout en
    restant efficace et largement applicable. Les anciennes méthodes
    continuent de fonctionner et peuvent être préférées dans certains cas.
    Ajout de la possibilité d'inclure des fichiers externes à l'aide de la directive
  • «/*!include:re2c «file.re» */», où «file.re» est le nom du fichier à inclure. Re2c recherche des fichiers dans le répertoire du fichier incluant,
    ainsi que dans la liste des chemins spécifiée avec l'option «-I».
    Les fichiers inclus peuvent inclure d'autres fichiers.
    Les fichiers inclus peuvent inclure d'autres fichiers.
    Re2c fournit des fichiers « standards » dans le répertoire « include/ »
    du projet — il est prévu que des définitions utiles s'y accumulent
    pour les expressions régulières, quelque chose dans l'esprit d'une bibliothèque standard.
    Pour le moment, à la demande générale, un fichier avec des définitions de catégories Unicode a été ajouté.
  • Il est désormais possible de générer des fichiers d'en-tête avec un contenu arbitraire à l'aide des options « -t —type-header » (ou des configurations correspondantes)
    et des nouvelles directives «/*!header:re2c:on*/» et «/*!header:re2c:off*/». Cela peut être utile dans les cas où
    re2c doit générer des définitions de variables, de structures et de macros utilisées dans d'autres unités de compilation.
    Re2c comprend maintenant les littéraux UTF8 et les classes de caractères dans les expressions régulières.
    Par défaut, re2c analyse des expressions comme «∀x ∃y» comme
    une séquence de caractères ASCII sur 1 bit « e2 88 80 78 20 e2 88 83 79 »
  • (codes hexadécimaux), et les utilisateurs doivent échapper manuellement les symboles Unicode :
    «\\u2200x \\u2203y». Cela est très inconfortable et inattendu pour beaucoup
    d'utilisateurs (comme en témoignent les rapports de bogues constants). C'est pourquoi maintenant
    re2c fournit l'option «—input-encoding {ascii | utf8}»,
    qui permet de changer le comportement et d'analyser «∀x ∃y» comme
    «2200 78 20 2203 79».
    Re2c permet maintenant d'utiliser des blocs re2c normaux en mode « -r —reuse ».
    C'est pratique si le fichier d'entrée contient de nombreux blocs, et seule une partie d'entre eux
    doit être réutilisée.
  • Il est désormais possible de spécifier le format des avertissements et des messages d'erreur
    à l'aide de la nouvelle option «—location-format {gnu | msvc}». Le format GNU s'affiche
    comme « nom_fichier:ligne:colonne: », et le format MSVC — comme « nom_fichier(ligne,colonne) ».
  • Cette fonctionnalité peut être utile aux amateurs d'IDE.
    Une option «—verbose» a également été ajoutée, qui affiche un bref message de succès en cas de réussite.
    Le mode « compatibilité » avec flex a été amélioré — certaines erreurs de parsing et
    de priorité des opérateurs dans de rares cas ont été corrigées.
    Historiquement, l'option « -F —flex-support » permet d'écrire du code
  • mélangé dans le style flex et dans le style re2c, ce qui complique un peu le parsing syntaxique.
    Le mode de compatibilité avec flex est rarement utilisé dans le nouveau code,
    mais re2c continue de le prendre en charge pour des raisons de compatibilité ascendante.
    L'opérateur de soustraction des classes de caractères « / » est maintenant appliqué.
    Le mode de compatibilité avec flex est rarement utilisé dans le nouveau code,
    mais re2c continue de le prendre en charge pour la rétrocompatibilité.
  • L'opérateur de soustraction des classes de caractères «/» est désormais appliqué
    avant le déploiement du codage, ce qui permet de l'utiliser dans un plus grand nombre de cas,
    si un encodage avec une longueur de caractère variable est utilisé (par exemple UTF8).
  • Le fichier de sortie est désormais créé de manière atomique : re2c crée d'abord un fichier temporaire
    et écrit le résultat à l'intérieur, puis renomme le fichier temporaire en fichier de sortie
    en une seule opération.
  • La documentation a été complétée et réécrite ; en particulier, de nouveaux
    chapitres sur http://re2c.org/manual/manual.html#buffer-refilling le remplissage du tampon
    et sur les méthodes de vérification de la fin des données d'entrée.
    La nouvelle documentation est regroupée sous forme de
    guide complet d'une seule page
    avec des exemples (les mêmes sources sont présentées dans le manpage et dans la documentation en ligne).
    Des tentatives limitées 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 système de
    débogage plus complet. Le code de débogage est désormais désactivé dans les versions de production et
    peut être activé à l'aide de l'option configure «--enable-debug».

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster