Question

Étant donné une expression régulière, je recherche un paquet qui générera dynamiquement le code d'une machine à états finis qui implémente le RE.

C / C ++ et Python préférés, mais d'autres langages sont également intéressants.

Était-ce utile?

La solution

re2c génère du code C. Je ne suis pas sûr de comprendre ce que vous entendez par «dynamiquement» - selon les informations dont vous disposez, vous devez compiler et charger dynamiquement le résultat, si vous souhaitez appeler le code généré au cours de la même exécution que vous l'avez générée.

Autres conseils

Ragel est peut-être ce que vous recherchez.

Il génère un code C / C ++ / D / Ruby / Java pour les machines à états. Celles-ci sont décrites à l'aide d'expressions régulières et d'opérateurs.

Vérifiez le site Web, sa page d'accueil est assez explicite.

Ce n'est peut-être pas exactement ce que vous recherchez, mais le transducteur à états finis Xerox prend en charge les expressions régulières, construit la machine et peut même créer une représentation graphique à l'aide de GraphViz.

C'est vraiment chouette pour des choses comme la morphologie, mais sinon, je le suggérerais surtout si vous cherchez quelque chose pour explorer le côté théorique des machines à états finis.

Deux mises en garde: il utilise sa propre syntaxe. Par conséquent, il ne sera pas forcément traduit facilement dans la langue de votre choix, et je suis presque certain que vous devez obtenir une licence. Il vient avec le livre "Finite State Morphology" de Karttunnen et Beesley, qui est une lecture très intéressante en soi.

Les utilitaires d'automate d'état fini prennent en charge la génération de FSM à partir d'expressions régulières. Il prend également en charge la génération de code C, C ++ et Java pour FSM. Il prend en charge la génération dynamique, mais il est écrit en Prolog, et appeler depuis une autre langue peut être fastidieux.

Ce que vous demandez, c'est un lexer ... Il y en a beaucoup pour une pléthore de langages de programmation. Pour commencer, vous pouvez jeter un coup d’œil sur ici .

Une bonne implémentation Python d'un convertisseur d'expression régulière en machine à états finis est https://github.com/ferno. / verdure . Il est disponible sur pypi via "pip install greenery".

Un autre package Python utilise la verdure pour implémenter des analyseurs syntaxiques itératifs: Analyseur et créateur de protocole Python https://github.com/ pjkundert / cpppo . Il est également disponible via 'pip install cpppo'. Cpppo est malheureusement assez complexe, en grande partie à cause d’une tentative de prise en charge de Python 2 et 3 dans le même source, y compris la compatibilité UTF-8 intégrale.

Quoi qu’il en soit, cpppo devrait vous donner une idée de la façon d’appliquer l’excellent convertisseur de verdure Regex à FSM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top