Le vendredi 2 août est sorti la version re2c — un générateur libre d'analyseurs lexicaux pour les langages C et C++. Rappelons que re2c a été écrit en 1993 par Peter Bumbulis comme un 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 étonnamment flexible, permettant d'intégrer facilement et efficacement des analyseurs dans une base de code existante. Depuis, le projet est développé par la communauté et continue d'être un terrain d'expérimentation et de recherche dans le domaine des grammaires formelles et des automates finis.
Les principales nouveautés de la version 1.2 :
Ajout d'une nouvelle méthode (simplifiée) pour vérifier la fin des données d'entrée
(en anglais, "EOF rule").
Pour cela, une configuration re2c:eof a été ajoutée,
permettant de choisir un caractère terminal,
et une règle spéciale $, qui se déclenche 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,
/*!include:re2c "file.re" */, где file.re
est le nom du fichier inclus. Re2c cherche des fichiers dans le répertoire du fichier inclus,
ainsi que dans la liste des chemins définis avec l'option -I.
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)
avec un contenu à l'aide des options -t —type-header (ou configurations correspondantes) et de nouvelles directives /*!header:re2c:on*/ et
Par défaut, re2c analyse des expressions telles que "∀x ∃y" comme.
/*!header:re2c:off*/. Это может быть полезно в случаях,
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 :
une séquence de caractères ASCII à 1 bit e2 88 80 78 20 e2 88 83 79
"u2200x u2203y". Cela est très gênant et inattendu pour beaucoup
re2c fournit l'option «—input-encoding {ascii | utf8}»,
re2c propose l'option —input-encoding ,
«2200 78 20 2203 79».
qui permet de modifier le comportement et d'analyser "∀x ∃y" comme
Re2c permet désormais d'utiliser des blocs re2c classiques en mode -r —reuse.
2200 78 20 2203 79.avec la nouvelle option —location-format . Le format GNU s'affiche
à 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.
comme filename:line:column:, tandis que le format MSVC s'affiche comme filename(line,column).
Une option —verbose a également été ajoutée, qui affiche un message de succès succinct en cas de réussite.
de priorité des opérateurs dans de rares cas ont été corrigées.
Le mode «compatibilité» avec flex a été amélioré — certaines erreurs d'analyse ont été corrigées etHistoriquement, l'option -F —flex-support permet d'écrire du code
Le mode de compatibilité avec flex est rarement utilisé dans le nouveau code,
L'opérateur de soustraction des classes de caractères / est désormais appliqué
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é.au chapitre
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
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
peut être inclus à l'aide de l'option configure —enable-debug.
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
Cette version a pris beaucoup de temps — presque un an.
La majeure partie du temps, comme toujours, a été consacrée à l'élaboration de la base théorique et à l'écriture
"Efficient POSIX Submatch Extraction on NFA"
article «Extraction efficace de sous-correspondances POSIX sur NFA».
Les algorithmes décrits dans l'article sont implémentés dans une bibliothèque expérimentale libre2c
(la compilation de la bibliothèque et des bancs d'essai est désactivée par défaut et s'active via l'option configure-
--enable-libs). La bibliothèque n'est pas conçue pour concurrencer les projets existants comme RE2, mais comme une plateforme de recherche pour développer de nouveaux
algorithmes (qui peuvent ensuite être utilisés dans re2c ou dans d'autres projets).
C'est également pratique pour les tests, les bancs d'essai et la création de liaisons vers d'autres langages.
Les développeurs de re2c remercient tous ceux qui ont contribué à la réalisation de cette version,
et en général la communauté pour ses idées, rapports de bogues, correctifs, esprit combatif, etc. ;]
Le vendredi 2 août, la version de re2c — un générateur gratuit d'analyseurs lexicaux pour les langages C et C++ est sortie.
Source : linux.org.ru
