Sortie du générateur de lexer re2c 2.0

A eu lieu libération re2c 2.0, un générateur d'analyseur lexical gratuit pour les langages C et C++. Le projet re2c a été créé à l'origine 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 facilement et efficacement intégrés dans un système existant. base de code. 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.

Les principaux changements:

  • Ajout de la prise en charge du langage Go (activé soit par l'option « --lang go » pour re2c, soit en tant que programme re2go distinct). La documentation de C et Go est générée à partir du même texte, mais avec des exemples de code différents. Le sous-système de génération de code dans re2c a été entièrement repensé, ce qui devrait faciliter la prise en charge de nouveaux langages à l'avenir.
  • Ajout d'un système de build alternatif pour CMake (merci ligfx!). Des tentatives pour traduire re2c en CMake ont été faites depuis longtemps, mais jusqu'à ligfx, personne n'a proposé de solution à part entière. L'ancien système de build Autotools continue d'être pris en charge et utilisé, et il n'est pas prévu de l'abandonner dans un avenir proche (en partie pour éviter de créer des problèmes aux développeurs de distribution, en partie parce que l'ancien système de build est plus stable et plus concis que le nouveau). ). Les deux systèmes sont testés en permanence à l'aide de Travis CI.
  • Ajout de la possibilité de spécifier le code d'interface dans les configurations lors de l'utilisation de l'API générique. Auparavant, la plupart des API devaient être spécifiées sous forme de fonctions ou de macros de fonctions. Désormais, ils peuvent être spécifiés sous forme de chaînes arbitraires avec des paramètres de modèle nommés de la forme « @@{name} » ou simplement « @@ » (s'il n'y a qu'un seul paramètre et qu'il n'y a pas d'ambiguïté). Le style de l'API est défini par la configuration re2c:api:style (la valeur des fonctions spécifie le style fonctionnel et la forme libre spécifie un style arbitraire).
  • Le fonctionnement de l'option « -c », « —start-conditions » a été amélioré, vous permettant de combiner plusieurs lexers interconnectés dans un seul bloc re2c. Vous pouvez désormais utiliser des blocs réguliers avec des blocs conditionnels et définir plusieurs blocs conditionnels non liés dans un seul fichier. Fonctionnement amélioré de l'option "-r", "--reuse" (réutilisation du code d'un bloc dans d'autres blocs) en combinaison avec "-c", "--start-conditions" et "-f", "-- options "storable-state" (un lexer avec état qui peut être interrompu à tout moment et poursuivre l'exécution plus tard).
  • Correction d'un bug dans l'algorithme de fin de saisie (règle EOF) récemment ajouté, qui, dans de rares cas, entraînait un traitement incorrect des règles qui se chevauchaient.
  • Le processus d'amorçage a été simplifié. Auparavant, le système de build essayait de trouver dynamiquement un re2c déjà construit qui pourrait être utilisé pour se reconstruire. Cela a conduit à des dépendances incorrectes (car le graphe de dépendances était dynamique, ce que la plupart des systèmes de build n'aiment pas). Désormais, afin de reconstruire les lexers, vous devez configurer explicitement le système de construction et définir la variable RE2C_FOR_BUILD.

Source: opennet.ru

Ajouter un commentaire